<?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>226914</bug_id>
          
          <creation_ts>2021-06-11 00:15:03 -0700</creation_ts>
          <short_desc>DFGPredictionPropagation should be flow-sensitive</short_desc>
          <delta_ts>2021-06-28 10:45:17 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768886</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-11 00:15:03 -0700</bug_when>
    <thetext>According to Phil, better predictions should help a lot with some of the hottest functions in the jquery subtest of Speedometer2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768887</commentid>
    <comment_count>1</comment_count>
      <attachid>431182</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-11 00:15:44 -0700</bug_when>
    <thetext>Created attachment 431182
WIP

for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769186</commentid>
    <comment_count>2</comment_count>
      <attachid>431251</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-11 23:38:06 -0700</bug_when>
    <thetext>Created attachment 431251
WIP

Nearly done, only needs some thorough benchmarking + testing and a Changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769196</commentid>
    <comment_count>3</comment_count>
      <attachid>431257</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-12 08:12:24 -0700</bug_when>
    <thetext>Created attachment 431257
WIP

Fixed a bug: I thought that Symbols could only be equal to Symbols, and forgot that Object.toPrimitive can be called and turn one into a Symbol during equality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769662</commentid>
    <comment_count>4</comment_count>
      <attachid>431392</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-14 18:59:57 -0700</bug_when>
    <thetext>Created attachment 431392
WIP_nearlyDone</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770050</commentid>
    <comment_count>5</comment_count>
      <attachid>431507</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-15 18:23:54 -0700</bug_when>
    <thetext>Created attachment 431507
Patch

I&apos;m waiting for performance numbers from the A/B bots before asking for reviews, but apart from that this patch should be complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770947</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-18 00:15:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/79492202&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773130</commentid>
    <comment_count>7</comment_count>
      <attachid>432409</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-28 10:45:17 -0700</bug_when>
    <thetext>Created attachment 432409
Patch

Roughly neutral overall, it is a progression on some subtests, most notably on ai-astar (14%), but is a regression on mandrel (12% on first iteration) and a smaller one (1 to 2%) on async-fs and coffeescript-wtb.
Coarsening the numerical predictions fixed a massive segmentation regression, but seems to have reduced the size of the wins as well.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431182</attachid>
            <date>2021-06-11 00:15:44 -0700</date>
            <delta_ts>2021-06-11 23:38:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>WIP226914</filename>
            <type>text/plain</type>
            <size>33700</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CmluZGV4IGQ4MTFkOTEzYzhmZS4uZWM2MDQ0ZDc2YzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTI1Miw3ICsyNTIsNyBA
QCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYgb3V0U3RyZWFtLCBTcGVjdWxhdGVk
VHlwZSB2YWx1ZSkKICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgfQogICAgIAotICAg
IGlmICh2YWx1ZSA9PSBTcGVjSW50MzJPbmx5KQorICAgIGlmICgodmFsdWUgJiBTcGVjSW50MzJP
bmx5KSA9PSBTcGVjSW50MzJPbmx5KQogICAgICAgICBzdHJPdXQucHJpbnQoIkludDMyIik7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNCb29sSW50MzIpCkBAIC0zMDgsMTEg
KzMwOCwyMCBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYgb3V0U3RyZWFtLCBT
cGVjdWxhdGVkVHlwZSB2YWx1ZSkKICAgICAgICAgc3RyT3V0LnByaW50KCJCb29sIik7CiAgICAg
ZWxzZQogICAgICAgICBpc1RvcCA9IGZhbHNlOwotICAgIAotICAgIGlmICh2YWx1ZSAmIFNwZWNP
dGhlcikKKworICAgIGlmICgodmFsdWUgJiBTcGVjT3RoZXIpID09IFNwZWNPdGhlcikKICAgICAg
ICAgc3RyT3V0LnByaW50KCJPdGhlciIpOwotICAgIGVsc2UKLSAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHZhbHVlICYgU3BlY051bGwpCisgICAgICAgICAg
ICBzdHJPdXQucHJpbnQoIk51bGwiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNUb3Ag
PSBmYWxzZTsKKworICAgICAgICBpZiAodmFsdWUgJiBTcGVjVW5kZWZpbmVkKQorICAgICAgICAg
ICAgc3RyT3V0LnByaW50KCJVbmRlZmluZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aXNUb3AgPSBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgaWYgKHZhbHVlICYgU3BlY0VtcHR5KQog
ICAgICAgICBzdHJPdXQucHJpbnQoIkVtcHR5Iik7CkBAIC02MzIsOCArNjQxLDEwIEBAIFNwZWN1
bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkZyb21DZWxsKHZhbHVlLmFzQ2VsbCgpKTsKICAgICBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCiAgICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKLSAgICBBU1NFUlQodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSk7Ci0gICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIFNwZWNVbmRlZmluZWQ7CisgICAg
QVNTRVJUKHZhbHVlLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gU3BlY051bGw7CiB9CiAKIFNwZWN1
bGF0ZWRUeXBlIGludDUyQXdhcmVTcGVjdWxhdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVlKQpA
QCAtMTAxOCw2ICsxMDI5LDEwIEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cmlu
Zyhjb25zdCBjaGFyKiBzcGVjdWxhdGlvbikKICAgICAgICAgcmV0dXJuIFNwZWNGdWxsTnVtYmVy
OwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNCb29sZWFuIiwgc3RybGVuKCJT
cGVjQm9vbGVhbiIpKSkKICAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGlmICghc3Ry
bmNtcChzcGVjdWxhdGlvbiwgIlNwZWNVbmRlZmluZWQiLCBzdHJsZW4oIlNwZWNVbmRlZmluZWQi
KSkpCisgICAgICAgIHJldHVybiBTcGVjVW5kZWZpbmVkOworICAgIGlmICghc3RybmNtcChzcGVj
dWxhdGlvbiwgIlNwZWNOdWxsIiwgc3RybGVuKCJTcGVjTnVsbCIpKSkKKyAgICAgICAgcmV0dXJu
IFNwZWNOdWxsOwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNPdGhlciIsIHN0
cmxlbigiU3BlY090aGVyIikpKQogICAgICAgICByZXR1cm4gU3BlY090aGVyOwogICAgIGlmICgh
c3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNNaXNjIiwgc3RybGVuKCJTcGVjTWlzYyIpKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKaW5kZXgg
OTY5Nzc4MzU1NzQxLi43N2U2NDllYmY4ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCkBAIC05NywxOCArOTcsMjAgQEAgc3RhdGljIGNv
bnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjSW50QW55Rm9ybWF0ICAgICAgICAgICAgICAgICAg
ICAgID0gU3BlY0ludDUKIAogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjRnVs
bE51bWJlciAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0ludEFueUZvcm1hdCB8IFNwZWNG
dWxsRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiwgSW50NTIsIG9yIGEgRG91YmxlLCBh
bmQgdGhlIERvdWJsZSBjYW4gYmUgaW1wdXJlIE5hTi4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwg
NDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8
IDQxOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgorc3RhdGlj
IGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjVW5kZWZpbmVkICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMXVsbCA8PCA0MTsgLy8gSXQncyBkZWZpbml0ZWx5IFVuZGVmaW5lZC4KK3N0YXRp
YyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY051bGwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDF1bGwgPDwgNDI7IC8vIEl0J3MgZGVmaW5pdGVseSBOdWxsLgorc3RhdGljIGNv
bnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gU3BlY1VuZGVmaW5lZCB8IFNwZWNOdWxsOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVy
IE51bGwgb3IgVW5kZWZpbmVkLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVj
TWlzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3Ro
ZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmlu
ZWQuCi1zdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQyOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gZW1w
dHkgdmFsdWUgbWFya2VyLgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjSGVh
cEJpZ0ludCAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0MzsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgQmlnSW50IHRoYXQgaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwCi1zdGF0aWMgY29u
c3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCaWdJbnQzMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAxdWxsIDw8IDQ0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBzbWFsbCBCaWdJbnQgdGhhdCBp
cyBpbmxpbmUgdGhlIEpTVmFsdWUKK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0VtcHR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDM7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNIZWFwQmlnSW50ICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8
IDQ0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCaWdJbnQgdGhhdCBpcyBhbGxvY2F0ZWQgb24gdGhl
IGhlYXAKK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0JpZ0ludDMyICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIHNt
YWxsIEJpZ0ludCB0aGF0IGlzIGlubGluZSB0aGUgSlNWYWx1ZQogI2lmIFVTRShCSUdJTlQzMikK
IHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0JpZ0ludCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IFNwZWNCaWdJbnQzMiB8IFNwZWNIZWFwQmlnSW50OwogI2Vsc2UKIC8v
IFdlIHNob3VsZCBub3QgaW5jbHVkZSBTcGVjQmlnSW50MzIuIFdlIGFyZSB1c2luZyBTcGVjQmln
SW50IGluIHZhcmlvdXMgcGxhY2VzIGxpa2UgcHJlZGljdGlvbi4gSWYgdGhpcyBpbmNsdWRlcyBT
cGVjQmlnSW50MzIsIGZpeHVwIHBoYXNlIGlzIGNvbmZ1c2VkIGlmICFVU0UoQklHSU5UMzIpIHNp
bmNlIGl0IGlzIG5vdCB1c2luZyBBbnlCaWdJbnRVc2UuCiBzdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNCaWdJbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjSGVh
cEJpZ0ludDsKICNlbmRpZgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjRGF0
YVZpZXdPYmplY3QgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NTsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNEYXRhVmlldy4KK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0RhdGFWaWV3T2JqZWN0ICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDY7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEpTRGF0YVZpZXcuCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBl
IFNwZWNQcmltaXRpdmUgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjU3RyaW5nIHwgU3Bl
Y1N5bWJvbCB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNNaXNjIHwgU3BlY0JpZ0ludDsgLy8g
SXQncyBhbnkgbm9uLU9iamVjdCBKU1ZhbHVlLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVk
VHlwZSBTcGVjT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0ZpbmFsT2Jq
ZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwgU3Bl
Y0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0
IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNEYXRlT2JqZWN0IHwgU3BlY1Byb21pc2VPYmplY3Qg
fCBTcGVjTWFwT2JqZWN0IHwgU3BlY1NldE9iamVjdCB8IFNwZWNXZWFrTWFwT2JqZWN0IHwgU3Bl
Y1dlYWtTZXRPYmplY3QgfCBTcGVjUHJveHlPYmplY3QgfCBTcGVjRGVyaXZlZEFycmF5IHwgU3Bl
Y09iamVjdE90aGVyIHwgU3BlY0RhdGFWaWV3T2JqZWN0OyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRl
c3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0ZXhw
ciBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
U3BlY09iamVjdCB8IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0NlbGxPdGhlciB8IFNw
ZWNIZWFwQmlnSW50OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwuCkBAIC00NTEsNyArNDUz
LDcgQEAgaW5saW5lIGJvb2wgaXNOZWl0aGVyRG91YmxlTm9ySGVhcEJpZ0ludE5vclN0cmluZ1Nw
ZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHR5cGUKIAogaW5saW5lIGJvb2wgaXNPdGhlclNwZWN1
bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZSA9PSBTcGVj
T3RoZXI7CisgICAgcmV0dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjT3RoZXIpOwogfQog
CiBpbmxpbmUgYm9vbCBpc01pc2NTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKQEAg
LTQ1OSwxMSArNDYxLDYgQEAgaW5saW5lIGJvb2wgaXNNaXNjU3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiAgICAgcmV0dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjTWlzYyk7
CiB9CiAKLWlubGluZSBib29sIGlzT3RoZXJPckVtcHR5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA9PSBTcGVjT3RoZXI7Ci19
Ci0KIGlubGluZSBib29sIGlzRW1wdHlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
IHsKICAgICByZXR1cm4gdmFsdWUgPT0gU3BlY0VtcHR5OwpAQCAtNTAzLDYgKzUwMCwxNiBAQCBp
bmxpbmUgYm9vbCBtZXJnZVNwZWN1bGF0aW9uKFQmIGxlZnQsIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBTcGVjdWxhdGVkVHlwZSBpbnRlcnNl
Y3Rpb25PZlNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSBsZWZ0LCBTcGVjdWxhdGVkVHlwZSBy
aWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCAmIHJpZ2h0OworfQorCitpbmxpbmUgdm9pZCBmaWx0
ZXJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSYgbGVmdCwgU3BlY3VsYXRlZFR5cGUgcmlnaHQp
Cit7CisgICAgbGVmdCAmPSByaWdodDsKK30KKwogaW5saW5lIGJvb2wgc3BlY3VsYXRpb25DaGVj
a2VkKFNwZWN1bGF0ZWRUeXBlIGFjdHVhbCwgU3BlY3VsYXRlZFR5cGUgZGVzaXJlZCkKIHsKICAg
ICByZXR1cm4gKGFjdHVhbCB8IGRlc2lyZWQpID09IGRlc2lyZWQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
aW5kZXggM2I2MWE1ZmQxOTg5Li5iOTFlNjk2ZjExZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAg
LTcxMCw5ICs3MTAsMTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKICAgICAgICAg
c3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBOb3RDZWxs
Tm9yQmlnSW50VXNlOiB7Ci0gICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNPdGhlcikgewotICAg
ICAgICAgICAgICAgIHR5cGUgJj0gflNwZWNPdGhlcjsKLSAgICAgICAgICAgICAgICB0eXBlIHw9
IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0Jvb2xJbnQzMjsgLy8gTnVsbCBiZWNvbWVzIHplcm8s
IHVuZGVmaW5lZCBiZWNvbWVzIE5hTi4KKyAgICAgICAgICAgIGlmICh0eXBlICYgU3BlY051bGwp
IHsKKyAgICAgICAgICAgICAgICB0eXBlICY9IH5TcGVjTnVsbDsKKyAgICAgICAgICAgICAgICB0
eXBlIHw9IFNwZWNCb29sSW50MzI7IC8vIE51bGwgYmVjb21lcyB6ZXJvCisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHByb3Blcmx5IHJlY29yZCBpdCBhcyBhIGNvbnN0YW50CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNVbmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgICB0eXBlICY9IH5TcGVjVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIHR5cGUgfD0gU3Bl
Y0RvdWJsZVB1cmVOYU47IC8vIFVuZGVmaW5lZCBiZWNvbWVzIE5hTi4KKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogcHJvcGVybHkgcmVjb3JkIGl0IGFzIGEgY29uc3RhbnQKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICh0eXBlICYgU3BlY0Jvb2xlYW4pIHsKICAgICAgICAgICAgICAg
ICB0eXBlICY9IH5TcGVjQm9vbGVhbjsKQEAgLTE1OTksNyArMTYwNSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSBtYXNxdWVyYWRlcy1h
cy11bmRlZmluZWQgd2F0Y2hwb2ludCB0aGluZ3kuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDU2CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmIChTcGVjT3RoZXIgfCBTcGVjT2JqZWN0T3RoZXIp
KSkgeworICAgICAgICAgICAgaWYgKCEoY2hpbGQubV90eXBlICYgKFNwZWNPdGhlciB8IFNwZWNP
YmplY3RPdGhlcikpKSB7IC8vRklYTUUKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjE5LDE5ICsxNjI1LDE5IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAvLyBJcyB0aGUgY2hpbGQncyB0eXBlIGFu
IG9iamVjdCB0aGF0IGlzbid0IGFuIG90aGVyLW9iamVjdCAoaS5lLiBvYmplY3QgdGhhdCBjb3Vs
ZAogICAgICAgICAgICAgLy8gaGF2ZSBtYXNxdWFyZWRlcy1hcy11bmRlZmluZWQgdHJhcHMpIGFu
ZCBpc24ndCBhIGZ1bmN0aW9uPyBUaGVuOiB3ZSBzaG91bGQgZm9sZAogICAgICAgICAgICAgLy8g
dGhpcyB0byB0cnVlLgotICAgICAgICAgICAgaWYgKCEoY2hpbGQubV90eXBlICYgfihTcGVjT2Jq
ZWN0IC0gU3BlY09iamVjdE90aGVyIC0gU3BlY0Z1bmN0aW9uKSkpIHsKKyAgICAgICAgICAgIC8v
IFdlIGFsc28gZm9sZCB0byB0cnVlIGZvciBOdWxsLgorICAgICAgICAgICAgaWYgKCEoY2hpbGQu
bV90eXBlICYgfigoU3BlY09iamVjdCAtIFNwZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbikg
fCBTcGVjTnVsbCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29s
ZWFuKHRydWUpKTsKICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgLy8gSXMgdGhlIGNoaWxkJ3MgdHlwZSBkZWZpbml0ZWx5IG5vdCBlaXRoZXIgb2Y6IGFu
IG9iamVjdCB0aGF0IGlzbid0IGEgZnVuY3Rpb24sCi0gICAgICAgICAgICAvLyBvciBlaXRoZXIg
dW5kZWZpbmVkIG9yIG51bGw/IFRoZW46IHdlIHNob3VsZCBmb2xkIHRoaXMgdG8gZmFsc2UuIFRo
aXMgbWVhbnMKKyAgICAgICAgICAgIC8vIG9yIG51bGw/IFRoZW46IHdlIHNob3VsZCBmb2xkIHRo
aXMgdG8gZmFsc2UuIFRoaXMgbWVhbnMKICAgICAgICAgICAgIC8vIGZvciBleGFtcGxlIHRoYXQg
aWYgaXQncyBhbnkgbm9uLWZ1bmN0aW9uIG9iamVjdCwgaW5jbHVkaW5nIHRob3NlIHRoYXQgaGF2
ZQotICAgICAgICAgICAgLy8gbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHRyYXBzLCB0aGVuIHdl
IGRvbid0IGZvbGQuIEl0IGFsc28gbWVhbnMgd2Ugd29uJ3QgZm9sZAotICAgICAgICAgICAgLy8g
aWYgaXQncyB1bmRlZmluZWQtb3ItbnVsbCwgc2luY2UgdGhlIHR5cGUgYml0cyBkb24ndCBkaXN0
aW5ndWlzaCBiZXR3ZWVuCi0gICAgICAgICAgICAvLyB1bmRlZmluZWQgKHdoaWNoIHNob3VsZCBm
b2xkIHRvIGZhbHNlKSBhbmQgbnVsbCAod2hpY2ggc2hvdWxkIGZvbGQgdG8gdHJ1ZSkuCi0gICAg
ICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiAoKFNwZWNPYmplY3QgLSBTcGVjRnVuY3Rpb24p
IHwgU3BlY090aGVyKSkpIHsKKyAgICAgICAgICAgIC8vIG1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5l
ZCB0cmFwcywgdGhlbiB3ZSBkb24ndCBmb2xkLgorICAgICAgICAgICAgLy8gV2UgYWxzbyBmb2xk
IHRvIGZhbHNlIGZvciBVbmRlZmluZWQuCisgICAgICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUg
JiAoKFNwZWNPYmplY3QgLSBTcGVjRnVuY3Rpb24pIHwgU3BlY051bGwpKSkgewogICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxzZSkpOwogICAgICAgICAgICAg
ICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5
NzgsOSArMTk4NCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChsZWZ0VHlwZSA9PSBTcGVj
T3RoZXIpCisgICAgICAgICAgICBpZiAoIShsZWZ0VHlwZSAmIH5TcGVjT3RoZXIpKQogICAgICAg
ICAgICAgICAgIHN0ZDo6c3dhcChsZWZ0VHlwZSwgcmlnaHRUeXBlKTsKLSAgICAgICAgICAgIGlm
IChyaWdodFR5cGUgPT0gU3BlY090aGVyKSB7CisgICAgICAgICAgICBpZiAoIShyaWdodFR5cGUg
JiB+U3BlY090aGVyKSkgewogICAgICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBhbmQgTnVsbCBh
cmUgYWx3YXlzIGVxdWFsIHdoZW4gY29tcGFyZWQgdG8gZWFjaG90aGVyLgogICAgICAgICAgICAg
ICAgIGlmICghKGxlZnRUeXBlICYgflNwZWNPdGhlcikpIHsKICAgICAgICAgICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUpKTsKQEAgLTIzODAsNyArMjM4Niw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyKTsKKyAg
ICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOyAvLyBGSVhN
RQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6R2Vu
ZXJpYzoKQEAgLTI0MTUsNyArMjQyMSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICAgICAgbWFrZUhlYXBUb3BG
b3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY090aGVyKTsg
Ly8gRklYTUUKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0
MjcsNyArMjQzMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAg
c2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVz
ZXNBc090aGVyKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjT3Ro
ZXIpOyAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgU3BlY1VuZGVmaW5lZCBpbnN0ZWFkIG9mIFNw
ZWNPdGhlcj8KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwogICAgICAgICAgICAg
fSBlbHNlCkBAIC0yNTgzLDcgKzI1ODksNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBH
ZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcykKLSAgICAgICAgICAgICAgICByZXN1bHQubWVy
Z2UoU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoU3BlY090aGVyKTsg
Ly9GSVhNRQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7
CkBAIC0yNjI3LDEyICsyNjMzLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAg
ICAgICAgICAgICAgIGlmICghcmVnRXhwIHx8IHJlZ0V4cC0+aGFzSW5kaWNlcygpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFkZChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0
dXJlKGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUo
KSkpOwogICAgICAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHN0cnVjdHVyZVNldCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWVyZ2UoU3BlY090aGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tZXJnZShTcGVjT3RoZXIpOyAvLyBGSVhN
RQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVy
IHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwg
U3BlY0FycmF5KTsgLy8gRklYTUUKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlZ0V4cFRl
c3Q6CkBAIC0yNjQ1LDEyICsyNjUxLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAg
Y2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS51c2VL
aW5kKCkgPT0gUmVnRXhwT2JqZWN0VXNlKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMygp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UgfHwgbm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IEtu
b3duU3RyaW5nVXNlKTsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwg
U3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3Bl
Y0FycmF5KTsgLy8gRklYTUUKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlZ0V4cE1hdGNo
RmFzdEdsb2JhbDoKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UgfHwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IEtub3duU3RyaW5nVXNlKTsK
LSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKKyAg
ICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsgLy8gRklY
TUUKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6
CkBAIC0zODU0LDcgKzM4NjAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAgICAg
c2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7IC8vIEZJWE1FOiBj
YW4gdGhpcyBiZSBTcGVjTnVsbCwgb3Igc2hvdWxkIHdlIHJlcGxhY2UgU3BlY090aGVyIGJ5IFNw
ZWNVbmRlZmluZWQ/CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00Mjg3LDEx
ICs0MjkzLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZTogewotICAgICAgICBzZXRU
eXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlw
ZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7IC8vIEZJWE1FCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAg
ICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAg
ICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOyAvLyBGSVhN
RQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CkBAIC00
NDMxLDcgKzQ0MzcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAobm9k
ZS0+aW50cmluc2ljKCkgPT0gQ1BVUmR0c2NJbnRyaW5zaWMpCiAgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOworICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlcik7IC8vIEZJWE1FCiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1RyYXBzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBmODAyMzdjYzgzNDMuLjE1MTFi
NDkwZTk3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKQEAgLTUxNTIsNyArNTE1Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5SWQoCiAgICAgICAgIGhhbmRsZUNhbGwoCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIoKSwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsLAogICAgICAgICAgICAgb3Ny
RXhpdEluZGV4LCBzZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEsIHJlZ2lzdGVyT2Zmc2V0
LAotICAgICAgICAgICAgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSwgU3BlY090aGVyLCBlY21h
TW9kZSk7CisgICAgICAgICAgICAqdmFyaWFudC5jYWxsTGlua1N0YXR1cygpLCBTcGVjT3RoZXIs
IGVjbWFNb2RlKTsgLy8gRklYTUU6IGlzIFNwZWNPdGhlciB0aGUgcmlnaHQgY2hvaWNlIGhlcmU/
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBiNmRhYmI0Y2FmZGMuLjA2OTgxNjc5NmY5MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yODk5LDYg
KzI4OTksMzggQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBub3QgQVNTRVJUX0VOQUJMRUQKICAgICAg
ICAgfQogCisgICAgICAgIC8qc3dpdGNoKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0
ZXJDYWxsTGlua1N0YXR1czoKKyAgICAgICAgY2FzZSBGaWx0ZXJHZXRCeVN0YXR1czoKKyAgICAg
ICAgY2FzZSBGaWx0ZXJQdXRCeUlkU3RhdHVzOgorICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0
dXM6CisgICAgICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlTdGF0dXM6CisgICAgICAgIGNhc2UgRmls
dGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CisgICAgICAgIGNhc2UgRmlsdGVyU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGJvb2wgaGFz
QXRMZWFzdE9uZUNoaWxkID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGFsbENoaWxkcmVuQXJl
VW50eXBlZCA9IHRydWU7CisgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2RlLCBb
Jl0oRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgaGFzQXRMZWFzdE9uZUNoaWxkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKKyAg
ICAgICAgICAgICAgICAgICAgYWxsQ2hpbGRyZW5BcmVVbnR5cGVkID0gZmFsc2U7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGlmIChoYXNBdExlYXN0T25lQ2hpbGQgJiYgYWxsQ2hpbGRy
ZW5BcmVVbnR5cGVkKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZyhtX2dyYXBoLm9wTmFtZShu
b2RlLT5vcCgpKSwgIjogIik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4o
bm9kZSwgWyZdKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRp
b24oV1RGOjpkYXRhRmlsZSgpLCBlZGdlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgfSovCisK
ICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICAvLyBJdCB3b3VsZCBiZSBpbnZhbGlkIGZvciBG
aXh1cCB0byB0YWtlIGEgbm9kZSB0aGF0IGRpZG4ndCBjbG9iYmVyIGV4aXQgc3RhdGUgYW5kIG1h
cmsgaXQgYXMgY2xvYmJlcmluZyBhZnRlcndvcmRzLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIHVzZWRUb0Nsb2JiZXJFeGl0U3RhdGUgfHwgIWNsb2JiZXJzRXhpdFN0YXRlKG1f
Z3JhcGgsIG5vZGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXgg
MTExMDA4MjYwMzk4Li4xZjhjOGM2MTc4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCkBAIC0xNTEzLDkgKzE1MTMsMTIgQEAgRnJvemVuVmFsdWUqIEdyYXBoOjpib3R0
b21WYWx1ZU1hdGNoaW5nU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAg
ICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkKICAgICAgICAgcmV0dXJuIGZyZWV6ZShKU1Zh
bHVlKCkpOwogCi0gICAgaWYgKHNwZWN1bGF0aW9uQ29udGFpbnMocHJlZGljdGlvbiwgU3BlY090
aGVyKSkKKyAgICBpZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjTnVsbCkp
CiAgICAgICAgIHJldHVybiBmcmVlemUoanNOdWxsKCkpOwogCisgICAgaWYgKHNwZWN1bGF0aW9u
Q29udGFpbnMocHJlZGljdGlvbiwgU3BlY1VuZGVmaW5lZCkpCisgICAgICAgIHJldHVybiBmcmVl
emUoanNVbmRlZmluZWQoKSk7CisKICAgICBpZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0
aW9uLCBTcGVjQm9vbGVhbikpCiAgICAgICAgIHJldHVybiBmcmVlemUoanNCb29sZWFuKHRydWUp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDc2ZjlkYjgyZjkxMS4u
NzEwYjkyYWFmMmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0xMDQw
LDYgKzEwNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ1BTQ0ZHRGF0YSgpOwogCisg
ICAgY29uc3QgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiYgcm9vdHMoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RzOyB9CiAgICAgYm9vbCBpc1Jvb3QoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lzSW5TU0FDb252ZXJzaW9uLCAiVGhp
cyBpcyBub3Qgd3JpdHRlbiB0byB3b3JrIGR1cmluZyBTU0EgY29udmVyc2lvbi4iKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKaW5kZXggNDMyOWJlNWE1ZmM5Li4xNGZlNjkxNTJhZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCkBAIC0yOCwyMSArMjgsMzEgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2lu
Y2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1RpbWluZ1Njb3BlLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAogc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2VGaXhQb2ludExvb3BzID0gZmFsc2U7CitzdGF0aWMgY29u
c3RleHByIGJvb2wgdmVyYm9zZUdldExvY2FsID0gZmFsc2U7CiAKIGNsYXNzIFByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJw
cmVkaWN0aW9uIHByb3BhZ2F0aW9uIikKKyAgICAgICAgLCBtX3R5cGVzQXRIZWFkKGdyYXBoKQor
ICAgICAgICAsIG1fYmxvY2tzVG9WaXNpdChtX2dyYXBoLm51bUJsb2NrcygpKQogICAgIHsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgbV90eXBlc0F0SGVhZFtibG9ja10gPSBPcGVyYW5kczxTcGVj
dWxhdGVkVHlwZT4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBTcGVjTm9u
ZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYm9vbCBydW4oKQpAQCAtNTYsOSArNjYs
MTYgQEAgcHVibGljOgogCiAgICAgICAgIHByb2Nlc3NJbnZhcmlhbnRzKCk7CiAKKyAgICAgICAg
aW5pdGlhbGl6ZVR5cGVzQXRIZWFkKCk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGgucm9vdHMoKSkKKyAgICAgICAgICAgIG1fYmxvY2tzVG9WaXNpdC5xdWlja1Nl
dChibG9jay0+aW5kZXgpOwogICAgICAgICBwcm9wYWdhdGVUb0ZpeHBvaW50KCk7CiAgICAgICAg
IAogICAgICAgICBtX3Bhc3MgPSBSYXJlQ2FzZVBhc3M7CisgICAgICAgIC8vIEdldHRpbmcgcmlk
IG9mIHRoaXMgc2Vjb25kIHBhc3MgYWx0b2dldGhlciB3b3VsZCBiZSBhdHRyYWN0aXZlLgorICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5yb290cygpKQorICAgICAgICAg
ICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CiAgICAgICAgIHByb3Bh
Z2F0ZVRvRml4cG9pbnQoKTsKICAgICAgICAgCiAgICAgICAgIG1fcGFzcyA9IERvdWJsZVZvdGlu
Z1Bhc3M7CkBAIC03Miw3ICs4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIW1fY2hh
bmdlZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgLy8gRklY
TUU6IHRoaXMgaXMgdGVycmlibGUsIHdhcyBwcm9wYWdhdGVGb3J3YXJkKCk7CisgICAgICAgICAg
ICAvLyBBdCB0aGUgdmVyeSBsZWFzdCwgSSBzaG91bGQga2VlcCB0cmFjayBvZiB3aGljaCBCQnMg
Z290IGZyZXNoIGluZm9ybWF0aW9uIGZyb20gZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7CisgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKQorICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9WaXNpdC5xdWlja1NldChibG9jay0+
aW5kZXgpOworICAgICAgICAgICAgcHJvcGFnYXRlVG9GaXhwb2ludCgpOwogICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOwogCiAgICAgICAgIGlmICh2ZXJib3NlRml4UG9pbnRMb29wcykKQEAg
LTg0LDMwICsxMDUsMTYwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwcm9wYWdhdGVU
b0ZpeHBvaW50KCkKICAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAg
ICB1bnNpZ25lZCBjb3VudGVyID0gMDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYgKHZl
cmJvc2VGaXhQb2ludExvb3BzKQogICAgICAgICAgICAgICAgICsrY291bnRlcjsKIAotICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAK
LSAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBi
b3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAotICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBj
b2RlLgotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwotICAgICAgICAgICAgaWYgKCFt
X2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBw
YXRob2xvZ2ljYWwgY29kZSB3aWxsCi0gICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVzcy4gTG9v
cHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cuCi0gICAg
ICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBp
ZiB0aGUgZm9yd2FyZCBmaXhwb2ludAotICAgICAgICAgICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1
dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCi0gICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUJhY2t3YXJkKCk7Ci0gICAg
ICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXggOiBtX2Jsb2Nrc1RvVmlzaXQpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvVmlz
aXQucXVpY2tDbGVhcihibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYm9v
bCByZXN1bHQgPSBwcm9wYWdhdGVUaHJvdWdoQmxvY2soYmxvY2spOworICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCB8PSByZXN1bHQ7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSByZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogCiAgICAgICAgIGlm
ICh2ZXJib3NlRml4UG9pbnRMb29wcykKICAgICAgICAgICAgIGRhdGFMb2coIkl0ZXJhdGVkICIs
IGNvdW50ZXIsICIgdGltZXMgaW4gcHJvcGFnYXRlVG9GaXhwb2ludC5cbiIpOwogICAgIH0KKwor
ICAgIGJvb2wgcHJvcGFnYXRlVGhyb3VnaEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsK
KyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IGN1cnJlbnRUeXBlcyA9IG1fdHlwZXNB
dEhlYWRbYmxvY2tdOworICAgICAgICBPcGVyYW5kczx1bnNpZ25lZD4gbGFzdFRpbWVPdmVyd3Jp
dHRlbiB7IE9wZXJhbmRzTGlrZSwgY3VycmVudFR5cGVzLCAwIH07CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICBwcm9wYWdhdGUobm9kZSwgY3VycmVudFR5cGVzLCBsYXN0VGltZU92ZXJ3cml0
dGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIE5vZGUqIHRlcm1pbmFsID0gYmxvY2stPnRlcm1p
bmFsKCk7CisgICAgICAgIGlmICh0ZXJtaW5hbC0+b3AoKSA9PSBCcmFuY2gpCisgICAgICAgICAg
ICByZXR1cm4gcHJvcGFnYXRlVG9TdWNjZXNzb3JzVGhyb3VnaEJyYW5jaCh0ZXJtaW5hbCwgY3Vy
cmVudFR5cGVzLCBsYXN0VGltZU92ZXJ3cml0dGVuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuIHByb3BhZ2F0ZVRvU3VjY2Vzc29yc0dlbmVyaWMoYmxvY2ssIGN1cnJlbnRUeXBl
cyk7CisgICAgfQorCisgICAgYm9vbCBwcm9wYWdhdGVUb1N1Y2Nlc3NvcnNHZW5lcmljKEJhc2lj
QmxvY2sqIGJsb2NrLCBjb25zdCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIGN1cnJlbnRUeXBl
cykKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghIXN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbnNBdEhlYWQoc3VjY2Vzc29yLCBjdXJyZW50VHlwZXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjaGFu
Z2VkIHRoZSBvbGQgdHlwZXMgYXQgaGVhZC4KKyAgICAvLyBJdCBhbHNvIHVwZGF0ZXMgbV9ibG9j
a3NUb1Zpc2l0LgorICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChCYXNpY0Jsb2NrKiBi
bG9jaywgY29uc3QgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBpbmNvbWluZ1R5cGVzKQorICAg
IHsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBvbGRUeXBlcyA9IG1fdHlwZXNB
dEhlYWRbYmxvY2tdOworICAgICAgICBBU1NFUlQob2xkVHlwZXMubnVtYmVyT2ZBcmd1bWVudHMo
KSA9PSBpbmNvbWluZ1R5cGVzLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBBU1NFUlQo
b2xkVHlwZXMubnVtYmVyT2ZMb2NhbHMoKSA9PSBpbmNvbWluZ1R5cGVzLm51bWJlck9mTG9jYWxz
KCkpOworICAgICAgICBBU1NFUlQob2xkVHlwZXMubnVtYmVyT2ZUbXBzKCkgPT0gaW5jb21pbmdU
eXBlcy5udW1iZXJPZlRtcHMoKSk7CisKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFR5cGVzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3BlY3VsYXRpb24ob2xkVHlwZXNbaV0sIGluY29taW5n
VHlwZXNbaV0pOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgbV9ibG9ja3NUb1Zp
c2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgYm9vbCBwcm9wYWdhdGVUb1N1Y2Nlc3NvcnNUaHJvdWdoQnJhbmNoKE5vZGUqIGJy
YW5jaCwgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBjdXJyZW50VHlwZXMsIGNvbnN0IE9wZXJh
bmRzPHVuc2lnbmVkPiBsYXN0VGltZU92ZXJ3cml0dGVuKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGJyYW5jaC0+b3AoKSA9PSBCcmFuY2gpOworCisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPiB0eXBlc0Fsb25nVHJ1ZUJyYW5jaCA9IGN1cnJlbnRUeXBlczsKKyAgICAgICAgLy8gV2Ug
cmV1c2UgY3VycmVudFR5cGVzIGZvciB0eXBlc0Fsb25nRmFsc2VCcmFuY2gsIGluc3RlYWQgb2Yg
bWFraW5nIGFub3RoZXIgY29weS4KKyAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25zQmFzZWRPblRy
dXRoaW5lc3MoYnJhbmNoLT5jaGlsZDEoKS5ub2RlKCksIHR5cGVzQWxvbmdUcnVlQnJhbmNoLCBj
dXJyZW50VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKGJyYW5j
aC0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKHRydWUpLCB0eXBlc0Fsb25nVHJ1ZUJyYW5jaCk7Cisg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChicmFuY2gtPnN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihmYWxzZSksIGN1cnJlbnRUeXBlcyk7CisgICAgICAgIHJldHVybiBjaGFu
Z2VkOworICAgIH0KKworICAgIHZvaWQgZmlsdGVyU3BlY3VsYXRpb25zQmFzZWRPblRydXRoaW5l
c3MoTm9kZSogbm9kZSwgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiB0cnV0aHlUeXBlcywgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+IGZhbHN5VHlwZXMsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVk
PiBsYXN0VGltZU92ZXJ3cml0dGVuKQorICAgIHsKKyAgICAgICAgYXV0byBmaWx0ZXJTcGVjdWxh
dGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbCA9IFsmXSAoTm9kZSogbWF5YmVHZXRMb2NhbCwg
U3BlY3VsYXRlZFR5cGUgdHJ1dGh5RmlsdGVyLCBTcGVjdWxhdGVkVHlwZSBmYWxzeUZpbHRlcikg
eworICAgICAgICAgICAgaWYgKG1heWJlR2V0TG9jYWwtPm9wKCkgIT0gR2V0TG9jYWwpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbWF5YmVH
ZXRMb2NhbC0+b3BlcmFuZCgpOworICAgICAgICAgICAgLy8gSGF2aW5nIGluZm9ybWF0aW9uIGFi
b3V0IHRoaXMgR2V0TG9jYWwgZG9lcyBub3QgdGVsbCB1cyBhbnl0aGluZyBhYm91dCB0aGUgb3Bl
cmFuZCBhdCB0aGUgZW5kIG9mIHRoZSBibG9jayBpZiB0aGVyZSBpcyBhbiBpbnRlcnZlbmluZyBT
ZXRMb2NhbC4KKyAgICAgICAgICAgIGlmIChsYXN0VGltZU92ZXJ3cml0dGVuLm9wZXJhbmQob3Bl
cmFuZCkgPiBtYXliZUdldExvY2FsLT5pbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uKHRydXRoeVR5cGVzLm9wZXJhbmQob3BlcmFu
ZCksIHRydXRoeUZpbHRlcik7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihmYWxzeVR5
cGVzLm9wZXJhbmQob3BlcmFuZCksIGZhbHN5RmlsdGVyKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgY2Fubm90QmVUcnV0aHlUeXBlID0gU3BlY0RvdWJsZU5hTiB8
IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRl
bkdldExvY2FsKG5vZGUsIH5jYW5ub3RCZVRydXRoeVR5cGUsIFNwZWNIZWFwVG9wKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTog
eworICAgICAgICAgICAgTm9kZSogbGVmdE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICBOb2RlKiByaWdodE5vZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAg
ICAgICAgICBpZiAobGVmdE5vZGUtPm9wKCkgIT0gR2V0TG9jYWwgJiYgcmlnaHROb2RlLT5vcCgp
ICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdFByZWRpY3Rpb24gPSBsZWZ0Tm9kZS0+cHJlZGljdGlvbigpOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRQcmVkaWN0aW9uID0gcmlnaHROb2RlLT5wcmVkaWN0
aW9uKCk7CisKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUcnVlUHJlZGljdGlvbiA9
IGludGVyc2VjdGlvbk9mU3BlY3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uLCBsZWFzdFVwcGVyQm91
bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhyaWdodFByZWRpY3Rpb24pKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0VHJ1ZVByZWRpY3Rpb24gPSBpbnRlcnNlY3Rp
b25PZlNwZWN1bGF0aW9ucyhyaWdodFByZWRpY3Rpb24sIGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0
bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uKSk7CisKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnRGYWxzZVByZWRpY3Rpb24gPSBsZWZ0UHJlZGljdGlvbjsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0RmFsc2VQcmVkaWN0aW9uID0gcmlnaHRQcmVk
aWN0aW9uOworICAgICAgICAgICAgaWYgKGxlZnRQcmVkaWN0aW9uID09IFNwZWNOdWxsKQorICAg
ICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uKHJpZ2h0RmFsc2VQcmVkaWN0aW9uLCB+U3Bl
Y051bGwpOworICAgICAgICAgICAgZWxzZSBpZiAobGVmdFByZWRpY3Rpb24gPT0gU3BlY1VuZGVm
aW5lZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihyaWdodEZhbHNlUHJlZGlj
dGlvbiwgflNwZWNVbmRlZmluZWQpOworICAgICAgICAgICAgaWYgKHJpZ2h0UHJlZGljdGlvbiA9
PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihsZWZ0RmFsc2VQ
cmVkaWN0aW9uLCB+U3BlY051bGwpOworICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRQcmVkaWN0
aW9uID09IFNwZWNOdWxsKQorICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uKGxlZnRG
YWxzZVByZWRpY3Rpb24sIH5TcGVjVW5kZWZpbmVkKTsKKworICAgICAgICAgICAgZmlsdGVyU3Bl
Y3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobGVmdE5vZGUsIGxlZnRUcnVlUHJlZGlj
dGlvbiwgbGVmdEZhbHNlUHJlZGljdGlvbik7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlv
bklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChyaWdodE5vZGUsIHJpZ2h0VHJ1ZVByZWRpY3Rpb24s
IHJpZ2h0RmFsc2VQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyU3BlY3Vs
YXRpb25zQmFzZWRPblRydXRoaW5lc3Mobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBmYWxzeVR5cGVz
LCB0cnV0aHlUeXBlcywgbGFzdFRpbWVPdmVyd3JpdHRlbik7CisgICAgICAgIGNhc2UgSXNVbmRl
ZmluZWRPck51bGw6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0
ZW5HZXRMb2NhbChub2RlLCBTcGVjT3RoZXIsIH5TcGVjT3RoZXIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIElzQm9vbGVhbjoKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0
aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIFNwZWNCb29sZWFuLCB+U3BlY0Jvb2xl
YW4pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzTnVtYmVyOgorICAgICAg
ICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3Bl
Y0Z1bGxOdW1iZXIsIH5TcGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgSXNCaWdJbnQ6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3Zl
cndyaXR0ZW5HZXRMb2NhbChub2RlLCBTcGVjQmlnSW50LCB+U3BlY0JpZ0ludCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6IC8vIEZJWE1FOiBsb3RzIG9mIG90aGVyIGNh
c2VzIHRvIGNvdmVyLCBlLmcuIENvbXBhcmVFcSwgSW5zdGFuY2VPZiwgVHlwZU9mSXNPYmplY3Qs
IGV0Yy4uIEp1c3QgYWJvdXQgZXZlcnkgbm9kZSB3aXRoIGEgYm9vbGVhbiBvdXRwdXQgY2FuIGJl
IHVzZWQgaGVyZS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFRoZSBERkdCeXRlY29kZVBhcnNlciBnaXZlcyB1cyBzb21lIHVzZWZ1bCBwcm9maWxpbmcg
aW5mb3JtYXRpb24sIGJ1dCBpdCBpcyBzdG9yZWQgaW4gdGhlIFZhcmlhYmxlQWNjZXNzRGF0YS4K
KyAgICB2b2lkIGluaXRpYWxpemVUeXBlc0F0SGVhZCgpCisgICAgeworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgbV90eXBlc0F0SGVhZFtibG9jay0+aW5kZXhdLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0
aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewpAQCAtMTQ2LDE2ICsyOTcsMjUg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGlj
dGlvbihtZXJnZVNwZWN1bGF0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgIH0KIAotICAgIHZvaWQg
cHJvcGFnYXRlKE5vZGUqIG5vZGUpCisgICAgdm9pZCBwcm9wYWdhdGUoTm9kZSogbm9kZSwgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+JiB0eXBlcywgT3BlcmFuZHM8dW5zaWduZWQ+JiBsYXN0VGlt
ZU92ZXJ3cml0dGVuKQogICAgIHsKICAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwor
ICAgICAgICAodm9pZCkgdHlwZXM7CiAKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAg
ICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsK
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2
YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9k
ZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkU3R5bGVQcmVkaWN0
aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSB0eXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgaWYgKHZl
cmJvc2VHZXRMb2NhbCAmJiAocHJlZGljdGlvbiAhPSBvbGRTdHlsZVByZWRpY3Rpb24pKSB7Cisg
ICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgb2xkU3R5bGVQ
cmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgLT4gIik7CisgICAgICAgICAg
ICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgcHJlZGljdGlvbik7CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICghdmFyaWFibGUtPmNvdWxkUmVwcmVzZW50SW50NTIoKSAmJiAocHJlZGljdGlvbiAmIFNwZWNO
b25JbnQzMkFzSW50NTIpKQogICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSAocHJlZGljdGlv
biB8IFNwZWNBbnlJbnRBc0RvdWJsZSkgJiB+U3BlY05vbkludDMyQXNJbnQ1MjsKICAgICAgICAg
ICAgIGlmIChwcmVkaWN0aW9uKQpAQCAtMTY0LDggKzMyNCwxMSBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5w
cmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHR5cGUpOwor
ICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAg
ICAgdHlwZXMub3BlcmFuZChvcGVyYW5kKSA9IHR5cGU7CisgICAgICAgICAgICBsYXN0VGltZU92
ZXJ3cml0dGVuLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5pbmRleCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjMyLDIyICs3OTUsNiBAQCBwcml2YXRlOgogCiAgICAg
ICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KLSAgICAgICAgCi0gICAgdm9pZCBwcm9w
YWdhdGVGb3J3YXJkKCkKLSAgICB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fZGVwZW5k
ZW50Tm9kZXMpIHsKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBub2RlOwotICAgICAgICAg
ICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9p
ZCBwcm9wYWdhdGVCYWNrd2FyZCgpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2RlcGVuZGVudE5vZGVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZSA9IG1fZGVwZW5kZW50Tm9kZXNbaV07Ci0gICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50
Tm9kZSk7Ci0gICAgICAgIH0KLSAgICB9CiAgICAgCiAgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhO
b2RlKiBub2RlLCBmbG9hdCB3ZWlnaHQpCiAgICAgewpAQCAtMTA2Nyw2ICsxMjE0LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBzb21l
dGhpbmcgbW9yZSBwcmVjaXNlPwogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjT3RoZXIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMjgsMTEgKzEzNzYsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNw
ZWNDZWxsIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwg
fCBTcGVjT3RoZXIpOyAvLyBGSVhNRQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIHNldFByZWRpY3Rp
b24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOyAvLyBGSVhNRQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CkBAIC0xMjk0LDExICsxNDQy
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBdG9taWNzT3I6CiAgICAgICAgIGNhc2UgQXRv
bWljc1N0b3JlOgogICAgICAgICBjYXNlIEF0b21pY3NTdWI6Ci0gICAgICAgIGNhc2UgQXRvbWlj
c1hvcjogewotICAgICAgICAgICAgbV9kZXBlbmRlbnROb2Rlcy5hcHBlbmQobV9jdXJyZW50Tm9k
ZSk7CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOiB7CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTMwOCw3ICsxNDU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2N1cnJl
bnROb2RlLT5pbnRyaW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykKICAgICAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNVbmRlZmluZWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IApAQCAtMTUxMyw3ICsxNjU5LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJp
bmcgfCBTcGVjU3ltYm9sOwogICAgIH0KIAotICAgIFZlY3RvcjxOb2RlKj4gbV9kZXBlbmRlbnRO
b2RlczsKKyAgICBCbG9ja01hcDxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fdHlwZXNBdEhl
YWQ7CisgICAgQml0VmVjdG9yIG1fYmxvY2tzVG9WaXNpdDsKICAgICBOb2RlKiBtX2N1cnJlbnRO
b2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKICAgICBQcmVkaWN0aW9uUGFzcyBt
X3Bhc3MgeyBQcmltYXJ5UGFzcyB9OyAvLyBXZSB1c2UgZGlmZmVyZW50IGxvZ2ljIGZvciBjb25z
aWRlcmluZyBwcmVkaWN0aW9ucyBkZXBlbmRpbmcgb24gaG93IGZhciBhbG9uZyB3ZSBhcmUgaW4g
cHJvcGFnYXRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431251</attachid>
            <date>2021-06-11 23:38:06 -0700</date>
            <delta_ts>2021-06-12 08:12:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch226914</filename>
            <type>text/plain</type>
            <size>40531</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CmluZGV4IGQ4MTFkOTEzYzhmZS4uNjk2Y2ViZjQwODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTIsNyArMjUyLDcg
QEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVhbSwgU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIH0KICAgICAKLSAg
ICBpZiAodmFsdWUgPT0gU3BlY0ludDMyT25seSkKKyAgICBpZiAoKHZhbHVlICYgU3BlY0ludDMy
T25seSkgPT0gU3BlY0ludDMyT25seSkKICAgICAgICAgc3RyT3V0LnByaW50KCJJbnQzMiIpOwog
ICAgIGVsc2UgewogICAgICAgICBpZiAodmFsdWUgJiBTcGVjQm9vbEludDMyKQpAQCAtMjg1LDIw
ICsyODUsMjUgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVhbSwg
U3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIH0K
IAorI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAoKHZhbHVlICYgU3BlY0JpZ0ludCkgPT0gU3Bl
Y0JpZ0ludCkKICAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKLSNpZiBVU0UoQklHSU5U
MzIpCiAgICAgZWxzZSB7CiAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNCaWdJbnQzMikKICAgICAg
ICAgICAgIHN0ck91dC5wcmludCgiQmlnSW50MzIiKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgaXNUb3AgPSBmYWxzZTsKIAotICAgICAgICBpZiAodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkK
KyAgICAgICAgLy8gRG9uJ3QgcHJpbnQgQmlnSW50IGlmIGl0IGlzIGFscmVhZHkgaW1wbGllZCBi
eSBDZWxsCisgICAgICAgIGlmICgodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkgJiYgKCh2YWx1ZSAm
IFNwZWNDZWxsKSAhPSBTcGVjQ2VsbCkpCiAgICAgICAgICAgICBzdHJPdXQucHJpbnQoIkhlYXBC
aWdJbnQiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICB9
CisjZWxzZQorICAgIC8vIERvbid0IHByaW50IEJpZ0ludCBpZiBpdCBpcyBhbHJlYWR5IGltcGxp
ZWQgYnkgQ2VsbAorICAgIGlmICgodmFsdWUgJiBTcGVjQmlnSW50KSAmJiAoKHZhbHVlICYgU3Bl
Y0NlbGwpICE9IFNwZWNDZWxsKSkKKyAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKICNl
bmRpZgogCiAgICAgaWYgKHZhbHVlICYgU3BlY0RvdWJsZUltcHVyZU5hTikKQEAgLTMwOCwxMSAr
MzEzLDIwIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBvdXRTdHJlYW0sIFNw
ZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgICAgICBzdHJPdXQucHJpbnQoIkJvb2wiKTsKICAgICBl
bHNlCiAgICAgICAgIGlzVG9wID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHZhbHVlICYgU3BlY090
aGVyKQorCisgICAgaWYgKCh2YWx1ZSAmIFNwZWNPdGhlcikgPT0gU3BlY090aGVyKQogICAgICAg
ICBzdHJPdXQucHJpbnQoIk90aGVyIik7Ci0gICAgZWxzZQotICAgICAgICBpc1RvcCA9IGZhbHNl
OworICAgIGVsc2UgeworICAgICAgICBpZiAodmFsdWUgJiBTcGVjTnVsbCkKKyAgICAgICAgICAg
IHN0ck91dC5wcmludCgiTnVsbCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpc1RvcCA9
IGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNVbmRlZmluZWQpCisgICAgICAgICAg
ICBzdHJPdXQucHJpbnQoIlVuZGVmaW5lZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
c1RvcCA9IGZhbHNlOworICAgIH0KICAgICAKICAgICBpZiAodmFsdWUgJiBTcGVjRW1wdHkpCiAg
ICAgICAgIHN0ck91dC5wcmludCgiRW1wdHkiKTsKQEAgLTYzMiw4ICs2NDYsMTAgQEAgU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbUNlbGwodmFsdWUuYXNDZWxsKCkpOwogICAgIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOwotICAgIEFTU0VSVCh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKLSAgICByZXR1cm4gU3BlY090aGVyOworICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gU3BlY1VuZGVmaW5lZDsKKyAgICBB
U1NFUlQodmFsdWUuaXNOdWxsKCkpOworICAgIHJldHVybiBTcGVjTnVsbDsKIH0KIAogU3BlY3Vs
YXRlZFR5cGUgaW50NTJBd2FyZVNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCkBA
IC03MzcsOSArNzUzLDE0IEBAIFNwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0
bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5CiAgICAgcmV0dXJuIHR5
cGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZF
cXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCitTcGVjdWxhdGVkVHlw
ZSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUg
dHlwZSkKIHsKLSAgICB0eXBlID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRT
cGVjdWxhdGlvbnModHlwZSk7CisgICAgaWYgKHR5cGUgJiBTcGVjU3RyaW5nKQorICAgICAgICB0
eXBlIHw9IFNwZWNTdHJpbmc7CisKKyAgICAvLyAibnVsbCA9PSB1bmRlZmluZWQiIHJldHVybnMg
dHJ1ZS4KKyAgICBpZiAodHlwZSAmIFNwZWNPdGhlcikKKyAgICAgICAgdHlwZSB8PSBTcGVjT3Ro
ZXI7CiAKICAgICAvLyBCb29sZWFuIG9yIEJpZ0ludCBjYW4gYmUgY29udmVydGVkIHRvIE51bWJl
ciB3aGVuIHBlcmZvcm1pbmcgbm9uLXN0cmljdCBlcXVhbC4KICAgICBpZiAodHlwZSAmIChTcGVj
SW50QW55Rm9ybWF0IHwgU3BlY05vbkludEFzRG91YmxlIHwgU3BlY0Jvb2xlYW4gfCBTcGVjQmln
SW50KSkKQEAgLTc1MCwxNCArNzcxLDIwIEBAIHN0YXRpYyBpbmxpbmUgU3BlY3VsYXRlZFR5cGUg
bGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUCiAKIGJv
b2wgdmFsdWVzQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlIGEsIFNwZWN1bGF0ZWRUeXBlIGIp
CiB7Ci0gICAgYSA9IGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhhKTsK
LSAgICBiID0gbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKGIpOworICAg
IC8vIFN5bWJvbHMgY2FuIG9ubHkgYmUgZXF1YWwgdG8gZWFjaCBvdGhlcgorICAgIGlmIChpc1N5
bWJvbFNwZWN1bGF0aW9uKGEpICYmICEoYiAmIFNwZWNTeW1ib2wpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGlzU3ltYm9sU3BlY3VsYXRpb24oYikgJiYgIShhICYgU3BlY1N5bWJv
bCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBBbnl0aGluZyBjb3VsZCBi
ZSBlcXVhbCB0byBhIHN0cmluZy4KICAgICBpZiAoYSAmIFNwZWNTdHJpbmcpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGlmIChiICYgU3BlY1N0cmluZykKICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBhID0gbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKGEpOwor
ICAgIGIgPSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoYik7CiAgICAg
CiAgICAgLy8gSWYgYm90aCBzaWRlcyBhcmUgZGVmaW5pdGVseSBvbmx5IG9iamVjdHMsIHRoZW4g
ZXF1YWxpdHkgaXMgZmFpcmx5IHNhbmUuCiAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24oYSkg
JiYgaXNPYmplY3RTcGVjdWxhdGlvbihiKSkKQEAgLTc2OSw3ICs3OTYsNyBAQCBib29sIHZhbHVl
c0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSBhLCBTcGVjdWxhdGVkVHlwZSBiKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoYiAmIFNwZWNPYmplY3QpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIAorCiAgICAgLy8gTmVpdGhlciBzaWRlIGlzIGFuIG9iamVjdCBvciBzdHJpbmcs
IHNvIHRoZSB3b3JsZCBpcyByZWxhdGl2ZWx5IHNhbmUuCiAgICAgcmV0dXJuICEhKGEgJiBiKTsK
IH0KQEAgLTEwMTgsNiArMTA0NSwxMCBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21T
dHJpbmcoY29uc3QgY2hhciogc3BlY3VsYXRpb24pCiAgICAgICAgIHJldHVybiBTcGVjRnVsbE51
bWJlcjsKICAgICBpZiAoIXN0cm5jbXAoc3BlY3VsYXRpb24sICJTcGVjQm9vbGVhbiIsIHN0cmxl
bigiU3BlY0Jvb2xlYW4iKSkpCiAgICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKKyAgICBpZiAo
IXN0cm5jbXAoc3BlY3VsYXRpb24sICJTcGVjVW5kZWZpbmVkIiwgc3RybGVuKCJTcGVjVW5kZWZp
bmVkIikpKQorICAgICAgICByZXR1cm4gU3BlY1VuZGVmaW5lZDsKKyAgICBpZiAoIXN0cm5jbXAo
c3BlY3VsYXRpb24sICJTcGVjTnVsbCIsIHN0cmxlbigiU3BlY051bGwiKSkpCisgICAgICAgIHJl
dHVybiBTcGVjTnVsbDsKICAgICBpZiAoIXN0cm5jbXAoc3BlY3VsYXRpb24sICJTcGVjT3RoZXIi
LCBzdHJsZW4oIlNwZWNPdGhlciIpKSkKICAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKICAgICBp
ZiAoIXN0cm5jbXAoc3BlY3VsYXRpb24sICJTcGVjTWlzYyIsIHN0cmxlbigiU3BlY01pc2MiKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCmlu
ZGV4IDk2OTc3ODM1NTc0MS4uYzdiOTE2ZDgxYjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDE4ICs5NywyMCBAQCBzdGF0
aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnRBbnlGb3JtYXQgICAgICAgICAgICAg
ICAgICAgICAgPSBTcGVjSW50NQogCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNw
ZWNGdWxsTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjSW50QW55Rm9ybWF0IHwg
U3BlY0Z1bGxEb3VibGU7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyLCBJbnQ1Miwgb3IgYSBEb3Vi
bGUsIGFuZCB0aGUgRG91YmxlIGNhbiBiZSBpbXB1cmUgTmFOLgogc3RhdGljIGNvbnN0ZXhwciBT
cGVjdWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVs
bCA8PCA0MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVhbi4KLXN0YXRpYyBjb25zdGV4cHIg
U3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDF1
bGwgPDwgNDE7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgTnVsbCBvciBVbmRlZmluZWQuCitz
dGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNVbmRlZmluZWQgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAxdWxsIDw8IDQxOyAvLyBJdCdzIGRlZmluaXRlbHkgVW5kZWZpbmVkLgor
c3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjTnVsbCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMXVsbCA8PCA0MjsgLy8gSXQncyBkZWZpbml0ZWx5IE51bGwuCitzdGF0
aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSBTcGVjVW5kZWZpbmVkIHwgU3BlY051bGw7IC8vIEl0J3MgZGVmaW5pdGVseSBl
aXRoZXIgTnVsbCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBl
IFNwZWNNaXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjQm9vbGVhbiB8IFNw
ZWNPdGhlcjsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51bGwsIG9yIFVu
ZGVmaW5lZC4KLXN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDI7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBlbXB0eSB2YWx1ZSBtYXJrZXIuCi1zdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNw
ZWNIZWFwQmlnSW50ICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQzOyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBCaWdJbnQgdGhhdCBpcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAKLXN0YXRp
YyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0JpZ0ludDMyICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDF1bGwgPDwgNDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIHNtYWxsIEJpZ0ludCB0
aGF0IGlzIGlubGluZSB0aGUgSlNWYWx1ZQorc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlw
ZSBTcGVjRW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0MzsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KK3N0YXRpYyBjb25zdGV4cHIg
U3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBCaWdJbnQgICAgICAgICAgICAgICAgICAgICAgICA9IDF1
bGwgPDwgNDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJpZ0ludCB0aGF0IGlzIGFsbG9jYXRlZCBv
biB0aGUgaGVhcAorc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjQmlnSW50MzIg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NTsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgc21hbGwgQmlnSW50IHRoYXQgaXMgaW5saW5lIHRoZSBKU1ZhbHVlCiAjaWYgVVNFKEJJR0lO
VDMyKQogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjQmlnSW50ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gU3BlY0JpZ0ludDMyIHwgU3BlY0hlYXBCaWdJbnQ7CiAjZWxz
ZQogLy8gV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIFNwZWNCaWdJbnQzMi4gV2UgYXJlIHVzaW5nIFNw
ZWNCaWdJbnQgaW4gdmFyaW91cyBwbGFjZXMgbGlrZSBwcmVkaWN0aW9uLiBJZiB0aGlzIGluY2x1
ZGVzIFNwZWNCaWdJbnQzMiwgZml4dXAgcGhhc2UgaXMgY29uZnVzZWQgaWYgIVVTRShCSUdJTlQz
Mikgc2luY2UgaXQgaXMgbm90IHVzaW5nIEFueUJpZ0ludFVzZS4KIHN0YXRpYyBjb25zdGV4cHIg
U3BlY3VsYXRlZFR5cGUgU3BlY0JpZ0ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNw
ZWNIZWFwQmlnSW50OwogI2VuZGlmCi1zdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEYXRhVmlld09iamVjdCAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQ1OyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBKU0RhdGFWaWV3Lgorc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlw
ZSBTcGVjRGF0YVZpZXdPYmplY3QgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NjsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgSlNEYXRhVmlldy4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRl
ZFR5cGUgU3BlY1ByaW1pdGl2ZSAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNTdHJpbmcg
fCBTcGVjU3ltYm9sIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2MgfCBTcGVjQmlnSW50
OyAvLyBJdCdzIGFueSBub24tT2JqZWN0IEpTVmFsdWUuCiBzdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjRmlu
YWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcg
fCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdP
YmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3BlY0RhdGVPYmplY3QgfCBTcGVjUHJvbWlzZU9i
amVjdCB8IFNwZWNNYXBPYmplY3QgfCBTcGVjU2V0T2JqZWN0IHwgU3BlY1dlYWtNYXBPYmplY3Qg
fCBTcGVjV2Vha1NldE9iamVjdCB8IFNwZWNQcm94eU9iamVjdCB8IFNwZWNEZXJpdmVkQXJyYXkg
fCBTcGVjT2JqZWN0T3RoZXIgfCBTcGVjRGF0YVZpZXdPYmplY3Q7IC8vIEJpdG1hc2sgdXNlZCBm
b3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29u
c3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSBTcGVjT2JqZWN0IHwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQ2VsbE90aGVy
IHwgU3BlY0hlYXBCaWdJbnQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KQEAgLTQ1MSw3
ICs0NTMsNyBAQCBpbmxpbmUgYm9vbCBpc05laXRoZXJEb3VibGVOb3JIZWFwQmlnSW50Tm9yU3Ry
aW5nU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdHlwZQogCiBpbmxpbmUgYm9vbCBpc090aGVy
U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID09
IFNwZWNPdGhlcjsKKyAgICByZXR1cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNPdGhlcik7
CiB9CiAKIGlubGluZSBib29sIGlzTWlzY1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVl
KQpAQCAtNDU5LDExICs0NjEsNiBAQCBpbmxpbmUgYm9vbCBpc01pc2NTcGVjdWxhdGlvbihTcGVj
dWxhdGVkVHlwZSB2YWx1ZSkKICAgICByZXR1cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNN
aXNjKTsKIH0KIAotaW5saW5lIGJvb2wgaXNPdGhlck9yRW1wdHlTcGVjdWxhdGlvbihTcGVjdWxh
dGVkVHlwZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gIXZhbHVlIHx8IHZhbHVlID09IFNwZWNPdGhl
cjsKLX0KLQogaW5saW5lIGJvb2wgaXNFbXB0eVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZh
bHVlKQogewogICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjRW1wdHk7CkBAIC01MDMsNiArNTAwLDE2
IEBAIGlubGluZSBib29sIG1lcmdlU3BlY3VsYXRpb24oVCYgbGVmdCwgU3BlY3VsYXRlZFR5cGUg
cmlnaHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5saW5lIFNwZWN1bGF0ZWRUeXBlIGlu
dGVyc2VjdGlvbk9mU3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIGxlZnQsIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0ICYgcmlnaHQ7Cit9CisKK2lubGluZSB2b2lk
IGZpbHRlclNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlJiBsZWZ0LCBTcGVjdWxhdGVkVHlwZSBy
aWdodCkKK3sKKyAgICBsZWZ0ICY9IHJpZ2h0OworfQorCiBpbmxpbmUgYm9vbCBzcGVjdWxhdGlv
bkNoZWNrZWQoU3BlY3VsYXRlZFR5cGUgYWN0dWFsLCBTcGVjdWxhdGVkVHlwZSBkZXNpcmVkKQog
ewogICAgIHJldHVybiAoYWN0dWFsIHwgZGVzaXJlZCkgPT0gZGVzaXJlZDsKQEAgLTUyNCw2ICs1
MzEsNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShUeXBl
ZEFycmF5VHlwZSk7IC8vIG9ubHkgdmFsaWQgZm9yCiBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5
VHlwZUZyb21TcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSk7CiAKIFNwZWN1bGF0ZWRUeXBlIGxl
YXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRU
eXBlKTsKK1NwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0
aW9ucyhTcGVjdWxhdGVkVHlwZSk7CiAKIGJvb2wgdmFsdWVzQ291bGRCZUVxdWFsKFNwZWN1bGF0
ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCAzYjYxYTVm
ZDE5ODkuLmQ4OGEwMWMxMDgyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtNzEwLDkgKzcxMCwx
NSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRl
RWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOwogICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIE5vdENlbGxOb3JCaWdJbnRVc2U6
IHsKLSAgICAgICAgICAgIGlmICh0eXBlICYgU3BlY090aGVyKSB7Ci0gICAgICAgICAgICAgICAg
dHlwZSAmPSB+U3BlY090aGVyOwotICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0RvdWJsZVB1
cmVOYU4gfCBTcGVjQm9vbEludDMyOyAvLyBOdWxsIGJlY29tZXMgemVybywgdW5kZWZpbmVkIGJl
Y29tZXMgTmFOLgorICAgICAgICAgICAgaWYgKHR5cGUgJiBTcGVjTnVsbCkgeworICAgICAgICAg
ICAgICAgIHR5cGUgJj0gflNwZWNOdWxsOworICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0Jv
b2xJbnQzMjsgLy8gTnVsbCBiZWNvbWVzIHplcm8KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
cHJvcGVybHkgcmVjb3JkIGl0IGFzIGEgY29uc3RhbnQKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0eXBlICYgU3BlY1VuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIHR5cGUgJj0g
flNwZWNVbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgdHlwZSB8PSBTcGVjRG91YmxlUHVyZU5h
TjsgLy8gVW5kZWZpbmVkIGJlY29tZXMgTmFOLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBw
cm9wZXJseSByZWNvcmQgaXQgYXMgYSBjb25zdGFudAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKHR5cGUgJiBTcGVjQm9vbGVhbikgewogICAgICAgICAgICAgICAgIHR5cGUgJj0gflNw
ZWNCb29sZWFuOwpAQCAtMTU5OSw3ICsxNjA1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgdGhlIG1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5lZCB3
YXRjaHBvaW50IHRoaW5neS4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDQ0NTYKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCEo
Y2hpbGQubV90eXBlICYgKFNwZWNPdGhlciB8IFNwZWNPYmplY3RPdGhlcikpKSB7CisgICAgICAg
ICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiAoU3BlY1VuZGVmaW5lZCB8IFNwZWNPYmplY3RPdGhl
cikpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNl
KSk7CiAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTYxOSwxOSArMTYyNSwxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgICAgICAgICAgLy8gSXMgdGhlIGNoaWxkJ3MgdHlwZSBhbiBvYmplY3QgdGhhdCBpc24n
dCBhbiBvdGhlci1vYmplY3QgKGkuZS4gb2JqZWN0IHRoYXQgY291bGQKICAgICAgICAgICAgIC8v
IGhhdmUgbWFzcXVhcmVkZXMtYXMtdW5kZWZpbmVkIHRyYXBzKSBhbmQgaXNuJ3QgYSBmdW5jdGlv
bj8gVGhlbjogd2Ugc2hvdWxkIGZvbGQKICAgICAgICAgICAgIC8vIHRoaXMgdG8gdHJ1ZS4KLSAg
ICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmIH4oU3BlY09iamVjdCAtIFNwZWNPYmplY3RP
dGhlciAtIFNwZWNGdW5jdGlvbikpKSB7CisgICAgICAgICAgICAvLyBXZSBhbHNvIGZvbGQgdG8g
dHJ1ZSBmb3IgTnVsbC4KKyAgICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmIH4oKFNwZWNP
YmplY3QgLSBTcGVjT2JqZWN0T3RoZXIgLSBTcGVjRnVuY3Rpb24pIHwgU3BlY051bGwpKSkgewog
ICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbih0cnVlKSk7CiAgICAg
ICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIElzIHRoZSBj
aGlsZCdzIHR5cGUgZGVmaW5pdGVseSBub3QgZWl0aGVyIG9mOiBhbiBvYmplY3QgdGhhdCBpc24n
dCBhIGZ1bmN0aW9uLAotICAgICAgICAgICAgLy8gb3IgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxs
PyBUaGVuOiB3ZSBzaG91bGQgZm9sZCB0aGlzIHRvIGZhbHNlLiBUaGlzIG1lYW5zCisgICAgICAg
ICAgICAvLyBvciBudWxsPyBUaGVuOiB3ZSBzaG91bGQgZm9sZCB0aGlzIHRvIGZhbHNlLiBUaGlz
IG1lYW5zCiAgICAgICAgICAgICAvLyBmb3IgZXhhbXBsZSB0aGF0IGlmIGl0J3MgYW55IG5vbi1m
dW5jdGlvbiBvYmplY3QsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGhhdmUKLSAgICAgICAgICAgIC8v
IG1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5lZCB0cmFwcywgdGhlbiB3ZSBkb24ndCBmb2xkLiBJdCBh
bHNvIG1lYW5zIHdlIHdvbid0IGZvbGQKLSAgICAgICAgICAgIC8vIGlmIGl0J3MgdW5kZWZpbmVk
LW9yLW51bGwsIHNpbmNlIHRoZSB0eXBlIGJpdHMgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2Vlbgot
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkICh3aGljaCBzaG91bGQgZm9sZCB0byBmYWxzZSkgYW5k
IG51bGwgKHdoaWNoIHNob3VsZCBmb2xkIHRvIHRydWUpLgotICAgICAgICAgICAgaWYgKCEoY2hp
bGQubV90eXBlICYgKChTcGVjT2JqZWN0IC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNPdGhlcikpKSB7
CisgICAgICAgICAgICAvLyBtYXNxdWVyYWRlcy1hcy11bmRlZmluZWQgdHJhcHMsIHRoZW4gd2Ug
ZG9uJ3QgZm9sZC4KKyAgICAgICAgICAgIC8vIFdlIGFsc28gZm9sZCB0byBmYWxzZSBmb3IgVW5k
ZWZpbmVkLgorICAgICAgICAgICAgaWYgKCEoY2hpbGQubV90eXBlICYgKChTcGVjT2JqZWN0IC0g
U3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxsKSkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1Nl
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTc4LDkgKzE5ODQsOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAobGVmdFR5cGUgPT0gU3BlY090aGVyKQorICAgICAgICAg
ICAgaWYgKCEobGVmdFR5cGUgJiB+U3BlY090aGVyKSkKICAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAobGVmdFR5cGUsIHJpZ2h0VHlwZSk7Ci0gICAgICAgICAgICBpZiAocmlnaHRUeXBlID09IFNw
ZWNPdGhlcikgeworICAgICAgICAgICAgaWYgKCEocmlnaHRUeXBlICYgflNwZWNPdGhlcikpIHsK
ICAgICAgICAgICAgICAgICAvLyBVbmRlZmluZWQgYW5kIE51bGwgYXJlIGFsd2F5cyBlcXVhbCB3
aGVuIGNvbXBhcmVkIHRvIGVhY2hvdGhlci4KICAgICAgICAgICAgICAgICBpZiAoIShsZWZ0VHlw
ZSAmIH5TcGVjT3RoZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUs
IGpzQm9vbGVhbih0cnVlKSk7CkBAIC0yMzgwLDcgKzIzODYsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9i
YmVyTGltaQogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlcik7CisgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyKTsgLy8gRklYTUU6IHdoZW4gY2FuIHRoaXMg
bm90IGp1c3QgYmUganNVbmRlZmluZWQoKT8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CkBAIC0yNDE1LDcgKzI0MjEsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAg
ICAgICAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAg
ICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5IHwgU3Bl
Y090aGVyKTsKKyAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0ludDMyT25seSB8IFNwZWNVbmRlZmluZWQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjQyNyw3ICsyNDMzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5dGVj
b2RlRG91YmxlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0
T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewogICAgICAgICAgICAgICAgIGlmICghIShub2RlLT5mbGFn
cygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpKQotICAgICAgICAgICAgICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY090aGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRl
Y29kZURvdWJsZSB8IFNwZWNVbmRlZmluZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZURv
dWJsZSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI1ODMsNyArMjU4OSw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbE91dE9mQm91bmRzKQotICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZShTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIHJlc3Vs
dC5tZXJnZShTcGVjVW5kZWZpbmVkKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHJl
c3VsdC52YWx1ZSgpKQogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3Rh
bnRGb2xkaW5nKHRydWUpOwpAQCAtMjYyNywxMiArMjYzMywxMiBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9i
YmVyTGltaQogICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ0V4cCB8fCByZWdFeHAtPmhhc0lu
ZGljZXMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQobV9ncmFw
aC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVdpdGhJ
bmRpY2VzU3RydWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2Rl
LCBzdHJ1Y3R1cmVTZXQpOwotICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1lcmdl
KFNwZWNPdGhlcik7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWVyZ2UoU3Bl
Y090aGVyKTsgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIFNwZWNVbmRlZmluZWQ/CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJy
YXkpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkp
OyAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgU3BlY1VuZGVmaW5lZD8KICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CkBAIC0yNjQ1LDEyICsyNjUxLDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3Q6CiAgICAgICAgIEFTU0VS
VChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gUmVnRXhwT2JqZWN0VXNlKTsKICAgICAgICAg
QVNTRVJUKG5vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UgfHwgbm9kZS0+Y2hp
bGQzKCkudXNlS2luZCgpID09IEtub3duU3RyaW5nVXNlKTsKLSAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIFNw
ZWNVbmRlZmluZWQ/CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBNYXRjaEZhc3RH
bG9iYWw6CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSk7Ci0gICAg
ICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CisgICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7IC8vIEZJWE1FOiBT
aG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKQEAgLTM4NTQsNyArMzg2MCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPYmpl
Y3QgfCBTcGVjT3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0
IHwgU3BlY090aGVyKTsgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIFNwZWNVbmRlZmluZWQ/CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00Mjg3LDExICs0MjkzLDExIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdl
dEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZTogewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2Rl
LCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY1N0cmluZyB8IFNwZWNOdWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2Rl
LCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY1N0cmluZyB8IFNwZWNOdWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
VG9JbmRleFN0cmluZzogewpAQCAtNDQzMSw3ICs0NDM3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJl
ckxpbWkKICAgICAgICAgaWYgKG5vZGUtPmludHJpbnNpYygpID09IENQVVJkdHNjSW50cmluc2lj
KQogICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY090aGVyKTsKKyAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
VW5kZWZpbmVkKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrVHJhcHM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGY4
MDIzN2NjODM0My4uMTUxMWI0OTBlOTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNTE1Miw3ICs1MTUyLDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlcigpLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGws
CiAgICAgICAgICAgICBvc3JFeGl0SW5kZXgsIHNldHRlciwgbnVtYmVyT2ZQYXJhbWV0ZXJzIC0g
MSwgcmVnaXN0ZXJPZmZzZXQsCi0gICAgICAgICAgICAqdmFyaWFudC5jYWxsTGlua1N0YXR1cygp
LCBTcGVjT3RoZXIsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICp2YXJpYW50LmNhbGxMaW5rU3Rh
dHVzKCksIFNwZWNPdGhlciwgZWNtYU1vZGUpOyAvLyBGSVhNRTogaXMgU3BlY090aGVyIHRoZSBy
aWdodCBjaG9pY2UgaGVyZT8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggMTExMDA4MjYwMzk4Li4xZjhjOGM2MTc4
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xNTEzLDkgKzE1
MTMsMTIgQEAgRnJvemVuVmFsdWUqIEdyYXBoOjpib3R0b21WYWx1ZU1hdGNoaW5nU3BlY3VsYXRp
b24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVj
Tm9uZSkKICAgICAgICAgcmV0dXJuIGZyZWV6ZShKU1ZhbHVlKCkpOwogCi0gICAgaWYgKHNwZWN1
bGF0aW9uQ29udGFpbnMocHJlZGljdGlvbiwgU3BlY090aGVyKSkKKyAgICBpZiAoc3BlY3VsYXRp
b25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjTnVsbCkpCiAgICAgICAgIHJldHVybiBmcmVlemUo
anNOdWxsKCkpOwogCisgICAgaWYgKHNwZWN1bGF0aW9uQ29udGFpbnMocHJlZGljdGlvbiwgU3Bl
Y1VuZGVmaW5lZCkpCisgICAgICAgIHJldHVybiBmcmVlemUoanNVbmRlZmluZWQoKSk7CisKICAg
ICBpZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjQm9vbGVhbikpCiAgICAg
ICAgIHJldHVybiBmcmVlemUoanNCb29sZWFuKHRydWUpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCmluZGV4IDc2ZjlkYjgyZjkxMS4uNzEwYjkyYWFmMmRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC0xMDQwLDYgKzEwNDAsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGNsZWFyQ1BTQ0ZHRGF0YSgpOwogCisgICAgY29uc3QgVmVjdG9yPEJhc2ljQmxv
Y2sqLCAxPiYgcm9vdHMoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RzOyB9CiAgICAgYm9vbCBpc1Jv
b3QoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFtX2lzSW5TU0FDb252ZXJzaW9uLCAiVGhpcyBpcyBub3Qgd3JpdHRlbiB0byB3b3Jr
IGR1cmluZyBTU0EgY29udmVyc2lvbi4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggNDMy
OWJlNWE1ZmM5Li4yZWM2YjE4MWNkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MjEgKzI4LDI5IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Jsb2Nr
TWFwLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCiBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZUZpeFBvaW50TG9vcHMgPSBmYWxzZTsKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlR2V0TG9jYWwgPSBmYWxzZTsKIAogY2xhc3MgUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIFByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwg
InByZWRpY3Rpb24gcHJvcGFnYXRpb24iKQorICAgICAgICAsIG1fdHlwZXNBdEhlYWQoZ3JhcGgp
CisgICAgICAgICwgbV9ibG9ja3NUb1Zpc2l0KG1fZ3JhcGgubnVtQmxvY2tzKCkpCiAgICAgewor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgICAgICBtX3R5cGVzQXRIZWFkW2Jsb2NrXSA9IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIFNwZWNO
b25lKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBib29sIHJ1bigpCkBAIC01Niw5ICs2
NCwxNiBAQCBwdWJsaWM6CiAKICAgICAgICAgcHJvY2Vzc0ludmFyaWFudHMoKTsKIAorICAgICAg
ICBpbml0aWFsaXplVHlwZXNBdEhlYWQoKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9ncmFwaC5yb290cygpKQorICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNr
U2V0KGJsb2NrLT5pbmRleCk7CiAgICAgICAgIHByb3BhZ2F0ZVRvRml4cG9pbnQoKTsKICAgICAg
ICAgCiAgICAgICAgIG1fcGFzcyA9IFJhcmVDYXNlUGFzczsKKyAgICAgICAgLy8gR2V0dGluZyBy
aWQgb2YgdGhpcyBzZWNvbmQgcGFzcyBhbHRvZ2V0aGVyIHdvdWxkIGJlIGF0dHJhY3RpdmUuCisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpCisgICAgICAgICAgICBtX2Jsb2Nrc1RvVmlzaXQucXVpY2tTZXQoYmxvY2stPmluZGV4
KTsKICAgICAgICAgcHJvcGFnYXRlVG9GaXhwb2ludCgpOwogICAgICAgICAKICAgICAgICAgbV9w
YXNzID0gRG91YmxlVm90aW5nUGFzczsKQEAgLTcyLDcgKzg3LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGlmICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB0ZXJyaWJsZSwgd2FzIHByb3BhZ2F0ZUZvcndh
cmQoKTsKKyAgICAgICAgICAgIC8vIEF0IHRoZSB2ZXJ5IGxlYXN0LCBJIHNob3VsZCBrZWVwIHRy
YWNrIG9mIHdoaWNoIEJCcyBnb3QgZnJlc2ggaW5mb3JtYXRpb24gZnJvbSBkb1JvdW5kT2ZEb3Vi
bGVWb3RpbmcoKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0
LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAgICAgICBwcm9wYWdhdGVUb0ZpeHBvaW50
KCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2VG
aXhQb2ludExvb3BzKQpAQCAtODQsMzAgKzEwMywyNDEgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICB2b2lkIHByb3BhZ2F0ZVRvRml4cG9pbnQoKQogICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOwogICAgICAgICBkbyB7CiAg
ICAgICAgICAgICBpZiAodmVyYm9zZUZpeFBvaW50TG9vcHMpCiAgICAgICAgICAgICAgICAgKytj
b3VudGVyOwogCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKIAotICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBu
ZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAg
ICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUg
bGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKLSAgICAgICAgICAgIC8vIGNh
dXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFj
a3dhcmQgZmxvdy4KLSAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6
ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50Ci0gICAgICAgICAgICAvLyBm
b3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxv
dy4KLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRl
QmFja3dhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYmxvY2tJbmRleCA6IG1fYmxvY2tzVG9WaXNpdCkgeworICAgICAgICAgICAg
ICAgIG1fYmxvY2tzVG9WaXNpdC5xdWlja0NsZWFyKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHByb3BhZ2F0ZVRocm91Z2hCbG9jayhibG9jayk7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogCiAgICAgICAgIGlmICh2ZXJib3NlRml4UG9pbnRMb29w
cykKICAgICAgICAgICAgIGRhdGFMb2coIkl0ZXJhdGVkICIsIGNvdW50ZXIsICIgdGltZXMgaW4g
cHJvcGFnYXRlVG9GaXhwb2ludC5cbiIpOwogICAgIH0KKworICAgIGJvb2wgcHJvcGFnYXRlVGhy
b3VnaEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgT3BlcmFuZHM8U3Bl
Y3VsYXRlZFR5cGU+IGN1cnJlbnRUeXBlcyA9IG1fdHlwZXNBdEhlYWRbYmxvY2tdOworICAgICAg
ICBPcGVyYW5kczx1bnNpZ25lZD4gbGFzdFRpbWVPdmVyd3JpdHRlbiB7IE9wZXJhbmRzTGlrZSwg
Y3VycmVudFR5cGVzLCAwIH07CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewor
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBwcm9wYWdhdGUo
bm9kZSwgY3VycmVudFR5cGVzLCBsYXN0VGltZU92ZXJ3cml0dGVuKTsKKyAgICAgICAgfQorCisg
ICAgICAgIE5vZGUqIHRlcm1pbmFsID0gYmxvY2stPnRlcm1pbmFsKCk7CisgICAgICAgIGlmICh0
ZXJtaW5hbC0+b3AoKSA9PSBCcmFuY2gpCisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlVG9T
dWNjZXNzb3JzVGhyb3VnaEJyYW5jaCh0ZXJtaW5hbCwgY3VycmVudFR5cGVzLCBsYXN0VGltZU92
ZXJ3cml0dGVuKTsKKyAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZVRvU3VjY2Vzc29yc0dlbmVyaWMo
YmxvY2ssIGN1cnJlbnRUeXBlcyk7CisgICAgfQorCisgICAgYm9vbCBwcm9wYWdhdGVUb1N1Y2Nl
c3NvcnNHZW5lcmljKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBPcGVyYW5kczxTcGVjdWxhdGVk
VHlwZT4mIGN1cnJlbnRUeXBlcykKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghIXN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbnNBdEhlYWQoc3VjY2Vzc29yLCBjdXJyZW50VHlwZXMpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBjaGFuZ2VkIHRoZSBvbGQgdHlwZXMgYXQgaGVhZC4KKyAgICAvLyBJdCBh
bHNvIHVwZGF0ZXMgbV9ibG9ja3NUb1Zpc2l0LgorICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uc0F0
SGVhZChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBp
bmNvbWluZ1R5cGVzKQorICAgIHsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBv
bGRUeXBlcyA9IG1fdHlwZXNBdEhlYWRbYmxvY2tdOworICAgICAgICBBU1NFUlQob2xkVHlwZXMu
bnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBpbmNvbWluZ1R5cGVzLm51bWJlck9mQXJndW1lbnRzKCkp
OworICAgICAgICBBU1NFUlQob2xkVHlwZXMubnVtYmVyT2ZMb2NhbHMoKSA9PSBpbmNvbWluZ1R5
cGVzLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICBBU1NFUlQob2xkVHlwZXMubnVtYmVyT2ZU
bXBzKCkgPT0gaW5jb21pbmdUeXBlcy5udW1iZXJPZlRtcHMoKSk7CisKKyAgICAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFR5cGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3BlY3VsYXRpb24ob2xk
VHlwZXNbaV0sIGluY29taW5nVHlwZXNbaV0pOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBwcm9wYWdhdGVUb1N1Y2Nlc3NvcnNUaHJv
dWdoQnJhbmNoKE5vZGUqIGJyYW5jaCwgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBjdXJyZW50
VHlwZXMsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVkPiBsYXN0VGltZU92ZXJ3cml0dGVuKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJyYW5jaC0+b3AoKSA9PSBCcmFuY2gpOworCisgICAgICAgIE9w
ZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiB0eXBlc0Fsb25nVHJ1ZUJyYW5jaCA9IGN1cnJlbnRUeXBl
czsKKyAgICAgICAgLy8gV2UgcmV1c2UgY3VycmVudFR5cGVzIGZvciB0eXBlc0Fsb25nRmFsc2VC
cmFuY2gsIGluc3RlYWQgb2YgbWFraW5nIGFub3RoZXIgY29weS4KKyAgICAgICAgZmlsdGVyU3Bl
Y3VsYXRpb25zQmFzZWRPblRydXRoaW5lc3MoYnJhbmNoLT5jaGlsZDEoKS5ub2RlKCksIHR5cGVz
QWxvbmdUcnVlQnJhbmNoLCBjdXJyZW50VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb25zQXRIZWFkKGJyYW5jaC0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKHRydWUpLCB0eXBlc0Fs
b25nVHJ1ZUJyYW5jaCk7CisgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uc0F0SGVh
ZChicmFuY2gtPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihmYWxzZSksIGN1cnJlbnRUeXBlcyk7Cisg
ICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIHZvaWQgZmlsdGVyU3BlY3VsYXRp
b25zQmFzZWRPblRydXRoaW5lc3MoTm9kZSogbm9kZSwgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
JiB0cnV0aHlUeXBlcywgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IGZhbHN5VHlwZXMsIGNvbnN0
IE9wZXJhbmRzPHVuc2lnbmVkPiBsYXN0VGltZU92ZXJ3cml0dGVuKQorICAgIHsKKyAgICAgICAg
YXV0byBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbCA9IFsmXSAoTm9k
ZSogbWF5YmVHZXRMb2NhbCwgU3BlY3VsYXRlZFR5cGUgdHJ1dGh5RmlsdGVyLCBTcGVjdWxhdGVk
VHlwZSBmYWxzeUZpbHRlcikgeworICAgICAgICAgICAgaWYgKG1heWJlR2V0TG9jYWwtPm9wKCkg
IT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgT3BlcmFu
ZCBvcGVyYW5kID0gbWF5YmVHZXRMb2NhbC0+b3BlcmFuZCgpOworICAgICAgICAgICAgLy8gSGF2
aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgR2V0TG9jYWwgZG9lcyBub3QgdGVsbCB1cyBhbnl0
aGluZyBhYm91dCB0aGUgb3BlcmFuZCBhdCB0aGUgZW5kIG9mIHRoZSBibG9jayBpZiB0aGVyZSBp
cyBhbiBpbnRlcnZlbmluZyBTZXRMb2NhbC4KKyAgICAgICAgICAgIGlmIChsYXN0VGltZU92ZXJ3
cml0dGVuLm9wZXJhbmQob3BlcmFuZCkgPiBtYXliZUdldExvY2FsLT5pbmRleCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uKHRydXRoeVR5
cGVzLm9wZXJhbmQob3BlcmFuZCksIHRydXRoeUZpbHRlcik7CisgICAgICAgICAgICBmaWx0ZXJT
cGVjdWxhdGlvbihmYWxzeVR5cGVzLm9wZXJhbmQob3BlcmFuZCksIGZhbHN5RmlsdGVyKTsKKyAg
ICAgICAgfTsKKworICAgICAgICAvLyBGSVhNRTogcHJldHR5IG11Y2ggYWxsIG9mIHRoZXNlIGNh
c2VzIGNvdWxkIHNoYXJlIGNvZGUgd2l0aCB0aGUgQWJzdHJhY3RJbnRlcnByZXRlci4KKyAgICAg
ICAgLy8gRklYTUU6IGFsc28gaW4gdGhlb3J5IHdlIGNvdWxkIGRvIG11Y2ggZmFuY2llciB0aGlu
Z3MsIGxpa2Ugb3B0aW1pemluZyBhIHN3aXRjaCBvbiB0aGUgcmVzdWx0IG9mIGEgVHlwZU9mLgor
ICAgICAgICAvLyAgIEl0IGZlZWxzIG92ZXJraWxsIHVubGVzcyB3ZSBhY3R1YWxseSBzZWUgdGhh
dCBpbiBhIG1ham9yIGJlbmNobWFyaywgb3IgY2FuIHNoYXJlIHRoYXQgY29kZSB3aXRoIHRoZSBB
SS4KKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNhbm5vdEJlVHJ1dGh5VHlwZSA9IFNwZWNE
b3VibGVOYU4gfCBTcGVjT3RoZXI7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9u
T3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCB+Y2Fubm90QmVUcnV0aHlUeXBlLCBTcGVjSGVhcFRv
cCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6IHsKKyAgICAgICAgICAgIE5vZGUqIGxlZnROb2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpOworICAgICAgICAgICAgaWYgKGxlZnROb2RlLT5vcCgpICE9IEdldExvY2FsICYmIHJpZ2h0
Tm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRQcmVkaWN0aW9uID0gbGVmdE5vZGUtPnByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0UHJlZGljdGlvbiA9IHJpZ2h0Tm9k
ZS0+cHJlZGljdGlvbigpOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHJ1ZVBy
ZWRpY3Rpb24gPSBpbnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhsZWZ0UHJlZGljdGlvbiwgbGVh
c3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMocmlnaHRQcmVkaWN0
aW9uKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFRydWVQcmVkaWN0aW9uID0g
aW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMocmlnaHRQcmVkaWN0aW9uLCBsZWFzdFVwcGVyQm91
bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhsZWZ0UHJlZGljdGlvbikpOworCisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0RmFsc2VQcmVkaWN0aW9uID0gbGVmdFByZWRp
Y3Rpb247CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodEZhbHNlUHJlZGljdGlvbiA9
IHJpZ2h0UHJlZGljdGlvbjsKKyAgICAgICAgICAgIGlmIChsZWZ0UHJlZGljdGlvbiA9PSBTcGVj
TnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihyaWdodEZhbHNlUHJlZGlj
dGlvbiwgflNwZWNOdWxsKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRQcmVkaWN0aW9uID09
IFNwZWNVbmRlZmluZWQpCisgICAgICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb24ocmlnaHRG
YWxzZVByZWRpY3Rpb24sIH5TcGVjVW5kZWZpbmVkKTsKKyAgICAgICAgICAgIGlmIChyaWdodFBy
ZWRpY3Rpb24gPT0gU3BlY051bGwpCisgICAgICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb24o
bGVmdEZhbHNlUHJlZGljdGlvbiwgflNwZWNOdWxsKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJp
Z2h0UHJlZGljdGlvbiA9PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxh
dGlvbihsZWZ0RmFsc2VQcmVkaWN0aW9uLCB+U3BlY1VuZGVmaW5lZCk7CisKKyAgICAgICAgICAg
IGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKGxlZnROb2RlLCBsZWZ0
VHJ1ZVByZWRpY3Rpb24sIGxlZnRGYWxzZVByZWRpY3Rpb24pOworICAgICAgICAgICAgZmlsdGVy
U3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwocmlnaHROb2RlLCByaWdodFRydWVQ
cmVkaWN0aW9uLCByaWdodEZhbHNlUHJlZGljdGlvbik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAgICAgICAgICAgIC8vIFRoZSBs
b2dpYyBvZiB0aGlzIGNhc2UgY2xvc2VseSBmb2xsb3dzIHZhbHVlc0NvdWxkQmVFcXVhbCgpIGlu
IFNwZWN1bGF0ZWRUeXBlLmNwcAorICAgICAgICAgICAgTm9kZSogbGVmdE5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBOb2RlKiByaWdodE5vZGUgPSBub2RlLT5jaGls
ZDIoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobGVmdE5vZGUtPm9wKCkgIT0gR2V0TG9jYWwg
JiYgcmlnaHROb2RlLT5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdFByZWRpY3Rpb24gPSBsZWZ0Tm9kZS0+cHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRQcmVkaWN0aW9uID0g
cmlnaHROb2RlLT5wcmVkaWN0aW9uKCk7CisKKyAgICAgICAgICAgIC8vIE9ubHkgYSBzeW1ib2wg
Y2FuIGJlIGVxdWFsIHRvIGEgc3ltYm9sCisgICAgICAgICAgICBpZiAobGVmdFByZWRpY3Rpb24g
PT0gU3BlY1N5bWJvbCkgeworICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25P
dmVyd3JpdHRlbkdldExvY2FsKHJpZ2h0Tm9kZSwgU3BlY1N5bWJvbCwgU3BlY0hlYXBUb3ApOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChy
aWdodFByZWRpY3Rpb24gPT0gU3BlY1N5bWJvbCkgeworICAgICAgICAgICAgICAgIGZpbHRlclNw
ZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKGxlZnROb2RlLCBTcGVjU3ltYm9sLCBT
cGVjSGVhcFRvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBQcmV0dHkgbXVjaCBhbnl0aGluZyBjYW4gYmUgZXF1YWwgdG8gYSBTdHJp
bmcsIHNvIHdlIGdldCBubyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaWYgKChsZWZ0UHJlZGlj
dGlvbiAmIFNwZWNTdHJpbmcpIHx8IChyaWdodFByZWRpY3Rpb24gJiBTcGVjU3RyaW5nKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIGJvdGggc2lkZXMgYXJl
IGRlZmluaXRlbHkgb25seSBvYmplY3RzLCB0aGVuIGVxdWFsaXR5IGlzIGZhaXJseSBzYW5lLgor
ICAgICAgICAgICAgLy8gU2FtZSBpZiBuZWl0aGVyIGNhbiBiZSBhbiBvYmplY3QKKyAgICAgICAg
ICAgIGJvb2wgaXNTYW5lID0gaXNPYmplY3RTcGVjdWxhdGlvbihsZWZ0UHJlZGljdGlvbikgJiYg
aXNPYmplY3RTcGVjdWxhdGlvbihyaWdodFByZWRpY3Rpb24pOworICAgICAgICAgICAgaXNTYW5l
IHw9ICEobGVmdFByZWRpY3Rpb24gJiBTcGVjT2JqZWN0KSAmJiAhKHJpZ2h0UHJlZGljdGlvbiAm
IFNwZWNPYmplY3QpOworICAgICAgICAgICAgaWYgKCFpc1NhbmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHJ1ZVByZWRpY3Rpb24g
PSBpbnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhsZWZ0UHJlZGljdGlvbiwgbGVhc3RVcHBlckJv
dW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKHJpZ2h0UHJlZGljdGlvbikpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUcnVlUHJlZGljdGlvbiA9IGludGVyc2VjdGlvbk9mU3Bl
Y3VsYXRpb25zKHJpZ2h0UHJlZGljdGlvbiwgbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3Bl
Y3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlv
bklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChsZWZ0Tm9kZSwgbGVmdFRydWVQcmVkaWN0aW9uLCBT
cGVjSGVhcFRvcCk7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0
ZW5HZXRMb2NhbChyaWdodE5vZGUsIHJpZ2h0VHJ1ZVByZWRpY3Rpb24sIFNwZWNIZWFwVG9wKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRvQm9vbGVhbjoK
KyAgICAgICAgICAgIHJldHVybiBmaWx0ZXJTcGVjdWxhdGlvbnNCYXNlZE9uVHJ1dGhpbmVzcyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIHRydXRoeVR5cGVzLCBmYWxzeVR5cGVzLCBsYXN0VGltZU92
ZXJ3cml0dGVuKTsKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJu
IGZpbHRlclNwZWN1bGF0aW9uc0Jhc2VkT25UcnV0aGluZXNzKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgZmFsc3lUeXBlcywgdHJ1dGh5VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAgICAg
ICBjYXNlIElzVW5kZWZpbmVkT3JOdWxsOgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25J
Zk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY090aGVyLCB+U3BlY090aGVyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBJc0Jvb2xlYW46CisgICAgICAgICAgICBm
aWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBTcGVjQm9vbGVh
biwgflNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBJc051
bWJlcjoKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExv
Y2FsKG5vZGUsIFNwZWNGdWxsTnVtYmVyLCB+U3BlY0Z1bGxOdW1iZXIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIElzQmlnSW50OgorICAgICAgICAgICAgZmlsdGVyU3BlY3Vs
YXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY0JpZ0ludCwgflNwZWNCaWdJ
bnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzVHlwZWRBcnJheVZpZXc6
CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChu
b2RlLCBTcGVjVHlwZWRBcnJheVZpZXcsIH5TcGVjVHlwZWRBcnJheVZpZXcpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICAgICAgZmlsdGVyU3Bl
Y3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY09iamVjdCwgflNwZWNP
YmplY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzRW1wdHk6CisgICAg
ICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBT
cGVjRW1wdHksIH5TcGVjRW1wdHkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFR5cGVPZklzVW5kZWZpbmVkOgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92
ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY09iamVjdE90aGVyIHwgU3BlY1VuZGVmaW5lZCwg
flNwZWNVbmRlZmluZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFR5cGVP
ZklzT2JqZWN0OiB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IHN1YnRsZS4KKyAgICAg
ICAgICAgIC8vIC0gTnVsbCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBUcnVlLgorICAgICAgICAg
ICAgLy8gLSBUaGUgc2FtZSBpcyB0cnVlIG9mIGV2ZXJ5dGhpbmcgaW4gU3BlY09iamVjdCAtIFNw
ZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbi4KKyAgICAgICAgICAgIC8vIC0gQnV0IFNwZWNP
YmplY3RPdGhlciBjYW4gcmV0dXJuIGVpdGhlciBUcnVlIG9yIEZhbHNlCisgICAgICAgICAgICAv
LyAtIEZpbmFsbHksIGV2ZXJ5dGhpbmcgZWxzZSByZXR1cm5zIEZhbHNlLgorICAgICAgICAgICAg
Ly8gU2VlIHRoZSBjb21tZW50IGluIGV4ZWN1dGVFZmZlY3RzKCkgKGluIERGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgpIGZvciBkZXRhaWxzCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBtYXlSZXR1cm5UcnVlID0gKChTcGVjT2JqZWN0IC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxs
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVybkZhbHNlID0gfigoU3BlY09i
amVjdCAtIFNwZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbikgfCBTcGVjTnVsbCk7CisgICAg
ICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBt
YXlSZXR1cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUeXBlT2ZJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIElzQ2Fs
bGFibGU6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVyblRydWUgPSBTcGVj
RnVuY3Rpb24gfCBTcGVjT2JqZWN0T3RoZXIgfCBTcGVjUHJveHlPYmplY3Q7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBtYXlSZXR1cm5GYWxzZSA9IH5TcGVjRnVuY3Rpb247CisgICAgICAg
ICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBtYXlS
ZXR1cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBJc0NlbGxXaXRoVHlwZTogeworICAgICAgICAgICAgaWYgKGF1dG8g
cXVlcmllZFR5cGUgPSBub2RlLT5zcGVjdWxhdGVkVHlwZUZvclF1ZXJ5KCkpCisgICAgICAgICAg
ICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgKnF1
ZXJpZWRUeXBlLCB+KnF1ZXJpZWRUeXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBTcGVj
Q2VsbCwgU3BlY0hlYXBUb3ApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgICAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eToKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25P
dmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIH5TcGVjT3RoZXIsIFNwZWNIZWFwVG9wKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDogLy8gRklYTUU6IGxvdHMgb2Ygb3RoZXIg
Y2FzZXMgdG8gY292ZXIsIGUuZy4gQ29tcGFyZUVxLCBNYXRjaFN0cnVjdHVyZSwgZXRjLi4gSnVz
dCBhYm91dCBldmVyeSBub2RlIHdpdGggYSBib29sZWFuIG91dHB1dCBjYW4gYmUgdXNlZCBoZXJl
LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIERG
R0J5dGVjb2RlUGFyc2VyIGdpdmVzIHVzIHNvbWUgdXNlZnVsIHByb2ZpbGluZyBpbmZvcm1hdGlv
biwgYnV0IGl0IGlzIHN0b3JlZCBpbiB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhLgorICAgIHZvaWQg
aW5pdGlhbGl6ZVR5cGVzQXRIZWFkKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBtX3R5cGVzQXRIZWFkW2Jsb2NrLT5pbmRleF0ub3BlcmFuZChub2RlLT5vcGVyYW5kKCkp
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBib29sIHNldFByZWRpY3Rpb24oU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CkBAIC0xNDYsNyArMzc2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihtZXJnZVNw
ZWN1bGF0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgIH0KIAotICAgIHZvaWQgcHJvcGFnYXRlKE5v
ZGUqIG5vZGUpCisgICAgdm9pZCBwcm9wYWdhdGUoTm9kZSogbm9kZSwgT3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGU+JiB0eXBlcywgT3BlcmFuZHM8dW5zaWduZWQ+JiBsYXN0VGltZU92ZXJ3cml0dGVu
KQogICAgIHsKICAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwogCkBAIC0xNTUsNyAr
Mzg1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBH
ZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBvbGRT
dHlsZVByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHR5cGVzLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZUdldExvY2FsICYmIChwcmVkaWN0aW9uICE9IG9sZFN0eWxlUHJlZGlj
dGlvbikpIHsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgp
LCBvbGRTdHlsZVByZWRpY3Rpb24pOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAtPiAiKTsK
KyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpkYXRhRmlsZSgpLCBwcmVkaWN0
aW9uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZS0+Y291bGRSZXByZXNlbnRJbnQ1MigpICYmIChwcmVkaWN0
aW9uICYgU3BlY05vbkludDMyQXNJbnQ1MikpCiAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9
IChwcmVkaWN0aW9uIHwgU3BlY0FueUludEFzRG91YmxlKSAmIH5TcGVjTm9uSW50MzJBc0ludDUy
OwogICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pCkBAIC0xNjQsOCArNDAyLDExIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0g
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3QodHlwZSk7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7
CisgICAgICAgICAgICB0eXBlcy5vcGVyYW5kKG9wZXJhbmQpID0gdHlwZTsKKyAgICAgICAgICAg
IGxhc3RUaW1lT3ZlcndyaXR0ZW4ub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmluZGV4KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC02MzIsMjIgKzg3Myw2IEBAIHByaXZh
dGU6CiAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQotICAgICAgICAKLSAg
ICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQotICAgIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogbV9kZXBlbmRlbnROb2RlcykgewotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG5vZGU7
Ci0gICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZGVwZW5kZW50Tm9kZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBt
X2N1cnJlbnROb2RlID0gbV9kZXBlbmRlbnROb2Rlc1tpXTsKLSAgICAgICAgICAgIHByb3BhZ2F0
ZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgfQotICAgIH0KICAgICAKICAgICB2b2lkIGRvRG91
YmxlVm90aW5nKE5vZGUqIG5vZGUsIGZsb2F0IHdlaWdodCkKICAgICB7CkBAIC0xMDY3LDYgKzEy
OTIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogeworICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0
aGlzIGJlIHNvbWV0aGluZyBtb3JlIHByZWNpc2U/CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIyOCwxMSAr
MTQ1NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6IHsKLSAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihTcGVjQ2VsbCB8IFNwZWNOdWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICAgICAgc2V0
UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNDZWxsIHwgU3BlY051bGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CkBAIC0xMjk0LDExICsxNTIwLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBBdG9taWNzT3I6CiAgICAgICAgIGNhc2UgQXRvbWljc1N0b3Jl
OgogICAgICAgICBjYXNlIEF0b21pY3NTdWI6Ci0gICAgICAgIGNhc2UgQXRvbWljc1hvcjogewot
ICAgICAgICAgICAgbV9kZXBlbmRlbnROb2Rlcy5hcHBlbmQobV9jdXJyZW50Tm9kZSk7CisgICAg
ICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKKwogICAgICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOiB7CiAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMw
OCw3ICsxNTMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnROb2RlLT5p
bnRyaW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykKICAgICAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNVbmRlZmluZWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTUx
Myw3ICsxNzM3LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmcgfCBTcGVj
U3ltYm9sOwogICAgIH0KIAotICAgIFZlY3RvcjxOb2RlKj4gbV9kZXBlbmRlbnROb2RlczsKKyAg
ICBCbG9ja01hcDxPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fdHlwZXNBdEhlYWQ7CisgICAg
Qml0VmVjdG9yIG1fYmxvY2tzVG9WaXNpdDsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAg
IGJvb2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKICAgICBQcmVkaWN0aW9uUGFzcyBtX3Bhc3MgeyBQ
cmltYXJ5UGFzcyB9OyAvLyBXZSB1c2UgZGlmZmVyZW50IGxvZ2ljIGZvciBjb25zaWRlcmluZyBw
cmVkaWN0aW9ucyBkZXBlbmRpbmcgb24gaG93IGZhciBhbG9uZyB3ZSBhcmUgaW4gcHJvcGFnYXRp
b24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431257</attachid>
            <date>2021-06-12 08:12:24 -0700</date>
            <delta_ts>2021-06-14 18:59:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch226914</filename>
            <type>text/plain</type>
            <size>40514</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CmluZGV4IGQ4MTFkOTEzYzhmZS4uMDY2MWU0YzI3YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTIsNyArMjUyLDcg
QEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVhbSwgU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIH0KICAgICAKLSAg
ICBpZiAodmFsdWUgPT0gU3BlY0ludDMyT25seSkKKyAgICBpZiAoKHZhbHVlICYgU3BlY0ludDMy
T25seSkgPT0gU3BlY0ludDMyT25seSkKICAgICAgICAgc3RyT3V0LnByaW50KCJJbnQzMiIpOwog
ICAgIGVsc2UgewogICAgICAgICBpZiAodmFsdWUgJiBTcGVjQm9vbEludDMyKQpAQCAtMjg1LDIw
ICsyODUsMjUgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVhbSwg
U3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIH0K
IAorI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAoKHZhbHVlICYgU3BlY0JpZ0ludCkgPT0gU3Bl
Y0JpZ0ludCkKICAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKLSNpZiBVU0UoQklHSU5U
MzIpCiAgICAgZWxzZSB7CiAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNCaWdJbnQzMikKICAgICAg
ICAgICAgIHN0ck91dC5wcmludCgiQmlnSW50MzIiKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgaXNUb3AgPSBmYWxzZTsKIAotICAgICAgICBpZiAodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkK
KyAgICAgICAgLy8gRG9uJ3QgcHJpbnQgQmlnSW50IGlmIGl0IGlzIGFscmVhZHkgaW1wbGllZCBi
eSBDZWxsCisgICAgICAgIGlmICgodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkgJiYgKCh2YWx1ZSAm
IFNwZWNDZWxsKSAhPSBTcGVjQ2VsbCkpCiAgICAgICAgICAgICBzdHJPdXQucHJpbnQoIkhlYXBC
aWdJbnQiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICB9
CisjZWxzZQorICAgIC8vIERvbid0IHByaW50IEJpZ0ludCBpZiBpdCBpcyBhbHJlYWR5IGltcGxp
ZWQgYnkgQ2VsbAorICAgIGlmICgodmFsdWUgJiBTcGVjQmlnSW50KSAmJiAoKHZhbHVlICYgU3Bl
Y0NlbGwpICE9IFNwZWNDZWxsKSkKKyAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKICNl
bmRpZgogCiAgICAgaWYgKHZhbHVlICYgU3BlY0RvdWJsZUltcHVyZU5hTikKQEAgLTMwOCwxMSAr
MzEzLDIwIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBvdXRTdHJlYW0sIFNw
ZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgICAgICBzdHJPdXQucHJpbnQoIkJvb2wiKTsKICAgICBl
bHNlCiAgICAgICAgIGlzVG9wID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHZhbHVlICYgU3BlY090
aGVyKQorCisgICAgaWYgKCh2YWx1ZSAmIFNwZWNPdGhlcikgPT0gU3BlY090aGVyKQogICAgICAg
ICBzdHJPdXQucHJpbnQoIk90aGVyIik7Ci0gICAgZWxzZQotICAgICAgICBpc1RvcCA9IGZhbHNl
OworICAgIGVsc2UgeworICAgICAgICBpZiAodmFsdWUgJiBTcGVjTnVsbCkKKyAgICAgICAgICAg
IHN0ck91dC5wcmludCgiTnVsbCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpc1RvcCA9
IGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNVbmRlZmluZWQpCisgICAgICAgICAg
ICBzdHJPdXQucHJpbnQoIlVuZGVmaW5lZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
c1RvcCA9IGZhbHNlOworICAgIH0KICAgICAKICAgICBpZiAodmFsdWUgJiBTcGVjRW1wdHkpCiAg
ICAgICAgIHN0ck91dC5wcmludCgiRW1wdHkiKTsKQEAgLTYzMiw4ICs2NDYsMTAgQEAgU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbUNlbGwodmFsdWUuYXNDZWxsKCkpOwogICAgIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOwotICAgIEFTU0VSVCh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKLSAgICByZXR1cm4gU3BlY090aGVyOworICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gU3BlY1VuZGVmaW5lZDsKKyAgICBB
U1NFUlQodmFsdWUuaXNOdWxsKCkpOworICAgIHJldHVybiBTcGVjTnVsbDsKIH0KIAogU3BlY3Vs
YXRlZFR5cGUgaW50NTJBd2FyZVNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCkBA
IC03MzcsOSArNzUzLDE0IEBAIFNwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0
bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5CiAgICAgcmV0dXJuIHR5
cGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZF
cXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCitTcGVjdWxhdGVkVHlw
ZSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUg
dHlwZSkKIHsKLSAgICB0eXBlID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRT
cGVjdWxhdGlvbnModHlwZSk7CisgICAgaWYgKHR5cGUgJiBTcGVjU3RyaW5nKQorICAgICAgICB0
eXBlIHw9IFNwZWNTdHJpbmc7CisKKyAgICAvLyAibnVsbCA9PSB1bmRlZmluZWQiIHJldHVybnMg
dHJ1ZS4KKyAgICBpZiAodHlwZSAmIFNwZWNPdGhlcikKKyAgICAgICAgdHlwZSB8PSBTcGVjT3Ro
ZXI7CiAKICAgICAvLyBCb29sZWFuIG9yIEJpZ0ludCBjYW4gYmUgY29udmVydGVkIHRvIE51bWJl
ciB3aGVuIHBlcmZvcm1pbmcgbm9uLXN0cmljdCBlcXVhbC4KICAgICBpZiAodHlwZSAmIChTcGVj
SW50QW55Rm9ybWF0IHwgU3BlY05vbkludEFzRG91YmxlIHwgU3BlY0Jvb2xlYW4gfCBTcGVjQmln
SW50KSkKQEAgLTc1MCwxNCArNzcxLDIxIEBAIHN0YXRpYyBpbmxpbmUgU3BlY3VsYXRlZFR5cGUg
bGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUCiAKIGJv
b2wgdmFsdWVzQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlIGEsIFNwZWN1bGF0ZWRUeXBlIGIp
CiB7Ci0gICAgYSA9IGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhhKTsK
LSAgICBiID0gbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKGIpOwotICAg
IAorICAgIC8vIEEgc3ltYm9sIGNhbiBvbmx5IGJlIGVxdWFsIHRvIGEgU3ltYm9sIG9yIGFuIE9i
amVjdAorICAgIC8vIEluIHBhcnRpY3VsYXIgaXQgY2Fubm90IGJlIGVxdWFsIHRvIGEgU3RyaW5n
CisgICAgaWYgKGlzU3ltYm9sU3BlY3VsYXRpb24oYSkgJiYgIShiICYgKFNwZWNPYmplY3QgfCBT
cGVjU3ltYm9sKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNTeW1ib2xTcGVj
dWxhdGlvbihiKSAmJiAhKGEgJiAoU3BlY09iamVjdCB8IFNwZWNTeW1ib2wpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgLy8gQW55dGhpbmcgY291bGQgYmUgZXF1YWwgdG8gYSBzdHJp
bmcuCiAgICAgaWYgKGEgJiBTcGVjU3RyaW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBp
ZiAoYiAmIFNwZWNTdHJpbmcpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYSA9IGxlYXN0
VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhhKTsKKyAgICBiID0gbGVhc3RVcHBl
ckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKGIpOwogICAgIAogICAgIC8vIElmIGJvdGgg
c2lkZXMgYXJlIGRlZmluaXRlbHkgb25seSBvYmplY3RzLCB0aGVuIGVxdWFsaXR5IGlzIGZhaXJs
eSBzYW5lLgogICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGEpICYmIGlzT2JqZWN0U3BlY3Vs
YXRpb24oYikpCkBAIC03NjksNyArNzk3LDcgQEAgYm9vbCB2YWx1ZXNDb3VsZEJlRXF1YWwoU3Bl
Y3VsYXRlZFR5cGUgYSwgU3BlY3VsYXRlZFR5cGUgYikKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKGIgJiBTcGVjT2JqZWN0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAg
IC8vIE5laXRoZXIgc2lkZSBpcyBhbiBvYmplY3Qgb3Igc3RyaW5nLCBzbyB0aGUgd29ybGQgaXMg
cmVsYXRpdmVseSBzYW5lLgogICAgIHJldHVybiAhIShhICYgYik7CiB9CkBAIC0xMDE4LDYgKzEw
NDYsMTAgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RyaW5nKGNvbnN0IGNoYXIq
IHNwZWN1bGF0aW9uKQogICAgICAgICByZXR1cm4gU3BlY0Z1bGxOdW1iZXI7CiAgICAgaWYgKCFz
dHJuY21wKHNwZWN1bGF0aW9uLCAiU3BlY0Jvb2xlYW4iLCBzdHJsZW4oIlNwZWNCb29sZWFuIikp
KQogICAgICAgICByZXR1cm4gU3BlY0Jvb2xlYW47CisgICAgaWYgKCFzdHJuY21wKHNwZWN1bGF0
aW9uLCAiU3BlY1VuZGVmaW5lZCIsIHN0cmxlbigiU3BlY1VuZGVmaW5lZCIpKSkKKyAgICAgICAg
cmV0dXJuIFNwZWNVbmRlZmluZWQ7CisgICAgaWYgKCFzdHJuY21wKHNwZWN1bGF0aW9uLCAiU3Bl
Y051bGwiLCBzdHJsZW4oIlNwZWNOdWxsIikpKQorICAgICAgICByZXR1cm4gU3BlY051bGw7CiAg
ICAgaWYgKCFzdHJuY21wKHNwZWN1bGF0aW9uLCAiU3BlY090aGVyIiwgc3RybGVuKCJTcGVjT3Ro
ZXIiKSkpCiAgICAgICAgIHJldHVybiBTcGVjT3RoZXI7CiAgICAgaWYgKCFzdHJuY21wKHNwZWN1
bGF0aW9uLCAiU3BlY01pc2MiLCBzdHJsZW4oIlNwZWNNaXNjIikpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAppbmRleCA5Njk3NzgzNTU3NDEu
LmM3YjkxNmQ4MWI1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05NywxOCArOTcsMjAgQEAgc3RhdGljIGNvbnN0ZXhwciBTcGVj
dWxhdGVkVHlwZSBTcGVjSW50QW55Rm9ybWF0ICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0lu
dDUKIAogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbE51bWJlciAgICAg
ICAgICAgICAgICAgICAgICAgID0gU3BlY0ludEFueUZvcm1hdCB8IFNwZWNGdWxsRG91YmxlOyAv
LyBJdCdzIGVpdGhlciBhbiBJbnQzMiwgSW50NTIsIG9yIGEgRG91YmxlLCBhbmQgdGhlIERvdWJs
ZSBjYW4gYmUgaW1wdXJlIE5hTi4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDA7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNw
ZWNPdGhlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQxOyAvLyBJdCdz
IGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgorc3RhdGljIGNvbnN0ZXhwciBT
cGVjdWxhdGVkVHlwZSBTcGVjVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVs
bCA8PCA0MTsgLy8gSXQncyBkZWZpbml0ZWx5IFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdGV4cHIg
U3BlY3VsYXRlZFR5cGUgU3BlY051bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDF1
bGwgPDwgNDI7IC8vIEl0J3MgZGVmaW5pdGVseSBOdWxsLgorc3RhdGljIGNvbnN0ZXhwciBTcGVj
dWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY1Vu
ZGVmaW5lZCB8IFNwZWNOdWxsOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5k
ZWZpbmVkLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCi1zdGF0aWMg
Y29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxdWxsIDw8IDQyOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFy
a2VyLgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcEJpZ0ludCAgICAg
ICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0MzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQmln
SW50IHRoYXQgaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwCi1zdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNCaWdJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8
IDQ0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBzbWFsbCBCaWdJbnQgdGhhdCBpcyBpbmxpbmUgdGhl
IEpTVmFsdWUKK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDM7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNw
ZWNIZWFwQmlnSW50ICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQ0OyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBCaWdJbnQgdGhhdCBpcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAKK3N0YXRp
YyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0JpZ0ludDMyICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDF1bGwgPDwgNDU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIHNtYWxsIEJpZ0ludCB0
aGF0IGlzIGlubGluZSB0aGUgSlNWYWx1ZQogI2lmIFVTRShCSUdJTlQzMikKIHN0YXRpYyBjb25z
dGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0JpZ0ludCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IFNwZWNCaWdJbnQzMiB8IFNwZWNIZWFwQmlnSW50OwogI2Vsc2UKIC8vIFdlIHNob3VsZCBu
b3QgaW5jbHVkZSBTcGVjQmlnSW50MzIuIFdlIGFyZSB1c2luZyBTcGVjQmlnSW50IGluIHZhcmlv
dXMgcGxhY2VzIGxpa2UgcHJlZGljdGlvbi4gSWYgdGhpcyBpbmNsdWRlcyBTcGVjQmlnSW50MzIs
IGZpeHVwIHBoYXNlIGlzIGNvbmZ1c2VkIGlmICFVU0UoQklHSU5UMzIpIHNpbmNlIGl0IGlzIG5v
dCB1c2luZyBBbnlCaWdJbnRVc2UuCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNw
ZWNCaWdJbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjSGVhcEJpZ0ludDsKICNl
bmRpZgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjRGF0YVZpZXdPYmplY3Qg
ICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNE
YXRhVmlldy4KK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0RhdGFWaWV3T2Jq
ZWN0ICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDY7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IEpTRGF0YVZpZXcuCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNQcmltaXRp
dmUgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNw
ZWNCeXRlY29kZU51bWJlciB8IFNwZWNNaXNjIHwgU3BlY0JpZ0ludDsgLy8gSXQncyBhbnkgbm9u
LU9iamVjdCBKU1ZhbHVlLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjT2Jq
ZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0Fy
cmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3Vt
ZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4
cE9iamVjdCB8IFNwZWNEYXRlT2JqZWN0IHwgU3BlY1Byb21pc2VPYmplY3QgfCBTcGVjTWFwT2Jq
ZWN0IHwgU3BlY1NldE9iamVjdCB8IFNwZWNXZWFrTWFwT2JqZWN0IHwgU3BlY1dlYWtTZXRPYmpl
Y3QgfCBTcGVjUHJveHlPYmplY3QgfCBTcGVjRGVyaXZlZEFycmF5IHwgU3BlY09iamVjdE90aGVy
IHwgU3BlY0RhdGFWaWV3T2JqZWN0OyAvLyBCaXRtYXNrIHVzZWQgZm9yIHRlc3RpbmcgZm9yIGFu
eSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVk
VHlwZSBTcGVjQ2VsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY09iamVjdCB8
IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0NlbGxPdGhlciB8IFNwZWNIZWFwQmlnSW50
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwuCkBAIC00NTEsNyArNDUzLDcgQEAgaW5saW5l
IGJvb2wgaXNOZWl0aGVyRG91YmxlTm9ySGVhcEJpZ0ludE5vclN0cmluZ1NwZWN1bGF0aW9uKFNw
ZWN1bGF0ZWRUeXBlIHR5cGUKIAogaW5saW5lIGJvb2wgaXNPdGhlclNwZWN1bGF0aW9uKFNwZWN1
bGF0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjT3RoZXI7CisgICAg
cmV0dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjT3RoZXIpOwogfQogCiBpbmxpbmUgYm9v
bCBpc01pc2NTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKQEAgLTQ1OSwxMSArNDYx
LDYgQEAgaW5saW5lIGJvb2wgaXNNaXNjU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUp
CiAgICAgcmV0dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjTWlzYyk7CiB9CiAKLWlubGlu
ZSBib29sIGlzT3RoZXJPckVtcHR5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA9PSBTcGVjT3RoZXI7Ci19Ci0KIGlubGluZSBi
b29sIGlzRW1wdHlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1
cm4gdmFsdWUgPT0gU3BlY0VtcHR5OwpAQCAtNTAzLDYgKzUwMCwxNiBAQCBpbmxpbmUgYm9vbCBt
ZXJnZVNwZWN1bGF0aW9uKFQmIGxlZnQsIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0KQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK2lubGluZSBTcGVjdWxhdGVkVHlwZSBpbnRlcnNlY3Rpb25PZlNwZWN1
bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSBsZWZ0LCBTcGVjdWxhdGVkVHlwZSByaWdodCkKK3sKKyAg
ICByZXR1cm4gbGVmdCAmIHJpZ2h0OworfQorCitpbmxpbmUgdm9pZCBmaWx0ZXJTcGVjdWxhdGlv
bihTcGVjdWxhdGVkVHlwZSYgbGVmdCwgU3BlY3VsYXRlZFR5cGUgcmlnaHQpCit7CisgICAgbGVm
dCAmPSByaWdodDsKK30KKwogaW5saW5lIGJvb2wgc3BlY3VsYXRpb25DaGVja2VkKFNwZWN1bGF0
ZWRUeXBlIGFjdHVhbCwgU3BlY3VsYXRlZFR5cGUgZGVzaXJlZCkKIHsKICAgICByZXR1cm4gKGFj
dHVhbCB8IGRlc2lyZWQpID09IGRlc2lyZWQ7CkBAIC01MjQsNiArNTMxLDcgQEAgU3BlY3VsYXRl
ZFR5cGUgc3BlY3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUoVHlwZWRBcnJheVR5cGUpOyAvLyBv
bmx5IHZhbGlkIGZvcgogVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGVGcm9tU3BlY3VsYXRp
b24oU3BlY3VsYXRlZFR5cGUpOwogCiBTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0
cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSk7CitTcGVjdWxhdGVk
VHlwZSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5
cGUpOwogCiBib29sIHZhbHVlc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRl
ZFR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggM2I2MWE1ZmQxOTg5Li5kODhhMDFjMTA4
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTcxMCw5ICs3MTAsMTUgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZTsKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKICAgICAgICAgY2FzZSBOb3RDZWxsTm9yQmlnSW50VXNlOiB7Ci0gICAgICAgICAgICBp
ZiAodHlwZSAmIFNwZWNPdGhlcikgewotICAgICAgICAgICAgICAgIHR5cGUgJj0gflNwZWNPdGhl
cjsKLSAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0Jvb2xJ
bnQzMjsgLy8gTnVsbCBiZWNvbWVzIHplcm8sIHVuZGVmaW5lZCBiZWNvbWVzIE5hTi4KKyAgICAg
ICAgICAgIGlmICh0eXBlICYgU3BlY051bGwpIHsKKyAgICAgICAgICAgICAgICB0eXBlICY9IH5T
cGVjTnVsbDsKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCb29sSW50MzI7IC8vIE51bGwg
YmVjb21lcyB6ZXJvCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHByb3Blcmx5IHJlY29yZCBp
dCBhcyBhIGNvbnN0YW50CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZSAmIFNw
ZWNVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0eXBlICY9IH5TcGVjVW5kZWZpbmVkOwor
ICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0RvdWJsZVB1cmVOYU47IC8vIFVuZGVmaW5lZCBi
ZWNvbWVzIE5hTi4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogcHJvcGVybHkgcmVjb3JkIGl0
IGFzIGEgY29uc3RhbnQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0eXBlICYgU3Bl
Y0Jvb2xlYW4pIHsKICAgICAgICAgICAgICAgICB0eXBlICY9IH5TcGVjQm9vbGVhbjsKQEAgLTE1
OTksNyArMTYwNSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAvLyBG
SVhNRTogVXNlIHRoZSBtYXNxdWVyYWRlcy1hcy11bmRlZmluZWQgd2F0Y2hwb2ludCB0aGluZ3ku
CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NDU2CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmIChT
cGVjT3RoZXIgfCBTcGVjT2JqZWN0T3RoZXIpKSkgeworICAgICAgICAgICAgaWYgKCEoY2hpbGQu
bV90eXBlICYgKFNwZWNVbmRlZmluZWQgfCBTcGVjT2JqZWN0T3RoZXIpKSkgewogICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxzZSkpOwogICAgICAgICAgICAg
ICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE2
MTksMTkgKzE2MjUsMTkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIC8v
IElzIHRoZSBjaGlsZCdzIHR5cGUgYW4gb2JqZWN0IHRoYXQgaXNuJ3QgYW4gb3RoZXItb2JqZWN0
IChpLmUuIG9iamVjdCB0aGF0IGNvdWxkCiAgICAgICAgICAgICAvLyBoYXZlIG1hc3F1YXJlZGVz
LWFzLXVuZGVmaW5lZCB0cmFwcykgYW5kIGlzbid0IGEgZnVuY3Rpb24/IFRoZW46IHdlIHNob3Vs
ZCBmb2xkCiAgICAgICAgICAgICAvLyB0aGlzIHRvIHRydWUuCi0gICAgICAgICAgICBpZiAoIShj
aGlsZC5tX3R5cGUgJiB+KFNwZWNPYmplY3QgLSBTcGVjT2JqZWN0T3RoZXIgLSBTcGVjRnVuY3Rp
b24pKSkgeworICAgICAgICAgICAgLy8gV2UgYWxzbyBmb2xkIHRvIHRydWUgZm9yIE51bGwuCisg
ICAgICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiB+KChTcGVjT2JqZWN0IC0gU3BlY09iamVj
dE90aGVyIC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxsKSkpIHsKICAgICAgICAgICAgICAgICBz
ZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBJcyB0aGUgY2hpbGQncyB0eXBlIGRlZmlu
aXRlbHkgbm90IGVpdGhlciBvZjogYW4gb2JqZWN0IHRoYXQgaXNuJ3QgYSBmdW5jdGlvbiwKLSAg
ICAgICAgICAgIC8vIG9yIGVpdGhlciB1bmRlZmluZWQgb3IgbnVsbD8gVGhlbjogd2Ugc2hvdWxk
IGZvbGQgdGhpcyB0byBmYWxzZS4gVGhpcyBtZWFucworICAgICAgICAgICAgLy8gb3IgbnVsbD8g
VGhlbjogd2Ugc2hvdWxkIGZvbGQgdGhpcyB0byBmYWxzZS4gVGhpcyBtZWFucwogICAgICAgICAg
ICAgLy8gZm9yIGV4YW1wbGUgdGhhdCBpZiBpdCdzIGFueSBub24tZnVuY3Rpb24gb2JqZWN0LCBp
bmNsdWRpbmcgdGhvc2UgdGhhdCBoYXZlCi0gICAgICAgICAgICAvLyBtYXNxdWVyYWRlcy1hcy11
bmRlZmluZWQgdHJhcHMsIHRoZW4gd2UgZG9uJ3QgZm9sZC4gSXQgYWxzbyBtZWFucyB3ZSB3b24n
dCBmb2xkCi0gICAgICAgICAgICAvLyBpZiBpdCdzIHVuZGVmaW5lZC1vci1udWxsLCBzaW5jZSB0
aGUgdHlwZSBiaXRzIGRvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICAgICAgICAgIC8vIHVu
ZGVmaW5lZCAod2hpY2ggc2hvdWxkIGZvbGQgdG8gZmFsc2UpIGFuZCBudWxsICh3aGljaCBzaG91
bGQgZm9sZCB0byB0cnVlKS4KLSAgICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmICgoU3Bl
Y09iamVjdCAtIFNwZWNGdW5jdGlvbikgfCBTcGVjT3RoZXIpKSkgeworICAgICAgICAgICAgLy8g
bWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHRyYXBzLCB0aGVuIHdlIGRvbid0IGZvbGQuCisgICAg
ICAgICAgICAvLyBXZSBhbHNvIGZvbGQgdG8gZmFsc2UgZm9yIFVuZGVmaW5lZC4KKyAgICAgICAg
ICAgIGlmICghKGNoaWxkLm1fdHlwZSAmICgoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikgfCBT
cGVjTnVsbCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFu
KGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTk3OCw5ICsxOTg0LDkgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJl
ckxpbWkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGxlZnRUeXBlID09IFNwZWNPdGhlcikKKyAgICAgICAgICAgIGlmICghKGxlZnRUeXBl
ICYgflNwZWNPdGhlcikpCiAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnRUeXBlLCByaWdo
dFR5cGUpOwotICAgICAgICAgICAgaWYgKHJpZ2h0VHlwZSA9PSBTcGVjT3RoZXIpIHsKKyAgICAg
ICAgICAgIGlmICghKHJpZ2h0VHlwZSAmIH5TcGVjT3RoZXIpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gVW5kZWZpbmVkIGFuZCBOdWxsIGFyZSBhbHdheXMgZXF1YWwgd2hlbiBjb21wYXJlZCB0byBl
YWNob3RoZXIuCiAgICAgICAgICAgICAgICAgaWYgKCEobGVmdFR5cGUgJiB+U3BlY090aGVyKSkg
ewogICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkp
OwpAQCAtMjM4MCw3ICsyMzg2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNPdGhlcik7IC8vIEZJWE1FOiB3aGVuIGNhbiB0aGlzIG5vdCBqdXN0IGJlIGpzVW5k
ZWZpbmVkKCk/CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFy
cmF5OjpHZW5lcmljOgpAQCAtMjQxNSw3ICsyNDIxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgICAgICAgICBtYWtl
SGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICBzZXROb25D
ZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSB8IFNwZWNPdGhlcik7CisgICAgICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVj
VW5kZWZpbmVkKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTI0MjcsNyArMjQzMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSk7CiAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWlu
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29k
ZVVzZXNBc090aGVyKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICAgICAg
ICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVj
VW5kZWZpbmVkKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUpOwogICAgICAgICAg
ICAgfSBlbHNlCkBAIC0yNTgzLDcgKzI1ODksNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcykKLSAgICAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoU3BlY1VuZGVm
aW5lZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUoKSkKICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsK
QEAgLTI2MjcsMTIgKzI2MzMsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFyZWdFeHAgfHwgcmVnRXhwLT5oYXNJbmRpY2VzKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgc3RydWN0dXJlU2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tZXJnZShTcGVjT3RoZXIpOworICAg
ICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1lcmdlKFNwZWNPdGhlcik7IC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
c2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsgLy8gRklYTUU6IFNob3Vs
ZCB0aGlzIGJlIFNwZWNVbmRlZmluZWQ/CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdF
eHBUZXN0OgpAQCAtMjY0NSwxMiArMjY1MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQyKCku
dXNlS2luZCgpID09IFJlZ0V4cE9iamVjdFVzZSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IG5vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9
PSBLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhl
ciB8IFNwZWNBcnJheSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8
IFNwZWNBcnJheSk7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xvYmFsOgogICAgICAgICBB
U1NFUlQobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSB8fCBub2RlLT5jaGls
ZDIoKS51c2VLaW5kKCkgPT0gS25vd25TdHJpbmdVc2UpOwotICAgICAgICBzZXRUeXBlRm9yTm9k
ZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOworICAgICAgICBzZXRUeXBlRm9yTm9kZShu
b2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOyAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgU3Bl
Y1VuZGVmaW5lZD8KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFN0cmlu
Z1JlcGxhY2U6CkBAIC0zODU0LDcgKzM4NjAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsK
KyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7IC8v
IEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtNDI4NywxMSArNDI5MywxMSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVj
TnVsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5l
cmljUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVj
TnVsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsK
QEAgLTQ0MzEsNyArNDQzNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlm
IChub2RlLT5pbnRyaW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykKICAgICAgICAgICAgIHNl
dE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlcik7CisgICAg
ICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY1VuZGVmaW5lZCk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1RyYXBzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBmODAyMzdjYzgzNDMuLjE1MTFi
NDkwZTk3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKQEAgLTUxNTIsNyArNTE1Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5SWQoCiAgICAgICAgIGhhbmRsZUNhbGwoCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIoKSwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsLAogICAgICAgICAgICAgb3Ny
RXhpdEluZGV4LCBzZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEsIHJlZ2lzdGVyT2Zmc2V0
LAotICAgICAgICAgICAgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSwgU3BlY090aGVyLCBlY21h
TW9kZSk7CisgICAgICAgICAgICAqdmFyaWFudC5jYWxsTGlua1N0YXR1cygpLCBTcGVjT3RoZXIs
IGVjbWFNb2RlKTsgLy8gRklYTUU6IGlzIFNwZWNPdGhlciB0aGUgcmlnaHQgY2hvaWNlIGhlcmU/
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCmluZGV4IDExMTAwODI2MDM5OC4uMWY4YzhjNjE3ODU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMTUxMyw5ICsxNTEzLDEyIEBAIEZyb3plblZh
bHVlKiBHcmFwaDo6Ym90dG9tVmFsdWVNYXRjaGluZ1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24pCiAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpCiAgICAgICAgIHJl
dHVybiBmcmVlemUoSlNWYWx1ZSgpKTsKIAotICAgIGlmIChzcGVjdWxhdGlvbkNvbnRhaW5zKHBy
ZWRpY3Rpb24sIFNwZWNPdGhlcikpCisgICAgaWYgKHNwZWN1bGF0aW9uQ29udGFpbnMocHJlZGlj
dGlvbiwgU3BlY051bGwpKQogICAgICAgICByZXR1cm4gZnJlZXplKGpzTnVsbCgpKTsKIAorICAg
IGlmIChzcGVjdWxhdGlvbkNvbnRhaW5zKHByZWRpY3Rpb24sIFNwZWNVbmRlZmluZWQpKQorICAg
ICAgICByZXR1cm4gZnJlZXplKGpzVW5kZWZpbmVkKCkpOworCiAgICAgaWYgKHNwZWN1bGF0aW9u
Q29udGFpbnMocHJlZGljdGlvbiwgU3BlY0Jvb2xlYW4pKQogICAgICAgICByZXR1cm4gZnJlZXpl
KGpzQm9vbGVhbih0cnVlKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRl
eCA3NmY5ZGI4MmY5MTEuLjcxMGI5MmFhZjJkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaApAQCAtMTA0MCw2ICsxMDQwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckNQ
U0NGR0RhdGEoKTsKIAorICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4mIHJvb3RzKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290czsgfQogICAgIGJvb2wgaXNSb290KEJhc2ljQmxvY2sqIGJs
b2NrKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pc0luU1NB
Q29udmVyc2lvbiwgIlRoaXMgaXMgbm90IHdyaXR0ZW4gdG8gd29yayBkdXJpbmcgU1NBIGNvbnZl
cnNpb24uIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDQzMjliZTVhNWZjOS4uMGNmMDU0
ODEzNGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDIxICsyOCwyOCBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgorI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2VGaXhQb2ludExvb3BzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVy
Ym9zZUdldExvY2FsID0gZmFsc2U7CiAKIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
IDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwcmVkaWN0aW9uIHByb3Bh
Z2F0aW9uIikKKyAgICAgICAgLCBtX3R5cGVzQXRIZWFkKGdyYXBoKQorICAgICAgICAsIG1fYmxv
Y2tzVG9WaXNpdChtX2dyYXBoLm51bUJsb2NrcygpKQogICAgIHsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAg
ICAgIG1fdHlwZXNBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KE9wZXJh
bmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgU3BlY05vbmUpOwogICAgIH0KICAgICAK
ICAgICBib29sIHJ1bigpCkBAIC01Niw5ICs2MywxNiBAQCBwdWJsaWM6CiAKICAgICAgICAgcHJv
Y2Vzc0ludmFyaWFudHMoKTsKIAorICAgICAgICBpbml0aWFsaXplVHlwZXNBdEhlYWQoKTsKKwor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5yb290cygpKQorICAgICAg
ICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CiAgICAgICAgIHBy
b3BhZ2F0ZVRvRml4cG9pbnQoKTsKICAgICAgICAgCiAgICAgICAgIG1fcGFzcyA9IFJhcmVDYXNl
UGFzczsKKyAgICAgICAgLy8gR2V0dGluZyByaWQgb2YgdGhpcyBzZWNvbmQgcGFzcyBhbHRvZ2V0
aGVyIHdvdWxkIGJlIGF0dHJhY3RpdmUuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICBtX2Jsb2Nrc1Rv
VmlzaXQucXVpY2tTZXQoYmxvY2stPmluZGV4KTsKICAgICAgICAgcHJvcGFnYXRlVG9GaXhwb2lu
dCgpOwogICAgICAgICAKICAgICAgICAgbV9wYXNzID0gRG91YmxlVm90aW5nUGFzczsKQEAgLTcy
LDcgKzg2LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB0
ZXJyaWJsZSwgd2FzIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgICAgIC8vIEF0IHRoZSB2
ZXJ5IGxlYXN0LCBJIHNob3VsZCBrZWVwIHRyYWNrIG9mIHdoaWNoIEJCcyBnb3QgZnJlc2ggaW5m
b3JtYXRpb24gZnJvbSBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKTsKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAg
ICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAg
ICAgICAgICBwcm9wYWdhdGVUb0ZpeHBvaW50KCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdl
ZCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2VGaXhQb2ludExvb3BzKQpAQCAtODQsMzAgKzEwMiwy
NDEgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHByb3BhZ2F0ZVRvRml4cG9pbnQoKQog
ICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIGNv
dW50ZXIgPSAwOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZUZpeFBvaW50
TG9vcHMpCiAgICAgICAgICAgICAgICAgKytjb3VudGVyOwogCi0gICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKIAotICAgICAgICAgICAg
Ly8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2lj
YWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAg
ICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQmFja3dh
cmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBj
b2RlIHdpbGwKLSAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxs
eSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KLSAgICAgICAgICAgIC8vIFRo
aXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJk
IGZpeHBvaW50Ci0gICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikg
c2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAo
bV9jaGFuZ2VkKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA6IG1fYmxv
Y2tzVG9WaXNpdCkgeworICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9WaXNpdC5xdWlja0NsZWFy
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHBy
b3BhZ2F0ZVRocm91Z2hCbG9jayhibG9jayk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBy
ZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogCiAgICAg
ICAgIGlmICh2ZXJib3NlRml4UG9pbnRMb29wcykKICAgICAgICAgICAgIGRhdGFMb2coIkl0ZXJh
dGVkICIsIGNvdW50ZXIsICIgdGltZXMgaW4gcHJvcGFnYXRlVG9GaXhwb2ludC5cbiIpOwogICAg
IH0KKworICAgIGJvb2wgcHJvcGFnYXRlVGhyb3VnaEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IGN1cnJlbnRUeXBlcyA9IG1f
dHlwZXNBdEhlYWRbYmxvY2tdOworICAgICAgICBPcGVyYW5kczx1bnNpZ25lZD4gbGFzdFRpbWVP
dmVyd3JpdHRlbiB7IE9wZXJhbmRzTGlrZSwgY3VycmVudFR5cGVzLCAwIH07CisgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG5v
ZGU7CisgICAgICAgICAgICBwcm9wYWdhdGUobm9kZSwgY3VycmVudFR5cGVzLCBsYXN0VGltZU92
ZXJ3cml0dGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIE5vZGUqIHRlcm1pbmFsID0gYmxvY2st
PnRlcm1pbmFsKCk7CisgICAgICAgIGlmICh0ZXJtaW5hbC0+b3AoKSA9PSBCcmFuY2gpCisgICAg
ICAgICAgICByZXR1cm4gcHJvcGFnYXRlVG9TdWNjZXNzb3JzVGhyb3VnaEJyYW5jaCh0ZXJtaW5h
bCwgY3VycmVudFR5cGVzLCBsYXN0VGltZU92ZXJ3cml0dGVuKTsKKyAgICAgICAgcmV0dXJuIHBy
b3BhZ2F0ZVRvU3VjY2Vzc29yc0dlbmVyaWMoYmxvY2ssIGN1cnJlbnRUeXBlcyk7CisgICAgfQor
CisgICAgYm9vbCBwcm9wYWdhdGVUb1N1Y2Nlc3NvcnNHZW5lcmljKEJhc2ljQmxvY2sqIGJsb2Nr
LCBjb25zdCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIGN1cnJlbnRUeXBlcykKKyAgICB7Cisg
ICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghIXN1
Y2Nlc3Nvcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbnNBdEhlYWQo
c3VjY2Vzc29yLCBjdXJyZW50VHlwZXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjaGFu
Z2VkOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjaGFuZ2VkIHRoZSBvbGQg
dHlwZXMgYXQgaGVhZC4KKyAgICAvLyBJdCBhbHNvIHVwZGF0ZXMgbV9ibG9ja3NUb1Zpc2l0Lgor
ICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3Qg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBpbmNvbWluZ1R5cGVzKQorICAgIHsKKyAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBvbGRUeXBlcyA9IG1fdHlwZXNBdEhlYWRbYmxvY2td
OworICAgICAgICBBU1NFUlQob2xkVHlwZXMubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBpbmNvbWlu
Z1R5cGVzLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgICAgICBBU1NFUlQob2xkVHlwZXMubnVt
YmVyT2ZMb2NhbHMoKSA9PSBpbmNvbWluZ1R5cGVzLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICBBU1NFUlQob2xkVHlwZXMubnVtYmVyT2ZUbXBzKCkgPT0gaW5jb21pbmdUeXBlcy5udW1iZXJP
ZlRtcHMoKSk7CisKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG9sZFR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVz
dWx0IHw9IG1lcmdlU3BlY3VsYXRpb24ob2xkVHlwZXNbaV0sIGluY29taW5nVHlwZXNbaV0pOwor
ICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0
KGJsb2NrLT5pbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9v
bCBwcm9wYWdhdGVUb1N1Y2Nlc3NvcnNUaHJvdWdoQnJhbmNoKE5vZGUqIGJyYW5jaCwgT3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+JiBjdXJyZW50VHlwZXMsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVk
PiBsYXN0VGltZU92ZXJ3cml0dGVuKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJyYW5jaC0+b3Ao
KSA9PSBCcmFuY2gpOworCisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiB0eXBlc0Fs
b25nVHJ1ZUJyYW5jaCA9IGN1cnJlbnRUeXBlczsKKyAgICAgICAgLy8gV2UgcmV1c2UgY3VycmVu
dFR5cGVzIGZvciB0eXBlc0Fsb25nRmFsc2VCcmFuY2gsIGluc3RlYWQgb2YgbWFraW5nIGFub3Ro
ZXIgY29weS4KKyAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25zQmFzZWRPblRydXRoaW5lc3MoYnJh
bmNoLT5jaGlsZDEoKS5ub2RlKCksIHR5cGVzQWxvbmdUcnVlQnJhbmNoLCBjdXJyZW50VHlwZXMs
IGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKGJyYW5jaC0+c3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKHRydWUpLCB0eXBlc0Fsb25nVHJ1ZUJyYW5jaCk7CisgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChicmFuY2gtPnN1Y2Nlc3NvckZvckNvbmRpdGlv
bihmYWxzZSksIGN1cnJlbnRUeXBlcyk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0K
KworICAgIHZvaWQgZmlsdGVyU3BlY3VsYXRpb25zQmFzZWRPblRydXRoaW5lc3MoTm9kZSogbm9k
ZSwgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiB0cnV0aHlUeXBlcywgT3BlcmFuZHM8U3BlY3Vs
YXRlZFR5cGU+IGZhbHN5VHlwZXMsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVkPiBsYXN0VGltZU92
ZXJ3cml0dGVuKQorICAgIHsKKyAgICAgICAgYXV0byBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3Zl
cndyaXR0ZW5HZXRMb2NhbCA9IFsmXSAoTm9kZSogbWF5YmVHZXRMb2NhbCwgU3BlY3VsYXRlZFR5
cGUgdHJ1dGh5RmlsdGVyLCBTcGVjdWxhdGVkVHlwZSBmYWxzeUZpbHRlcikgeworICAgICAgICAg
ICAgaWYgKG1heWJlR2V0TG9jYWwtPm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbWF5YmVHZXRMb2NhbC0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgLy8gSGF2aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgR2V0
TG9jYWwgZG9lcyBub3QgdGVsbCB1cyBhbnl0aGluZyBhYm91dCB0aGUgb3BlcmFuZCBhdCB0aGUg
ZW5kIG9mIHRoZSBibG9jayBpZiB0aGVyZSBpcyBhbiBpbnRlcnZlbmluZyBTZXRMb2NhbC4KKyAg
ICAgICAgICAgIGlmIChsYXN0VGltZU92ZXJ3cml0dGVuLm9wZXJhbmQob3BlcmFuZCkgPiBtYXli
ZUdldExvY2FsLT5pbmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGZpbHRlclNwZWN1bGF0aW9uKHRydXRoeVR5cGVzLm9wZXJhbmQob3BlcmFuZCksIHRydXRoeUZp
bHRlcik7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihmYWxzeVR5cGVzLm9wZXJhbmQo
b3BlcmFuZCksIGZhbHN5RmlsdGVyKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGSVhNRTog
cHJldHR5IG11Y2ggYWxsIG9mIHRoZXNlIGNhc2VzIGNvdWxkIHNoYXJlIGNvZGUgd2l0aCB0aGUg
QWJzdHJhY3RJbnRlcnByZXRlci4KKyAgICAgICAgLy8gRklYTUU6IGFsc28gaW4gdGhlb3J5IHdl
IGNvdWxkIGRvIG11Y2ggZmFuY2llciB0aGluZ3MsIGxpa2Ugb3B0aW1pemluZyBhIHN3aXRjaCBv
biB0aGUgcmVzdWx0IG9mIGEgVHlwZU9mLgorICAgICAgICAvLyAgIEl0IGZlZWxzIG92ZXJraWxs
IHVubGVzcyB3ZSBhY3R1YWxseSBzZWUgdGhhdCBpbiBhIG1ham9yIGJlbmNobWFyaywgb3IgY2Fu
IHNoYXJlIHRoYXQgY29kZSB3aXRoIHRoZSBBSS4KKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IGNhbm5vdEJlVHJ1dGh5VHlwZSA9IFNwZWNEb3VibGVOYU4gfCBTcGVjT3RoZXI7CisgICAgICAg
ICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCB+Y2Fu
bm90QmVUcnV0aHlUeXBlLCBTcGVjSGVhcFRvcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAgIE5vZGUq
IGxlZnROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgTm9kZSogcmln
aHROb2RlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKGxlZnROb2Rl
LT5vcCgpICE9IEdldExvY2FsICYmIHJpZ2h0Tm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRQcmVkaWN0
aW9uID0gbGVmdE5vZGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0UHJlZGljdGlvbiA9IHJpZ2h0Tm9kZS0+cHJlZGljdGlvbigpOworCisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHJ1ZVByZWRpY3Rpb24gPSBpbnRlcnNlY3Rpb25PZlNwZWN1
bGF0aW9ucyhsZWZ0UHJlZGljdGlvbiwgbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxl
bnRTcGVjdWxhdGlvbnMocmlnaHRQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSByaWdodFRydWVQcmVkaWN0aW9uID0gaW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMocmln
aHRQcmVkaWN0aW9uLCBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0
aW9ucyhsZWZ0UHJlZGljdGlvbikpOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
RmFsc2VQcmVkaWN0aW9uID0gbGVmdFByZWRpY3Rpb247CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSByaWdodEZhbHNlUHJlZGljdGlvbiA9IHJpZ2h0UHJlZGljdGlvbjsKKyAgICAgICAgICAg
IGlmIChsZWZ0UHJlZGljdGlvbiA9PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJT
cGVjdWxhdGlvbihyaWdodEZhbHNlUHJlZGljdGlvbiwgflNwZWNOdWxsKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGxlZnRQcmVkaWN0aW9uID09IFNwZWNVbmRlZmluZWQpCisgICAgICAgICAgICAg
ICAgZmlsdGVyU3BlY3VsYXRpb24ocmlnaHRGYWxzZVByZWRpY3Rpb24sIH5TcGVjVW5kZWZpbmVk
KTsKKyAgICAgICAgICAgIGlmIChyaWdodFByZWRpY3Rpb24gPT0gU3BlY051bGwpCisgICAgICAg
ICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb24obGVmdEZhbHNlUHJlZGljdGlvbiwgflNwZWNOdWxs
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0UHJlZGljdGlvbiA9PSBTcGVjTnVsbCkKKyAg
ICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihsZWZ0RmFsc2VQcmVkaWN0aW9uLCB+U3Bl
Y1VuZGVmaW5lZCk7CisKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3Jp
dHRlbkdldExvY2FsKGxlZnROb2RlLCBsZWZ0VHJ1ZVByZWRpY3Rpb24sIGxlZnRGYWxzZVByZWRp
Y3Rpb24pOworICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0
TG9jYWwocmlnaHROb2RlLCByaWdodFRydWVQcmVkaWN0aW9uLCByaWdodEZhbHNlUHJlZGljdGlv
bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21wYXJl
RXE6IHsKKyAgICAgICAgICAgIC8vIFRoZSBsb2dpYyBvZiB0aGlzIGNhc2UgY2xvc2VseSBmb2xs
b3dzIHZhbHVlc0NvdWxkQmVFcXVhbCgpIGluIFNwZWN1bGF0ZWRUeXBlLmNwcAorICAgICAgICAg
ICAgTm9kZSogbGVmdE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBO
b2RlKiByaWdodE5vZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAo
bGVmdE5vZGUtPm9wKCkgIT0gR2V0TG9jYWwgJiYgcmlnaHROb2RlLT5vcCgpICE9IEdldExvY2Fs
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dFByZWRpY3Rpb24gPSBsZWZ0Tm9kZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHRQcmVkaWN0aW9uID0gcmlnaHROb2RlLT5wcmVkaWN0aW9uKCk7CisKKyAg
ICAgICAgICAgIC8vIE9ubHkgYSBzeW1ib2wgb3IgYW4gb2JqZWN0IGNhbiBiZSBlcXVhbCB0byBh
IHN5bWJvbAorICAgICAgICAgICAgaWYgKGxlZnRQcmVkaWN0aW9uID09IFNwZWNTeW1ib2wpIHsK
KyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2Nh
bChyaWdodE5vZGUsIFNwZWNTeW1ib2wgfCBTcGVjT2JqZWN0LCBTcGVjSGVhcFRvcCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJpZ2h0
UHJlZGljdGlvbiA9PSBTcGVjU3ltYm9sKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyU3BlY3Vs
YXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobGVmdE5vZGUsIFNwZWNTeW1ib2wgfCBTcGVj
T2JqZWN0LCBTcGVjSGVhcFRvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBQcmV0dHkgbXVjaCBhbnl0aGluZyBjYW4gYmUgZXF1YWwg
dG8gYSBTdHJpbmcsIHNvIHdlIGdldCBubyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaWYgKChs
ZWZ0UHJlZGljdGlvbiAmIFNwZWNTdHJpbmcpIHx8IChyaWdodFByZWRpY3Rpb24gJiBTcGVjU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIGJvdGgg
c2lkZXMgYXJlIGRlZmluaXRlbHkgb25seSBvYmplY3RzLCB0aGVuIGVxdWFsaXR5IGlzIGZhaXJs
eSBzYW5lLgorICAgICAgICAgICAgLy8gU2FtZSBpZiBuZWl0aGVyIGNhbiBiZSBhbiBvYmplY3QK
KyAgICAgICAgICAgIGJvb2wgaXNTYW5lID0gaXNPYmplY3RTcGVjdWxhdGlvbihsZWZ0UHJlZGlj
dGlvbikgJiYgaXNPYmplY3RTcGVjdWxhdGlvbihyaWdodFByZWRpY3Rpb24pOworICAgICAgICAg
ICAgaXNTYW5lIHw9ICEobGVmdFByZWRpY3Rpb24gJiBTcGVjT2JqZWN0KSAmJiAhKHJpZ2h0UHJl
ZGljdGlvbiAmIFNwZWNPYmplY3QpOworICAgICAgICAgICAgaWYgKCFpc1NhbmUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHJ1ZVBy
ZWRpY3Rpb24gPSBpbnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhsZWZ0UHJlZGljdGlvbiwgbGVh
c3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKHJpZ2h0UHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUcnVlUHJlZGljdGlvbiA9IGludGVyc2Vj
dGlvbk9mU3BlY3VsYXRpb25zKHJpZ2h0UHJlZGljdGlvbiwgbGVhc3RVcHBlckJvdW5kT2ZFcXVp
dmFsZW50U3BlY3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBmaWx0ZXJT
cGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChsZWZ0Tm9kZSwgbGVmdFRydWVQcmVk
aWN0aW9uLCBTcGVjSGVhcFRvcCk7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9u
T3ZlcndyaXR0ZW5HZXRMb2NhbChyaWdodE5vZGUsIHJpZ2h0VHJ1ZVByZWRpY3Rpb24sIFNwZWNI
ZWFwVG9wKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRv
Qm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXJTcGVjdWxhdGlvbnNCYXNlZE9uVHJ1
dGhpbmVzcyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIHRydXRoeVR5cGVzLCBmYWxzeVR5cGVzLCBs
YXN0VGltZU92ZXJ3cml0dGVuKTsKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICAg
ICAgcmV0dXJuIGZpbHRlclNwZWN1bGF0aW9uc0Jhc2VkT25UcnV0aGluZXNzKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgZmFsc3lUeXBlcywgdHJ1dGh5VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4p
OworICAgICAgICBjYXNlIElzVW5kZWZpbmVkT3JOdWxsOgorICAgICAgICAgICAgZmlsdGVyU3Bl
Y3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY090aGVyLCB+U3BlY090
aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBJc0Jvb2xlYW46CisgICAg
ICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBT
cGVjQm9vbGVhbiwgflNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBJc051bWJlcjoKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3Jp
dHRlbkdldExvY2FsKG5vZGUsIFNwZWNGdWxsTnVtYmVyLCB+U3BlY0Z1bGxOdW1iZXIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzQmlnSW50OgorICAgICAgICAgICAgZmls
dGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY0JpZ0ludCwg
flNwZWNCaWdJbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzVHlwZWRB
cnJheVZpZXc6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5H
ZXRMb2NhbChub2RlLCBTcGVjVHlwZWRBcnJheVZpZXcsIH5TcGVjVHlwZWRBcnJheVZpZXcpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICAgICAg
ZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY09iamVj
dCwgflNwZWNPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzRW1w
dHk6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2Nh
bChub2RlLCBTcGVjRW1wdHksIH5TcGVjRW1wdHkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjYXNlIFR5cGVPZklzVW5kZWZpbmVkOgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRp
b25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY09iamVjdE90aGVyIHwgU3BlY1Vu
ZGVmaW5lZCwgflNwZWNVbmRlZmluZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIFR5cGVPZklzT2JqZWN0OiB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IHN1YnRs
ZS4KKyAgICAgICAgICAgIC8vIC0gTnVsbCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBUcnVlLgor
ICAgICAgICAgICAgLy8gLSBUaGUgc2FtZSBpcyB0cnVlIG9mIGV2ZXJ5dGhpbmcgaW4gU3BlY09i
amVjdCAtIFNwZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbi4KKyAgICAgICAgICAgIC8vIC0g
QnV0IFNwZWNPYmplY3RPdGhlciBjYW4gcmV0dXJuIGVpdGhlciBUcnVlIG9yIEZhbHNlCisgICAg
ICAgICAgICAvLyAtIEZpbmFsbHksIGV2ZXJ5dGhpbmcgZWxzZSByZXR1cm5zIEZhbHNlLgorICAg
ICAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIGV4ZWN1dGVFZmZlY3RzKCkgKGluIERGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgpIGZvciBkZXRhaWxzCisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBtYXlSZXR1cm5UcnVlID0gKChTcGVjT2JqZWN0IC0gU3BlY0Z1bmN0aW9uKSB8
IFNwZWNOdWxsKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVybkZhbHNlID0g
figoU3BlY09iamVjdCAtIFNwZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbikgfCBTcGVjTnVs
bCk7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2Nh
bChub2RlLCBtYXlSZXR1cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUeXBlT2ZJc0Z1bmN0aW9uOgorICAgICAgICBj
YXNlIElzQ2FsbGFibGU6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVyblRy
dWUgPSBTcGVjRnVuY3Rpb24gfCBTcGVjT2JqZWN0T3RoZXIgfCBTcGVjUHJveHlPYmplY3Q7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBtYXlSZXR1cm5GYWxzZSA9IH5TcGVjRnVuY3Rpb247
CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChu
b2RlLCBtYXlSZXR1cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBJc0NlbGxXaXRoVHlwZTogeworICAgICAgICAgICAg
aWYgKGF1dG8gcXVlcmllZFR5cGUgPSBub2RlLT5zcGVjdWxhdGVkVHlwZUZvclF1ZXJ5KCkpCisg
ICAgICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwo
bm9kZSwgKnF1ZXJpZWRUeXBlLCB+KnF1ZXJpZWRUeXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChu
b2RlLCBTcGVjQ2VsbCwgU3BlY0hlYXBUb3ApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgICAg
ICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0
aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIH5TcGVjT3RoZXIsIFNwZWNIZWFwVG9w
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSBERkdCeXRlY29kZVBhcnNlciBn
aXZlcyB1cyBzb21lIHVzZWZ1bCBwcm9maWxpbmcgaW5mb3JtYXRpb24sIGJ1dCBpdCBpcyBzdG9y
ZWQgaW4gdGhlIFZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICB2b2lkIGluaXRpYWxpemVUeXBlc0F0
SGVhZCgpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV90eXBlc0F0SGVh
ZFtibG9jay0+aW5kZXhdLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CiAgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24pCiAgICAgewpAQCAtMTQ2LDcgKzM3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBz
cGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwg
cmlnaHQpKTsKICAgICB9CiAKLSAgICB2b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQorICAgIHZv
aWQgcHJvcGFnYXRlKE5vZGUqIG5vZGUsIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgdHlwZXMs
IE9wZXJhbmRzPHVuc2lnbmVkPiYgbGFzdFRpbWVPdmVyd3JpdHRlbikKICAgICB7CiAgICAgICAg
IE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKIApAQCAtMTU1LDcgKzM4NCwxNSBAQCBwcml2YXRl
OgogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJs
ZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3Bl
cmFuZCgpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgb2xkU3R5bGVQcmVkaWN0aW9uID0g
dmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSB0eXBlcy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgaWYgKHZlcmJvc2VH
ZXRMb2NhbCAmJiAocHJlZGljdGlvbiAhPSBvbGRTdHlsZVByZWRpY3Rpb24pKSB7CisgICAgICAg
ICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgb2xkU3R5bGVQcmVkaWN0
aW9uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgLT4gIik7CisgICAgICAgICAgICAgICAg
ZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgcHJlZGljdGlvbik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghdmFy
aWFibGUtPmNvdWxkUmVwcmVzZW50SW50NTIoKSAmJiAocHJlZGljdGlvbiAmIFNwZWNOb25JbnQz
MkFzSW50NTIpKQogICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSAocHJlZGljdGlvbiB8IFNw
ZWNBbnlJbnRBc0RvdWJsZSkgJiB+U3BlY05vbkludDMyQXNJbnQ1MjsKICAgICAgICAgICAgIGlm
IChwcmVkaWN0aW9uKQpAQCAtMTY0LDggKzQwMSwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHR5cGUpOworICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgdHlw
ZXMub3BlcmFuZChvcGVyYW5kKSA9IHR5cGU7CisgICAgICAgICAgICBsYXN0VGltZU92ZXJ3cml0
dGVuLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5pbmRleCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIApAQCAtNjMyLDIyICs4NzIsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIG1f
Y2hhbmdlZCB8PSBjaGFuZ2VkOwogICAgIH0KLSAgICAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVG
b3J3YXJkKCkKLSAgICB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fZGVwZW5kZW50Tm9k
ZXMpIHsKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBub2RlOwotICAgICAgICAgICAgcHJv
cGFnYXRlKG1fY3VycmVudE5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBwcm9w
YWdhdGVCYWNrd2FyZCgpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2RlcGVu
ZGVudE5vZGVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1f
ZGVwZW5kZW50Tm9kZXNbaV07Ci0gICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7
Ci0gICAgICAgIH0KLSAgICB9CiAgICAgCiAgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBu
b2RlLCBmbG9hdCB3ZWlnaHQpCiAgICAgewpAQCAtMTA2Nyw2ICsxMjkxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBzb21ldGhpbmcg
bW9yZSBwcmVjaXNlPwogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjT3RoZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMjgsMTEgKzE0NTMsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0RW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxs
IHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVj
TnVsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEVu
dW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Nl
bGwgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNw
ZWNOdWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9J
bmRleFN0cmluZzogewpAQCAtMTI5NCwxMSArMTUxOSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQXRvbWljc09yOgogICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKICAgICAgICAgY2FzZSBB
dG9taWNzU3ViOgotICAgICAgICBjYXNlIEF0b21pY3NYb3I6IHsKLSAgICAgICAgICAgIG1fZGVw
ZW5kZW50Tm9kZXMuYXBwZW5kKG1fY3VycmVudE5vZGUpOworICAgICAgICBjYXNlIEF0b21pY3NY
b3I6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAg
ICAgY2FzZSBBdG9taWNzSXNMb2NrRnJlZTogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihT
cGVjQm9vbGVhbik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzMDgsNyArMTUzMSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAobV9jdXJyZW50Tm9kZS0+aW50cmluc2ljKCkgPT0gQ1BV
UmR0c2NJbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJP
bmx5KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNw
ZWNPdGhlcik7CisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjVW5kZWZpbmVkKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE1MTMsNyArMTczNiw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbDsKICAgICB9CiAK
LSAgICBWZWN0b3I8Tm9kZSo+IG1fZGVwZW5kZW50Tm9kZXM7CisgICAgQmxvY2tNYXA8T3BlcmFu
ZHM8U3BlY3VsYXRlZFR5cGU+PiBtX3R5cGVzQXRIZWFkOworICAgIEJpdFZlY3RvciBtX2Jsb2Nr
c1RvVmlzaXQ7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hhbmdlZCB7
IGZhbHNlIH07CiAgICAgUHJlZGljdGlvblBhc3MgbV9wYXNzIHsgUHJpbWFyeVBhc3MgfTsgLy8g
V2UgdXNlIGRpZmZlcmVudCBsb2dpYyBmb3IgY29uc2lkZXJpbmcgcHJlZGljdGlvbnMgZGVwZW5k
aW5nIG9uIGhvdyBmYXIgYWxvbmcgd2UgYXJlIGluIHByb3BhZ2F0aW9uLgo=
</data>
<flag name="commit-queue"
          id="452991"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431392</attachid>
            <date>2021-06-14 18:59:57 -0700</date>
            <delta_ts>2021-06-15 18:23:54 -0700</delta_ts>
            <desc>WIP_nearlyDone</desc>
            <filename>patch226914</filename>
            <type>text/plain</type>
            <size>58557</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRhZGIwYzhhMmUyZC4uNTE1NGEzYTUxMmExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAyMS0wNi0xNCAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvbiBzaG91bGQgYmUgZmxvdy1zZW5zaXRpdmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoLCBpbmZvcm1h
dGlvbiBmbG93cyBiZXR3ZWVuIGJsb2NrcyBpbiBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSB0
aHJvdWdoIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gU2V0
TG9jYWwvR2V0TG9jYWwvZXRjLi4KKyAgICAgICAgVGhpcyBjYXVzZXMgdGhlIHByZWRpY3Rpb24g
dG8gYmUgdG9vIGNvYXJzZSBpbiBtYW55IGNhc2VzLCBhcyBhIHNpbmdsZSBWYXJpYWJsZUFjY2Vz
c0RhdGEgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG1hbnkgbm9kZXMsIGFuZCB0aGVyZSBpcyBubyB3
YXkgdG8gbWFrZSB1c2Ugb2YgdGhpbmdzIGxpa2UgIkkgYnJhbmNoZWQgb24geCAhPT0gbnVsbCwg
c28geCBpcyBkZWZpbml0ZWx5IG5vdCBudWxsIGluIHRoZSB0cnVlIGJyYW5jaCIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb21wbGV0ZWx5IGZpeGVzIHRoaXMsIGJ5IGluc3RlYWQga2VlcGluZyB0
cmFjayBvZiBhbiBtX3R5cGVzQXRIZWFkIGZpZWxkIGluIFByZWRpY3Rpb25Qcm9wYWdhdGlvbiwg
YW5kIGZvbGxvd2luZyBhIG1vcmUgY2xhc3NpYyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhbGdv
cml0aG0uCisgICAgICAgIFRoaXMgbmV3IGRlc2lnbiBsZWQgdG8gbXVsdGlwbGUgb3RoZXIgY2hh
bmdlczoKKyAgICAgICAgLSBTcGVjT3RoZXIgaGFzIGJlZW4gc3BsaXQgaW4gU3BlY051bGwgfCBT
cGVjVW5kZWZpbmVkLCB0byBwcm9wZXJseSB1c2UgdGVzdHMgc3VjaCBhcyAieCAhPT0gbnVsbCIK
KyAgICAgICAgLSBCeXRlY29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbiBu
b3cgc2V0cyBtX3ByZWRpY3Rpb24gZm9yIHRoZSByZWxldmFudCBHZXRMb2NhbCwgYXMgUHJlZGlj
dGlvblByb3BhZ2F0aW9uIHdvbid0IHJlYWQgaXQgZnJvbSB0aGUgVmFyaWFibGVBY2Nlc3NEYXRh
CisgICAgICAgIC0gU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vdyBoYXMgYSBoZWFwIHByZWRpY3Rp
b24sIHdoaWNoIGlzIHNldCBpbiB0aGUgQnl0ZWNvZGVQYXJzZXIuIFRoaXMgcmVwbGFjZXMgdGhl
IGZpcnN0IGhhbGYgb2YgUHJlZGljdGlvbkluamVjdGlvblBoYXNlLCBhbmQgcHJvdmlkZXMgaW5m
b3JtYXRpb24gdG8gUHJlZGljdGlvblByb3BhZ2F0aW9uLgorICAgICAgICAtIFRvIGtlZXAgY29t
cGlsYXRpb24gdGltZXMgcmVhc29uYWJsZSwgdGhlIFJhcmVDYXNlUGFzcyBwYXJ0IG9mIFByZWRp
Y3Rpb25Qcm9wYWdhdGlvbiBhdm9pZHMgdmlzaXRpbmcgYmxvY2tzIHdpdGhvdXQgYW55IG5vZGVz
IGl0IGNhcmUgYWJvdXQuCisgICAgICAgIC0gSSBrZWVwIHRyYWNrIG9mIHdoaWNoIGJsb2NrcyBo
YXZlIHNlZW4gdGhlaXIgdHlwZXNBdEhlYWQgY2hhbmdlIHRocm91Z2ggdGhlIEJpdFZlY3RvciBt
X2Jsb2Nrc1RvVmlzaXQgYW5kIGF2b2lkIHdhc3RpbmcgdGltZSBpbiB0aGUgb3RoZXIgYmxvY2tz
ICh0aGlzIGRlc2lnbiBpcyBpbnNwaXJlZCBieSB0aGUgREZHIEFic3RyYWN0IEludGVycHJldGVy
KQorICAgICAgICAtIFVwb24gcmVhY2hpbmcgYSBicmFuY2gsIHByZWRpY3Rpb24gcHJvcGFnYXRp
b24gc3BsaXRzIGl0cyB0eXBlcyBhdCB0YWlsLCBhbmQgZmlsdGVyIHRoZW0gc2VwYXJhdGVseSBi
YXNlZCBvbiB3aGF0IHdhcyBicmFuY2hlZCBvbiwgYmVmb3JlIG1lcmdpbmcgdGhlbSB3aXRoIHRo
ZSB0eXBlcyBhdCBoZWFkIG9mIGl0cyBzdWNjZXNzb3JzCisgICAgICAgICAgICBUaGlzIGlzIHNv
bWV0aGluZyB3aGljaCBpcyBub3QgeWV0IGRvbmUgaW4gdGhlIGFic3RyYWN0IGludGVycHJldGVy
LCBhbmQgdGhhdCBJIGhvcGUgd2lsbCBnZXQgZml4ZWQgc29vbi4KKyAgICAgICAgLSBHZXRMb2Nh
bCBzdGlsbCBsb29rcyBhdCBpdHMgVmFyaWFibGVBY2Nlc3NEYXRhIGluIHRoZSBEb3VibGVWb3Rp
bmdQaGFzZSB0byBsZWFybiB0aGUgcmVzdWx0cyBvZiBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKSwg
YnV0IGltcG9ydGFudGx5IGRvZXMgbm90IGp1c3Qgb3ZlcnJpZGVzIGl0cyBwcmVkaWN0aW9uIHdp
dGggdGhlIHZhcmlhYmxlJ3MgcHJlZGljdGlvbiAoc2luY2UgaXQgd291bGQgY29tcGxldGVseSBz
YWNyaWZpY2UgdGhlIGZsb3cgc2Vuc2l0aXZpdHkpLiBJbnN0ZWFkLCBpdCB1cGRhdGVzIGl0cyBw
cmVkaWN0aW9uIGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBtX2RvdWJsZUZvcm1hdFN0YXRlLgorCisg
ICAgICAgIE90aGVyIG1pbm9yIGNoYW5nZXM6CisgICAgICAgIC0gRml4IHRoZSBwcmludGluZyBv
ZiBTcGVjdWxhdGVkVHlwZXM6IGl0IHdvdWxkIHNvbWV0aW1lcyBzaG93IE5vbkJvb2xJbnQzMnxC
b29sSW50MzIgaW5zdGVhZCBvZiBJbnQzMi4KKyAgICAgICAgLSBGaXggdGhlIHByaW50aW5nIG9m
IFNwZWN1bGF0ZWRUeXBlczogaXQgd291bGQgc2hvdyBDZWxsfEJpZ0ludCBldmVyeSB0aW1lIGl0
IHNob3VsZCBzaG93IENlbGwKKyAgICAgICAgLSBSZWZhY3RvciB2YWx1ZXNDb3VsZEJlRXF1YWws
IGFuZCB0YXVnaHQgaXQgdGhhdCBTeW1ib2xzIGNhbiBvbmx5IGJlIGVxdWFsIHRvIE9iamVjdHMg
b3IgU3ltYm9scworICAgICAgICAtIEFkZCBPcHRpb25zOjpkdW1wVW50eXBlZE9wY29kZXNBZnRl
ckZpeHVwLCBpdCBwcm92ZWQgdmVyeSB1c2VmdWwgZm9yIGZpbmRpbmcgaXNzdWVzIGluIHRoZSBw
cmVkaWN0aW9uIHByb3BhZ2F0aW9uLCBhbmQgaXQgY2FuIGFsc28gc3VnZ2VzdCBuZXcgc3BlY3Vs
YXRpdmUgb3B0aW1pemF0aW9ucyB0byB1cy4KKyAgICAgICAgICAgIEkgcmVjb21tZW5kIGR1bXBp
bmcgaXRzIHJlc3VsdHMgaW50byBhIGZpbGUsIGFuZCB0aGVuIGRvaW5nICJzb3J0IGZpbGUgfCB1
bmlxIC1jIGZpbGUgfCBzb3J0IC1uIC1yID4gcmVzdWx0RmlsZSIsIGZvbGxvd2VkIGJ5ICJncmVw
IEdldEJ5SWQgcmVzdWx0RmlsZSIgKGZvciBleGFtcGxlLCBpZiB5b3UgY2FyZSBhYm91dCBVbnR5
cGVkIEdldEJ5SWQpLgorICAgICAgICAgICAgVGhpcyB3aWxsIGdpdmUgeW91IHRoZSBwcmVkaWN0
aW9ucyBvZiB0aGUgVW50eXBlZFVzZSBHZXRCeUlkLCBieSBkZWNyZWFzaW5nIGZyZXF1ZW5jeS4K
KworICAgICAgICBFZmZlY3RzIG9uIEpTMjoKKyAgICAgICAgLSBUb3RhbCB0aW1lIHNwZW50IGlu
IFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOiAtPiA0NjcvNDY1bXMKKwkJLSBNYXggdGltZSBz
cGVudCBpbiBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTogLT4gOS45LzkuOG1zCisJCS0gTnVt
YmVyIG9mIFVudHlwZWQgQnJhbmNoZXMgYWZ0ZXIgRml4dXAgKHdpdGhvdXQgY29uY3VycmVudCBK
SVQpOgorCQktIE51bWJlciBvZiBVbnR5cGVkIEdldEJ5KiBhZnRlciBGaXh1cCAod2l0aG91dCBj
b25jdXJyZW50IEpJVCk6CisJCS0gTnVtYmVyIG9mIFVudHlwZWQgQ29tcGFyZSogYWZ0ZXIgRml4
dXAgKHdpdGhvdXQgY29uY3VycmVudCBKSVQpOgorICAgICAgICAtIFRvdGFsIG51bWJlciBvZiBE
RkcgT1NSIEV4aXRzICh3aXRob3V0IGNvbmN1cnJlbnQgSklUKQorICAgICAgICBJIGdvdCB0aGUg
Zmlyc3QgdHdvIG51bWJlcnMgZnJvbSBydW5zIHdpdGggLS11c2VDb25jdXJyZW50SklUPTEgZm9y
IHJlYWxpc20sIGFuZCB0aGUgbmV4dCBmb3VyIHdpdGggLS11c2VDb25jdXJyZW50SklUPTAgdG8g
bWluaW1pemUgdmFyaWFuY2UgZnJvbSBydW4gdG8gcnVuLgorCisgICAgICAgICogYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpkdW1wU3BlY3VsYXRpb24pOgorICAg
ICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21WYWx1ZSk6CisgICAgICAgIChKU0M6OmxlYXN0VXBw
ZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyk6CisgICAgICAgIChKU0M6OnZhbHVlc0Nv
dWxkQmVFcXVhbCk6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbVN0cmluZyk6CisgICAg
ICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAgICAgKEpTQzo6aXNPdGhlclNw
ZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6aW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMpOgor
ICAgICAgICAoSlNDOjpmaWx0ZXJTcGVjdWxhdGlvbik6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJvdHRvbVZhbHVl
TWF0Y2hpbmdTcGVjdWxhdGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGlj
dGlvbik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVB
Y2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWFrZVByZWRpY3Rpb25Gb3JEb3VibGVG
b3JtYXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMDYtMDYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgUmVzb2x2ZWRDbG9zdXJlVmFy
IHRvIGdldCBicmFuZCBmcm9tIHNjb3BlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAppbmRleCBkODExZDkxM2M4ZmUuLjA2NjFlNGMyN2I4
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3Ry
ZWFtJiBvdXRTdHJlYW0sIFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgICAgICAgICAgaXNUb3Ag
PSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYgKHZhbHVlID09IFNwZWNJbnQzMk9ubHkpCisg
ICAgaWYgKCh2YWx1ZSAmIFNwZWNJbnQzMk9ubHkpID09IFNwZWNJbnQzMk9ubHkpCiAgICAgICAg
IHN0ck91dC5wcmludCgiSW50MzIiKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKHZhbHVlICYg
U3BlY0Jvb2xJbnQzMikKQEAgLTI4NSwyMCArMjg1LDI1IEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9u
KFByaW50U3RyZWFtJiBvdXRTdHJlYW0sIFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgICAgICAg
ICAgaXNUb3AgPSBmYWxzZTsKICAgICB9CiAKKyNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKCh2
YWx1ZSAmIFNwZWNCaWdJbnQpID09IFNwZWNCaWdJbnQpCiAgICAgICAgIHN0ck91dC5wcmludCgi
QmlnSW50Iik7Ci0jaWYgVVNFKEJJR0lOVDMyKQogICAgIGVsc2UgewogICAgICAgICBpZiAodmFs
dWUgJiBTcGVjQmlnSW50MzIpCiAgICAgICAgICAgICBzdHJPdXQucHJpbnQoIkJpZ0ludDMyIik7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlzVG9wID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KHZhbHVlICYgU3BlY0hlYXBCaWdJbnQpCisgICAgICAgIC8vIERvbid0IHByaW50IEJpZ0ludCBp
ZiBpdCBpcyBhbHJlYWR5IGltcGxpZWQgYnkgQ2VsbAorICAgICAgICBpZiAoKHZhbHVlICYgU3Bl
Y0hlYXBCaWdJbnQpICYmICgodmFsdWUgJiBTcGVjQ2VsbCkgIT0gU3BlY0NlbGwpKQogICAgICAg
ICAgICAgc3RyT3V0LnByaW50KCJIZWFwQmlnSW50Iik7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGlzVG9wID0gZmFsc2U7CiAgICAgfQorI2Vsc2UKKyAgICAvLyBEb24ndCBwcmludCBCaWdJ
bnQgaWYgaXQgaXMgYWxyZWFkeSBpbXBsaWVkIGJ5IENlbGwKKyAgICBpZiAoKHZhbHVlICYgU3Bl
Y0JpZ0ludCkgJiYgKCh2YWx1ZSAmIFNwZWNDZWxsKSAhPSBTcGVjQ2VsbCkpCisgICAgICAgIHN0
ck91dC5wcmludCgiQmlnSW50Iik7CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZSAmIFNwZWNEb3Vi
bGVJbXB1cmVOYU4pCkBAIC0zMDgsMTEgKzMxMywyMCBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQ
cmludFN0cmVhbSYgb3V0U3RyZWFtLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKICAgICAgICAgc3Ry
T3V0LnByaW50KCJCb29sIik7CiAgICAgZWxzZQogICAgICAgICBpc1RvcCA9IGZhbHNlOwotICAg
IAotICAgIGlmICh2YWx1ZSAmIFNwZWNPdGhlcikKKworICAgIGlmICgodmFsdWUgJiBTcGVjT3Ro
ZXIpID09IFNwZWNPdGhlcikKICAgICAgICAgc3RyT3V0LnByaW50KCJPdGhlciIpOwotICAgIGVs
c2UKLSAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHZhbHVl
ICYgU3BlY051bGwpCisgICAgICAgICAgICBzdHJPdXQucHJpbnQoIk51bGwiKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKKworICAgICAgICBpZiAodmFsdWUgJiBT
cGVjVW5kZWZpbmVkKQorICAgICAgICAgICAgc3RyT3V0LnByaW50KCJVbmRlZmluZWQiKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAg
aWYgKHZhbHVlICYgU3BlY0VtcHR5KQogICAgICAgICBzdHJPdXQucHJpbnQoIkVtcHR5Iik7CkBA
IC02MzIsOCArNjQ2LDEwIEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpT
VmFsdWUgdmFsdWUpCiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21DZWxsKHZhbHVlLmFz
Q2VsbCgpKTsKICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHJldHVybiBTcGVj
Qm9vbGVhbjsKLSAgICBBU1NFUlQodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSk7Ci0gICAgcmV0
dXJuIFNwZWNPdGhlcjsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0
dXJuIFNwZWNVbmRlZmluZWQ7CisgICAgQVNTRVJUKHZhbHVlLmlzTnVsbCgpKTsKKyAgICByZXR1
cm4gU3BlY051bGw7CiB9CiAKIFNwZWN1bGF0ZWRUeXBlIGludDUyQXdhcmVTcGVjdWxhdGlvbkZy
b21WYWx1ZShKU1ZhbHVlIHZhbHVlKQpAQCAtNzM3LDkgKzc1MywxNCBAQCBTcGVjdWxhdGVkVHlw
ZSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxh
dGVkVHlwZSB0eQogICAgIHJldHVybiB0eXBlOwogfQogCi1zdGF0aWMgaW5saW5lIFNwZWN1bGF0
ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVk
VHlwZSB0eXBlKQorU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3Bl
Y3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiB7Ci0gICAgdHlwZSA9IGxlYXN0VXBwZXJC
b3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKHR5cGUpOworICAgIGlmICh0eXBl
ICYgU3BlY1N0cmluZykKKyAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOworCisgICAgLy8gIm51
bGwgPT0gdW5kZWZpbmVkIiByZXR1cm5zIHRydWUuCisgICAgaWYgKHR5cGUgJiBTcGVjT3RoZXIp
CisgICAgICAgIHR5cGUgfD0gU3BlY090aGVyOwogCiAgICAgLy8gQm9vbGVhbiBvciBCaWdJbnQg
Y2FuIGJlIGNvbnZlcnRlZCB0byBOdW1iZXIgd2hlbiBwZXJmb3JtaW5nIG5vbi1zdHJpY3QgZXF1
YWwuCiAgICAgaWYgKHR5cGUgJiAoU3BlY0ludEFueUZvcm1hdCB8IFNwZWNOb25JbnRBc0RvdWJs
ZSB8IFNwZWNCb29sZWFuIHwgU3BlY0JpZ0ludCkpCkBAIC03NTAsMTQgKzc3MSwyMSBAQCBzdGF0
aWMgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1
bGF0aW9ucyhTcGVjdWxhdGVkVAogCiBib29sIHZhbHVlc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVk
VHlwZSBhLCBTcGVjdWxhdGVkVHlwZSBiKQogewotICAgIGEgPSBsZWFzdFVwcGVyQm91bmRPZkVx
dWl2YWxlbnRTcGVjdWxhdGlvbnMoYSk7Ci0gICAgYiA9IGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZh
bGVudFNwZWN1bGF0aW9ucyhiKTsKLSAgICAKKyAgICAvLyBBIHN5bWJvbCBjYW4gb25seSBiZSBl
cXVhbCB0byBhIFN5bWJvbCBvciBhbiBPYmplY3QKKyAgICAvLyBJbiBwYXJ0aWN1bGFyIGl0IGNh
bm5vdCBiZSBlcXVhbCB0byBhIFN0cmluZworICAgIGlmIChpc1N5bWJvbFNwZWN1bGF0aW9uKGEp
ICYmICEoYiAmIChTcGVjT2JqZWN0IHwgU3BlY1N5bWJvbCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGlzU3ltYm9sU3BlY3VsYXRpb24oYikgJiYgIShhICYgKFNwZWNPYmplY3Qg
fCBTcGVjU3ltYm9sKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIEFueXRoaW5n
IGNvdWxkIGJlIGVxdWFsIHRvIGEgc3RyaW5nLgogICAgIGlmIChhICYgU3BlY1N0cmluZykKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGIgJiBTcGVjU3RyaW5nKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGEgPSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlv
bnMoYSk7CisgICAgYiA9IGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhi
KTsKICAgICAKICAgICAvLyBJZiBib3RoIHNpZGVzIGFyZSBkZWZpbml0ZWx5IG9ubHkgb2JqZWN0
cywgdGhlbiBlcXVhbGl0eSBpcyBmYWlybHkgc2FuZS4KICAgICBpZiAoaXNPYmplY3RTcGVjdWxh
dGlvbihhKSAmJiBpc09iamVjdFNwZWN1bGF0aW9uKGIpKQpAQCAtNzY5LDcgKzc5Nyw3IEBAIGJv
b2wgdmFsdWVzQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlIGEsIFNwZWN1bGF0ZWRUeXBlIGIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChiICYgU3BlY09iamVjdCkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBOZWl0aGVyIHNpZGUgaXMgYW4gb2JqZWN0IG9y
IHN0cmluZywgc28gdGhlIHdvcmxkIGlzIHJlbGF0aXZlbHkgc2FuZS4KICAgICByZXR1cm4gISEo
YSAmIGIpOwogfQpAQCAtMTAxOCw2ICsxMDQ2LDEwIEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0
aW9uRnJvbVN0cmluZyhjb25zdCBjaGFyKiBzcGVjdWxhdGlvbikKICAgICAgICAgcmV0dXJuIFNw
ZWNGdWxsTnVtYmVyOwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNCb29sZWFu
Iiwgc3RybGVuKCJTcGVjQm9vbGVhbiIpKSkKICAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOwor
ICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNVbmRlZmluZWQiLCBzdHJsZW4oIlNw
ZWNVbmRlZmluZWQiKSkpCisgICAgICAgIHJldHVybiBTcGVjVW5kZWZpbmVkOworICAgIGlmICgh
c3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNOdWxsIiwgc3RybGVuKCJTcGVjTnVsbCIpKSkKKyAg
ICAgICAgcmV0dXJuIFNwZWNOdWxsOwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNw
ZWNPdGhlciIsIHN0cmxlbigiU3BlY090aGVyIikpKQogICAgICAgICByZXR1cm4gU3BlY090aGVy
OwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNNaXNjIiwgc3RybGVuKCJTcGVj
TWlzYyIpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVj
dWxhdGVkVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmgKaW5kZXggOTY5Nzc4MzU1NzQxLi5jN2I5MTZkODFiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsMTggKzk3LDIw
IEBAIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0ludEFueUZvcm1hdCAgICAg
ICAgICAgICAgICAgICAgICA9IFNwZWNJbnQ1CiAKIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRl
ZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNJbnRBbnlG
b3JtYXQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBv
ciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCiBzdGF0aWMgY29u
c3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sZWFuICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAxdWxsIDw8IDQwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNv
bnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMXVsbCA8PCA0MTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVm
aW5lZC4KK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY1VuZGVmaW5lZCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDE7IC8vIEl0J3MgZGVmaW5pdGVseSBVbmRl
ZmluZWQuCitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNOdWxsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQyOyAvLyBJdCdzIGRlZmluaXRlbHkgTnVs
bC4KK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IFNwZWNVbmRlZmluZWQgfCBTcGVjTnVsbDsgLy8gSXQncyBkZWZp
bml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3Vs
YXRlZFR5cGUgU3BlY01pc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNCb29s
ZWFuIHwgU3BlY090aGVyOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVs
bCwgb3IgVW5kZWZpbmVkLgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjRW1w
dHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0MjsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KLXN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRl
ZFR5cGUgU3BlY0hlYXBCaWdJbnQgICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDM7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJpZ0ludCB0aGF0IGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVh
cAotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjQmlnSW50MzIgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgc21hbGwg
QmlnSW50IHRoYXQgaXMgaW5saW5lIHRoZSBKU1ZhbHVlCitzdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8
IDQzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFya2VyLgorc3RhdGljIGNv
bnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcEJpZ0ludCAgICAgICAgICAgICAgICAgICAg
ICAgID0gMXVsbCA8PCA0NDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQmlnSW50IHRoYXQgaXMgYWxs
b2NhdGVkIG9uIHRoZSBoZWFwCitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNC
aWdJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQ1OyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBzbWFsbCBCaWdJbnQgdGhhdCBpcyBpbmxpbmUgdGhlIEpTVmFsdWUKICNpZiBV
U0UoQklHSU5UMzIpCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCaWdJbnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVjQmlnSW50MzIgfCBTcGVjSGVhcEJpZ0lu
dDsKICNlbHNlCiAvLyBXZSBzaG91bGQgbm90IGluY2x1ZGUgU3BlY0JpZ0ludDMyLiBXZSBhcmUg
dXNpbmcgU3BlY0JpZ0ludCBpbiB2YXJpb3VzIHBsYWNlcyBsaWtlIHByZWRpY3Rpb24uIElmIHRo
aXMgaW5jbHVkZXMgU3BlY0JpZ0ludDMyLCBmaXh1cCBwaGFzZSBpcyBjb25mdXNlZCBpZiAhVVNF
KEJJR0lOVDMyKSBzaW5jZSBpdCBpcyBub3QgdXNpbmcgQW55QmlnSW50VXNlLgogc3RhdGljIGNv
bnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjQmlnSW50ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gU3BlY0hlYXBCaWdJbnQ7CiAjZW5kaWYKLXN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRl
ZFR5cGUgU3BlY0RhdGFWaWV3T2JqZWN0ICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDU7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRGF0YVZpZXcuCitzdGF0aWMgY29uc3RleHByIFNwZWN1
bGF0ZWRUeXBlIFNwZWNEYXRhVmlld09iamVjdCAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8
IDQ2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0RhdGFWaWV3Lgogc3RhdGljIGNvbnN0ZXhwciBT
cGVjdWxhdGVkVHlwZSBTcGVjUHJpbWl0aXZlICAgICAgICAgICAgICAgICAgICAgICAgID0gU3Bl
Y1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjTWlzYyB8IFNw
ZWNCaWdJbnQ7IC8vIEl0J3MgYW55IG5vbi1PYmplY3QgSlNWYWx1ZS4KIHN0YXRpYyBjb25zdGV4
cHIgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNGdW5jdGlvbiB8IFNwZWNUeXBlZEFy
cmF5VmlldyB8IFNwZWNEaXJlY3RBcmd1bWVudHMgfCBTcGVjU2NvcGVkQXJndW1lbnRzIHwgU3Bl
Y1N0cmluZ09iamVjdCB8IFNwZWNSZWdFeHBPYmplY3QgfCBTcGVjRGF0ZU9iamVjdCB8IFNwZWNQ
cm9taXNlT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjV2Vha01h
cE9iamVjdCB8IFNwZWNXZWFrU2V0T2JqZWN0IHwgU3BlY1Byb3h5T2JqZWN0IHwgU3BlY0Rlcml2
ZWRBcnJheSB8IFNwZWNPYmplY3RPdGhlciB8IFNwZWNEYXRhVmlld09iamVjdDsgLy8gQml0bWFz
ayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KIHN0
YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWND
ZWxsT3RoZXIgfCBTcGVjSGVhcEJpZ0ludDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsLgpA
QCAtNDUxLDcgKzQ1Myw3IEBAIGlubGluZSBib29sIGlzTmVpdGhlckRvdWJsZU5vckhlYXBCaWdJ
bnROb3JTdHJpbmdTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB0eXBlCiAKIGlubGluZSBib29s
IGlzT3RoZXJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
dmFsdWUgPT0gU3BlY090aGVyOworICAgIHJldHVybiAhIXZhbHVlICYmICEodmFsdWUgJiB+U3Bl
Y090aGVyKTsKIH0KIAogaW5saW5lIGJvb2wgaXNNaXNjU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCkBAIC00NTksMTEgKzQ2MSw2IEBAIGlubGluZSBib29sIGlzTWlzY1NwZWN1bGF0
aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgIHJldHVybiAhIXZhbHVlICYmICEodmFsdWUg
JiB+U3BlY01pc2MpOwogfQogCi1pbmxpbmUgYm9vbCBpc090aGVyT3JFbXB0eVNwZWN1bGF0aW9u
KFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQotewotICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUgPT0g
U3BlY090aGVyOwotfQotCiBpbmxpbmUgYm9vbCBpc0VtcHR5U3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlID09IFNwZWNFbXB0eTsKQEAgLTUwMyw2
ICs1MDAsMTYgQEAgaW5saW5lIGJvb2wgbWVyZ2VTcGVjdWxhdGlvbihUJiBsZWZ0LCBTcGVjdWxh
dGVkVHlwZSByaWdodCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitpbmxpbmUgU3BlY3VsYXRl
ZFR5cGUgaW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUgbGVmdCwgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQpCit7CisgICAgcmV0dXJuIGxlZnQgJiByaWdodDsKK30KKworaW5s
aW5lIHZvaWQgZmlsdGVyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUmIGxlZnQsIFNwZWN1bGF0
ZWRUeXBlIHJpZ2h0KQoreworICAgIGxlZnQgJj0gcmlnaHQ7Cit9CisKIGlubGluZSBib29sIHNw
ZWN1bGF0aW9uQ2hlY2tlZChTcGVjdWxhdGVkVHlwZSBhY3R1YWwsIFNwZWN1bGF0ZWRUeXBlIGRl
c2lyZWQpCiB7CiAgICAgcmV0dXJuIChhY3R1YWwgfCBkZXNpcmVkKSA9PSBkZXNpcmVkOwpAQCAt
NTI0LDYgKzUzMSw3IEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlU
eXBlKFR5cGVkQXJyYXlUeXBlKTsgLy8gb25seSB2YWxpZCBmb3IKIFR5cGVkQXJyYXlUeXBlIHR5
cGVkQXJyYXlUeXBlRnJvbVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlKTsKIAogU3BlY3VsYXRl
ZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoU3Bl
Y3VsYXRlZFR5cGUpOworU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50
U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlKTsKIAogYm9vbCB2YWx1ZXNDb3VsZEJlRXF1YWwo
U3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDNiNjFhNWZkMTk4OS4uZDg4YTAxYzEwODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC03MTAs
OSArNzEwLDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGU7CiAgICAgICAgIHN3aXRj
aCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgTm90Q2VsbE5vckJp
Z0ludFVzZTogewotICAgICAgICAgICAgaWYgKHR5cGUgJiBTcGVjT3RoZXIpIHsKLSAgICAgICAg
ICAgICAgICB0eXBlICY9IH5TcGVjT3RoZXI7Ci0gICAgICAgICAgICAgICAgdHlwZSB8PSBTcGVj
RG91YmxlUHVyZU5hTiB8IFNwZWNCb29sSW50MzI7IC8vIE51bGwgYmVjb21lcyB6ZXJvLCB1bmRl
ZmluZWQgYmVjb21lcyBOYU4uCisgICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNOdWxsKSB7Cisg
ICAgICAgICAgICAgICAgdHlwZSAmPSB+U3BlY051bGw7CisgICAgICAgICAgICAgICAgdHlwZSB8
PSBTcGVjQm9vbEludDMyOyAvLyBOdWxsIGJlY29tZXMgemVybworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBwcm9wZXJseSByZWNvcmQgaXQgYXMgYSBjb25zdGFudAorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHR5cGUgJiBTcGVjVW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAg
dHlwZSAmPSB+U3BlY1VuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNEb3Vi
bGVQdXJlTmFOOyAvLyBVbmRlZmluZWQgYmVjb21lcyBOYU4uCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHByb3Blcmx5IHJlY29yZCBpdCBhcyBhIGNvbnN0YW50CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNCb29sZWFuKSB7CiAgICAgICAgICAgICAgICAgdHlw
ZSAmPSB+U3BlY0Jvb2xlYW47CkBAIC0xNTk5LDcgKzE2MDUsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9i
YmVyTGltaQogICAgICAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgbWFzcXVlcmFkZXMtYXMtdW5k
ZWZpbmVkIHdhdGNocG9pbnQgdGhpbmd5LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDQ1NgogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIShjaGlsZC5tX3R5cGUgJiAoU3BlY090aGVyIHwgU3BlY09iamVjdE90aGVyKSkpIHsK
KyAgICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmIChTcGVjVW5kZWZpbmVkIHwgU3BlY09i
amVjdE90aGVyKSkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4oZmFsc2UpKTsKICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjE5LDE5ICsxNjI1LDE5IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICAvLyBJcyB0aGUgY2hpbGQncyB0eXBlIGFuIG9iamVjdCB0
aGF0IGlzbid0IGFuIG90aGVyLW9iamVjdCAoaS5lLiBvYmplY3QgdGhhdCBjb3VsZAogICAgICAg
ICAgICAgLy8gaGF2ZSBtYXNxdWFyZWRlcy1hcy11bmRlZmluZWQgdHJhcHMpIGFuZCBpc24ndCBh
IGZ1bmN0aW9uPyBUaGVuOiB3ZSBzaG91bGQgZm9sZAogICAgICAgICAgICAgLy8gdGhpcyB0byB0
cnVlLgotICAgICAgICAgICAgaWYgKCEoY2hpbGQubV90eXBlICYgfihTcGVjT2JqZWN0IC0gU3Bl
Y09iamVjdE90aGVyIC0gU3BlY0Z1bmN0aW9uKSkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFsc28g
Zm9sZCB0byB0cnVlIGZvciBOdWxsLgorICAgICAgICAgICAgaWYgKCEoY2hpbGQubV90eXBlICYg
figoU3BlY09iamVjdCAtIFNwZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbikgfCBTcGVjTnVs
bCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUp
KTsKICAgICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8g
SXMgdGhlIGNoaWxkJ3MgdHlwZSBkZWZpbml0ZWx5IG5vdCBlaXRoZXIgb2Y6IGFuIG9iamVjdCB0
aGF0IGlzbid0IGEgZnVuY3Rpb24sCi0gICAgICAgICAgICAvLyBvciBlaXRoZXIgdW5kZWZpbmVk
IG9yIG51bGw/IFRoZW46IHdlIHNob3VsZCBmb2xkIHRoaXMgdG8gZmFsc2UuIFRoaXMgbWVhbnMK
KyAgICAgICAgICAgIC8vIG9yIG51bGw/IFRoZW46IHdlIHNob3VsZCBmb2xkIHRoaXMgdG8gZmFs
c2UuIFRoaXMgbWVhbnMKICAgICAgICAgICAgIC8vIGZvciBleGFtcGxlIHRoYXQgaWYgaXQncyBh
bnkgbm9uLWZ1bmN0aW9uIG9iamVjdCwgaW5jbHVkaW5nIHRob3NlIHRoYXQgaGF2ZQotICAgICAg
ICAgICAgLy8gbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHRyYXBzLCB0aGVuIHdlIGRvbid0IGZv
bGQuIEl0IGFsc28gbWVhbnMgd2Ugd29uJ3QgZm9sZAotICAgICAgICAgICAgLy8gaWYgaXQncyB1
bmRlZmluZWQtb3ItbnVsbCwgc2luY2UgdGhlIHR5cGUgYml0cyBkb24ndCBkaXN0aW5ndWlzaCBi
ZXR3ZWVuCi0gICAgICAgICAgICAvLyB1bmRlZmluZWQgKHdoaWNoIHNob3VsZCBmb2xkIHRvIGZh
bHNlKSBhbmQgbnVsbCAod2hpY2ggc2hvdWxkIGZvbGQgdG8gdHJ1ZSkuCi0gICAgICAgICAgICBp
ZiAoIShjaGlsZC5tX3R5cGUgJiAoKFNwZWNPYmplY3QgLSBTcGVjRnVuY3Rpb24pIHwgU3BlY090
aGVyKSkpIHsKKyAgICAgICAgICAgIC8vIG1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5lZCB0cmFwcywg
dGhlbiB3ZSBkb24ndCBmb2xkLgorICAgICAgICAgICAgLy8gV2UgYWxzbyBmb2xkIHRvIGZhbHNl
IGZvciBVbmRlZmluZWQuCisgICAgICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiAoKFNwZWNP
YmplY3QgLSBTcGVjRnVuY3Rpb24pIHwgU3BlY051bGwpKSkgewogICAgICAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxzZSkpOwogICAgICAgICAgICAgICAgIGNvbnN0
YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5NzgsOSArMTk4
NCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChsZWZ0VHlwZSA9PSBTcGVjT3RoZXIpCisg
ICAgICAgICAgICBpZiAoIShsZWZ0VHlwZSAmIH5TcGVjT3RoZXIpKQogICAgICAgICAgICAgICAg
IHN0ZDo6c3dhcChsZWZ0VHlwZSwgcmlnaHRUeXBlKTsKLSAgICAgICAgICAgIGlmIChyaWdodFR5
cGUgPT0gU3BlY090aGVyKSB7CisgICAgICAgICAgICBpZiAoIShyaWdodFR5cGUgJiB+U3BlY090
aGVyKSkgewogICAgICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBhbmQgTnVsbCBhcmUgYWx3YXlz
IGVxdWFsIHdoZW4gY29tcGFyZWQgdG8gZWFjaG90aGVyLgogICAgICAgICAgICAgICAgIGlmICgh
KGxlZnRUeXBlICYgflNwZWNPdGhlcikpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKHRydWUpKTsKQEAgLTIzODAsNyArMjM4Niw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNVbmRl
ZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyKTsKKyAgICAgICAgICAg
IHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOyAvLyBGSVhNRTogd2hlbiBj
YW4gdGhpcyBub3QganVzdCBiZSBqc1VuZGVmaW5lZCgpPwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKQEAgLTI0MTUsNyArMjQyMSw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KCk7CiAgICAgICAgICAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkp
Ci0gICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9u
bHkgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShu
b2RlLCBTcGVjSW50MzJPbmx5IHwgU3BlY1VuZGVmaW5lZCk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDI3LDcgKzI0MzMsNyBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjQnl0ZWNvZGVEb3VibGUpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEhKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikpCi0gICAgICAgICAgICAgICAg
ICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVj
T3RoZXIpOworICAgICAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0J5dGVjb2RlRG91YmxlIHwgU3BlY1VuZGVmaW5lZCk7CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5
dGVjb2RlRG91YmxlKTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtMjU4Myw3ICsyNTg5LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHMp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKFNwZWNPdGhlcik7CisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1lcmdlKFNwZWNVbmRlZmluZWQpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAocmVzdWx0LnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRU
cnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CkBAIC0yNjI3LDEyICsyNjMzLDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnRXhwIHx8IHJlZ0V4
cC0+aGFzSW5kaWNlcygpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU2V0LmFk
ZChtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0Fy
cmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgICAgICBzZXRGb3JO
b2RlKG5vZGUsIHN0cnVjdHVyZVNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkubWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
ZXJnZShTcGVjT3RoZXIpOyAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgU3BlY1VuZGVmaW5lZD8K
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8
IFNwZWNBcnJheSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNw
ZWNBcnJheSk7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwVGVzdDoKQEAgLTI2NDUsMTIgKzI2NTEsMTIgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIFJlZ0V4cE1hdGNoRmFzdDoKICAgICAg
ICAgQVNTRVJUKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBSZWdFeHBPYmplY3RVc2UpOwog
ICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQzKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSB8fCBu
b2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gS25vd25TdHJpbmdVc2UpOwotICAgICAgICBzZXRU
eXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOworICAgICAgICBzZXRUeXBl
Rm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOyAvLyBGSVhNRTogU2hvdWxkIHRo
aXMgYmUgU3BlY1VuZGVmaW5lZD8KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJlZ0V4cE1h
dGNoRmFzdEdsb2JhbDoKICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UgfHwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IEtub3duU3RyaW5nVXNl
KTsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsK
KyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsgLy8g
RklYTUU6IFNob3VsZCB0aGlzIGJlIFNwZWNVbmRlZmluZWQ/CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgpAQCAtMzg1NCw3ICszODYwLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY09iamVjdCB8IFNwZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNPYmplY3QgfCBTcGVjT3RoZXIpOyAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgU3BlY1VuZGVm
aW5lZD8KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQyODcsMTEgKzQyOTMs
MTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgIHNldFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9k
ZShub2RlLCBTcGVjU3RyaW5nIHwgU3BlY051bGwpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIHNldFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBzZXRUeXBlRm9yTm9k
ZShub2RlLCBTcGVjU3RyaW5nIHwgU3BlY051bGwpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CkBAIC00NDMxLDcgKzQ0MzcsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICBpZiAobm9kZS0+aW50cmluc2ljKCkgPT0gQ1BVUmR0c2NJ
bnRyaW5zaWMpCiAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0lu
dDMyT25seSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNVbmRlZmluZWQpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tUcmFw
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
aW5kZXggZjgwMjM3Y2M4MzQzLi4zZjU5NWI3N2VmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC00MzYsNiArNDM2LDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleShtX2N1cnJlbnRJ
bmRleCwgbm9kZS0+b3BlcmFuZCgpKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24obG9ja2VyLCBr
ZXkpOwogICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcmVkaWN0
aW9uKTsKKyAgICAgICAgLy8gVGhlIG5leHQgbGluZSBpcyBhIGJpdCB3ZWlyZCwgc2luY2UgYWxs
IG90aGVyIG1fcHJlZGljdGlvbiBhcmUgb25seSBzZXQgaW4gUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuCisgICAgICAgIC8vIEl0cyBnb2FsIGlzIHRvIHRyYW5zbWl0IHRoZSBpbmZvcm1hdGlv
biB0byBQcmVkaWN0aW9uUHJvcGFnYXRpb24uCisgICAgICAgIC8vIElmIGl0IHdlcmUgdG8gcmVs
eSBvbiB0aGUgcHJlZGljdGlvbiBpbiB0aGUgdmFyaWFibGVBY2Nlc3NEYXRhLCBpdCB3b3VsZCBs
b3NlIHByZWNpc2lvbiwgc2luY2UgdmFyaWFibGVBY2Nlc3NEYXRhIGNhbiBiZSB1bmlmaWVkIHdp
dGggdGhlIGRhdGEgZnJvbSBvdGhlciBibG9ja3MuCisgICAgICAgIG5vZGUtPnByZWRpY3QocHJl
ZGljdGlvbik7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtMjA0MCw2ICsyMDQ0
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNh
bGxUYXJnZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwKICAgICAgICAgY291bnRWYXJpYWJsZS0+cHJl
ZGljdChTcGVjSW50MzJPbmx5KTsKICAgICAgICAgY291bnRWYXJpYWJsZS0+bWVyZ2VJc1Byb2Zp
dGFibGVUb1VuYm94KHRydWUpOwogICAgICAgICBOb2RlKiBzZXRBcmd1bWVudENvdW50ID0gYWRk
VG9HcmFwaChTZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5mbyhjb3VudFZhcmlhYmxlKSk7Cisg
ICAgICAgIHNldEFyZ3VtZW50Q291bnQtPnNldEhlYXBQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291
bnRWYXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudENvdW50KTsKICAgICAgICAgCiAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCksIGdldCh0aGlzQXJndW1lbnQp
LCBJbW1lZGlhdGVOYWtlZFNldCk7CkBAIC0yMDU3LDEzICsyMDYyLDIwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3Bl
cmFuZCByZXN1bHQsCiAgICAgICAgICAgICAvLyBwcmVkaWN0aW9ucyBmcm9tIHRoZSBhcmd1bWVu
dHMgbG9hZGVkIGF0IHRoZSBjYWxsc2l0ZSwgcmF0aGVyIHRoYW4gdGhlCiAgICAgICAgICAgICAv
LyBhcmd1bWVudHMgcmVjZWl2ZWQgaW5zaWRlIHRoZSBjYWxsZWUuIEJ1dCB0aGF0IHByb2JhYmx5
IHdvbid0IG1hdHRlciBmb3IgbW9zdAogICAgICAgICAgICAgLy8gY2FsbHMuCisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gU3BlY05vbmU7CiAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrICYmIGFyZ3VtZW50IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKSkgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSYg
cHJvZmlsZSA9IGNvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpOwot
ICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5wcmVkaWN0KHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlcikpOworICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBwcm9maWxl
LmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgobnVtU2V0QXJndW1lbnRz
ID49IG1hbmRhdG9yeU1pbmltdW0gPyBTZXRBcmd1bWVudE1heWJlIDogU2V0QXJndW1lbnREZWZp
bml0ZWx5LCBPcEluZm8odmFyaWFibGUpKTsKKworICAgICAgICAgICAgTm9kZSogc2V0QXJndW1l
bnQ7CisgICAgICAgICAgICBpZiAobnVtU2V0QXJndW1lbnRzIDwgbWFuZGF0b3J5TWluaW11bSkg
eworICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50
LT5zZXRIZWFwUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudE1heWJlLCBP
cEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudCk7CiAgICAg
ICAgICAgICArK251bVNldEFyZ3VtZW50czsKICAgICAgICAgfQpAQCAtNTE1Miw3ICs1MTY0LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaGFuZGxlQ2Fs
bCgKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcigpLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6
OlNldHRlckNhbGwsCiAgICAgICAgICAgICBvc3JFeGl0SW5kZXgsIHNldHRlciwgbnVtYmVyT2ZQ
YXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQsCi0gICAgICAgICAgICAqdmFyaWFudC5jYWxs
TGlua1N0YXR1cygpLCBTcGVjT3RoZXIsIGVjbWFNb2RlKTsKKyAgICAgICAgICAgICp2YXJpYW50
LmNhbGxMaW5rU3RhdHVzKCksIFNwZWNPdGhlciwgZWNtYU1vZGUpOyAvLyBGSVhNRTogaXMgU3Bl
Y090aGVyIHRoZSByaWdodCBjaG9pY2UgaGVyZT8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKQEAgLTUzNjYsNyArNTM3OCw4IEBAIHN0YXRpYyB1aW50NjRfdCBtYWtlRHluYW1pY1Zhck9w
SW5mbyh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCB1bnNpZ25lZCBnZXRQdXRJCiAKIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiB7Ci0gICAgYXV0byYg
aW5zdHJ1Y3Rpb25zID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2s7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KTsKICAgICBCeXRlY29kZUluZGV4IGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKIAogICAg
IC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZv
ciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCkBAIC01MzkzLDkgKzU0MDYsMTkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIGVudHJ5
cG9pbnRBcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CiAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50
LCBzZXRBcmd1bWVudCk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOworICAgICAgICB7CisgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmcgPSAwOyBhcmcgPCBtX251bUFyZ3VtZW50
czsgKythcmcpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBtX3By
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgICAgICAg
ICAgTm9kZSogc2V0QXJndW1lbnQgPSBlbnRyeXBvaW50QXJndW1lbnRzW2FyZ107CisgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnQtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0KHR5cGUpOworICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50LT5z
ZXRIZWFwUHJlZGljdGlvbih0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
IAogICAgIGF1dG8ganVtcFRhcmdldCA9IFsmXShpbnQgdGFyZ2V0KSB7CiAgICAgICAgIGlmICh0
YXJnZXQpCkBAIC03MTExLDYgKzcxMzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3Vt
ZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudERlZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkp
OwogICAgICAgICAgICAgICAgICAgICBzZXRBcmd1bWVudC0+b3JpZ2luLmZvckV4aXQgPSBDb2Rl
T3JpZ2luKGV4aXRCeXRlY29kZUluZGV4LCBzZXRBcmd1bWVudC0+b3JpZ2luLmZvckV4aXQuaW5s
aW5lQ2FsbEZyYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBzZXRBcmd1bWVudC0+c2V0SGVh
cFByZWRpY3Rpb24oYXJndW1lbnRQcmVkaWN0aW9uc1thcmd1bWVudF0pOwogICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RU
aW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnRBcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7CiAgICAgICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggYjZkYWJi
NGNhZmRjLi5mMzRmYmY3YTgzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcApAQCAtMjg5OSw2ICsyODk5LDQ0IEBAIHByaXZhdGU6CiAjZW5kaWYgLy8g
bm90IEFTU0VSVF9FTkFCTEVECiAgICAgICAgIH0KIAorICAgICAgICBpZiAoT3B0aW9uczo6ZHVt
cFVudHlwZWRPcGNvZGVzQWZ0ZXJGaXh1cCgpKSB7CisgICAgICAgICAgICBzd2l0Y2gobm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKKyAgICAgICAg
ICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5
SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CisgICAgICAgICAg
ICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVj
a1ByaXZhdGVCcmFuZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyU2V0UHJpdmF0ZUJy
YW5kU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgY2FzZSBG
bHVzaDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBDYWxs
OgorICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tOb3RF
bXB0eToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAg
ICAgICAgICAgICAgICBib29sIGhhc0F0TGVhc3RPbmVDaGlsZCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGJvb2wgYWxsQ2hpbGRyZW5BcmVVbnR5cGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2RlLCBbJl0oRWRnZSBlZGdlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGhhc0F0TGVhc3RPbmVDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsQ2hpbGRyZW5BcmVVbnR5cGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGhhc0F0TGVhc3RPbmVDaGlsZCAmJiBhbGxDaGlsZHJlbkFyZVVu
dHlwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhtX2dyYXBoLm9wTmFtZShub2Rl
LT5vcCgpKSwgIjogIik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVu
KG5vZGUsIFsmXShFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTcGVj
dWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIGVkZ2UtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGludmFsaWQgZm9yIEZpeHVwIHRvIHRha2UgYSBub2Rl
IHRoYXQgZGlkbid0IGNsb2JiZXIgZXhpdCBzdGF0ZSBhbmQgbWFyayBpdCBhcyBjbG9iYmVyaW5n
IGFmdGVyd29yZHMuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdXNlZFRvQ2xv
YmJlckV4aXRTdGF0ZSB8fCAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbm9kZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCAxMTEwMDgyNjAzOTguLjFmOGM4
YzYxNzg1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTE1MTMs
OSArMTUxMywxMiBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmJvdHRvbVZhbHVlTWF0Y2hpbmdTcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIGlmIChwcmVkaWN0aW9uID09
IFNwZWNOb25lKQogICAgICAgICByZXR1cm4gZnJlZXplKEpTVmFsdWUoKSk7CiAKLSAgICBpZiAo
c3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjT3RoZXIpKQorICAgIGlmIChzcGVj
dWxhdGlvbkNvbnRhaW5zKHByZWRpY3Rpb24sIFNwZWNOdWxsKSkKICAgICAgICAgcmV0dXJuIGZy
ZWV6ZShqc051bGwoKSk7CiAKKyAgICBpZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0aW9u
LCBTcGVjVW5kZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuIGZyZWV6ZShqc1VuZGVmaW5lZCgpKTsK
KwogICAgIGlmIChzcGVjdWxhdGlvbkNvbnRhaW5zKHByZWRpY3Rpb24sIFNwZWNCb29sZWFuKSkK
ICAgICAgICAgcmV0dXJuIGZyZWV6ZShqc0Jvb2xlYW4odHJ1ZSkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCmluZGV4IDM1Y2Q1NGM4YTIxZS4uYmQyYzI0MzZkYzVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMTgzNiw2ICsxODM2LDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIERhdGFWaWV3R2V0SW50OgogICAgICAgICBjYXNlIERhdGFWaWV3R2V0Rmxv
YXQ6CiAgICAgICAgIGNhc2UgRGF0ZUdldEludDMyT3JOYU46CisgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKaW5kZXggOTg2
NjJmYTU5YmE5Li4xNzcxNTU0MzI1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKQEAgLTQ2LDIxICs0
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVk
Q1BTKTsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2Jh
bGx5VW5pZmllZCk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSA+PSAxKTsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihwcm9maWxlZEJsb2NrKCktPm1fbG9jayk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGFyZ3VtZW50cyBhdCB0aGUgZmlyc3Qg
YmxvY2suIFRoZSBhcmd1bWVudHMgZnJvbQotICAgICAgICAgICAgLy8gb3RoZXIgZW50cnlwb2lu
dHMgaGF2ZSBhbHJlYWR5IGJlZW4gcG9wdWxhdGVkIHdpdGggdGhlaXIgcHJlZGljdGlvbnMuCi0g
ICAgICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLmZp
bmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBh
cmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCkpOyArK2FyZykgewotICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9
IHByb2ZpbGVkQmxvY2soKS0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKLSAgICAgICAg
ICAgICAgICBhcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCi0g
ICAgICAgICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
cikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCmluZGV4IDQzMjliZTVhNWZjOS4uMGI4OTRkZTQ3MDhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAor
I2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRl
ICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3BlY3VsYXRlZFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBA
IC00Miw3ICs0NCwxMiBAQCBjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UoR3JhcGgm
IGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAicHJlZGljdGlvbiBwcm9wYWdhdGlvbiIp
CisgICAgICAgICwgbV90eXBlc0F0SGVhZChncmFwaCkKKyAgICAgICAgLCBtX2Jsb2Nrc1RvVmlz
aXQobV9ncmFwaC5udW1CbG9ja3MoKSkKKyAgICAgICAgLCBtX2Jsb2Nrc1RvVmlzaXRJblJhcmVD
YXNlUGFzcyhtX2dyYXBoLm51bUJsb2NrcygpKQogICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAgICAg
IG1fdHlwZXNBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KE9wZXJhbmRz
TGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgU3BlY05vbmUpOwogICAgIH0KICAgICAKICAg
ICBib29sIHJ1bigpCkBAIC01Niw5ICs2MywxMyBAQCBwdWJsaWM6CiAKICAgICAgICAgcHJvY2Vz
c0ludmFyaWFudHMoKTsKIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQorICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1
aWNrU2V0KGJsb2NrLT5pbmRleCk7CiAgICAgICAgIHByb3BhZ2F0ZVRvRml4cG9pbnQoKTsKICAg
ICAgICAgCiAgICAgICAgIG1fcGFzcyA9IFJhcmVDYXNlUGFzczsKKyAgICAgICAgLy8gRklYTUU6
IEdldHRpbmcgcmlkIG9mIHRoaXMgc2Vjb25kIHBhc3MgYWx0b2dldGhlciB3b3VsZCBiZSBhdHRy
YWN0aXZlLgorICAgICAgICBtX2Jsb2Nrc1RvVmlzaXQgPSBtX2Jsb2Nrc1RvVmlzaXRJblJhcmVD
YXNlUGFzczsKICAgICAgICAgcHJvcGFnYXRlVG9GaXhwb2ludCgpOwogICAgICAgICAKICAgICAg
ICAgbV9wYXNzID0gRG91YmxlVm90aW5nUGFzczsKQEAgLTcyLDcgKzgzLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJk
KCk7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB0ZXJyaWJsZSwgd2FzIHByb3BhZ2F0
ZUZvcndhcmQoKTsKKyAgICAgICAgICAgIC8vIEF0IHRoZSB2ZXJ5IGxlYXN0LCBJIHNob3VsZCBr
ZWVwIHRyYWNrIG9mIHdoaWNoIEJCcyBnb3QgZnJlc2ggaW5mb3JtYXRpb24gZnJvbSBkb1JvdW5k
T2ZEb3VibGVWb3RpbmcoKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICAgICAgbV9ibG9ja3NU
b1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAgICAgICBwcm9wYWdhdGVUb0Zp
eHBvaW50KCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CiAKICAgICAgICAgaWYgKHZl
cmJvc2VGaXhQb2ludExvb3BzKQpAQCAtODQsMzEgKzk5LDIzMiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHZvaWQgcHJvcGFnYXRlVG9GaXhwb2ludCgpCiAgICAgeworICAgICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICAgICAgdW5zaWduZWQgY291bnRlciA9IDA7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlRml4UG9pbnRMb29wcykKICAgICAgICAgICAgICAg
ICArK2NvdW50ZXI7CiAKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAg
ICAgY2hhbmdlZCA9IGZhbHNlOwogCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHByb3BhZ2F0aW9u
IGlzIG5lYXItb3B0aW1hbCBmb3IgYm90aCB0b3BvbG9naWNhbGx5LXNvcnRlZCBhbmQKLSAgICAg
ICAgICAgIC8vIERGUy1zb3J0ZWQgY29kZS4KLSAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQo
KTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2Vz
IHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAgICAgICAgICAg
Ly8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJs
ZSBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBj
YXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAgICAgICAgICAg
IC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2Fy
ZCBmbG93LgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9w
YWdhdGVCYWNrd2FyZCgpOwotICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4IDogbV9ibG9ja3NUb1Zpc2l0KSB7CisgICAgICAg
ICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrQ2xlYXIoYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcHJvcGFnYXRlVGhyb3VnaEJsb2NrKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHJlc3VsdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2VGaXhQb2lu
dExvb3BzKQogICAgICAgICAgICAgZGF0YUxvZygiSXRlcmF0ZWQgIiwgY291bnRlciwgIiB0aW1l
cyBpbiBwcm9wYWdhdGVUb0ZpeHBvaW50LlxuIik7CiAgICAgfQotICAgIAorCisgICAgYm9vbCBw
cm9wYWdhdGVUaHJvdWdoQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBP
cGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gY3VycmVudFR5cGVzID0gbV90eXBlc0F0SGVhZFtibG9j
a107CisgICAgICAgIE9wZXJhbmRzPHVuc2lnbmVkPiBsYXN0VGltZU92ZXJ3cml0dGVuIHsgT3Bl
cmFuZHNMaWtlLCBjdXJyZW50VHlwZXMsIDAgfTsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
KmJsb2NrKSB7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gbm9kZTsKKyAgICAgICAgICAg
IHByb3BhZ2F0ZShub2RlLCBjdXJyZW50VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAg
ICAgICB9CisKKyAgICAgICAgTm9kZSogdGVybWluYWwgPSBibG9jay0+dGVybWluYWwoKTsKKyAg
ICAgICAgaWYgKHRlcm1pbmFsLT5vcCgpID09IEJyYW5jaCkKKyAgICAgICAgICAgIHJldHVybiBw
cm9wYWdhdGVUb1N1Y2Nlc3NvcnNUaHJvdWdoQnJhbmNoKHRlcm1pbmFsLCBjdXJyZW50VHlwZXMs
IGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAgICAgICByZXR1cm4gcHJvcGFnYXRlVG9TdWNjZXNz
b3JzR2VuZXJpYyhibG9jaywgY3VycmVudFR5cGVzKTsKKyAgICB9CisKKyAgICBib29sIHByb3Bh
Z2F0ZVRvU3VjY2Vzc29yc0dlbmVyaWMoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IE9wZXJhbmRz
PFNwZWN1bGF0ZWRUeXBlPiYgY3VycmVudFR5cGVzKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2st
PnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgQVNTRVJUKCEhc3VjY2Vzc29yKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChzdWNjZXNzb3IsIGN1cnJl
bnRUeXBlcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGNoYW5nZWQgdGhlIG9sZCB0eXBlcyBhdCBoZWFkLgor
ICAgIC8vIEl0IGFsc28gdXBkYXRlcyBtX2Jsb2Nrc1RvVmlzaXQuCisgICAgYm9vbCBtZXJnZVBy
ZWRpY3Rpb25zQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIGluY29taW5nVHlwZXMpCisgICAgeworICAgICAgICBPcGVyYW5kczxTcGVjdWxh
dGVkVHlwZT4mIG9sZFR5cGVzID0gbV90eXBlc0F0SGVhZFtibG9ja107CisgICAgICAgIEFTU0VS
VChvbGRUeXBlcy5udW1iZXJPZkFyZ3VtZW50cygpID09IGluY29taW5nVHlwZXMubnVtYmVyT2ZB
cmd1bWVudHMoKSk7CisgICAgICAgIEFTU0VSVChvbGRUeXBlcy5udW1iZXJPZkxvY2FscygpID09
IGluY29taW5nVHlwZXMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChvbGRUeXBl
cy5udW1iZXJPZlRtcHMoKSA9PSBpbmNvbWluZ1R5cGVzLm51bWJlck9mVG1wcygpKTsKKworICAg
ICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb2xkVHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFi
bGVzQXRIZWFkW2ldKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVNwZWN1bGF0aW9u
KG9sZFR5cGVzW2ldLCBpbmNvbWluZ1R5cGVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRl
eCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBwcm9wYWdhdGVU
b1N1Y2Nlc3NvcnNUaHJvdWdoQnJhbmNoKE5vZGUqIGJyYW5jaCwgT3BlcmFuZHM8U3BlY3VsYXRl
ZFR5cGU+JiBjdXJyZW50VHlwZXMsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVkPiBsYXN0VGltZU92
ZXJ3cml0dGVuKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJyYW5jaC0+b3AoKSA9PSBCcmFuY2gp
OworCisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiB0eXBlc0Fsb25nVHJ1ZUJyYW5j
aCA9IGN1cnJlbnRUeXBlczsKKyAgICAgICAgLy8gV2UgcmV1c2UgY3VycmVudFR5cGVzIGZvciB0
eXBlc0Fsb25nRmFsc2VCcmFuY2gsIGluc3RlYWQgb2YgbWFraW5nIGFub3RoZXIgY29weS4KKyAg
ICAgICAgZmlsdGVyU3BlY3VsYXRpb25zQmFzZWRPblRydXRoaW5lc3MoYnJhbmNoLT5jaGlsZDEo
KS5ub2RlKCksIHR5cGVzQWxvbmdUcnVlQnJhbmNoLCBjdXJyZW50VHlwZXMsIGxhc3RUaW1lT3Zl
cndyaXR0ZW4pOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKGJyYW5jaC0+c3VjY2Vzc29yRm9yQ29uZGl0aW9u
KHRydWUpLCB0eXBlc0Fsb25nVHJ1ZUJyYW5jaCk7CisgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uc0F0SGVhZChicmFuY2gtPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihmYWxzZSksIGN1
cnJlbnRUeXBlcyk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIHZvaWQg
ZmlsdGVyU3BlY3VsYXRpb25zQmFzZWRPblRydXRoaW5lc3MoTm9kZSogbm9kZSwgT3BlcmFuZHM8
U3BlY3VsYXRlZFR5cGU+JiB0cnV0aHlUeXBlcywgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+IGZh
bHN5VHlwZXMsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVkPiBsYXN0VGltZU92ZXJ3cml0dGVuKQor
ICAgIHsKKyAgICAgICAgYXV0byBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRM
b2NhbCA9IFsmXSAoTm9kZSogbWF5YmVHZXRMb2NhbCwgU3BlY3VsYXRlZFR5cGUgdHJ1dGh5Rmls
dGVyLCBTcGVjdWxhdGVkVHlwZSBmYWxzeUZpbHRlcikgeworICAgICAgICAgICAgaWYgKG1heWJl
R2V0TG9jYWwtPm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbWF5YmVHZXRMb2NhbC0+b3BlcmFuZCgpOworICAg
ICAgICAgICAgLy8gSGF2aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgR2V0TG9jYWwgZG9lcyBu
b3QgdGVsbCB1cyBhbnl0aGluZyBhYm91dCB0aGUgb3BlcmFuZCBhdCB0aGUgZW5kIG9mIHRoZSBi
bG9jayBpZiB0aGVyZSBpcyBhbiBpbnRlcnZlbmluZyBTZXRMb2NhbC4KKyAgICAgICAgICAgIGlm
IChsYXN0VGltZU92ZXJ3cml0dGVuLm9wZXJhbmQob3BlcmFuZCkgPiBtYXliZUdldExvY2FsLT5p
bmRleCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1
bGF0aW9uKHRydXRoeVR5cGVzLm9wZXJhbmQob3BlcmFuZCksIHRydXRoeUZpbHRlcik7CisgICAg
ICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihmYWxzeVR5cGVzLm9wZXJhbmQob3BlcmFuZCksIGZh
bHN5RmlsdGVyKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGSVhNRTogcHJldHR5IG11Y2gg
YWxsIG9mIHRoZXNlIGNhc2VzIGNvdWxkIHNoYXJlIGNvZGUgd2l0aCB0aGUgQWJzdHJhY3RJbnRl
cnByZXRlci4KKyAgICAgICAgLy8gRklYTUU6IGFsc28gaW4gdGhlb3J5IHdlIGNvdWxkIGRvIG11
Y2ggZmFuY2llciB0aGluZ3MsIGxpa2Ugb3B0aW1pemluZyBhIHN3aXRjaCBvbiB0aGUgcmVzdWx0
IG9mIGEgVHlwZU9mLgorICAgICAgICAvLyAgIEl0IGZlZWxzIG92ZXJraWxsIHVubGVzcyB3ZSBh
Y3R1YWxseSBzZWUgdGhhdCBpbiBhIG1ham9yIGJlbmNobWFyaywgb3IgY2FuIHNoYXJlIHRoYXQg
Y29kZSB3aXRoIHRoZSBBSS4KKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNhbm5vdEJlVHJ1
dGh5VHlwZSA9IFNwZWNEb3VibGVOYU4gfCBTcGVjT3RoZXI7CisgICAgICAgICAgICBmaWx0ZXJT
cGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCB+Y2Fubm90QmVUcnV0aHlU
eXBlLCBTcGVjSGVhcFRvcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAgIE5vZGUqIGxlZnROb2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgTm9kZSogcmlnaHROb2RlID0gbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKGxlZnROb2RlLT5vcCgpICE9IEdl
dExvY2FsICYmIHJpZ2h0Tm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRQcmVkaWN0aW9uID0gbGVmdE5v
ZGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0UHJlZGlj
dGlvbiA9IHJpZ2h0Tm9kZS0+cHJlZGljdGlvbigpOworCisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBsZWZ0VHJ1ZVByZWRpY3Rpb24gPSBpbnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhsZWZ0
UHJlZGljdGlvbiwgbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlv
bnMocmlnaHRQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFRy
dWVQcmVkaWN0aW9uID0gaW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMocmlnaHRQcmVkaWN0aW9u
LCBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhsZWZ0UHJl
ZGljdGlvbikpOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0RmFsc2VQcmVkaWN0
aW9uID0gbGVmdFByZWRpY3Rpb247CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodEZh
bHNlUHJlZGljdGlvbiA9IHJpZ2h0UHJlZGljdGlvbjsKKyAgICAgICAgICAgIGlmIChsZWZ0UHJl
ZGljdGlvbiA9PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihy
aWdodEZhbHNlUHJlZGljdGlvbiwgflNwZWNOdWxsKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxl
ZnRQcmVkaWN0aW9uID09IFNwZWNVbmRlZmluZWQpCisgICAgICAgICAgICAgICAgZmlsdGVyU3Bl
Y3VsYXRpb24ocmlnaHRGYWxzZVByZWRpY3Rpb24sIH5TcGVjVW5kZWZpbmVkKTsKKyAgICAgICAg
ICAgIGlmIChyaWdodFByZWRpY3Rpb24gPT0gU3BlY051bGwpCisgICAgICAgICAgICAgICAgZmls
dGVyU3BlY3VsYXRpb24obGVmdEZhbHNlUHJlZGljdGlvbiwgflNwZWNOdWxsKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHJpZ2h0UHJlZGljdGlvbiA9PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAg
ICBmaWx0ZXJTcGVjdWxhdGlvbihsZWZ0RmFsc2VQcmVkaWN0aW9uLCB+U3BlY1VuZGVmaW5lZCk7
CisKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2Fs
KGxlZnROb2RlLCBsZWZ0VHJ1ZVByZWRpY3Rpb24sIGxlZnRGYWxzZVByZWRpY3Rpb24pOworICAg
ICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwocmlnaHRO
b2RlLCByaWdodFRydWVQcmVkaWN0aW9uLCByaWdodEZhbHNlUHJlZGljdGlvbik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAgICAg
ICAgICAgIC8vIFRoZSBsb2dpYyBvZiB0aGlzIGNhc2UgY2xvc2VseSBmb2xsb3dzIHZhbHVlc0Nv
dWxkQmVFcXVhbCgpIGluIFNwZWN1bGF0ZWRUeXBlLmNwcAorICAgICAgICAgICAgTm9kZSogbGVm
dE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBOb2RlKiByaWdodE5v
ZGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAgICAgICAgICBpZiAobGVmdE5vZGUtPm9w
KCkgIT0gR2V0TG9jYWwgJiYgcmlnaHROb2RlLT5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdFByZWRpY3Rpb24g
PSBsZWZ0Tm9kZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHRQcmVkaWN0aW9uID0gcmlnaHROb2RlLT5wcmVkaWN0aW9uKCk7CisKKyAgICAgICAgICAgIC8v
IE9ubHkgYSBzeW1ib2wgb3IgYW4gb2JqZWN0IGNhbiBiZSBlcXVhbCB0byBhIHN5bWJvbAorICAg
ICAgICAgICAgaWYgKGxlZnRQcmVkaWN0aW9uID09IFNwZWNTeW1ib2wpIHsKKyAgICAgICAgICAg
ICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChyaWdodE5vZGUs
IFNwZWNTeW1ib2wgfCBTcGVjT2JqZWN0LCBTcGVjSGVhcFRvcCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJpZ2h0UHJlZGljdGlvbiA9
PSBTcGVjU3ltYm9sKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92
ZXJ3cml0dGVuR2V0TG9jYWwobGVmdE5vZGUsIFNwZWNTeW1ib2wgfCBTcGVjT2JqZWN0LCBTcGVj
SGVhcFRvcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBQcmV0dHkgbXVjaCBhbnl0aGluZyBjYW4gYmUgZXF1YWwgdG8gYSBTdHJpbmcs
IHNvIHdlIGdldCBubyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaWYgKChsZWZ0UHJlZGljdGlv
biAmIFNwZWNTdHJpbmcpIHx8IChyaWdodFByZWRpY3Rpb24gJiBTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIGJvdGggc2lkZXMgYXJlIGRl
ZmluaXRlbHkgb25seSBvYmplY3RzLCB0aGVuIGVxdWFsaXR5IGlzIGZhaXJseSBzYW5lLgorICAg
ICAgICAgICAgLy8gU2FtZSBpZiBuZWl0aGVyIGNhbiBiZSBhbiBvYmplY3QKKyAgICAgICAgICAg
IGJvb2wgaXNTYW5lID0gaXNPYmplY3RTcGVjdWxhdGlvbihsZWZ0UHJlZGljdGlvbikgJiYgaXNP
YmplY3RTcGVjdWxhdGlvbihyaWdodFByZWRpY3Rpb24pOworICAgICAgICAgICAgaXNTYW5lIHw9
ICEobGVmdFByZWRpY3Rpb24gJiBTcGVjT2JqZWN0KSAmJiAhKHJpZ2h0UHJlZGljdGlvbiAmIFNw
ZWNPYmplY3QpOworICAgICAgICAgICAgaWYgKCFpc1NhbmUpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0VHJ1ZVByZWRpY3Rpb24gPSBp
bnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhsZWZ0UHJlZGljdGlvbiwgbGVhc3RVcHBlckJvdW5k
T2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKHJpZ2h0UHJlZGljdGlvbikpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcmlnaHRUcnVlUHJlZGljdGlvbiA9IGludGVyc2VjdGlvbk9mU3BlY3Vs
YXRpb25zKHJpZ2h0UHJlZGljdGlvbiwgbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3Vs
YXRpb25zKGxlZnRQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklm
Tm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChsZWZ0Tm9kZSwgbGVmdFRydWVQcmVkaWN0aW9uLCBTcGVj
SGVhcFRvcCk7CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5H
ZXRMb2NhbChyaWdodE5vZGUsIHJpZ2h0VHJ1ZVByZWRpY3Rpb24sIFNwZWNIZWFwVG9wKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRvQm9vbGVhbjoKKyAg
ICAgICAgICAgIHJldHVybiBmaWx0ZXJTcGVjdWxhdGlvbnNCYXNlZE9uVHJ1dGhpbmVzcyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIHRydXRoeVR5cGVzLCBmYWxzeVR5cGVzLCBsYXN0VGltZU92ZXJ3
cml0dGVuKTsKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJuIGZp
bHRlclNwZWN1bGF0aW9uc0Jhc2VkT25UcnV0aGluZXNzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
ZmFsc3lUeXBlcywgdHJ1dGh5VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAgICAgICBj
YXNlIElzVW5kZWZpbmVkT3JOdWxsOgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5v
bk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY090aGVyLCB+U3BlY090aGVyKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBJc0Jvb2xlYW46CisgICAgICAgICAgICBmaWx0
ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBTcGVjQm9vbGVhbiwg
flNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBJc051bWJl
cjoKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2Fs
KG5vZGUsIFNwZWNGdWxsTnVtYmVyLCB+U3BlY0Z1bGxOdW1iZXIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIElzQmlnSW50OgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRp
b25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY0JpZ0ludCwgflNwZWNCaWdJbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzVHlwZWRBcnJheVZpZXc6Cisg
ICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2Rl
LCBTcGVjVHlwZWRBcnJheVZpZXcsIH5TcGVjVHlwZWRBcnJheVZpZXcpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICAgICAgZmlsdGVyU3BlY3Vs
YXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY09iamVjdCwgflNwZWNPYmpl
Y3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzRW1wdHk6CisgICAgICAg
ICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBTcGVj
RW1wdHksIH5TcGVjRW1wdHkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFR5
cGVPZklzVW5kZWZpbmVkOgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3
cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY09iamVjdE90aGVyIHwgU3BlY1VuZGVmaW5lZCwgflNw
ZWNVbmRlZmluZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFR5cGVPZklz
T2JqZWN0OiB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYml0IHN1YnRsZS4KKyAgICAgICAg
ICAgIC8vIC0gTnVsbCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBUcnVlLgorICAgICAgICAgICAg
Ly8gLSBUaGUgc2FtZSBpcyB0cnVlIG9mIGV2ZXJ5dGhpbmcgaW4gU3BlY09iamVjdCAtIFNwZWNP
YmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbi4KKyAgICAgICAgICAgIC8vIC0gQnV0IFNwZWNPYmpl
Y3RPdGhlciBjYW4gcmV0dXJuIGVpdGhlciBUcnVlIG9yIEZhbHNlCisgICAgICAgICAgICAvLyAt
IEZpbmFsbHksIGV2ZXJ5dGhpbmcgZWxzZSByZXR1cm5zIEZhbHNlLgorICAgICAgICAgICAgLy8g
U2VlIHRoZSBjb21tZW50IGluIGV4ZWN1dGVFZmZlY3RzKCkgKGluIERGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgpIGZvciBkZXRhaWxzCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBt
YXlSZXR1cm5UcnVlID0gKChTcGVjT2JqZWN0IC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxsKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVybkZhbHNlID0gfigoU3BlY09iamVj
dCAtIFNwZWNPYmplY3RPdGhlciAtIFNwZWNGdW5jdGlvbikgfCBTcGVjTnVsbCk7CisgICAgICAg
ICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBtYXlS
ZXR1cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBUeXBlT2ZJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIElzQ2FsbGFi
bGU6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVyblRydWUgPSBTcGVjRnVu
Y3Rpb24gfCBTcGVjT2JqZWN0T3RoZXIgfCBTcGVjUHJveHlPYmplY3Q7CisgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBtYXlSZXR1cm5GYWxzZSA9IH5TcGVjRnVuY3Rpb247CisgICAgICAgICAg
ICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBtYXlSZXR1
cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBJc0NlbGxXaXRoVHlwZTogeworICAgICAgICAgICAgaWYgKGF1dG8gcXVl
cmllZFR5cGUgPSBub2RlLT5zcGVjdWxhdGVkVHlwZUZvclF1ZXJ5KCkpCisgICAgICAgICAgICAg
ICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgKnF1ZXJp
ZWRUeXBlLCB+KnF1ZXJpZWRUeXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCBTcGVjQ2Vs
bCwgU3BlY0hlYXBUb3ApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgICAgICBjYXNlIEhhc0Vu
dW1lcmFibGVQcm9wZXJ0eToKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVy
d3JpdHRlbkdldExvY2FsKG5vZGUsIH5TcGVjT3RoZXIsIFNwZWNIZWFwVG9wKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIGJvb2wgc2V0UHJlZGljdGlvbihTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPmhhc1Jlc3VsdCgp
KTsKQEAgLTE0Niw3ICszNjIsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRl
ZERvdWJsZVR5cGVGb3JQcmVkaWN0aW9uKG1lcmdlU3BlY3VsYXRpb25zKGxlZnQsIHJpZ2h0KSk7
CiAgICAgfQogCi0gICAgdm9pZCBwcm9wYWdhdGUoTm9kZSogbm9kZSkKKyAgICB2b2lkIHByb3Bh
Z2F0ZShOb2RlKiBub2RlLCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIHR5cGVzLCBPcGVyYW5k
czx1bnNpZ25lZD4mIGxhc3RUaW1lT3ZlcndyaXR0ZW4pCiAgICAgewogICAgICAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUtPm9wKCk7CiAKQEAgLTE1NSw3ICszNzEsOSBAQCBwcml2YXRlOgogICAgICAg
ICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGlj
dGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHR5cGVzLm9w
ZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKKyAgICAgICAgICAgIGlmIChtX3Bhc3MgPT0gRG91Ymxl
Vm90aW5nUGFzcykKKyAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gdmFyaWFibGUtPm1ha2VQ
cmVkaWN0aW9uRm9yRG91YmxlRm9ybWF0KHByZWRpY3Rpb24pOwogICAgICAgICAgICAgaWYgKCF2
YXJpYWJsZS0+Y291bGRSZXByZXNlbnRJbnQ1MigpICYmIChwcmVkaWN0aW9uICYgU3BlY05vbklu
dDMyQXNJbnQ1MikpCiAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IChwcmVkaWN0aW9uIHwg
U3BlY0FueUludEFzRG91YmxlKSAmIH5TcGVjTm9uSW50MzJBc0ludDUyOwogICAgICAgICAgICAg
aWYgKHByZWRpY3Rpb24pCkBAIC0xNjQsOCArMzgyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRp
Y3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QodHlwZSk7CisgICAg
ICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICB0
eXBlcy5vcGVyYW5kKG9wZXJhbmQpID0gdHlwZTsKKyAgICAgICAgICAgIGxhc3RUaW1lT3Zlcndy
aXR0ZW4ub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmluZGV4KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OiB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSYgdHlwZUF0SGVhZCA9IHR5cGVzLm9wZXJhbmQobV9j
dXJyZW50Tm9kZS0+b3BlcmFuZCgpKTsKKyAgICAgICAgICAgIGlmICh0eXBlQXRIZWFkID09IFNw
ZWNOb25lKQorICAgICAgICAgICAgICAgIHR5cGVBdEhlYWQgPSBtX2N1cnJlbnROb2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjMy
LDIyICs4NjAsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwog
ICAgIH0KLSAgICAgICAgCi0gICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJkKCkKLSAgICB7Ci0gICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6IG1fZGVwZW5kZW50Tm9kZXMpIHsKLSAgICAgICAgICAgIG1f
Y3VycmVudE5vZGUgPSBub2RlOwotICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2RlcGVuZGVudE5vZGVzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1fZGVwZW5kZW50Tm9kZXNbaV07Ci0g
ICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7Ci0gICAgICAgIH0KLSAgICB9CiAg
ICAgCiAgICAgdm9pZCBkb0RvdWJsZVZvdGluZyhOb2RlKiBub2RlLCBmbG9hdCB3ZWlnaHQpCiAg
ICAgewpAQCAtODI4LDEyICsxMDQwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKICAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewogICAgICAgICAgICAgICAgIG1fY3VycmVu
dE5vZGUgPSBub2RlOwotICAgICAgICAgICAgICAgIHByb2Nlc3NJbnZhcmlhbnRzRm9yTm9kZSgp
OworICAgICAgICAgICAgICAgIHByb2Nlc3NJbnZhcmlhbnRzRm9yTm9kZShibG9jayk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHByb2Nlc3NJbnZhcmlhbnRz
Rm9yTm9kZSgpCisgICAgdm9pZCBwcm9jZXNzSW52YXJpYW50c0Zvck5vZGUoQmFzaWNCbG9jayog
YmxvY2spCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fY3VycmVudE5vZGUtPm9wKCkpIHsKICAg
ICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CkBAIC0xMDY3LDYgKzEyNzksNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZTogeworICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGJlIHNvbWV0aGluZyBt
b3JlIHByZWNpc2U/CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPdGhlcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIyOCwxMSArMTQ0MSwxMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwg
fCBTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNO
dWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0RW51
bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2Vs
bCB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3Bl
Y051bGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUb0lu
ZGV4U3RyaW5nOiB7CkBAIC0xMjU4LDI3ICsxNDcxLDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgb25seSBub2Rl
cyBmb3Igd2hpY2ggdGhlIEJ5dGVjb2RlUGFyc2VyIHNvbWV0aW1lcyBzZXRzIE5vZGVNYXlPdmVy
Zmxvd0ludDMySW5CYXNlbGluZSBhbmQvb3IgTm9kZU1heU5lZ1plcm9JbkJhc2VsaW5lCisgICAg
ICAgIGNhc2UgVmFsdWVOZWdhdGU6CisgICAgICAgIGNhc2UgVmFsdWVNdWw6CisgICAgICAgIGNh
c2UgVmFsdWVEaXY6CisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgICAgIGNhc2UgQXJp
dGhEaXY6CisgICAgICAgIGNhc2UgSW5jOgorICAgICAgICBjYXNlIERlYzoKKyAgICAgICAgICAg
IG1fYmxvY2tzVG9WaXNpdEluUmFyZUNhc2VQYXNzLnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7Cisg
ICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNl
IFNldExvY2FsOgogICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICBjYXNlIFZh
bHVlTmVnYXRlOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIFZhbHVlU3Vi
OgotICAgICAgICBjYXNlIFZhbHVlTXVsOgotICAgICAgICBjYXNlIFZhbHVlRGl2OgogICAgICAg
ICBjYXNlIFZhbHVlTW9kOgogICAgICAgICBjYXNlIFZhbHVlUG93OgogICAgICAgICBjYXNlIFZh
bHVlQml0TFNoaWZ0OgogICAgICAgICBjYXNlIFZhbHVlQml0UlNoaWZ0OgotICAgICAgICBjYXNl
IEluYzoKLSAgICAgICAgY2FzZSBEZWM6CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAg
IGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6CiAgICAgICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2UgQXJpdGhNdWw6
Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAgICAg
IGNhc2UgQXJpdGhBYnM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkBAIC0xMjk0LDExICsxNTEx
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBdG9taWNzT3I6CiAgICAgICAgIGNhc2UgQXRv
bWljc1N0b3JlOgogICAgICAgICBjYXNlIEF0b21pY3NTdWI6Ci0gICAgICAgIGNhc2UgQXRvbWlj
c1hvcjogewotICAgICAgICAgICAgbV9kZXBlbmRlbnROb2Rlcy5hcHBlbmQobV9jdXJyZW50Tm9k
ZSk7CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIEF0b21pY3NJc0xvY2tGcmVlOiB7CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTMwOCw3ICsxNTIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2N1cnJl
bnROb2RlLT5pbnRyaW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykKICAgICAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNVbmRlZmluZWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IApAQCAtMTQxNiw4ICsxNjMxLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQcm9maWxlVHlw
ZToKICAgICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgRm9yY2VP
U1JFeGl0OgotICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToKICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudE1heWJlOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50RGVmaW5pdGVseToK
ICAgICAgICAgY2FzZSBTZXRGdW5jdGlvbk5hbWU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CiAgICAgICAgIGNhc2UgQ2hlY2tJc0NvbnN0YW50OgpAQCAtMTUxMyw3ICsxNzI4LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sOwogICAgIH0K
IAotICAgIFZlY3RvcjxOb2RlKj4gbV9kZXBlbmRlbnROb2RlczsKKyAgICBCbG9ja01hcDxPcGVy
YW5kczxTcGVjdWxhdGVkVHlwZT4+IG1fdHlwZXNBdEhlYWQ7CisgICAgQml0VmVjdG9yIG1fYmxv
Y2tzVG9WaXNpdDsKKyAgICBCaXRWZWN0b3IgbV9ibG9ja3NUb1Zpc2l0SW5SYXJlQ2FzZVBhc3M7
CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hhbmdlZCB7IGZhbHNlIH07
CiAgICAgUHJlZGljdGlvblBhc3MgbV9wYXNzIHsgUHJpbWFyeVBhc3MgfTsgLy8gV2UgdXNlIGRp
ZmZlcmVudCBsb2dpYyBmb3IgY29uc2lkZXJpbmcgcHJlZGljdGlvbnMgZGVwZW5kaW5nIG9uIGhv
dyBmYXIgYWxvbmcgd2UgYXJlIGluIHByb3BhZ2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCmluZGV4IDJhYzJlZTM5YjRj
Yy4uNWE0ODkyYWFjMjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwCkBAIC04Niw4ICs4Niw3IEBAIGJvb2wgVmFyaWFibGVB
Y2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVGb3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAg
IC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBmYWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAg
ICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGZvciBhcmd1bWVudHMuCi0gICAgaWYgKG9wZXJh
bmQoKS5pc0FyZ3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIW9w
ZXJhbmQoKS5pc0FyZ3VtZW50KCkpOwogICAgICAgICAKICAgICAvLyBJZiB0aGUgdmFyaWFibGUg
aXMgbm90IGEgbnVtYmVyIHByZWRpY3Rpb24sIHRoZW4gdGhpcyBkb2Vzbid0CiAgICAgLy8gbWFr
ZSBhbnkgc2Vuc2UuCkBAIC0xNDUsMTkgKzE0NCwyMyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0
YTo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShEb3VibGVGb3JtYXRTdGF0ZSBkb3VibGVGb3JtYXRT
dAogICAgIHJldHVybiBERkc6Om1lcmdlRG91YmxlRm9ybWF0U3RhdGUoZmluZCgpLT5tX2RvdWJs
ZUZvcm1hdFN0YXRlLCBkb3VibGVGb3JtYXRTdGF0ZSk7CiB9CiAKLWJvb2wgVmFyaWFibGVBY2Nl
c3NEYXRhOjptYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1hdCgpCitTcGVjdWxhdGVkVHlwZSBW
YXJpYWJsZUFjY2Vzc0RhdGE6Om1ha2VQcmVkaWN0aW9uRm9yRG91YmxlRm9ybWF0KFNwZWN1bGF0
ZWRUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKGlzUm9vdCgpKTsKLSAgICAKKwogICAgIGlmICht
X2RvdWJsZUZvcm1hdFN0YXRlICE9IFVzaW5nRG91YmxlRm9ybWF0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fcHJlZGljdGlvbjsKKyAg
ICAgICAgcmV0dXJuIHR5cGU7CisKICAgICBpZiAodHlwZSAmIH5TcGVjQnl0ZWNvZGVOdW1iZXIp
CiAgICAgICAgIHR5cGUgfD0gU3BlY0RvdWJsZVB1cmVOYU47CiAgICAgaWYgKHR5cGUgJiAoU3Bl
Y0ludDMyT25seSB8IFNwZWNJbnQ1MkFueSkpCiAgICAgICAgIHR5cGUgfD0gU3BlY0FueUludEFz
RG91YmxlOwotICAgIHJldHVybiBjaGVja0FuZFNldChtX3ByZWRpY3Rpb24sIHR5cGUpOworICAg
IHJldHVybiB0eXBlOworfQorCitib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6bWFrZVByZWRpY3Rp
b25Gb3JEb3VibGVGb3JtYXQoKQoreworICAgIHJldHVybiBjaGVja0FuZFNldChtX3ByZWRpY3Rp
b24sIG1ha2VQcmVkaWN0aW9uRm9yRG91YmxlRm9ybWF0KG1fcHJlZGljdGlvbikpOwogfQogCiBi
b29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAppbmRleCBiZTJm
YjU0MDEzNTIuLmEyMzlkMjU3MzEzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgbWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShEb3VibGVGb3JtYXRTdGF0ZSk7
CiAgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgbWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQo
U3BlY3VsYXRlZFR5cGUpOwogICAgIGJvb2wgbWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQo
KTsKICAgICAKICAgICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCBjOWRl
NmE4YTM4YzEuLjFhZmE2YWM3YTNjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCkBAIC0xNjksNiArMTY5LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihCb29sLCByZXBvcnRQYXJzZVRpbWVzLCBmYWxzZSwg
Tm9ybWFsLCAiZHVtcHMgSlMgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCB0aGUgdGltZSBpdCB0b29r
IHRvIHBhcnNlIikgXAogICAgIHYoQm9vbCwgcmVwb3J0Qnl0ZWNvZGVDb21waWxlVGltZXMsIGZh
bHNlLCBOb3JtYWwsICJkdW1wcyBKUyBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSB0aW1lIGl0
IHRvb2sgdG8gYnl0ZWNvZGUgY29tcGlsZSIpIFwKICAgICB2KEJvb2wsIGNvdW50UGFyc2VUaW1l
cywgZmFsc2UsIE5vcm1hbCwgImNvdW50cyBwYXJzZSB0aW1lcyIpIFwKKyAgICB2KEJvb2wsIGR1
bXBVbnR5cGVkT3Bjb2Rlc0FmdGVyRml4dXAsIGZhbHNlLCBOb3JtYWwsICJhZnRlciBERkdGaXh1
cCwgcmVwb3J0IGV2ZXJ5IGludGVyZXN0aW5nIG5vZGUgdGhhdCB3ZSBmYWlsZWQgdG8gc3BlY3Vs
YXRpdmVseSBvcHRpbWl6ZSIpIFwKICAgICB2KEJvb2wsIHZlcmJvc2VFeGl0UHJvZmlsZSwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZUNGQSwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZURGR0ZhaWx1cmUsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwK
</data>
<flag name="commit-queue"
          id="453226"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431507</attachid>
            <date>2021-06-15 18:23:54 -0700</date>
            <delta_ts>2021-06-28 10:45:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226914</filename>
            <type>text/plain</type>
            <size>62645</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRhZGIwYzhhMmUyZC4uMmEyNjkyZjFjZGViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OSBAQAorMjAyMS0wNi0xNCAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvbiBzaG91bGQgYmUgZmxvdy1zZW5zaXRpdmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoLCBpbmZvcm1h
dGlvbiBmbG93cyBiZXR3ZWVuIGJsb2NrcyBpbiBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSB0
aHJvdWdoIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gU2V0
TG9jYWwvR2V0TG9jYWwvZXRjLi4KKyAgICAgICAgVGhpcyBjYXVzZXMgdGhlIHByZWRpY3Rpb24g
dG8gYmUgdG9vIGNvYXJzZSBpbiBtYW55IGNhc2VzLCBhcyBhIHNpbmdsZSBWYXJpYWJsZUFjY2Vz
c0RhdGEgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG1hbnkgbm9kZXMsIGFuZCB0aGVyZSBpcyBubyB3
YXkgdG8gbWFrZSB1c2Ugb2YgdGhpbmdzIGxpa2UgIkkgYnJhbmNoZWQgb24geCAhPT0gbnVsbCwg
c28geCBpcyBkZWZpbml0ZWx5IG5vdCBudWxsIGluIHRoZSB0cnVlIGJyYW5jaCIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb21wbGV0ZWx5IGZpeGVzIHRoaXMsIGJ5IGluc3RlYWQga2VlcGluZyB0
cmFjayBvZiBhbiBtX3R5cGVzQXRIZWFkIGZpZWxkIGluIFByZWRpY3Rpb25Qcm9wYWdhdGlvbiwg
YW5kIGZvbGxvd2luZyBhIG1vcmUgY2xhc3NpYyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhbGdv
cml0aG0uCisgICAgICAgIFRoaXMgbmV3IGRlc2lnbiBsZWQgdG8gbXVsdGlwbGUgb3RoZXIgY2hh
bmdlczoKKyAgICAgICAgLSBTcGVjT3RoZXIgaGFzIGJlZW4gc3BsaXQgaW4gU3BlY051bGwgfCBT
cGVjVW5kZWZpbmVkLCB0byBwcm9wZXJseSB1c2UgdGVzdHMgc3VjaCBhcyAieCAhPT0gbnVsbCIK
KyAgICAgICAgLSBCeXRlY29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbiBu
b3cgc2V0cyBtX3ByZWRpY3Rpb24gZm9yIHRoZSByZWxldmFudCBHZXRMb2NhbCwgYXMgUHJlZGlj
dGlvblByb3BhZ2F0aW9uIHdvbid0IHJlYWQgaXQgZnJvbSB0aGUgVmFyaWFibGVBY2Nlc3NEYXRh
CisgICAgICAgIC0gU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vdyBoYXMgYSBoZWFwIHByZWRpY3Rp
b24sIHdoaWNoIGlzIHNldCBpbiB0aGUgQnl0ZWNvZGVQYXJzZXIvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uLiBUaGlzIHJlcGxhY2VzIHRoZSBmaXJzdCBoYWxmIG9mIFByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZSwgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRvIFByZWRpY3Rpb25Qcm9wYWdhdGlv
bi4KKyAgICAgICAgLSBUbyBrZWVwIGNvbXBpbGF0aW9uIHRpbWVzIHJlYXNvbmFibGUsIHRoZSBS
YXJlQ2FzZVBhc3MgcGFydCBvZiBQcmVkaWN0aW9uUHJvcGFnYXRpb24gYXZvaWRzIHZpc2l0aW5n
IGJsb2NrcyB3aXRob3V0IGFueSBub2RlcyBpdCBjYXJlIGFib3V0LgorICAgICAgICAgICAgSSBi
ZWxpZXZlIHRoYXQgdGhlIGVudGlyZSBSYXJlQ2FzZVBhc3MgaXMgbW9zdGx5IG9ic29sZXRlIChz
ZWUgdGhlIGNvbW1lbnQgaW4gREZHQ29tbW9uLmgncyBlbnVtIFByZWRpY3Rpb25QYXNzLCBpdCBy
ZWZlcnMgdG8gdGhlIGNvdW50aW5nIG9mIHJhcmUgY2FzZXMgaW4gdGhlIEJhc2VsaW5lSklULCB3
aGljaCBpcyBnb25lKS4KKyAgICAgICAgICAgIEhvd2V2ZXIgcmVtb3ZpbmcgaXQgY29tcGxldGVs
eSB3b3VsZCBhZGQgc29tZSBjb21wbGV4aXR5IGFuZCByaXNrIHRvIHRoaXMgcGF0Y2ggd2hpY2gg
aXMgYWxyZWFkeSBub24tdHJpdmlhbCwgc28gSSBwbGFuIHRvIGRlZmVyIGl0IHRvIGEgc2VwYXJh
dGUgcGF0Y2guCisgICAgICAgIC0gSSBrZWVwIHRyYWNrIG9mIHdoaWNoIGJsb2NrcyBoYXZlIHNl
ZW4gdGhlaXIgdHlwZXNBdEhlYWQgY2hhbmdlIHRocm91Z2ggdGhlIEJpdFZlY3RvciBtX2Jsb2Nr
c1RvVmlzaXQgYW5kIGF2b2lkIHdhc3RpbmcgdGltZSBpbiB0aGUgb3RoZXIgYmxvY2tzICh0aGlz
IGRlc2lnbiBpcyBpbnNwaXJlZCBieSB0aGUgREZHIEFic3RyYWN0IEludGVycHJldGVyKQorICAg
ICAgICAtIFVwb24gcmVhY2hpbmcgYSBicmFuY2gsIHByZWRpY3Rpb24gcHJvcGFnYXRpb24gc3Bs
aXRzIGl0cyB0eXBlcyBhdCB0YWlsLCBhbmQgZmlsdGVyIHRoZW0gc2VwYXJhdGVseSBiYXNlZCBv
biB3aGF0IHdhcyBicmFuY2hlZCBvbiwgYmVmb3JlIG1lcmdpbmcgdGhlbSB3aXRoIHRoZSB0eXBl
cyBhdCBoZWFkIG9mIGl0cyBzdWNjZXNzb3JzCisgICAgICAgICAgICBUaGlzIGlzIHNvbWV0aGlu
ZyB3aGljaCBpcyBub3QgeWV0IGRvbmUgaW4gdGhlIGFic3RyYWN0IGludGVycHJldGVyLCBhbmQg
dGhhdCBJIGhvcGUgdG8gY2hhbmdlIGluIGEgbGF0ZXIgcGF0Y2ggaWYgbm8tb25lIGVsc2UgZ2V0
cyB0byBpdCBmaXJzdC4KKyAgICAgICAgLSBHZXRMb2NhbCBzdGlsbCBsb29rcyBhdCBpdHMgVmFy
aWFibGVBY2Nlc3NEYXRhIGluIHRoZSBEb3VibGVWb3RpbmdQaGFzZSB0byBsZWFybiB0aGUgcmVz
dWx0cyBvZiBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKS4KKyAgICAgICAgICAgIEJ1dCBpbXBvcnRh
bnRseSBpdCBkb2VzIG5vdCBqdXN0IG92ZXJyaWRlcyBpdHMgcHJlZGljdGlvbiB3aXRoIHRoZSB2
YXJpYWJsZSdzIHByZWRpY3Rpb24sIHNpbmNlIHRoaXMgd291bGQgY29tcGxldGVseSBzYWNyaWZp
Y2UgdGhlIGZsb3cgc2Vuc2l0aXZpdHkuCisgICAgICAgICAgICBJbnN0ZWFkLCBpdCB1cGRhdGVz
IGl0cyBwcmVkaWN0aW9uIGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBtX2RvdWJsZUZvcm1hdFN0YXRl
LgorCisgICAgICAgIE90aGVyIG1pbm9yIGNoYW5nZXM6CisgICAgICAgIC0gRml4IHRoZSBwcmlu
dGluZyBvZiBTcGVjdWxhdGVkVHlwZXM6IGl0IHdvdWxkIHNvbWV0aW1lcyBzaG93IE5vbkJvb2xJ
bnQzMnxCb29sSW50MzIgaW5zdGVhZCBvZiBJbnQzMi4KKyAgICAgICAgLSBGaXggdGhlIHByaW50
aW5nIG9mIFNwZWN1bGF0ZWRUeXBlczogaXQgd291bGQgc2hvdyBDZWxsfEJpZ0ludCBldmVyeSB0
aW1lIGl0IHNob3VsZCBzaG93IENlbGwKKyAgICAgICAgLSBSZWZhY3RvciB2YWx1ZXNDb3VsZEJl
RXF1YWwsIGFuZCB0YXVnaHQgaXQgdGhhdCBTeW1ib2xzIGNhbiBvbmx5IGJlIGVxdWFsIHRvIE9i
amVjdHMgb3IgU3ltYm9scworICAgICAgICAtIEFkZCBPcHRpb25zOjpkdW1wVW50eXBlZE9wY29k
ZXNBZnRlckZpeHVwLCBpdCBwcm92ZWQgdmVyeSB1c2VmdWwgZm9yIGZpbmRpbmcgaXNzdWVzIGlu
IHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uLCBhbmQgaXQgY2FuIGFsc28gc3VnZ2VzdCBuZXcg
c3BlY3VsYXRpdmUgb3B0aW1pemF0aW9ucyB0byB1cy4KKyAgICAgICAgICAgIEkgcmVjb21tZW5k
IGR1bXBpbmcgaXRzIHJlc3VsdHMgaW50byBhIGZpbGUsIGFuZCB0aGVuIGRvaW5nICJzb3J0IGZp
bGUgfCB1bmlxIC1jIGZpbGUgfCBzb3J0IC1uIC1yID4gcmVzdWx0RmlsZSIsIGZvbGxvd2VkIGJ5
ICJncmVwIEdldEJ5SWQgcmVzdWx0RmlsZSIgKGZvciBleGFtcGxlLCBpZiB5b3UgY2FyZSBhYm91
dCBVbnR5cGVkIEdldEJ5SWQpLgorICAgICAgICAgICAgVGhpcyB3aWxsIGdpdmUgeW91IHRoZSBw
cmVkaWN0aW9ucyBvZiB0aGUgVW50eXBlZFVzZSBHZXRCeUlkLCBieSBkZWNyZWFzaW5nIGZyZXF1
ZW5jeS4KKworICAgICAgICBFZmZlY3RzIG9uIEpTMiAoMiBydW5zIGVhY2ggdGltZSk6CisgICAg
ICAgIC0gVG90YWwgdGltZSBzcGVudCBpbiBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTogMzEw
LzMwNW1zIC0+IDQ2Ny80NjVtcworICAgICAgICAtIE1heCB0aW1lIHNwZW50IGluIFByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOiAzLjYvMy43bXMgLT4gOS45LzkuOG1zCisgICAgICAgIC0gTnVt
YmVyIG9mIFVudHlwZWQgQnJhbmNoZXMgYWZ0ZXIgRml4dXAgKHdpdGhvdXQgY29uY3VycmVudCBK
SVQpOiAyMzg2LzI0MDAgLT4gMjIyNi8yMjI2CisgICAgICAgIC0gTnVtYmVyIG9mIFVudHlwZWQg
R2V0QnkqIGFmdGVyIEZpeHVwICh3aXRob3V0IGNvbmN1cnJlbnQgSklUKTogNTEyMi81MTg2IC0+
IDQ2NjMvNDYxNQorICAgICAgICAtIE51bWJlciBvZiBVbnR5cGVkIENvbXBhcmUqIGFmdGVyIEZp
eHVwICh3aXRob3V0IGNvbmN1cnJlbnQgSklUKTogMTIwNC8xMjIzIC0+IDk3NS85OTIKKyAgICAg
ICAgLSBUb3RhbCBudW1iZXIgb2YgREZHIE9TUiBFeGl0cyBhcyByZXBvcnRlZCBieSAtLXByaW50
RWFjaE9TUkV4aXQ9MSAod2l0aG91dCBjb25jdXJyZW50IEpJVCkgNTMwODk3LzUyNzU5MCAtPiA0
ODEwOTAvNDc1MTAwCisgICAgICAgIEkgZ290IHRoZSBmaXJzdCB0d28gbnVtYmVycyBmcm9tIHJ1
bnMgd2l0aCAtLXVzZUNvbmN1cnJlbnRKSVQ9MSBmb3IgcmVhbGlzbSwgYW5kIHRoZSBuZXh0IGZv
dXIgd2l0aCAtLXVzZUNvbmN1cnJlbnRKSVQ9MCB0byBtaW5pbWl6ZSB2YXJpYW5jZSBmcm9tIHJ1
biB0byBydW4uCisgICAgICAgIFdlIGNhbiBzZWUgYSBzbWFsbCBidXQgY2xlYXIgcmVkdWN0aW9u
IGluIERGRyBub2RlcyB0aGF0IHJlbWFpbiB1bnR5cGVkIGFmdGVyIEZpeHVwLCBhcyBob3BlZC4K
KyAgICAgICAgVGhlIGluY3JlYXNlIGluIGNvbXBpbGUgdGltZSBpcyB1bmZvcnR1bmF0ZSwgYnV0
IHByb2JhYmx5IGFjY2VwdGFibGUgY29uc2lkZXJpbmcgdGhhdCBwaGFzZXMgbGlrZSB0aGUgQnl0
ZWNvZGVQYXJzZXIgYW5kIENGQSB0YWtlIG1vcmUgdGhhbiAycyBlYWNoIG9uIHRoZSBzYW1lIHJ1
bi4KKyAgICAgICAgSSBjb2xsZWN0ZWQgdGhlIG51bWJlciBvZiBPU1IgZXhpdHMgdG8gdmVyaWZ5
IHRoYXQgSSBkaWQgbm90IGFjY2lkZW50YWxseSBtYWtlIHRoZSBwcmVkaWN0aW9ucyB0b28gbmFy
cm93LiBJIHdhcyBzdXJwcmlzZWQgdG8gc2VlIHRoYXQgdGhlIG51bWJlciBhY3R1YWxseSBkZWNy
ZWFzZWQ7IEkgaGF2ZSBubyBleHBsYW5hdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBFZmZlY3Rz
IG9uIFNwZWVkb21ldGVyMjoKKyAgICAgICAgLSBOdW1iZXIgb2YgVW50eXBlZCBCcmFuY2hlcyBh
ZnRlciBGaXh1cCAod2l0aG91dCBjb25jdXJyZW50IEpJVCk6IDg3MjcvODcwMC84NjIzLzg1Mjgg
LT4gNzk1NS84MDAzLzgwNTAvODMzMworICAgICAgICAtIE51bWJlciBvZiBVbnR5cGVkIEdldEJ5
KiBhZnRlciBGaXh1cCAod2l0aG91dCBjb25jdXJyZW50IEpJVCk6IDEyMzI2LzEyMjM2LzEyMTU5
LzEyMTU3IC0+IDExMTM5LzExMjQ5LzExMzM2LzExNTEwCisgICAgICAgIC0gTnVtYmVyIG9mIFVu
dHlwZWQgQ29tcGFyZSogYWZ0ZXIgRml4dXAgKHdpdGhvdXQgY29uY3VycmVudCBKSVQpOiAxNDMx
LzE0MjcvMTQxMC8xNDMxIC0+IDE0MDUvMTQzNS8xNDI4LzE0MjcKKyAgICAgICAgLSBUb3RhbCBu
dW1iZXIgb2YgREZHIE9TUiBFeGl0cyBhcyByZXBvcnRlZCBieSAtLXByaW50RWFjaE9TUkV4aXQ9
MSAod2l0aG91dCBjb25jdXJyZW50IEpJVCk6IDMwNzc2MS8zMDcwNjAgLT4gMzA0Njc3LzMwOTM4
MgorICAgICAgICBTbyB3aGlsZSB0aGVyZSBpcyBubyBpbXByb3ZlbWVudCBmb3IgQ29tcGFyZXMs
IHRoZXJlIGlzIGEgc21hbGwgcHJvZ3Jlc3MgZm9yIGJvdGggQnJhbmNoZXMgYW5kIEdldEJ5SWQv
R2V0QnlWYWwuCisgICAgICAgIEFuZCBJIGRvbid0IHNlZW0gdG8gaGF2ZSBpbmNyZWFzZWQgdGhl
IG51bWJlciBvZiBPU1IgZXhpdHMuCisKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OmR1bXBTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OnNw
ZWN1bGF0aW9uRnJvbVZhbHVlKToKKyAgICAgICAgKEpTQzo6bGVhc3RVcHBlckJvdW5kT2ZFcXVp
dmFsZW50U3BlY3VsYXRpb25zKToKKyAgICAgICAgKEpTQzo6dmFsdWVzQ291bGRCZUVxdWFsKToK
KyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oOgorICAgICAgICAoSlNDOjppc090aGVyU3BlY3VsYXRpb24pOgor
ICAgICAgICAoSlNDOjppbnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyk6CisgICAgICAgIChKU0M6
OmZpbHRlclNwZWN1bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluamVjdExh
enlPcGVyYW5kU3BlY3VsYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVWYXJhcmdzSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Ym90dG9tVmFsdWVNYXRjaGluZ1NwZWN1
bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OnNo
b3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVBY2Nlc3NEYXRhOjptYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1hdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9uc0xpc3QuaDoKKwogMjAyMS0wNi0wNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBSZXNvbHZlZENsb3N1cmVWYXIgdG8gZ2V0IGJyYW5k
IGZyb20gc2NvcGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCmluZGV4IGQ4MTFkOTEzYzhmZS4uZDg3MjEzZGY1N2Y2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NTIsNyArMjUyLDcgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVh
bSwgU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAg
IH0KICAgICAKLSAgICBpZiAodmFsdWUgPT0gU3BlY0ludDMyT25seSkKKyAgICBpZiAoKHZhbHVl
ICYgU3BlY0ludDMyT25seSkgPT0gU3BlY0ludDMyT25seSkKICAgICAgICAgc3RyT3V0LnByaW50
KCJJbnQzMiIpOwogICAgIGVsc2UgewogICAgICAgICBpZiAodmFsdWUgJiBTcGVjQm9vbEludDMy
KQpAQCAtMjg1LDIwICsyODUsMjUgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0m
IG91dFN0cmVhbSwgU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZh
bHNlOwogICAgIH0KIAorI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAoKHZhbHVlICYgU3BlY0Jp
Z0ludCkgPT0gU3BlY0JpZ0ludCkKICAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKLSNp
ZiBVU0UoQklHSU5UMzIpCiAgICAgZWxzZSB7CiAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNCaWdJ
bnQzMikKICAgICAgICAgICAgIHN0ck91dC5wcmludCgiQmlnSW50MzIiKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKIAotICAgICAgICBpZiAodmFsdWUgJiBTcGVj
SGVhcEJpZ0ludCkKKyAgICAgICAgLy8gRG9uJ3QgcHJpbnQgQmlnSW50IGlmIGl0IGlzIGFscmVh
ZHkgaW1wbGllZCBieSBDZWxsCisgICAgICAgIGlmICgodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkg
JiYgKCh2YWx1ZSAmIFNwZWNDZWxsKSAhPSBTcGVjQ2VsbCkpCiAgICAgICAgICAgICBzdHJPdXQu
cHJpbnQoIkhlYXBCaWdJbnQiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaXNUb3AgPSBm
YWxzZTsKICAgICB9CisjZWxzZQorICAgIC8vIERvbid0IHByaW50IEJpZ0ludCBpZiBpdCBpcyBh
bHJlYWR5IGltcGxpZWQgYnkgQ2VsbAorICAgIGlmICgodmFsdWUgJiBTcGVjQmlnSW50KSAmJiAo
KHZhbHVlICYgU3BlY0NlbGwpICE9IFNwZWNDZWxsKSkKKyAgICAgICAgc3RyT3V0LnByaW50KCJC
aWdJbnQiKTsKICNlbmRpZgogCiAgICAgaWYgKHZhbHVlICYgU3BlY0RvdWJsZUltcHVyZU5hTikK
QEAgLTMwOCwxMSArMzEzLDIwIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBv
dXRTdHJlYW0sIFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgICAgICBzdHJPdXQucHJpbnQoIkJv
b2wiKTsKICAgICBlbHNlCiAgICAgICAgIGlzVG9wID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHZh
bHVlICYgU3BlY090aGVyKQorCisgICAgaWYgKCh2YWx1ZSAmIFNwZWNPdGhlcikgPT0gU3BlY090
aGVyKQogICAgICAgICBzdHJPdXQucHJpbnQoIk90aGVyIik7Ci0gICAgZWxzZQotICAgICAgICBp
c1RvcCA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAodmFsdWUgJiBTcGVjTnVsbCkK
KyAgICAgICAgICAgIHN0ck91dC5wcmludCgiTnVsbCIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBpc1RvcCA9IGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNVbmRlZmluZWQp
CisgICAgICAgICAgICBzdHJPdXQucHJpbnQoIlVuZGVmaW5lZCIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIH0KICAgICAKICAgICBpZiAodmFsdWUgJiBT
cGVjRW1wdHkpCiAgICAgICAgIHN0ck91dC5wcmludCgiRW1wdHkiKTsKQEAgLTQwNyw2ICs0MjEs
MTAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyhT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgICAgICByZXR1cm4gIjxOdW1iZXI+IjsKICAg
ICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAi
PEJvb2xlYW4+IjsKKyAgICBpZiAoaXNVbmRlZmluZWRTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkK
KyAgICAgICAgcmV0dXJuICI8VW5kZWZpbmVkPiI7CisgICAgaWYgKGlzTnVsbFNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4gIjxOdWxsPiI7CiAgICAgaWYgKGlzT3RoZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8T3RoZXI+IjsKICAgICBp
ZiAoaXNNaXNjU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkBAIC02MzIsOCArNjUwLDEwIEBAIFNw
ZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCiAgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21DZWxsKHZhbHVlLmFzQ2VsbCgpKTsKICAgICBpZiAodmFs
dWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKLSAgICBBU1NFUlQo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSk7Ci0gICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIFNwZWNVbmRlZmluZWQ7Cisg
ICAgQVNTRVJUKHZhbHVlLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gU3BlY051bGw7CiB9CiAKIFNw
ZWN1bGF0ZWRUeXBlIGludDUyQXdhcmVTcGVjdWxhdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVl
KQpAQCAtNzM3LDkgKzc1NywxNCBAQCBTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0
cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSB0eQogICAgIHJldHVy
biB0eXBlOwogfQogCi1zdGF0aWMgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3Vu
ZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSB0eXBlKQorU3BlY3VsYXRl
ZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRU
eXBlIHR5cGUpCiB7Ci0gICAgdHlwZSA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFs
ZW50U3BlY3VsYXRpb25zKHR5cGUpOworICAgIGlmICh0eXBlICYgU3BlY1N0cmluZykKKyAgICAg
ICAgdHlwZSB8PSBTcGVjU3RyaW5nOworCisgICAgLy8gIm51bGwgPT0gdW5kZWZpbmVkIiByZXR1
cm5zIHRydWUuCisgICAgaWYgKHR5cGUgJiBTcGVjT3RoZXIpCisgICAgICAgIHR5cGUgfD0gU3Bl
Y090aGVyOwogCiAgICAgLy8gQm9vbGVhbiBvciBCaWdJbnQgY2FuIGJlIGNvbnZlcnRlZCB0byBO
dW1iZXIgd2hlbiBwZXJmb3JtaW5nIG5vbi1zdHJpY3QgZXF1YWwuCiAgICAgaWYgKHR5cGUgJiAo
U3BlY0ludEFueUZvcm1hdCB8IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNCb29sZWFuIHwgU3Bl
Y0JpZ0ludCkpCkBAIC03NTAsMTQgKzc3NSwyMSBAQCBzdGF0aWMgaW5saW5lIFNwZWN1bGF0ZWRU
eXBlIGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVAog
CiBib29sIHZhbHVlc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSBhLCBTcGVjdWxhdGVkVHlw
ZSBiKQogewotICAgIGEgPSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMo
YSk7Ci0gICAgYiA9IGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhiKTsK
LSAgICAKKyAgICAvLyBBIHN5bWJvbCBjYW4gb25seSBiZSBlcXVhbCB0byBhIFN5bWJvbCBvciBh
biBPYmplY3QKKyAgICAvLyBJbiBwYXJ0aWN1bGFyIGl0IGNhbm5vdCBiZSBlcXVhbCB0byBhIFN0
cmluZworICAgIGlmIChpc1N5bWJvbFNwZWN1bGF0aW9uKGEpICYmICEoYiAmIChTcGVjT2JqZWN0
IHwgU3BlY1N5bWJvbCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzU3ltYm9s
U3BlY3VsYXRpb24oYikgJiYgIShhICYgKFNwZWNPYmplY3QgfCBTcGVjU3ltYm9sKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIEFueXRoaW5nIGNvdWxkIGJlIGVxdWFsIHRvIGEg
c3RyaW5nLgogICAgIGlmIChhICYgU3BlY1N0cmluZykKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKGIgJiBTcGVjU3RyaW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGEgPSBs
ZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoYSk7CisgICAgYiA9IGxlYXN0
VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhiKTsKICAgICAKICAgICAvLyBJZiBi
b3RoIHNpZGVzIGFyZSBkZWZpbml0ZWx5IG9ubHkgb2JqZWN0cywgdGhlbiBlcXVhbGl0eSBpcyBm
YWlybHkgc2FuZS4KICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihhKSAmJiBpc09iamVjdFNw
ZWN1bGF0aW9uKGIpKQpAQCAtNzY5LDcgKzgwMSw3IEBAIGJvb2wgdmFsdWVzQ291bGRCZUVxdWFs
KFNwZWN1bGF0ZWRUeXBlIGEsIFNwZWN1bGF0ZWRUeXBlIGIpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGlmIChiICYgU3BlY09iamVjdCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisK
ICAgICAvLyBOZWl0aGVyIHNpZGUgaXMgYW4gb2JqZWN0IG9yIHN0cmluZywgc28gdGhlIHdvcmxk
IGlzIHJlbGF0aXZlbHkgc2FuZS4KICAgICByZXR1cm4gISEoYSAmIGIpOwogfQpAQCAtMTAxOCw2
ICsxMDUwLDEwIEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cmluZyhjb25zdCBj
aGFyKiBzcGVjdWxhdGlvbikKICAgICAgICAgcmV0dXJuIFNwZWNGdWxsTnVtYmVyOwogICAgIGlm
ICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNCb29sZWFuIiwgc3RybGVuKCJTcGVjQm9vbGVh
biIpKSkKICAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGlmICghc3RybmNtcChzcGVj
dWxhdGlvbiwgIlNwZWNVbmRlZmluZWQiLCBzdHJsZW4oIlNwZWNVbmRlZmluZWQiKSkpCisgICAg
ICAgIHJldHVybiBTcGVjVW5kZWZpbmVkOworICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwg
IlNwZWNOdWxsIiwgc3RybGVuKCJTcGVjTnVsbCIpKSkKKyAgICAgICAgcmV0dXJuIFNwZWNOdWxs
OwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNPdGhlciIsIHN0cmxlbigiU3Bl
Y090aGVyIikpKQogICAgICAgICByZXR1cm4gU3BlY090aGVyOwogICAgIGlmICghc3RybmNtcChz
cGVjdWxhdGlvbiwgIlNwZWNNaXNjIiwgc3RybGVuKCJTcGVjTWlzYyIpKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKaW5kZXggOTY5Nzc4MzU1
NzQxLi4zMGU5ZDhmOTBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsMTggKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIg
U3BlY3VsYXRlZFR5cGUgU3BlY0ludEFueUZvcm1hdCAgICAgICAgICAgICAgICAgICAgICA9IFNw
ZWNJbnQ1CiAKIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIg
ICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNJbnRBbnlGb3JtYXQgfCBTcGVjRnVsbERvdWJs
ZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBE
b3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBl
IFNwZWNCb29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQwOyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlw
ZSBTcGVjT3RoZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0MTsgLy8g
SXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdGV4
cHIgU3BlY3VsYXRlZFR5cGUgU3BlY1VuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDF1bGwgPDwgNDE7IC8vIEl0J3MgZGVmaW5pdGVseSBVbmRlZmluZWQuCitzdGF0aWMgY29uc3Rl
eHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNOdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAxdWxsIDw8IDQyOyAvLyBJdCdzIGRlZmluaXRlbHkgTnVsbC4KK3N0YXRpYyBjb25zdGV4cHIg
U3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNw
ZWNVbmRlZmluZWQgfCBTcGVjTnVsbDsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9y
IFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY01pc2MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNCb29sZWFuIHwgU3BlY090aGVyOyAvLyBJ
dCdzIGRlZmluaXRlbHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVsbCwgb3IgVW5kZWZpbmVkLgotc3Rh
dGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMXVsbCA8PCA0MjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVl
IG1hcmtlci4KLXN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBCaWdJbnQg
ICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDM7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IEJpZ0ludCB0aGF0IGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVhcAotc3RhdGljIGNvbnN0ZXhwciBT
cGVjdWxhdGVkVHlwZSBTcGVjQmlnSW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVs
bCA8PCA0NDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgc21hbGwgQmlnSW50IHRoYXQgaXMgaW5saW5l
IHRoZSBKU1ZhbHVlCitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQzOyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gZW1wdHkgdmFsdWUgbWFya2VyLgorc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlw
ZSBTcGVjSGVhcEJpZ0ludCAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NDsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgQmlnSW50IHRoYXQgaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwCitz
dGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCaWdJbnQzMiAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAxdWxsIDw8IDQ1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBzbWFsbCBCaWdJ
bnQgdGhhdCBpcyBpbmxpbmUgdGhlIEpTVmFsdWUKICNpZiBVU0UoQklHSU5UMzIpCiBzdGF0aWMg
Y29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCaWdJbnQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSBTcGVjQmlnSW50MzIgfCBTcGVjSGVhcEJpZ0ludDsKICNlbHNlCiAvLyBXZSBzaG91
bGQgbm90IGluY2x1ZGUgU3BlY0JpZ0ludDMyLiBXZSBhcmUgdXNpbmcgU3BlY0JpZ0ludCBpbiB2
YXJpb3VzIHBsYWNlcyBsaWtlIHByZWRpY3Rpb24uIElmIHRoaXMgaW5jbHVkZXMgU3BlY0JpZ0lu
dDMyLCBmaXh1cCBwaGFzZSBpcyBjb25mdXNlZCBpZiAhVVNFKEJJR0lOVDMyKSBzaW5jZSBpdCBp
cyBub3QgdXNpbmcgQW55QmlnSW50VXNlLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlw
ZSBTcGVjQmlnSW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0hlYXBCaWdJbnQ7
CiAjZW5kaWYKLXN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0RhdGFWaWV3T2Jq
ZWN0ICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDU7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IEpTRGF0YVZpZXcuCitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNEYXRhVmll
d09iamVjdCAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQ2OyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBKU0RhdGFWaWV3Lgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjUHJp
bWl0aXZlICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wg
fCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjTWlzYyB8IFNwZWNCaWdJbnQ7IC8vIEl0J3MgYW55
IG5vbi1PYmplY3QgSlNWYWx1ZS4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3Bl
Y09iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNGaW5hbE9iamVjdCB8IFNw
ZWNBcnJheSB8IFNwZWNGdW5jdGlvbiB8IFNwZWNUeXBlZEFycmF5VmlldyB8IFNwZWNEaXJlY3RB
cmd1bWVudHMgfCBTcGVjU2NvcGVkQXJndW1lbnRzIHwgU3BlY1N0cmluZ09iamVjdCB8IFNwZWNS
ZWdFeHBPYmplY3QgfCBTcGVjRGF0ZU9iamVjdCB8IFNwZWNQcm9taXNlT2JqZWN0IHwgU3BlY01h
cE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjV2Vha01hcE9iamVjdCB8IFNwZWNXZWFrU2V0
T2JqZWN0IHwgU3BlY1Byb3h5T2JqZWN0IHwgU3BlY0Rlcml2ZWRBcnJheSB8IFNwZWNPYmplY3RP
dGhlciB8IFNwZWNEYXRhVmlld09iamVjdDsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZv
ciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3Vs
YXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNPYmpl
Y3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3RoZXIgfCBTcGVjSGVhcEJp
Z0ludDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsLgpAQCAtNDQ5LDE5ICs0NTEsMjQgQEAg
aW5saW5lIGJvb2wgaXNOZWl0aGVyRG91YmxlTm9ySGVhcEJpZ0ludE5vclN0cmluZ1NwZWN1bGF0
aW9uKFNwZWN1bGF0ZWRUeXBlIHR5cGUKICAgICByZXR1cm4gISh0eXBlICYgKFNwZWNGdWxsRG91
YmxlIHwgU3BlY0hlYXBCaWdJbnQgfCBTcGVjU3RyaW5nKSk7CiB9CiAKLWlubGluZSBib29sIGlz
T3RoZXJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK2lubGluZSBib29sIGlzVW5k
ZWZpbmVkU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZh
bHVlID09IFNwZWNPdGhlcjsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY1VuZGVmaW5lZDsKIH0K
IAotaW5saW5lIGJvb2wgaXNNaXNjU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitp
bmxpbmUgYm9vbCBpc051bGxTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNNaXNjKTsKKyAgICByZXR1cm4gdmFs
dWUgPT0gU3BlY051bGw7CiB9CiAKLWlubGluZSBib29sIGlzT3RoZXJPckVtcHR5U3BlY3VsYXRp
b24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBpc090aGVyU3BlY3VsYXRpb24o
U3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA9PSBT
cGVjT3RoZXI7CisgICAgcmV0dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjT3RoZXIpOwor
fQorCitpbmxpbmUgYm9vbCBpc01pc2NTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNNaXNjKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNFbXB0eVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQpAQCAtNTAz
LDYgKzUxMCwxNiBAQCBpbmxpbmUgYm9vbCBtZXJnZVNwZWN1bGF0aW9uKFQmIGxlZnQsIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBTcGVjdWxh
dGVkVHlwZSBpbnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSBsZWZ0LCBT
cGVjdWxhdGVkVHlwZSByaWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCAmIHJpZ2h0OworfQorCitp
bmxpbmUgdm9pZCBmaWx0ZXJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSYgbGVmdCwgU3BlY3Vs
YXRlZFR5cGUgcmlnaHQpCit7CisgICAgbGVmdCAmPSByaWdodDsKK30KKwogaW5saW5lIGJvb2wg
c3BlY3VsYXRpb25DaGVja2VkKFNwZWN1bGF0ZWRUeXBlIGFjdHVhbCwgU3BlY3VsYXRlZFR5cGUg
ZGVzaXJlZCkKIHsKICAgICByZXR1cm4gKGFjdHVhbCB8IGRlc2lyZWQpID09IGRlc2lyZWQ7CkBA
IC01MjQsNiArNTQxLDcgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVHlwZWRBcnJh
eVR5cGUoVHlwZWRBcnJheVR5cGUpOyAvLyBvbmx5IHZhbGlkIGZvcgogVHlwZWRBcnJheVR5cGUg
dHlwZWRBcnJheVR5cGVGcm9tU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUpOwogCiBTcGVjdWxh
dGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhT
cGVjdWxhdGVkVHlwZSk7CitTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxl
bnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUpOwogCiBib29sIHZhbHVlc0NvdWxkQmVFcXVh
bChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5k
ZXggM2I2MWE1ZmQxOTg5Li5kODhhMDFjMTA4MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTcx
MCw5ICs3MTAsMTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKICAgICAgICAgc3dp
dGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBOb3RDZWxsTm9y
QmlnSW50VXNlOiB7Ci0gICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNPdGhlcikgewotICAgICAg
ICAgICAgICAgIHR5cGUgJj0gflNwZWNPdGhlcjsKLSAgICAgICAgICAgICAgICB0eXBlIHw9IFNw
ZWNEb3VibGVQdXJlTmFOIHwgU3BlY0Jvb2xJbnQzMjsgLy8gTnVsbCBiZWNvbWVzIHplcm8sIHVu
ZGVmaW5lZCBiZWNvbWVzIE5hTi4KKyAgICAgICAgICAgIGlmICh0eXBlICYgU3BlY051bGwpIHsK
KyAgICAgICAgICAgICAgICB0eXBlICY9IH5TcGVjTnVsbDsKKyAgICAgICAgICAgICAgICB0eXBl
IHw9IFNwZWNCb29sSW50MzI7IC8vIE51bGwgYmVjb21lcyB6ZXJvCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHByb3Blcmx5IHJlY29yZCBpdCBhcyBhIGNvbnN0YW50CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICAg
ICB0eXBlICY9IH5TcGVjVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0Rv
dWJsZVB1cmVOYU47IC8vIFVuZGVmaW5lZCBiZWNvbWVzIE5hTi4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcHJvcGVybHkgcmVjb3JkIGl0IGFzIGEgY29uc3RhbnQKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICh0eXBlICYgU3BlY0Jvb2xlYW4pIHsKICAgICAgICAgICAgICAgICB0
eXBlICY9IH5TcGVjQm9vbGVhbjsKQEAgLTE1OTksNyArMTYwNSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pCiAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSBtYXNxdWVyYWRlcy1hcy11
bmRlZmluZWQgd2F0Y2hwb2ludCB0aGluZ3kuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDU2CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghKGNoaWxkLm1fdHlwZSAmIChTcGVjT3RoZXIgfCBTcGVjT2JqZWN0T3RoZXIpKSkg
eworICAgICAgICAgICAgaWYgKCEoY2hpbGQubV90eXBlICYgKFNwZWNVbmRlZmluZWQgfCBTcGVj
T2JqZWN0T3RoZXIpKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9v
bGVhbihmYWxzZSkpOwogICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTE2MTksMTkgKzE2MjUsMTkgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQg
Y2xvYmJlckxpbWkKICAgICAgICAgICAgIC8vIElzIHRoZSBjaGlsZCdzIHR5cGUgYW4gb2JqZWN0
IHRoYXQgaXNuJ3QgYW4gb3RoZXItb2JqZWN0IChpLmUuIG9iamVjdCB0aGF0IGNvdWxkCiAgICAg
ICAgICAgICAvLyBoYXZlIG1hc3F1YXJlZGVzLWFzLXVuZGVmaW5lZCB0cmFwcykgYW5kIGlzbid0
IGEgZnVuY3Rpb24/IFRoZW46IHdlIHNob3VsZCBmb2xkCiAgICAgICAgICAgICAvLyB0aGlzIHRv
IHRydWUuCi0gICAgICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiB+KFNwZWNPYmplY3QgLSBT
cGVjT2JqZWN0T3RoZXIgLSBTcGVjRnVuY3Rpb24pKSkgeworICAgICAgICAgICAgLy8gV2UgYWxz
byBmb2xkIHRvIHRydWUgZm9yIE51bGwuCisgICAgICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUg
JiB+KChTcGVjT2JqZWN0IC0gU3BlY09iamVjdE90aGVyIC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNO
dWxsKSkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1
ZSkpOwogICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAv
LyBJcyB0aGUgY2hpbGQncyB0eXBlIGRlZmluaXRlbHkgbm90IGVpdGhlciBvZjogYW4gb2JqZWN0
IHRoYXQgaXNuJ3QgYSBmdW5jdGlvbiwKLSAgICAgICAgICAgIC8vIG9yIGVpdGhlciB1bmRlZmlu
ZWQgb3IgbnVsbD8gVGhlbjogd2Ugc2hvdWxkIGZvbGQgdGhpcyB0byBmYWxzZS4gVGhpcyBtZWFu
cworICAgICAgICAgICAgLy8gb3IgbnVsbD8gVGhlbjogd2Ugc2hvdWxkIGZvbGQgdGhpcyB0byBm
YWxzZS4gVGhpcyBtZWFucwogICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUgdGhhdCBpZiBpdCdz
IGFueSBub24tZnVuY3Rpb24gb2JqZWN0LCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBoYXZlCi0gICAg
ICAgICAgICAvLyBtYXNxdWVyYWRlcy1hcy11bmRlZmluZWQgdHJhcHMsIHRoZW4gd2UgZG9uJ3Qg
Zm9sZC4gSXQgYWxzbyBtZWFucyB3ZSB3b24ndCBmb2xkCi0gICAgICAgICAgICAvLyBpZiBpdCdz
IHVuZGVmaW5lZC1vci1udWxsLCBzaW5jZSB0aGUgdHlwZSBiaXRzIGRvbid0IGRpc3Rpbmd1aXNo
IGJldHdlZW4KLSAgICAgICAgICAgIC8vIHVuZGVmaW5lZCAod2hpY2ggc2hvdWxkIGZvbGQgdG8g
ZmFsc2UpIGFuZCBudWxsICh3aGljaCBzaG91bGQgZm9sZCB0byB0cnVlKS4KLSAgICAgICAgICAg
IGlmICghKGNoaWxkLm1fdHlwZSAmICgoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikgfCBTcGVj
T3RoZXIpKSkgeworICAgICAgICAgICAgLy8gbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHRyYXBz
LCB0aGVuIHdlIGRvbid0IGZvbGQuCisgICAgICAgICAgICAvLyBXZSBhbHNvIGZvbGQgdG8gZmFs
c2UgZm9yIFVuZGVmaW5lZC4KKyAgICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmICgoU3Bl
Y09iamVjdCAtIFNwZWNGdW5jdGlvbikgfCBTcGVjTnVsbCkpKSB7CiAgICAgICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgY29u
c3RhbnRXYXNTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk3OCw5ICsx
OTg0LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IFNwZWNPdGhlcikK
KyAgICAgICAgICAgIGlmICghKGxlZnRUeXBlICYgflNwZWNPdGhlcikpCiAgICAgICAgICAgICAg
ICAgc3RkOjpzd2FwKGxlZnRUeXBlLCByaWdodFR5cGUpOwotICAgICAgICAgICAgaWYgKHJpZ2h0
VHlwZSA9PSBTcGVjT3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghKHJpZ2h0VHlwZSAmIH5TcGVj
T3RoZXIpKSB7CiAgICAgICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGFuZCBOdWxsIGFyZSBhbHdh
eXMgZXF1YWwgd2hlbiBjb21wYXJlZCB0byBlYWNob3RoZXIuCiAgICAgICAgICAgICAgICAgaWYg
KCEobGVmdFR5cGUgJiB+U3BlY090aGVyKSkgewogICAgICAgICAgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkpOwpAQCAtMjM4MCw3ICsyMzg2LDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOworICAgICAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlcik7IC8vIEZJWE1FOiB3aGVu
IGNhbiB0aGlzIG5vdCBqdXN0IGJlIGpzVW5kZWZpbmVkKCk/CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgpAQCAtMjQxNSw3ICsyNDIx
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29y
bGQoKTsKICAgICAgICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4o
KSkKLSAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMy
T25seSB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNJbnQzMk9ubHkgfCBTcGVjVW5kZWZpbmVkKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25s
eSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0MjcsNyArMjQzMyw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVk
IGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUs
IFNwZWNCeXRlY29kZURvdWJsZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoISEo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSkKLSAgICAgICAgICAgICAg
ICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNw
ZWNPdGhlcik7CisgICAgICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2Rl
LCBTcGVjQnl0ZWNvZGVEb3VibGUgfCBTcGVjVW5kZWZpbmVkKTsKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qnl0ZWNvZGVEb3VibGUpOwogICAgICAgICAgICAgfSBlbHNlCkBAIC0yNTgzLDcgKzI1ODksNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
cykKLSAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQubWVyZ2UoU3BlY1VuZGVmaW5lZCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChyZXN1bHQudmFsdWUoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3Vs
ZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKQEAgLTI2MjcsMTIgKzI2MzMsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdFeHAgfHwgcmVn
RXhwLT5oYXNJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQu
YWRkKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVz
QXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgc3RydWN0dXJlU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5tZXJnZShTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1lcmdlKFNwZWNPdGhlcik7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVk
PwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVy
IHwgU3BlY0FycmF5KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwg
U3BlY0FycmF5KTsgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIFNwZWNVbmRlZmluZWQ/CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBSZWdFeHBUZXN0OgpAQCAtMjY0NSwxMiArMjY1MSwxMiBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAg
ICAgICBBU1NFUlQobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFJlZ0V4cE9iamVjdFVzZSk7
CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8
IG5vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgIHNl
dFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7IC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhw
TWF0Y2hGYXN0R2xvYmFsOgogICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSB8fCBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gS25vd25TdHJpbmdV
c2UpOwotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkp
OworICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOyAv
LyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgU3BlY1VuZGVmaW5lZD8KICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CkBAIC0zODU0LDcgKzM4NjAsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2Rl
LCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY09iamVjdCB8IFNwZWNPdGhlcik7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5k
ZWZpbmVkPwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI4NywxMSArNDI5
MywxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZv
ck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjTnVsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZv
ck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjTnVsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKQEAgLTQ0MzEsNyArNDQzNyw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGlmIChub2RlLT5pbnRyaW5zaWMoKSA9PSBDUFVSZHRz
Y0ludHJpbnNpYykKICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
SW50MzJPbmx5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JO
b2RlKG5vZGUsIFNwZWNPdGhlcik7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUo
bm9kZSwgU3BlY1VuZGVmaW5lZCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1Ry
YXBzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAppbmRleCBmODAyMzdjYzgzNDMuLjNmNTk1Yjc3ZWZhMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTQzNiw2ICs0MzYsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVu
dEluZGV4LCBub2RlLT5vcGVyYW5kKCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIs
IGtleSk7CiAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRp
Y3Rpb24pOworICAgICAgICAvLyBUaGUgbmV4dCBsaW5lIGlzIGEgYml0IHdlaXJkLCBzaW5jZSBh
bGwgb3RoZXIgbV9wcmVkaWN0aW9uIGFyZSBvbmx5IHNldCBpbiBQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS4KKyAgICAgICAgLy8gSXRzIGdvYWwgaXMgdG8gdHJhbnNtaXQgdGhlIGluZm9ybWF0
aW9uIHRvIFByZWRpY3Rpb25Qcm9wYWdhdGlvbi4KKyAgICAgICAgLy8gSWYgaXQgd2VyZSB0byBy
ZWx5IG9uIHRoZSBwcmVkaWN0aW9uIGluIHRoZSB2YXJpYWJsZUFjY2Vzc0RhdGEsIGl0IHdvdWxk
IGxvc2UgcHJlY2lzaW9uLCBzaW5jZSB2YXJpYWJsZUFjY2Vzc0RhdGEgY2FuIGJlIHVuaWZpZWQg
d2l0aCB0aGUgZGF0YSBmcm9tIG90aGVyIGJsb2Nrcy4KKyAgICAgICAgbm9kZS0+cHJlZGljdChw
cmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC0yMDQwLDYgKzIw
NDQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LAogICAgICAgICBjb3VudFZhcmlhYmxlLT5w
cmVkaWN0KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJv
Zml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBh
ZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsK
KyAgICAgICAgc2V0QXJndW1lbnRDb3VudC0+c2V0SGVhcFByZWRpY3Rpb24oU3BlY0ludDMyT25s
eSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChj
b3VudFZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVu
dCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKQEAgLTIwNTcsMTMgKzIwNjIsMjAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBP
cGVyYW5kIHJlc3VsdCwKICAgICAgICAgICAgIC8vIHByZWRpY3Rpb25zIGZyb20gdGhlIGFyZ3Vt
ZW50cyBsb2FkZWQgYXQgdGhlIGNhbGxzaXRlLCByYXRoZXIgdGhhbiB0aGUKICAgICAgICAgICAg
IC8vIGFyZ3VtZW50cyByZWNlaXZlZCBpbnNpZGUgdGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFi
bHkgd29uJ3QgbWF0dGVyIGZvciBtb3N0CiAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBTcGVjTm9uZTsKICAgICAgICAgICAgIGlm
IChjb2RlQmxvY2sgJiYgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgVmFsdWVQcm9maWxl
JiBwcm9maWxlID0gY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7
Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJvZmlsZS5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyKSk7CisgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IHByb2Zp
bGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICAgICAgdmFy
aWFibGUtPnByZWRpY3QocHJlZGljdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVu
dHMgPj0gbWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERl
ZmluaXRlbHksIE9wSW5mbyh2YXJpYWJsZSkpOworCisgICAgICAgICAgICBOb2RlKiBzZXRBcmd1
bWVudDsKKyAgICAgICAgICAgIGlmIChudW1TZXRBcmd1bWVudHMgPCBtYW5kYXRvcnlNaW5pbXVt
KSB7CisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50
RGVmaW5pdGVseSwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgc2V0QXJndW1l
bnQtPnNldEhlYXBQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50TWF5YmUs
IE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAg
ICAgICAgICAgICsrbnVtU2V0QXJndW1lbnRzOwogICAgICAgICB9CkBAIC01MTUyLDcgKzUxNjQs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBoYW5kbGVD
YWxsKAogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKCksIENhbGwsIElubGluZUNhbGxGcmFt
ZTo6U2V0dGVyQ2FsbCwKICAgICAgICAgICAgIG9zckV4aXRJbmRleCwgc2V0dGVyLCBudW1iZXJP
ZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwKLSAgICAgICAgICAgICp2YXJpYW50LmNh
bGxMaW5rU3RhdHVzKCksIFNwZWNPdGhlciwgZWNtYU1vZGUpOworICAgICAgICAgICAgKnZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSwgU3BlY090aGVyLCBlY21hTW9kZSk7IC8vIEZJWE1FOiBpcyBT
cGVjT3RoZXIgdGhlIHJpZ2h0IGNob2ljZSBoZXJlPwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtNTM2Niw3ICs1Mzc4LDggQEAgc3RhdGljIHVpbnQ2NF90IG1ha2VEeW5hbWljVmFy
T3BJbmZvKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIGdldFB1dEkKIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKLSAgICBhdXRv
JiBpbnN0cnVjdGlvbnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jazsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpOwogICAgIEJ5dGVjb2RlSW5kZXggYmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OwogCiAg
ICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtlcnMg
Zm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKQEAgLTUzOTMsOSArNTQwNiwxOSBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgZW50
cnlwb2ludEFyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1l
bnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQotICAgIH0KIAotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZyA9IDA7IGFyZyA8IG1fbnVtQXJndW1l
bnRzOyArK2FyZykgeworICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1f
cHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGVudHJ5cG9pbnRBcmd1bWVudHNbYXJnXTsKKyAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgICAgICAgICBzZXRBcmd1bWVudC0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QodHlwZSk7CisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnQt
PnNldEhlYXBQcmVkaWN0aW9uKHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogCiAgICAgYXV0byBqdW1wVGFyZ2V0ID0gWyZdKGludCB0YXJnZXQpIHsKICAgICAgICAgaWYg
KHRhcmdldCkKQEAgLTcxMTEsNiArNzEzNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJn
dW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKHZhcmlhYmxl
KSk7CiAgICAgICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50LT5vcmlnaW4uZm9yRXhpdCA9IENv
ZGVPcmlnaW4oZXhpdEJ5dGVjb2RlSW5kZXgsIHNldEFyZ3VtZW50LT5vcmlnaW4uZm9yRXhpdC5p
bmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50LT5zZXRI
ZWFwUHJlZGljdGlvbihhcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XSk7CiAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJz
dFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlw
b2ludEFyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBiNmRh
YmI0Y2FmZGMuLjQ4OGYzZWY3YmM1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCkBAIC0yODk5LDYgKzI4OTksNDQgQEAgcHJpdmF0ZToKICNlbmRpZiAv
LyBub3QgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgfQogCisgICAgICAgIGlmIChPcHRpb25zOjpk
dW1wVW50eXBlZE9wY29kZXNBZnRlckZpeHVwKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKKyAgICAg
ICAgICAgIGNhc2UgRmlsdGVyR2V0QnlTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1
dEJ5SWRTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CisgICAgICAg
ICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJD
aGVja1ByaXZhdGVCcmFuZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyU2V0UHJpdmF0
ZUJyYW5kU3RhdHVzOgorICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgY2Fz
ZSBGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFBo
YW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBD
YWxsOgorICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tO
b3RFbXB0eToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgICAgICAgICBib29sIGhhc0F0TGVhc3RPbmVDaGlsZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJvb2wgYWxsQ2hpbGRyZW5BcmVVbnR5cGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2RlLCBbJl0oRWRnZSBlZGdlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGhhc0F0TGVhc3RPbmVDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsQ2hpbGRyZW5BcmVVbnR5cGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgaWYgKGhhc0F0TGVhc3RPbmVDaGlsZCAmJiBhbGxDaGlsZHJlbkFy
ZVVudHlwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhtX2dyYXBoLm9wTmFtZShu
b2RlLT5vcCgpKSwgIjogIik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxk
cmVuKG5vZGUsIFsmXShFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBT
cGVjdWxhdGlvbihXVEY6OmRhdGFGaWxlKCksIGVkZ2UtPnByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogI2lmIEFTU0VSVF9FTkFC
TEVECiAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGludmFsaWQgZm9yIEZpeHVwIHRvIHRha2UgYSBu
b2RlIHRoYXQgZGlkbid0IGNsb2JiZXIgZXhpdCBzdGF0ZSBhbmQgbWFyayBpdCBhcyBjbG9iYmVy
aW5nIGFmdGVyd29yZHMuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdXNlZFRv
Q2xvYmJlckV4aXRTdGF0ZSB8fCAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbm9kZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCAxMTEwMDgyNjAzOTguLjFm
OGM4YzYxNzg1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTE1
MTMsOSArMTUxMywxMiBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmJvdHRvbVZhbHVlTWF0Y2hpbmdT
cGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIGlmIChwcmVkaWN0aW9u
ID09IFNwZWNOb25lKQogICAgICAgICByZXR1cm4gZnJlZXplKEpTVmFsdWUoKSk7CiAKLSAgICBp
ZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjT3RoZXIpKQorICAgIGlmIChz
cGVjdWxhdGlvbkNvbnRhaW5zKHByZWRpY3Rpb24sIFNwZWNOdWxsKSkKICAgICAgICAgcmV0dXJu
IGZyZWV6ZShqc051bGwoKSk7CiAKKyAgICBpZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0
aW9uLCBTcGVjVW5kZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuIGZyZWV6ZShqc1VuZGVmaW5lZCgp
KTsKKwogICAgIGlmIChzcGVjdWxhdGlvbkNvbnRhaW5zKHByZWRpY3Rpb24sIFNwZWNCb29sZWFu
KSkKICAgICAgICAgcmV0dXJuIGZyZWV6ZShqc0Jvb2xlYW4odHJ1ZSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDM1Y2Q1NGM4YTIxZS4uYmQyYzI0MzZkYzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMTgzNiw2ICsxODM2LDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIERhdGFWaWV3R2V0SW50OgogICAgICAgICBjYXNlIERhdGFWaWV3R2V0
RmxvYXQ6CiAgICAgICAgIGNhc2UgRGF0ZUdldEludDMyT3JOYU46CisgICAgICAgIGNhc2UgU2V0
QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCmlu
ZGV4IDNiMTA4M2Y2MTgxYi4uNDUyMDAwYTYyNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApA
QCAtMTE0LDE0ICsxMTQsMTMgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgQXJndW1lbnRz
VmVjdG9yIG5ld0FyZ3VtZW50cyA9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuZmluZChtX2dy
YXBoLmJsb2NrKDApKS0+dmFsdWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAg
ICAgICAgICAgIE5vZGUqIG9sZFNldEFyZ3VtZW50ID0gbmV3QXJndW1lbnRzW2FyZ3VtZW50XTsK
KyAgICAgICAgICAgIEFTU0VSVChvbGRTZXRBcmd1bWVudC0+b3AoKSA9PSBTZXRBcmd1bWVudERl
ZmluaXRlbHkpOwogICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IHRhcmdldC0+dmFyaWFibGVz
QXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGlmICghb2xkTm9kZSkgewot
ICAgICAgICAgICAgICAgIC8vIEp1c3QgZm9yIHNhbml0eSwgYWx3YXlzIGhhdmUgYSBTZXRBcmd1
bWVudERlZmluaXRlbHkgZXZlbiBpZiBpdCdzIG5vdCBuZWVkZWQuCi0gICAgICAgICAgICAgICAg
b2xkTm9kZSA9IG5ld0FyZ3VtZW50c1thcmd1bWVudF07Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gb2xkTm9kZSA/IG9sZE5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpIDogb2xkU2V0QXJndW1lbnQtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50RGVmaW5pdGVseSwgb3JpZ2lu
LAotICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkp
OworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZSksIE9wSW5mbyhvbGRTZXRBcmd1bWVu
dC0+Z2V0SGVhcFByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgbmV3QXJndW1lbnRzW2FyZ3Vt
ZW50XSA9IG5vZGU7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCmluZGV4IDk4NjYyZmE1
OWJhOS4uMTc3MTU1NDMyNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCkBAIC00NiwyMSArNDYsNiBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVu
aWZpZWQpOwogICAgICAgICAKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCkgPj0gMSk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIocHJvZmlsZWRCbG9jaygpLT5tX2xvY2spOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSBhcmd1bWVudHMgYXQgdGhlIGZpcnN0IGJsb2Nr
LiBUaGUgYXJndW1lbnRzIGZyb20KLSAgICAgICAgICAgIC8vIG90aGVyIGVudHJ5cG9pbnRzIGhh
dmUgYWxyZWFkeSBiZWVuIHBvcHVsYXRlZCB3aXRoIHRoZWlyIHByZWRpY3Rpb25zLgotICAgICAg
ICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1f
Z3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgYXJnID0g
MDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KTsgKythcmcpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBwcm9m
aWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7Ci0gICAgICAgICAgICAg
ICAgYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAotICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAppbmRleCA0MzI5YmU1YTVmYzkuLjhiNzA4MWEwM2EyMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNs
dWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
UGhhc2UuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIlNwZWN1
bGF0ZWRUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDIs
NyArNDQsMTIgQEAgY2xhc3MgUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgewogcHVibGljOgogICAgIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlKEdyYXBoJiBncmFw
aCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgInByZWRpY3Rpb24gcHJvcGFnYXRpb24iKQorICAg
ICAgICAsIG1fdHlwZXNBdEhlYWQoZ3JhcGgpCisgICAgICAgICwgbV9ibG9ja3NUb1Zpc2l0KG1f
Z3JhcGgubnVtQmxvY2tzKCkpCisgICAgICAgICwgbV9ibG9ja3NUb1Zpc2l0SW5SYXJlQ2FzZVBh
c3MobV9ncmFwaC5udW1CbG9ja3MoKSkKICAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICBtX3R5
cGVzQXRIZWFkW2Jsb2NrXSA9IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPihPcGVyYW5kc0xpa2Us
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIFNwZWNOb25lKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBydW4oKQpAQCAtNTYsOSArNjMsMTMgQEAgcHVibGljOgogCiAgICAgICAgIHByb2Nlc3NJbnZh
cmlhbnRzKCk7CiAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAgICAgIG1fYmxvY2tzVG9WaXNpdC5xdWlja1Nl
dChibG9jay0+aW5kZXgpOwogICAgICAgICBwcm9wYWdhdGVUb0ZpeHBvaW50KCk7CiAgICAgICAg
IAogICAgICAgICBtX3Bhc3MgPSBSYXJlQ2FzZVBhc3M7CisgICAgICAgIC8vIEZJWE1FOiBHZXR0
aW5nIHJpZCBvZiB0aGlzIHNlY29uZCBwYXNzIGFsdG9nZXRoZXIgd291bGQgYmUgYXR0cmFjdGl2
ZS4KKyAgICAgICAgbV9ibG9ja3NUb1Zpc2l0ID0gbV9ibG9ja3NUb1Zpc2l0SW5SYXJlQ2FzZVBh
c3M7CiAgICAgICAgIHByb3BhZ2F0ZVRvRml4cG9pbnQoKTsKICAgICAgICAgCiAgICAgICAgIG1f
cGFzcyA9IERvdWJsZVZvdGluZ1Bhc3M7CkBAIC03Miw0MyArODMsMjQ4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7
CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB0ZXJyaWJsZSwgd2FzIHByb3BhZ2F0ZUZv
cndhcmQoKTsKKyAgICAgICAgICAgIC8vIEF0IHRoZSB2ZXJ5IGxlYXN0LCBJIHNob3VsZCBrZWVw
IHRyYWNrIG9mIHdoaWNoIEJCcyBnb3QgZnJlc2ggaW5mb3JtYXRpb24gZnJvbSBkb1JvdW5kT2ZE
b3VibGVWb3RpbmcoKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb1Zp
c2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAgICAgICBwcm9wYWdhdGVUb0ZpeHBv
aW50KCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CiAKICAgICAgICAgaWYgKHZlcmJv
c2VGaXhQb2ludExvb3BzKQogICAgICAgICAgICAgZGF0YUxvZygiSXRlcmF0ZWQgIiwgY291bnRl
ciwgIiB0aW1lcyBpbiBkb3VibGUgdm90aW5nIGZpeHBvaW50LlxuIik7Ci0gICAgICAgIAorCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBwcm9w
YWdhdGVUb0ZpeHBvaW50KCkKICAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwog
ICAgICAgICB1bnNpZ25lZCBjb3VudGVyID0gMDsKICAgICAgICAgZG8gewogICAgICAgICAgICAg
aWYgKHZlcmJvc2VGaXhQb2ludExvb3BzKQogICAgICAgICAgICAgICAgICsrY291bnRlcjsKIAot
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFs
c2U7CiAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFs
IGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAotICAgICAgICAgICAgLy8gREZTLXNv
cnRlZCBjb2RlLgotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwotICAgICAgICAgICAg
aWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2Qg
dGhhdCBwYXRob2xvZ2ljYWwgY29kZSB3aWxsCi0gICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVz
cy4gTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cu
Ci0gICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0
ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAotICAgICAgICAgICAgLy8gZm91bmQgYSBzb3Vu
ZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCi0gICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUJhY2t3YXJkKCk7
Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGJsb2NrSW5kZXggOiBtX2Jsb2Nrc1RvVmlzaXQpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nr
c1RvVmlzaXQucXVpY2tDbGVhcihibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBwcm9wYWdhdGVUaHJvdWdoQmxvY2soYmxvY2spOworICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxl
IChjaGFuZ2VkKTsKIAogICAgICAgICBpZiAodmVyYm9zZUZpeFBvaW50TG9vcHMpCiAgICAgICAg
ICAgICBkYXRhTG9nKCJJdGVyYXRlZCAiLCBjb3VudGVyLCAiIHRpbWVzIGluIHByb3BhZ2F0ZVRv
Rml4cG9pbnQuXG4iKTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIHByb3BhZ2F0ZVRocm91Z2hC
bG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0
ZWRUeXBlPiBjdXJyZW50VHlwZXMgPSBtX3R5cGVzQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgT3Bl
cmFuZHM8dW5zaWduZWQ+IGxhc3RUaW1lT3ZlcndyaXR0ZW4geyBPcGVyYW5kc0xpa2UsIGN1cnJl
bnRUeXBlcywgMCB9OworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgIG1fY3VycmVudE5vZGUgPSBub2RlOworICAgICAgICAgICAgcHJvcGFnYXRlKG5vZGUs
IGN1cnJlbnRUeXBlcywgbGFzdFRpbWVPdmVyd3JpdHRlbik7CisgICAgICAgIH0KKworICAgICAg
ICBOb2RlKiB0ZXJtaW5hbCA9IGJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICBpZiAodGVybWlu
YWwtPm9wKCkgPT0gQnJhbmNoKQorICAgICAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZVRvU3VjY2Vz
c29yc1Rocm91Z2hCcmFuY2godGVybWluYWwsIGN1cnJlbnRUeXBlcywgbGFzdFRpbWVPdmVyd3Jp
dHRlbik7CisgICAgICAgIHJldHVybiBwcm9wYWdhdGVUb1N1Y2Nlc3NvcnNHZW5lcmljKGJsb2Nr
LCBjdXJyZW50VHlwZXMpOworICAgIH0KKworICAgIGJvb2wgcHJvcGFnYXRlVG9TdWNjZXNzb3Jz
R2VuZXJpYyhCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+
JiBjdXJyZW50VHlwZXMpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7
CisgICAgICAgICAgICBBU1NFUlQoISFzdWNjZXNzb3IpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKHN1Y2Nlc3NvciwgY3VycmVudFR5cGVzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaXQgY2hhbmdlZCB0aGUgb2xkIHR5cGVzIGF0IGhlYWQuCisgICAgLy8gSXQgYWxzbyB1
cGRhdGVzIG1fYmxvY2tzVG9WaXNpdC4KKyAgICBib29sIG1lcmdlUHJlZGljdGlvbnNBdEhlYWQo
QmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgaW5jb21p
bmdUeXBlcykKKyAgICB7CisgICAgICAgIE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgb2xkVHlw
ZXMgPSBtX3R5cGVzQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgQVNTRVJUKG9sZFR5cGVzLm51bWJl
ck9mQXJndW1lbnRzKCkgPT0gaW5jb21pbmdUeXBlcy5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAg
ICAgICAgQVNTRVJUKG9sZFR5cGVzLm51bWJlck9mTG9jYWxzKCkgPT0gaW5jb21pbmdUeXBlcy5u
dW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgQVNTRVJUKG9sZFR5cGVzLm51bWJlck9mVG1wcygp
ID09IGluY29taW5nVHlwZXMubnVtYmVyT2ZUbXBzKCkpOworCisgICAgICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRUeXBlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0pCisg
ICAgICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3BlY3VsYXRpb24ob2xkVHlwZXNbaV0sIGlu
Y29taW5nVHlwZXNbaV0pOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICBtX2Jsb2Nrc1RvVmlzaXQucXVpY2tTZXQoYmxvY2stPmluZGV4KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIHByb3BhZ2F0ZVRvU3VjY2Vzc29yc1Rocm91
Z2hCcmFuY2goTm9kZSogYnJhbmNoLCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIGN1cnJlbnRU
eXBlcywgY29uc3QgT3BlcmFuZHM8dW5zaWduZWQ+IGxhc3RUaW1lT3ZlcndyaXR0ZW4pCisgICAg
eworICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5jaCk7CisKKyAgICAgICAgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+IHR5cGVzQWxvbmdUcnVlQnJhbmNoID0gY3VycmVudFR5cGVz
OworICAgICAgICAvLyBXZSByZXVzZSBjdXJyZW50VHlwZXMgZm9yIHR5cGVzQWxvbmdGYWxzZUJy
YW5jaCwgaW5zdGVhZCBvZiBtYWtpbmcgYW5vdGhlciBjb3B5LgorICAgICAgICBmaWx0ZXJTcGVj
dWxhdGlvbnNCYXNlZE9uVHJ1dGhpbmVzcyhicmFuY2gtPmNoaWxkMSgpLm5vZGUoKSwgdHlwZXNB
bG9uZ1RydWVCcmFuY2gsIGN1cnJlbnRUeXBlcywgbGFzdFRpbWVPdmVyd3JpdHRlbik7CisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGlj
dGlvbnNBdEhlYWQoYnJhbmNoLT5zdWNjZXNzb3JGb3JDb25kaXRpb24odHJ1ZSksIHR5cGVzQWxv
bmdUcnVlQnJhbmNoKTsKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFk
KGJyYW5jaC0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGZhbHNlKSwgY3VycmVudFR5cGVzKTsKKyAg
ICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgdm9pZCBmaWx0ZXJTcGVjdWxhdGlv
bnNCYXNlZE9uVHJ1dGhpbmVzcyhOb2RlKiBub2RlLCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4m
IHRydXRoeVR5cGVzLCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4gZmFsc3lUeXBlcywgY29uc3Qg
T3BlcmFuZHM8dW5zaWduZWQ+IGxhc3RUaW1lT3ZlcndyaXR0ZW4pCisgICAgeworICAgICAgICBh
dXRvIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsID0gWyZdIChOb2Rl
KiBtYXliZUdldExvY2FsLCBTcGVjdWxhdGVkVHlwZSB0cnV0aHlGaWx0ZXIsIFNwZWN1bGF0ZWRU
eXBlIGZhbHN5RmlsdGVyKSB7CisgICAgICAgICAgICBpZiAobWF5YmVHZXRMb2NhbC0+b3AoKSAh
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBPcGVyYW5k
IG9wZXJhbmQgPSBtYXliZUdldExvY2FsLT5vcGVyYW5kKCk7CisgICAgICAgICAgICAvLyBIYXZp
bmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBHZXRMb2NhbCBkb2VzIG5vdCB0ZWxsIHVzIGFueXRo
aW5nIGFib3V0IHRoZSBvcGVyYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlmIHRoZXJlIGlz
IGFuIGludGVydmVuaW5nIFNldExvY2FsLgorICAgICAgICAgICAgaWYgKGxhc3RUaW1lT3Zlcndy
aXR0ZW4ub3BlcmFuZChvcGVyYW5kKSA+IG1heWJlR2V0TG9jYWwtPmluZGV4KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb24odHJ1dGh5VHlw
ZXMub3BlcmFuZChvcGVyYW5kKSwgdHJ1dGh5RmlsdGVyKTsKKyAgICAgICAgICAgIGZpbHRlclNw
ZWN1bGF0aW9uKGZhbHN5VHlwZXMub3BlcmFuZChvcGVyYW5kKSwgZmFsc3lGaWx0ZXIpOworICAg
ICAgICB9OworCisgICAgICAgIC8vIEZJWE1FOiBwcmV0dHkgbXVjaCBhbGwgb2YgdGhlc2UgY2Fz
ZXMgY291bGQgc2hhcmUgY29kZSB3aXRoIHRoZSBBYnN0cmFjdEludGVycHJldGVyLgorICAgICAg
ICAvLyBGSVhNRTogYWxzbyBpbiB0aGVvcnkgd2UgY291bGQgZG8gbXVjaCBmYW5jaWVyIHRoaW5n
cywgbGlrZSBvcHRpbWl6aW5nIGEgc3dpdGNoIG9uIHRoZSByZXN1bHQgb2YgYSBUeXBlT2YuCisg
ICAgICAgIC8vICAgSXQgZmVlbHMgb3ZlcmtpbGwgdW5sZXNzIHdlIGFjdHVhbGx5IHNlZSB0aGF0
IGluIGEgbWFqb3IgYmVuY2htYXJrLCBvciBjYW4gc2hhcmUgdGhhdCBjb2RlIHdpdGggdGhlIEFJ
LgorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDog
eworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2Fubm90QmVUcnV0aHlUeXBlID0gU3BlY0Rv
dWJsZU5hTiB8IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25P
dmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIH5jYW5ub3RCZVRydXRoeVR5cGUsIFNwZWNIZWFwVG9w
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbXBhcmVT
dHJpY3RFcTogeworICAgICAgICAgICAgTm9kZSogbGVmdE5vZGUgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CisgICAgICAgICAgICBOb2RlKiByaWdodE5vZGUgPSBub2RlLT5jaGlsZDIoKS5ub2Rl
KCk7CisgICAgICAgICAgICBpZiAobGVmdE5vZGUtPm9wKCkgIT0gR2V0TG9jYWwgJiYgcmlnaHRO
b2RlLT5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbGVmdFByZWRpY3Rpb24gPSBsZWZ0Tm9kZS0+cHJlZGljdGlvbigp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRQcmVkaWN0aW9uID0gcmlnaHROb2Rl
LT5wcmVkaWN0aW9uKCk7CisKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUcnVlUHJl
ZGljdGlvbiA9IGludGVyc2VjdGlvbk9mU3BlY3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uLCBsZWFz
dFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhyaWdodFByZWRpY3Rp
b24pKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0VHJ1ZVByZWRpY3Rpb24gPSBp
bnRlcnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhyaWdodFByZWRpY3Rpb24sIGxlYXN0VXBwZXJCb3Vu
ZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uKSk7CisKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRGYWxzZVByZWRpY3Rpb24gPSBsZWZ0UHJlZGlj
dGlvbjsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0RmFsc2VQcmVkaWN0aW9uID0g
cmlnaHRQcmVkaWN0aW9uOworICAgICAgICAgICAgaWYgKGxlZnRQcmVkaWN0aW9uID09IFNwZWNO
dWxsKQorICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uKHJpZ2h0RmFsc2VQcmVkaWN0
aW9uLCB+U3BlY051bGwpOworICAgICAgICAgICAgZWxzZSBpZiAobGVmdFByZWRpY3Rpb24gPT0g
U3BlY1VuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihyaWdodEZh
bHNlUHJlZGljdGlvbiwgflNwZWNVbmRlZmluZWQpOworICAgICAgICAgICAgaWYgKHJpZ2h0UHJl
ZGljdGlvbiA9PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihs
ZWZ0RmFsc2VQcmVkaWN0aW9uLCB+U3BlY051bGwpOworICAgICAgICAgICAgZWxzZSBpZiAocmln
aHRQcmVkaWN0aW9uID09IFNwZWNOdWxsKQorICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0
aW9uKGxlZnRGYWxzZVByZWRpY3Rpb24sIH5TcGVjVW5kZWZpbmVkKTsKKworICAgICAgICAgICAg
ZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobGVmdE5vZGUsIGxlZnRU
cnVlUHJlZGljdGlvbiwgbGVmdEZhbHNlUHJlZGljdGlvbik7CisgICAgICAgICAgICBmaWx0ZXJT
cGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChyaWdodE5vZGUsIHJpZ2h0VHJ1ZVBy
ZWRpY3Rpb24sIHJpZ2h0RmFsc2VQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENvbXBhcmVFcTogeworICAgICAgICAgICAgLy8gVGhlIGxv
Z2ljIG9mIHRoaXMgY2FzZSBjbG9zZWx5IGZvbGxvd3MgdmFsdWVzQ291bGRCZUVxdWFsKCkgaW4g
U3BlY3VsYXRlZFR5cGUuY3BwCisgICAgICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIHJpZ2h0Tm9kZSA9IG5vZGUtPmNoaWxk
MigpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0Tm9kZS0+b3AoKSAhPSBHZXRMb2NhbCAm
JiByaWdodE5vZGUtPm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0UHJlZGljdGlvbiA9IGxlZnROb2RlLT5wcmVk
aWN0aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFByZWRpY3Rpb24gPSBy
aWdodE5vZGUtPnByZWRpY3Rpb24oKTsKKworICAgICAgICAgICAgLy8gT25seSBhIHN5bWJvbCBv
ciBhbiBvYmplY3QgY2FuIGJlIGVxdWFsIHRvIGEgc3ltYm9sCisgICAgICAgICAgICBpZiAobGVm
dFByZWRpY3Rpb24gPT0gU3BlY1N5bWJvbCkgeworICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1
bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKHJpZ2h0Tm9kZSwgU3BlY1N5bWJvbCB8IFNw
ZWNPYmplY3QsIFNwZWNIZWFwVG9wKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAocmlnaHRQcmVkaWN0aW9uID09IFNwZWNTeW1ib2wpIHsK
KyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2Nh
bChsZWZ0Tm9kZSwgU3BlY1N5bWJvbCB8IFNwZWNPYmplY3QsIFNwZWNIZWFwVG9wKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFByZXR0
eSBtdWNoIGFueXRoaW5nIGNhbiBiZSBlcXVhbCB0byBhIFN0cmluZywgc28gd2UgZ2V0IG5vIGlu
Zm9ybWF0aW9uCisgICAgICAgICAgICBpZiAoKGxlZnRQcmVkaWN0aW9uICYgU3BlY1N0cmluZykg
fHwgKHJpZ2h0UHJlZGljdGlvbiAmIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgLy8gSWYgYm90aCBzaWRlcyBhcmUgZGVmaW5pdGVseSBvbmx5IG9i
amVjdHMsIHRoZW4gZXF1YWxpdHkgaXMgZmFpcmx5IHNhbmUuCisgICAgICAgICAgICAvLyBTYW1l
IGlmIG5laXRoZXIgY2FuIGJlIGFuIG9iamVjdAorICAgICAgICAgICAgYm9vbCBpc1NhbmUgPSBp
c09iamVjdFNwZWN1bGF0aW9uKGxlZnRQcmVkaWN0aW9uKSAmJiBpc09iamVjdFNwZWN1bGF0aW9u
KHJpZ2h0UHJlZGljdGlvbik7CisgICAgICAgICAgICBpc1NhbmUgfD0gIShsZWZ0UHJlZGljdGlv
biAmIFNwZWNPYmplY3QpICYmICEocmlnaHRQcmVkaWN0aW9uICYgU3BlY09iamVjdCk7CisgICAg
ICAgICAgICBpZiAoIWlzU2FuZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUcnVlUHJlZGljdGlvbiA9IGludGVyc2VjdGlvbk9mU3Bl
Y3VsYXRpb25zKGxlZnRQcmVkaWN0aW9uLCBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVj
dWxhdGlvbnMocmlnaHRQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBy
aWdodFRydWVQcmVkaWN0aW9uID0gaW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMocmlnaHRQcmVk
aWN0aW9uLCBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMobGVmdFByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdl
dExvY2FsKGxlZnROb2RlLCBsZWZ0VHJ1ZVByZWRpY3Rpb24sIFNwZWNIZWFwVG9wKTsKKyAgICAg
ICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKHJpZ2h0Tm9k
ZSwgcmlnaHRUcnVlUHJlZGljdGlvbiwgU3BlY0hlYXBUb3ApOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGNhc2UgVG9Cb29sZWFuOgorICAgICAgICAgICAgcmV0dXJu
IGZpbHRlclNwZWN1bGF0aW9uc0Jhc2VkT25UcnV0aGluZXNzKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgdHJ1dGh5VHlwZXMsIGZhbHN5VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOworICAgICAg
ICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyU3BlY3VsYXRpb25z
QmFzZWRPblRydXRoaW5lc3Mobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBmYWxzeVR5cGVzLCB0cnV0
aHlUeXBlcywgbGFzdFRpbWVPdmVyd3JpdHRlbik7CisgICAgICAgIGNhc2UgSXNVbmRlZmluZWRP
ck51bGw6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRM
b2NhbChub2RlLCBTcGVjT3RoZXIsIH5TcGVjT3RoZXIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIElzQm9vbGVhbjoKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uSWZO
b25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIFNwZWNCb29sZWFuLCB+U3BlY0Jvb2xlYW4pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIElzTnVtYmVyOgorICAgICAgICAgICAg
ZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwobm9kZSwgU3BlY0Z1bGxO
dW1iZXIsIH5TcGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgSXNCaWdJbnQ6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0
ZW5HZXRMb2NhbChub2RlLCBTcGVjQmlnSW50LCB+U3BlY0JpZ0ludCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgSXNUeXBlZEFycmF5VmlldzoKKyAgICAgICAgICAgIGZpbHRl
clNwZWN1bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIFNwZWNUeXBlZEFycmF5
VmlldywgflNwZWNUeXBlZEFycmF5Vmlldyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgSXNPYmplY3Q6CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3Zlcndy
aXR0ZW5HZXRMb2NhbChub2RlLCBTcGVjT2JqZWN0LCB+U3BlY09iamVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgSXNFbXB0eToKKyAgICAgICAgICAgIGZpbHRlclNwZWN1
bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIFNwZWNFbXB0eSwgflNwZWNFbXB0
eSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVHlwZU9mSXNVbmRlZmluZWQ6
CisgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChu
b2RlLCBTcGVjT2JqZWN0T3RoZXIgfCBTcGVjVW5kZWZpbmVkLCB+U3BlY1VuZGVmaW5lZCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVHlwZU9mSXNPYmplY3Q6IHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgc3VidGxlLgorICAgICAgICAgICAgLy8gLSBOdWxsIGlz
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIFRydWUuCisgICAgICAgICAgICAvLyAtIFRoZSBzYW1lIGlz
IHRydWUgb2YgZXZlcnl0aGluZyBpbiBTcGVjT2JqZWN0IC0gU3BlY09iamVjdE90aGVyIC0gU3Bl
Y0Z1bmN0aW9uLgorICAgICAgICAgICAgLy8gLSBCdXQgU3BlY09iamVjdE90aGVyIGNhbiByZXR1
cm4gZWl0aGVyIFRydWUgb3IgRmFsc2UKKyAgICAgICAgICAgIC8vIC0gRmluYWxseSwgZXZlcnl0
aGluZyBlbHNlIHJldHVybnMgRmFsc2UuCisgICAgICAgICAgICAvLyBTZWUgdGhlIGNvbW1lbnQg
aW4gZXhlY3V0ZUVmZmVjdHMoKSAoaW4gREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCkg
Zm9yIGRldGFpbHMKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVyblRydWUgPSAo
KFNwZWNPYmplY3QgLSBTcGVjRnVuY3Rpb24pIHwgU3BlY051bGwpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgbWF5UmV0dXJuRmFsc2UgPSB+KChTcGVjT2JqZWN0IC0gU3BlY09iamVjdE90
aGVyIC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxsKTsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1
bGF0aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIG1heVJldHVyblRydWUsIG1heVJl
dHVybkZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFR5cGVPZklzRnVuY3Rpb246CisgICAgICAgIGNhc2UgSXNDYWxsYWJsZTogeworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbWF5UmV0dXJuVHJ1ZSA9IFNwZWNGdW5jdGlvbiB8IFNwZWNPYmpl
Y3RPdGhlciB8IFNwZWNQcm94eU9iamVjdDsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1h
eVJldHVybkZhbHNlID0gflNwZWNGdW5jdGlvbjsKKyAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0
aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIG1heVJldHVyblRydWUsIG1heVJldHVy
bkZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIElz
Q2VsbFdpdGhUeXBlOiB7CisgICAgICAgICAgICBpZiAoYXV0byBxdWVyaWVkVHlwZSA9IG5vZGUt
PnNwZWN1bGF0ZWRUeXBlRm9yUXVlcnkoKSkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxh
dGlvbklmTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChub2RlLCAqcXVlcmllZFR5cGUsIH4qcXVlcmll
ZFR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0
aW9uSWZOb25PdmVyd3JpdHRlbkdldExvY2FsKG5vZGUsIFNwZWNDZWxsLCBTcGVjSGVhcFRvcCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNFbnVtZXJh
YmxlU3RydWN0dXJlUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5
OgorICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb25JZk5vbk92ZXJ3cml0dGVuR2V0TG9jYWwo
bm9kZSwgflNwZWNPdGhlciwgU3BlY0hlYXBUb3ApOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAg
ICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+aGFzUmVzdWx0KCkpOwpAQCAtMTQ2LDcgKzM2
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGVkRG91YmxlVHlwZUZvclBy
ZWRpY3Rpb24obWVyZ2VTcGVjdWxhdGlvbnMobGVmdCwgcmlnaHQpKTsKICAgICB9CiAKLSAgICB2
b2lkIHByb3BhZ2F0ZShOb2RlKiBub2RlKQorICAgIHZvaWQgcHJvcGFnYXRlKE5vZGUqIG5vZGUs
IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgdHlwZXMsIE9wZXJhbmRzPHVuc2lnbmVkPiYgbGFz
dFRpbWVPdmVyd3JpdHRlbikKICAgICB7CiAgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3Ao
KTsKIApAQCAtMTU1LDcgKzM3MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAob3ApIHsK
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdHlwZXMub3BlcmFuZChub2RlLT5vcGVy
YW5kKCkpOworICAgICAgICAgICAgaWYgKG1fcGFzcyA9PSBEb3VibGVWb3RpbmdQYXNzKQorICAg
ICAgICAgICAgICAgIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+bWFrZVByZWRpY3Rpb25Gb3JEb3Vi
bGVGb3JtYXQocHJlZGljdGlvbik7CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5jb3VsZFJl
cHJlc2VudEludDUyKCkgJiYgKHByZWRpY3Rpb24gJiBTcGVjTm9uSW50MzJBc0ludDUyKSkKICAg
ICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gKHByZWRpY3Rpb24gfCBTcGVjQW55SW50QXNEb3Vi
bGUpICYgflNwZWNOb25JbnQzMkFzSW50NTI7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikK
QEAgLTE2NCw4ICszODIsMTggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCh0eXBlKTsKKyAgICAgICAgICAgIE9wZXJhbmQg
b3BlcmFuZCA9IG5vZGUtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIHR5cGVzLm9wZXJhbmQob3Bl
cmFuZCkgPSB0eXBlOworICAgICAgICAgICAgbGFzdFRpbWVPdmVyd3JpdHRlbi5vcGVyYW5kKG9w
ZXJhbmQpID0gbm9kZS0+aW5kZXgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6IHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlJiB0eXBlQXRIZWFkID0gdHlwZXMub3BlcmFuZChtX2N1cnJlbnROb2RlLT5vcGVy
YW5kKCkpOworICAgICAgICAgICAgaWYgKHR5cGVBdEhlYWQgPT0gU3BlY05vbmUpCisgICAgICAg
ICAgICAgICAgdHlwZUF0SGVhZCA9IG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC02MzIsMjIgKzg2MCw2IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQotICAgICAgICAK
LSAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQotICAgIHsKLSAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogbV9kZXBlbmRlbnROb2RlcykgewotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG5v
ZGU7Ci0gICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKLSAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fZGVwZW5kZW50Tm9kZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnROb2RlID0gbV9kZXBlbmRlbnROb2Rlc1tpXTsKLSAgICAgICAgICAgIHByb3Bh
Z2F0ZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgfQotICAgIH0KICAgICAKICAgICB2b2lkIGRv
RG91YmxlVm90aW5nKE5vZGUqIG5vZGUsIGZsb2F0IHdlaWdodCkKICAgICB7CkBAIC04MjgsMTIg
KzEwNDAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG5vZGU7Ci0g
ICAgICAgICAgICAgICAgcHJvY2Vzc0ludmFyaWFudHNGb3JOb2RlKCk7CisgICAgICAgICAgICAg
ICAgcHJvY2Vzc0ludmFyaWFudHNGb3JOb2RlKGJsb2NrKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZvaWQgcHJvY2Vzc0ludmFyaWFudHNGb3JOb2RlKCkKKyAgICB2
b2lkIHByb2Nlc3NJbnZhcmlhbnRzRm9yTm9kZShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobV9jdXJyZW50Tm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6IHsKQEAgLTEwNjcsNiArMTI3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgc29tZXRoaW5nIG1vcmUgcHJlY2lzZT8KICAg
ICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMjI4LDExICsxNDQxLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7Cisg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY051bGwpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1Bu
YW1lOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVjTnVsbCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKQEAg
LTEyNTgsMjcgKzE0NzEsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKKyAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBvbmx5IG5vZGVzIGZvciB3aGljaCB0aGUg
Qnl0ZWNvZGVQYXJzZXIgc29tZXRpbWVzIHNldHMgTm9kZU1heU92ZXJmbG93SW50MzJJbkJhc2Vs
aW5lIGFuZC9vciBOb2RlTWF5TmVnWmVyb0luQmFzZWxpbmUKKyAgICAgICAgY2FzZSBWYWx1ZU5l
Z2F0ZToKKyAgICAgICAgY2FzZSBWYWx1ZU11bDoKKyAgICAgICAgY2FzZSBWYWx1ZURpdjoKKyAg
ICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICAgICAgY2FzZSBBcml0aERpdjoKKyAgICAgICAg
Y2FzZSBJbmM6CisgICAgICAgIGNhc2UgRGVjOgorICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0
SW5SYXJlQ2FzZVBhc3MucXVpY2tTZXQoYmxvY2stPmluZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgIGNhc2UgVmFsdWVOZWdhdGU6CiAgICAg
ICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIGNhc2UgVmFsdWVTdWI6Ci0gICAgICAgIGNhc2Ug
VmFsdWVNdWw6Ci0gICAgICAgIGNhc2UgVmFsdWVEaXY6CiAgICAgICAgIGNhc2UgVmFsdWVNb2Q6
CiAgICAgICAgIGNhc2UgVmFsdWVQb3c6CiAgICAgICAgIGNhc2UgVmFsdWVCaXRMU2hpZnQ6CiAg
ICAgICAgIGNhc2UgVmFsdWVCaXRSU2hpZnQ6Ci0gICAgICAgIGNhc2UgSW5jOgotICAgICAgICBj
YXNlIERlYzoKICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY2FzZSBBcml0aFN1YjoK
LSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAg
ICAgY2FzZSBBcml0aE1heDoKICAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgY2FzZSBB
cml0aERpdjoKICAgICAgICAgY2FzZSBBcml0aE1vZDoKICAgICAgICAgY2FzZSBBcml0aEFiczoK
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKQEAgLTEyOTQsMTEgKzE1MTEsOSBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEF0b21pY3NPcjoKICAgICAgICAgY2FzZSBBdG9taWNzU3RvcmU6CiAgICAg
ICAgIGNhc2UgQXRvbWljc1N1YjoKLSAgICAgICAgY2FzZSBBdG9taWNzWG9yOiB7Ci0gICAgICAg
ICAgICBtX2RlcGVuZGVudE5vZGVzLmFwcGVuZChtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgY2Fz
ZSBBdG9taWNzWG9yOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAorCiAgICAgICAgIGNhc2UgQXRvbWljc0lzTG9ja0ZyZWU6IHsKICAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzA4LDcgKzE1
MjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUtPmludHJpbnNp
YygpID09IENQVVJkdHNjSW50cmluc2ljKQogICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihTcGVjT3RoZXIpOworICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1Vu
ZGVmaW5lZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xNDE2LDggKzE2
MzEsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOgogICAgICAgICBjYXNl
IFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAg
IGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5
YmU6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAgICBjYXNlIFNl
dEZ1bmN0aW9uTmFtZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBDaGVja0lzQ29uc3RhbnQ6CkBAIC0xNTEzLDcgKzE3MjgsOSBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2w7CiAgICAgfQogCi0gICAgVmVjdG9yPE5v
ZGUqPiBtX2RlcGVuZGVudE5vZGVzOworICAgIEJsb2NrTWFwPE9wZXJhbmRzPFNwZWN1bGF0ZWRU
eXBlPj4gbV90eXBlc0F0SGVhZDsKKyAgICBCaXRWZWN0b3IgbV9ibG9ja3NUb1Zpc2l0OworICAg
IEJpdFZlY3RvciBtX2Jsb2Nrc1RvVmlzaXRJblJhcmVDYXNlUGFzczsKICAgICBOb2RlKiBtX2N1
cnJlbnROb2RlOwogICAgIGJvb2wgbV9jaGFuZ2VkIHsgZmFsc2UgfTsKICAgICBQcmVkaWN0aW9u
UGFzcyBtX3Bhc3MgeyBQcmltYXJ5UGFzcyB9OyAvLyBXZSB1c2UgZGlmZmVyZW50IGxvZ2ljIGZv
ciBjb25zaWRlcmluZyBwcmVkaWN0aW9ucyBkZXBlbmRpbmcgb24gaG93IGZhciBhbG9uZyB3ZSBh
cmUgaW4gcHJvcGFnYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggMmFjMmVlMzliNGNjLi41YTQ4OTJhYWMyMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5jcHAKQEAgLTg2LDggKzg2LDcgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6OnNob3Vs
ZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSgpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCB0aGlzIGZhY2lsaXR5IGZvciBhcmd1bWVudHMsIHlldC4KICAgICAvLyBGSVhNRTogbWFr
ZSB0aGlzIHdvcmsgZm9yIGFyZ3VtZW50cy4KLSAgICBpZiAob3BlcmFuZCgpLmlzQXJndW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVCghb3BlcmFuZCgpLmlzQXJndW1l
bnQoKSk7CiAgICAgICAgIAogICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIg
cHJlZGljdGlvbiwgdGhlbiB0aGlzIGRvZXNuJ3QKICAgICAvLyBtYWtlIGFueSBzZW5zZS4KQEAg
LTE0NSwxOSArMTQ0LDIzIEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjptZXJnZURvdWJsZUZv
cm1hdFN0YXRlKERvdWJsZUZvcm1hdFN0YXRlIGRvdWJsZUZvcm1hdFN0CiAgICAgcmV0dXJuIERG
Rzo6bWVyZ2VEb3VibGVGb3JtYXRTdGF0ZShmaW5kKCktPm1fZG91YmxlRm9ybWF0U3RhdGUsIGRv
dWJsZUZvcm1hdFN0YXRlKTsKIH0KIAotYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6Om1ha2VQcmVk
aWN0aW9uRm9yRG91YmxlRm9ybWF0KCkKK1NwZWN1bGF0ZWRUeXBlIFZhcmlhYmxlQWNjZXNzRGF0
YTo6bWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQoU3BlY3VsYXRlZFR5cGUgdHlwZSkKIHsK
ICAgICBBU1NFUlQoaXNSb290KCkpOwotICAgIAorCiAgICAgaWYgKG1fZG91YmxlRm9ybWF0U3Rh
dGUgIT0gVXNpbmdEb3VibGVGb3JtYXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9wcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gdHlw
ZTsKKwogICAgIGlmICh0eXBlICYgflNwZWNCeXRlY29kZU51bWJlcikKICAgICAgICAgdHlwZSB8
PSBTcGVjRG91YmxlUHVyZU5hTjsKICAgICBpZiAodHlwZSAmIChTcGVjSW50MzJPbmx5IHwgU3Bl
Y0ludDUyQW55KSkKICAgICAgICAgdHlwZSB8PSBTcGVjQW55SW50QXNEb3VibGU7Ci0gICAgcmV0
dXJuIGNoZWNrQW5kU2V0KG1fcHJlZGljdGlvbiwgdHlwZSk7CisgICAgcmV0dXJuIHR5cGU7Cit9
CisKK2Jvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjptYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1h
dCgpCit7CisgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1fcHJlZGljdGlvbiwgbWFrZVByZWRpY3Rp
b25Gb3JEb3VibGVGb3JtYXQobV9wcmVkaWN0aW9uKSk7CiB9CiAKIGJvb2wgVmFyaWFibGVBY2Nl
c3NEYXRhOjpjb3VsZFJlcHJlc2VudEludDUyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4IGJlMmZiNTQwMTM1Mi4uYTIzOWQy
NTczMTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmgKQEAgLTE4Miw2ICsxODIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBt
ZXJnZURvdWJsZUZvcm1hdFN0YXRlKERvdWJsZUZvcm1hdFN0YXRlKTsKICAgICAKKyAgICBTcGVj
dWxhdGVkVHlwZSBtYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1hdChTcGVjdWxhdGVkVHlwZSk7
CiAgICAgYm9vbCBtYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1hdCgpOwogICAgIAogICAgIE5v
ZGVGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IGM5ZGU2YThhMzhjMS4uMWFmYTZh
YzdhM2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
QEAgLTE2OSw2ICsxNjksNyBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2Uo
KTsKICAgICB2KEJvb2wsIHJlcG9ydFBhcnNlVGltZXMsIGZhbHNlLCBOb3JtYWwsICJkdW1wcyBK
UyBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSB0aW1lIGl0IHRvb2sgdG8gcGFyc2UiKSBcCiAg
ICAgdihCb29sLCByZXBvcnRCeXRlY29kZUNvbXBpbGVUaW1lcywgZmFsc2UsIE5vcm1hbCwgImR1
bXBzIEpTIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgdGhlIHRpbWUgaXQgdG9vayB0byBieXRlY29k
ZSBjb21waWxlIikgXAogICAgIHYoQm9vbCwgY291bnRQYXJzZVRpbWVzLCBmYWxzZSwgTm9ybWFs
LCAiY291bnRzIHBhcnNlIHRpbWVzIikgXAorICAgIHYoQm9vbCwgZHVtcFVudHlwZWRPcGNvZGVz
QWZ0ZXJGaXh1cCwgZmFsc2UsIE5vcm1hbCwgImFmdGVyIERGR0ZpeHVwLCByZXBvcnQgZXZlcnkg
aW50ZXJlc3Rpbmcgbm9kZSB0aGF0IHdlIGZhaWxlZCB0byBzcGVjdWxhdGl2ZWx5IG9wdGltaXpl
IikgXAogICAgIHYoQm9vbCwgdmVyYm9zZUV4aXRQcm9maWxlLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihCb29sLCB2ZXJib3NlQ0ZBLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihCb29sLCB2ZXJib3NlREZHRmFpbHVyZSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432409</attachid>
            <date>2021-06-28 10:45:17 -0700</date>
            <delta_ts>2021-06-28 10:45:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226914</filename>
            <type>text/plain</type>
            <size>69774</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDZkYzZlODM5OGIwMy4uMGMxMDQ2MTMyNDNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAyMS0wNi0yMiAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvbiBzaG91bGQgYmUgZmxvdy1zZW5zaXRpdmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjkxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoLCBpbmZvcm1h
dGlvbiBmbG93cyBiZXR3ZWVuIGJsb2NrcyBpbiBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZSB0
aHJvdWdoIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gU2V0
TG9jYWwvR2V0TG9jYWwvZXRjLi4KKyAgICAgICAgVGhpcyBjYXVzZXMgdGhlIHByZWRpY3Rpb24g
dG8gYmUgdG9vIGNvYXJzZSBpbiBtYW55IGNhc2VzLCBhcyBhIHNpbmdsZSBWYXJpYWJsZUFjY2Vz
c0RhdGEgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG1hbnkgbm9kZXMsIGFuZCB0aGVyZSBpcyBubyB3
YXkgdG8gbWFrZSB1c2Ugb2YgdGhpbmdzIGxpa2UgIkkgYnJhbmNoZWQgb24geCAhPT0gbnVsbCwg
c28geCBpcyBkZWZpbml0ZWx5IG5vdCBudWxsIGluIHRoZSB0cnVlIGJyYW5jaCIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb21wbGV0ZWx5IGZpeGVzIHRoaXMsIGJ5IGluc3RlYWQga2VlcGluZyB0
cmFjayBvZiBhbiBtX3R5cGVzQXRIZWFkIGZpZWxkIGluIFByZWRpY3Rpb25Qcm9wYWdhdGlvbiwg
YW5kIGZvbGxvd2luZyBhIG1vcmUgY2xhc3NpYyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhbGdv
cml0aG0uCisgICAgICAgIFRoaXMgbmV3IGRlc2lnbiBsZWQgdG8gbXVsdGlwbGUgb3RoZXIgY2hh
bmdlczoKKyAgICAgICAgLSBTcGVjT3RoZXIgaGFzIGJlZW4gc3BsaXQgaW4gU3BlY051bGwgfCBT
cGVjVW5kZWZpbmVkLCB0byBwcm9wZXJseSB1c2UgdGVzdHMgc3VjaCBhcyAieCAhPT0gbnVsbCIK
KyAgICAgICAgLSBCeXRlY29kZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbiBu
b3cgc2V0cyBtX3ByZWRpY3Rpb24gZm9yIHRoZSByZWxldmFudCBHZXRMb2NhbCwgYXMgUHJlZGlj
dGlvblByb3BhZ2F0aW9uIHdvbid0IHJlYWQgaXQgZnJvbSB0aGUgVmFyaWFibGVBY2Nlc3NEYXRh
CisgICAgICAgIC0gU2V0QXJndW1lbnREZWZpbml0ZWx5IG5vdyBoYXMgYSBoZWFwIHByZWRpY3Rp
b24sIHdoaWNoIGlzIHNldCBpbiB0aGUgQnl0ZWNvZGVQYXJzZXIvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uLiBUaGlzIHJlcGxhY2VzIHRoZSBmaXJzdCBoYWxmIG9mIFByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZSwgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRvIFByZWRpY3Rpb25Qcm9wYWdhdGlv
bi4KKyAgICAgICAgLSBUbyBrZWVwIGNvbXBpbGF0aW9uIHRpbWVzIHJlYXNvbmFibGUsIHRoZSBS
YXJlQ2FzZVBhc3MgcGFydCBvZiBQcmVkaWN0aW9uUHJvcGFnYXRpb24gYXZvaWRzIHZpc2l0aW5n
IGJsb2NrcyB3aXRob3V0IGFueSBub2RlcyBpdCBjYXJlIGFib3V0LgorICAgICAgICAgICAgSSBi
ZWxpZXZlIHRoYXQgdGhlIGVudGlyZSBSYXJlQ2FzZVBhc3MgaXMgbW9zdGx5IG9ic29sZXRlIChz
ZWUgdGhlIGNvbW1lbnQgaW4gREZHQ29tbW9uLmgncyBlbnVtIFByZWRpY3Rpb25QYXNzLCBpdCBy
ZWZlcnMgdG8gdGhlIGNvdW50aW5nIG9mIHJhcmUgY2FzZXMgaW4gdGhlIEJhc2VsaW5lSklULCB3
aGljaCBpcyBnb25lKS4KKyAgICAgICAgICAgIEhvd2V2ZXIgcmVtb3ZpbmcgaXQgY29tcGxldGVs
eSB3b3VsZCBhZGQgc29tZSBjb21wbGV4aXR5IGFuZCByaXNrIHRvIHRoaXMgcGF0Y2ggd2hpY2gg
aXMgYWxyZWFkeSBub24tdHJpdmlhbCwgc28gSSBwbGFuIHRvIGRlZmVyIGl0IHRvIGEgc2VwYXJh
dGUgcGF0Y2guCisgICAgICAgIC0gSSBrZWVwIHRyYWNrIG9mIHdoaWNoIGJsb2NrcyBoYXZlIHNl
ZW4gdGhlaXIgdHlwZXNBdEhlYWQgY2hhbmdlIHRocm91Z2ggdGhlIEJpdFZlY3RvciBtX2Jsb2Nr
c1RvVmlzaXQgYW5kIGF2b2lkIHdhc3RpbmcgdGltZSBpbiB0aGUgb3RoZXIgYmxvY2tzICh0aGlz
IGRlc2lnbiBpcyBpbnNwaXJlZCBieSB0aGUgREZHIEFic3RyYWN0IEludGVycHJldGVyKQorICAg
ICAgICAtIFVwb24gcmVhY2hpbmcgYSBicmFuY2gsIHByZWRpY3Rpb24gcHJvcGFnYXRpb24gc3Bs
aXRzIGl0cyB0eXBlcyBhdCB0YWlsLCBhbmQgZmlsdGVyIHRoZW0gc2VwYXJhdGVseSBiYXNlZCBv
biB3aGF0IHdhcyBicmFuY2hlZCBvbiwgYmVmb3JlIG1lcmdpbmcgdGhlbSB3aXRoIHRoZSB0eXBl
cyBhdCBoZWFkIG9mIGl0cyBzdWNjZXNzb3JzCisgICAgICAgICAgICBUaGlzIGlzIHNvbWV0aGlu
ZyB3aGljaCBpcyBub3QgeWV0IGRvbmUgaW4gdGhlIGFic3RyYWN0IGludGVycHJldGVyLCBhbmQg
dGhhdCBJIGhvcGUgdG8gY2hhbmdlIGluIGEgbGF0ZXIgcGF0Y2ggaWYgbm8tb25lIGVsc2UgZ2V0
cyB0byBpdCBmaXJzdC4KKyAgICAgICAgICAgIFRoZSBjb2RlIGRlYWxzIHdpdGggbG90cyBvZiBw
YXR0ZXJucyBzdWNoIGFzIGlmKHggPT09IHkpLCBpZiAoeCksIGlmIChUeXBlT2ZJc0Z1bmN0aW9u
IHgpLCBldGMuLiwgYmFzZWQgb24gd2hhdCBwYXR0ZXJucyBhcHBlYXIgaW4gSlMyIGFuZCBTcGVl
ZG9tZXRlcjIuCisgICAgICAgIC0gVXBvbiByZWFjaGluZyBhIHN3aXRjaCwgcHJlZGljdGlvbiBw
cm9wYWdhdGlvbiBzaW1pbGFybHkgc3BsaXRzIGl0cyB0eXBlcyBhdCB0YWlsLCBhbmQga25vd3Mg
aG93IHRvIGRlYWwgd2l0aCB0aGluZ3MgbGlrZSBzd2l0Y2goeCkgYXMgd2VsbCBhcyBzd2l0Y2go
dHlwZW9mIHgpLgorICAgICAgICAgICAgSW4gU3BlZWRvbWV0ZXIyLCBzd2l0Y2goR2V0TG9jYWwp
IG9jY3VycyAxOTkgdGltZXMsIGFuZCBzd2l0Y2goVHlwZU9mKSBvY2N1cnMgMTM1IHRpbWVzLgor
ICAgICAgICAtIEluIGFsbCBjYXNlcywgSSBvbmx5IHRvdWNoIHRoZSBvcGVyYW5kcyB0aGF0IGFy
ZSBsaXZlQXRIZWFkLCB3aGljaCBpcyBkaXJlY3RseSBiYXNlZCBvbiBibG9jay0+dmFyaWFibGVz
QXRIZWFkLgorICAgICAgICAgICAgVGhpcyBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIHRvIHRy
eSB0byBrZWVwIHRoZSB0aW1lIHNwZW50IGluIHRoZSBwYXNzIHVuZGVyIGNvbnRyb2wuCisgICAg
ICAgIC0gSW4gdGhlIGRvdWJsZSB2b3RpbmcgcGhhc2UsIGFsbCBnZXRMb2NhbHMgY29hcnNlbiB0
aGVpciBwcmVkaWN0aW9ucyBiYXNlZCBvbiB0aGUgKGZsb3ctaW5zZW5zaXRpdmUpIHJlc3VsdCBv
ZiB0aGUgZG91YmxlIHZvdGluZy4KKyAgICAgICAgICAgIFRoaXMgY2FuIGFsc28gbWFrZSB1c2Ug
b2YgKGNvYXJzZSkgaW5mb3JtYXRpb24gY29taW5nIGZyb20gdGhlIGJ5dGVjb2RlIHBhcnNlci4K
KyAgICAgICAgICAgIFdlIGxpbWl0IGl0IHRvIG51bWVyaWNhbCB0eXBlcyAob3RoZXJ3aXNlIGl0
IHdvdWxkIGVmZmVjdGl2ZWx5IGNhbmNlbCBwcmV0dHkgbXVjaCB0aGUgZW50aXJlIHBvaW50IG9m
IHRoZSBmbG93LXNlbnNpdGl2aXR5IGluIGVhcmxpZXIgcGFydHMgb2YgdGhlIHBhc3MpLgorICAg
ICAgICAgICAgVGhpcyBwcm92ZWQgcmVxdWlyZWQgdG8gYXZvaWQgc29tZSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9ucywgd2hlcmUgd2Ugd291bGQgcHJlZGljdCBBbnlJbnRBc0RvdWJsZSBpbnNpZGUg
c29tZSBpbm5lciBsb29wIGFuZCBJbnQzMiBvdXRzaWRlLCByZXN1bHRpbmcgaW4gY29zdGx5IGNv
bnZlcnNpb25zIG9uIGV2ZXJ5IGl0ZXJhdGlvbi4KKworICAgICAgICBPdGhlciBtaW5vciBjaGFu
Z2VzOgorICAgICAgICAtIEZpeCB0aGUgcHJpbnRpbmcgb2YgU3BlY3VsYXRlZFR5cGVzOiBpdCB3
b3VsZCBzb21ldGltZXMgc2hvdyBOb25Cb29sSW50MzJ8Qm9vbEludDMyIGluc3RlYWQgb2YgSW50
MzIuCisgICAgICAgIC0gRml4IHRoZSBwcmludGluZyBvZiBTcGVjdWxhdGVkVHlwZXM6IGl0IHdv
dWxkIHNob3cgQ2VsbHxCaWdJbnQgZXZlcnkgdGltZSBpdCBzaG91bGQgc2hvdyBDZWxsCisgICAg
ICAgIC0gUmVmYWN0b3IgdmFsdWVzQ291bGRCZUVxdWFsLCBhbmQgdGF1Z2h0IGl0IHRoYXQgU3lt
Ym9scyBjYW4gb25seSBiZSBlcXVhbCB0byBPYmplY3RzIG9yIFN5bWJvbHMKKyAgICAgICAgLSBS
ZXR1cm4gYSBwcmVjaXNlIFNwZWN1bGF0ZWRUeXBlIGZvciBMYXp5SlNWYWx1ZTo6c3BlY3VsYXRl
ZFR5cGUoKSBpbnN0ZWFkIG9mIFNwZWNCeXRlY29kZVRvcCBmb3IgS25vd25WYWx1ZQorICAgICAg
ICAtIEFkZCBPcHRpb25zOjpkdW1wVW50eXBlZE9wY29kZXNBZnRlckZpeHVwLCBpdCBwcm92ZWQg
dmVyeSB1c2VmdWwgZm9yIGZpbmRpbmcgaXNzdWVzIGluIHRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0
aW9uLCBhbmQgaXQgY2FuIGFsc28gc3VnZ2VzdCBuZXcgc3BlY3VsYXRpdmUgb3B0aW1pemF0aW9u
cyB0byB1cy4KKyAgICAgICAgICAgIEkgcmVjb21tZW5kIGR1bXBpbmcgaXRzIHJlc3VsdHMgaW50
byBhIGZpbGUsIGFuZCB0aGVuIGRvaW5nICJzb3J0IGZpbGUgfCB1bmlxIC1jIGZpbGUgfCBzb3J0
IC1uIC1yID4gcmVzdWx0RmlsZSIsIGZvbGxvd2VkIGJ5ICJncmVwIEdldEJ5SWQgcmVzdWx0Rmls
ZSIgKGZvciBleGFtcGxlLCBpZiB5b3UgY2FyZSBhYm91dCBVbnR5cGVkIEdldEJ5SWQpLgorICAg
ICAgICAgICAgVGhpcyB3aWxsIGdpdmUgeW91IHRoZSBwcmVkaWN0aW9ucyBvZiB0aGUgVW50eXBl
ZFVzZSBHZXRCeUlkLCBieSBkZWNyZWFzaW5nIGZyZXF1ZW5jeS4KKworICAgICAgICAqIGJ5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFNwZWN1bGF0aW9uKToK
KyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tVmFsdWUpOgorICAgICAgICAoSlNDOjpsZWFz
dFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMpOgorICAgICAgICAoSlNDOjp2YWx1
ZXNDb3VsZEJlRXF1YWwpOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21TdHJpbmcpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgIChKU0M6OmlzT3Ro
ZXJTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OmludGVyc2VjdGlvbk9mU3BlY3VsYXRpb25z
KToKKyAgICAgICAgKEpTQzo6ZmlsdGVyU3BlY3VsYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpib3R0b21W
YWx1ZU1hdGNoaW5nU3BlY3VsYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFBy
ZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlQWNjZXNzRGF0YTo6c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1ha2VQcmVkaWN0aW9uRm9yRG91
YmxlRm9ybWF0KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAg
ICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorCiAyMDIxLTA2LTIyICBZaWppYSBIdWFuZyAg
PHlpamlhX2h1YW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBp
bnN0cnVjdGlvbiBzZWxlY3RvciB0byB1dGlsaXplIFNNQURETCBzdXBwb3J0ZWQgYnkgQVJNNjQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CmluZGV4IGQ4MTFkOTEzYzhmZS4uZDg3MjEzZGY1N2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNTIsNyArMjUyLDcg
QEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVhbSwgU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIH0KICAgICAKLSAg
ICBpZiAodmFsdWUgPT0gU3BlY0ludDMyT25seSkKKyAgICBpZiAoKHZhbHVlICYgU3BlY0ludDMy
T25seSkgPT0gU3BlY0ludDMyT25seSkKICAgICAgICAgc3RyT3V0LnByaW50KCJJbnQzMiIpOwog
ICAgIGVsc2UgewogICAgICAgICBpZiAodmFsdWUgJiBTcGVjQm9vbEludDMyKQpAQCAtMjg1LDIw
ICsyODUsMjUgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRTdHJlYW0mIG91dFN0cmVhbSwg
U3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIH0K
IAorI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAoKHZhbHVlICYgU3BlY0JpZ0ludCkgPT0gU3Bl
Y0JpZ0ludCkKICAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKLSNpZiBVU0UoQklHSU5U
MzIpCiAgICAgZWxzZSB7CiAgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNCaWdJbnQzMikKICAgICAg
ICAgICAgIHN0ck91dC5wcmludCgiQmlnSW50MzIiKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgaXNUb3AgPSBmYWxzZTsKIAotICAgICAgICBpZiAodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkK
KyAgICAgICAgLy8gRG9uJ3QgcHJpbnQgQmlnSW50IGlmIGl0IGlzIGFscmVhZHkgaW1wbGllZCBi
eSBDZWxsCisgICAgICAgIGlmICgodmFsdWUgJiBTcGVjSGVhcEJpZ0ludCkgJiYgKCh2YWx1ZSAm
IFNwZWNDZWxsKSAhPSBTcGVjQ2VsbCkpCiAgICAgICAgICAgICBzdHJPdXQucHJpbnQoIkhlYXBC
aWdJbnQiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICB9
CisjZWxzZQorICAgIC8vIERvbid0IHByaW50IEJpZ0ludCBpZiBpdCBpcyBhbHJlYWR5IGltcGxp
ZWQgYnkgQ2VsbAorICAgIGlmICgodmFsdWUgJiBTcGVjQmlnSW50KSAmJiAoKHZhbHVlICYgU3Bl
Y0NlbGwpICE9IFNwZWNDZWxsKSkKKyAgICAgICAgc3RyT3V0LnByaW50KCJCaWdJbnQiKTsKICNl
bmRpZgogCiAgICAgaWYgKHZhbHVlICYgU3BlY0RvdWJsZUltcHVyZU5hTikKQEAgLTMwOCwxMSAr
MzEzLDIwIEBAIHZvaWQgZHVtcFNwZWN1bGF0aW9uKFByaW50U3RyZWFtJiBvdXRTdHJlYW0sIFNw
ZWN1bGF0ZWRUeXBlIHZhbHVlKQogICAgICAgICBzdHJPdXQucHJpbnQoIkJvb2wiKTsKICAgICBl
bHNlCiAgICAgICAgIGlzVG9wID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHZhbHVlICYgU3BlY090
aGVyKQorCisgICAgaWYgKCh2YWx1ZSAmIFNwZWNPdGhlcikgPT0gU3BlY090aGVyKQogICAgICAg
ICBzdHJPdXQucHJpbnQoIk90aGVyIik7Ci0gICAgZWxzZQotICAgICAgICBpc1RvcCA9IGZhbHNl
OworICAgIGVsc2UgeworICAgICAgICBpZiAodmFsdWUgJiBTcGVjTnVsbCkKKyAgICAgICAgICAg
IHN0ck91dC5wcmludCgiTnVsbCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpc1RvcCA9
IGZhbHNlOworCisgICAgICAgIGlmICh2YWx1ZSAmIFNwZWNVbmRlZmluZWQpCisgICAgICAgICAg
ICBzdHJPdXQucHJpbnQoIlVuZGVmaW5lZCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
c1RvcCA9IGZhbHNlOworICAgIH0KICAgICAKICAgICBpZiAodmFsdWUgJiBTcGVjRW1wdHkpCiAg
ICAgICAgIHN0ck91dC5wcmludCgiRW1wdHkiKTsKQEAgLTQwNyw2ICs0MjEsMTAgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyhTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uKQogICAgICAgICByZXR1cm4gIjxOdW1iZXI+IjsKICAgICBpZiAoaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPEJvb2xlYW4+IjsK
KyAgICBpZiAoaXNVbmRlZmluZWRTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgcmV0
dXJuICI8VW5kZWZpbmVkPiI7CisgICAgaWYgKGlzTnVsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KQorICAgICAgICByZXR1cm4gIjxOdWxsPiI7CiAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8T3RoZXI+IjsKICAgICBpZiAoaXNNaXNjU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCkBAIC02MzIsOCArNjUwLDEwIEBAIFNwZWN1bGF0ZWRUeXBl
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCiAgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbkZyb21DZWxsKHZhbHVlLmFzQ2VsbCgpKTsKICAgICBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCiAgICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKLSAgICBBU1NFUlQodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSk7Ci0gICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIFNwZWNVbmRlZmluZWQ7CisgICAgQVNTRVJUKHZh
bHVlLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gU3BlY051bGw7CiB9CiAKIFNwZWN1bGF0ZWRUeXBl
IGludDUyQXdhcmVTcGVjdWxhdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVlKQpAQCAtNzM3LDkg
Kzc1NywxNCBAQCBTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZh
bGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSB0eQogICAgIHJldHVybiB0eXBlOwogfQog
Ci1zdGF0aWMgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVu
dFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSB0eXBlKQorU3BlY3VsYXRlZFR5cGUgbGVhc3RV
cHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiB7
Ci0gICAgdHlwZSA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRp
b25zKHR5cGUpOworICAgIGlmICh0eXBlICYgU3BlY1N0cmluZykKKyAgICAgICAgdHlwZSB8PSBT
cGVjU3RyaW5nOworCisgICAgLy8gIm51bGwgPT0gdW5kZWZpbmVkIiByZXR1cm5zIHRydWUuCisg
ICAgaWYgKHR5cGUgJiBTcGVjT3RoZXIpCisgICAgICAgIHR5cGUgfD0gU3BlY090aGVyOwogCiAg
ICAgLy8gQm9vbGVhbiBvciBCaWdJbnQgY2FuIGJlIGNvbnZlcnRlZCB0byBOdW1iZXIgd2hlbiBw
ZXJmb3JtaW5nIG5vbi1zdHJpY3QgZXF1YWwuCiAgICAgaWYgKHR5cGUgJiAoU3BlY0ludEFueUZv
cm1hdCB8IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNCb29sZWFuIHwgU3BlY0JpZ0ludCkpCkBA
IC03NTAsMTQgKzc3NSwyMSBAQCBzdGF0aWMgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIGxlYXN0VXBw
ZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVAogCiBib29sIHZhbHVl
c0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSBhLCBTcGVjdWxhdGVkVHlwZSBiKQogewotICAg
IGEgPSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoYSk7Ci0gICAgYiA9
IGxlYXN0VXBwZXJCb3VuZE9mRXF1aXZhbGVudFNwZWN1bGF0aW9ucyhiKTsKLSAgICAKKyAgICAv
LyBBIHN5bWJvbCBjYW4gb25seSBiZSBlcXVhbCB0byBhIFN5bWJvbCBvciBhbiBPYmplY3QKKyAg
ICAvLyBJbiBwYXJ0aWN1bGFyIGl0IGNhbm5vdCBiZSBlcXVhbCB0byBhIFN0cmluZworICAgIGlm
IChpc1N5bWJvbFNwZWN1bGF0aW9uKGEpICYmICEoYiAmIChTcGVjT2JqZWN0IHwgU3BlY1N5bWJv
bCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzU3ltYm9sU3BlY3VsYXRpb24o
YikgJiYgIShhICYgKFNwZWNPYmplY3QgfCBTcGVjU3ltYm9sKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIC8vIEFueXRoaW5nIGNvdWxkIGJlIGVxdWFsIHRvIGEgc3RyaW5nLgogICAg
IGlmIChhICYgU3BlY1N0cmluZykKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGIgJiBT
cGVjU3RyaW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGEgPSBsZWFzdFVwcGVyQm91
bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoYSk7CisgICAgYiA9IGxlYXN0VXBwZXJCb3VuZE9m
RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhiKTsKICAgICAKICAgICAvLyBJZiBib3RoIHNpZGVzIGFy
ZSBkZWZpbml0ZWx5IG9ubHkgb2JqZWN0cywgdGhlbiBlcXVhbGl0eSBpcyBmYWlybHkgc2FuZS4K
ICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihhKSAmJiBpc09iamVjdFNwZWN1bGF0aW9uKGIp
KQpAQCAtNzY5LDcgKzgwMSw3IEBAIGJvb2wgdmFsdWVzQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRU
eXBlIGEsIFNwZWN1bGF0ZWRUeXBlIGIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChi
ICYgU3BlY09iamVjdCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBOZWl0
aGVyIHNpZGUgaXMgYW4gb2JqZWN0IG9yIHN0cmluZywgc28gdGhlIHdvcmxkIGlzIHJlbGF0aXZl
bHkgc2FuZS4KICAgICByZXR1cm4gISEoYSAmIGIpOwogfQpAQCAtMTAxOCw2ICsxMDUwLDEwIEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cmluZyhjb25zdCBjaGFyKiBzcGVjdWxh
dGlvbikKICAgICAgICAgcmV0dXJuIFNwZWNGdWxsTnVtYmVyOwogICAgIGlmICghc3RybmNtcChz
cGVjdWxhdGlvbiwgIlNwZWNCb29sZWFuIiwgc3RybGVuKCJTcGVjQm9vbGVhbiIpKSkKICAgICAg
ICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNw
ZWNVbmRlZmluZWQiLCBzdHJsZW4oIlNwZWNVbmRlZmluZWQiKSkpCisgICAgICAgIHJldHVybiBT
cGVjVW5kZWZpbmVkOworICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNOdWxsIiwg
c3RybGVuKCJTcGVjTnVsbCIpKSkKKyAgICAgICAgcmV0dXJuIFNwZWNOdWxsOwogICAgIGlmICgh
c3RybmNtcChzcGVjdWxhdGlvbiwgIlNwZWNPdGhlciIsIHN0cmxlbigiU3BlY090aGVyIikpKQog
ICAgICAgICByZXR1cm4gU3BlY090aGVyOwogICAgIGlmICghc3RybmNtcChzcGVjdWxhdGlvbiwg
IlNwZWNNaXNjIiwgc3RybGVuKCJTcGVjTWlzYyIpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKaW5kZXggOTY5Nzc4MzU1NzQxLi4zMGU5ZDhm
OTBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTcsMTggKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5
cGUgU3BlY0ludEFueUZvcm1hdCAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNJbnQ1CiAKIHN0
YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICAgICAg
ICAgICAgICAgICA9IFNwZWNJbnRBbnlGb3JtYXQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBl
aXRoZXIgYW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJl
IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sZWFu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQwOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0MTsgLy8gSXQncyBkZWZpbml0
ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRl
ZFR5cGUgU3BlY1VuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICA9IDF1bGwgPDwgNDE7
IC8vIEl0J3MgZGVmaW5pdGVseSBVbmRlZmluZWQuCitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0
ZWRUeXBlIFNwZWNOdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQy
OyAvLyBJdCdzIGRlZmluaXRlbHkgTnVsbC4KK3N0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5
cGUgU3BlY090aGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNVbmRlZmluZWQg
fCBTcGVjTnVsbDsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4K
IHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY01pc2MgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IFNwZWNCb29sZWFuIHwgU3BlY090aGVyOyAvLyBJdCdzIGRlZmluaXRl
bHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVsbCwgb3IgVW5kZWZpbmVkLgotc3RhdGljIGNvbnN0ZXhw
ciBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MXVsbCA8PCA0MjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KLXN0
YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBCaWdJbnQgICAgICAgICAgICAg
ICAgICAgICAgICA9IDF1bGwgPDwgNDM7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJpZ0ludCB0aGF0
IGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVhcAotc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlw
ZSBTcGVjQmlnSW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NDsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgc21hbGwgQmlnSW50IHRoYXQgaXMgaW5saW5lIHRoZSBKU1ZhbHVl
CitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkg
dmFsdWUgbWFya2VyLgorc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcEJp
Z0ludCAgICAgICAgICAgICAgICAgICAgICAgID0gMXVsbCA8PCA0NDsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgQmlnSW50IHRoYXQgaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwCitzdGF0aWMgY29uc3Rl
eHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNCaWdJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAxdWxsIDw8IDQ1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBzbWFsbCBCaWdJbnQgdGhhdCBpcyBp
bmxpbmUgdGhlIEpTVmFsdWUKICNpZiBVU0UoQklHSU5UMzIpCiBzdGF0aWMgY29uc3RleHByIFNw
ZWN1bGF0ZWRUeXBlIFNwZWNCaWdJbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBTcGVj
QmlnSW50MzIgfCBTcGVjSGVhcEJpZ0ludDsKICNlbHNlCiAvLyBXZSBzaG91bGQgbm90IGluY2x1
ZGUgU3BlY0JpZ0ludDMyLiBXZSBhcmUgdXNpbmcgU3BlY0JpZ0ludCBpbiB2YXJpb3VzIHBsYWNl
cyBsaWtlIHByZWRpY3Rpb24uIElmIHRoaXMgaW5jbHVkZXMgU3BlY0JpZ0ludDMyLCBmaXh1cCBw
aGFzZSBpcyBjb25mdXNlZCBpZiAhVVNFKEJJR0lOVDMyKSBzaW5jZSBpdCBpcyBub3QgdXNpbmcg
QW55QmlnSW50VXNlLgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjQmlnSW50
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gU3BlY0hlYXBCaWdJbnQ7CiAjZW5kaWYKLXN0
YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY0RhdGFWaWV3T2JqZWN0ICAgICAgICAg
ICAgICAgICAgICA9IDF1bGwgPDwgNDU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRGF0YVZpZXcu
CitzdGF0aWMgY29uc3RleHByIFNwZWN1bGF0ZWRUeXBlIFNwZWNEYXRhVmlld09iamVjdCAgICAg
ICAgICAgICAgICAgICAgPSAxdWxsIDw8IDQ2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0RhdGFW
aWV3Lgogc3RhdGljIGNvbnN0ZXhwciBTcGVjdWxhdGVkVHlwZSBTcGVjUHJpbWl0aXZlICAgICAg
ICAgICAgICAgICAgICAgICAgID0gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjTWlzYyB8IFNwZWNCaWdJbnQ7IC8vIEl0J3MgYW55IG5vbi1PYmplY3Qg
SlNWYWx1ZS4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNw
ZWNGdW5jdGlvbiB8IFNwZWNUeXBlZEFycmF5VmlldyB8IFNwZWNEaXJlY3RBcmd1bWVudHMgfCBT
cGVjU2NvcGVkQXJndW1lbnRzIHwgU3BlY1N0cmluZ09iamVjdCB8IFNwZWNSZWdFeHBPYmplY3Qg
fCBTcGVjRGF0ZU9iamVjdCB8IFNwZWNQcm9taXNlT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8IFNw
ZWNTZXRPYmplY3QgfCBTcGVjV2Vha01hcE9iamVjdCB8IFNwZWNXZWFrU2V0T2JqZWN0IHwgU3Bl
Y1Byb3h5T2JqZWN0IHwgU3BlY0Rlcml2ZWRBcnJheSB8IFNwZWNPYmplY3RPdGhlciB8IFNwZWNE
YXRhVmlld09iamVjdDsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBv
ZiBvYmplY3QgcHJlZGljdGlvbi4KIHN0YXRpYyBjb25zdGV4cHIgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0NlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3Ry
aW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3RoZXIgfCBTcGVjSGVhcEJpZ0ludDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgSlNDZWxsLgpAQCAtNDQ5LDE5ICs0NTEsMjQgQEAgaW5saW5lIGJvb2wg
aXNOZWl0aGVyRG91YmxlTm9ySGVhcEJpZ0ludE5vclN0cmluZ1NwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHR5cGUKICAgICByZXR1cm4gISh0eXBlICYgKFNwZWNGdWxsRG91YmxlIHwgU3BlY0hl
YXBCaWdJbnQgfCBTcGVjU3RyaW5nKSk7CiB9CiAKLWlubGluZSBib29sIGlzT3RoZXJTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK2lubGluZSBib29sIGlzVW5kZWZpbmVkU3BlY3Vs
YXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlID09IFNwZWNP
dGhlcjsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY1VuZGVmaW5lZDsKIH0KIAotaW5saW5lIGJv
b2wgaXNNaXNjU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBp
c051bGxTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gISF2
YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNNaXNjKTsKKyAgICByZXR1cm4gdmFsdWUgPT0gU3BlY051
bGw7CiB9CiAKLWlubGluZSBib29sIGlzT3RoZXJPckVtcHR5U3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBpc090aGVyU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5
cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA9PSBTcGVjT3RoZXI7Cisg
ICAgcmV0dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjT3RoZXIpOworfQorCitpbmxpbmUg
Ym9vbCBpc01pc2NTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNNaXNjKTsKIH0KIAogaW5saW5lIGJvb2wgaXNF
bXB0eVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQpAQCAtNTAzLDYgKzUxMCwxNiBA
QCBpbmxpbmUgYm9vbCBtZXJnZVNwZWN1bGF0aW9uKFQmIGxlZnQsIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBTcGVjdWxhdGVkVHlwZSBpbnRl
cnNlY3Rpb25PZlNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSBsZWZ0LCBTcGVjdWxhdGVkVHlw
ZSByaWdodCkKK3sKKyAgICByZXR1cm4gbGVmdCAmIHJpZ2h0OworfQorCitpbmxpbmUgdm9pZCBm
aWx0ZXJTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSYgbGVmdCwgU3BlY3VsYXRlZFR5cGUgcmln
aHQpCit7CisgICAgbGVmdCAmPSByaWdodDsKK30KKwogaW5saW5lIGJvb2wgc3BlY3VsYXRpb25D
aGVja2VkKFNwZWN1bGF0ZWRUeXBlIGFjdHVhbCwgU3BlY3VsYXRlZFR5cGUgZGVzaXJlZCkKIHsK
ICAgICByZXR1cm4gKGFjdHVhbCB8IGRlc2lyZWQpID09IGRlc2lyZWQ7CkBAIC01MjQsNiArNTQx
LDcgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUoVHlwZWRB
cnJheVR5cGUpOyAvLyBvbmx5IHZhbGlkIGZvcgogVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5
cGVGcm9tU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUpOwogCiBTcGVjdWxhdGVkVHlwZSBsZWFz
dFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlw
ZSk7CitTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlv
bnMoU3BlY3VsYXRlZFR5cGUpOwogCiBib29sIHZhbHVlc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVk
VHlwZSwgU3BlY3VsYXRlZFR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZTM0MzNmNGFl
YTdmLi4xYWVkMzI5MDg2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTcxMCw5ICs3MTAsMTUg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBOb3RDZWxsTm9yQmlnSW50VXNlOiB7
Ci0gICAgICAgICAgICBpZiAodHlwZSAmIFNwZWNPdGhlcikgewotICAgICAgICAgICAgICAgIHR5
cGUgJj0gflNwZWNPdGhlcjsKLSAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNEb3VibGVQdXJl
TmFOIHwgU3BlY0Jvb2xJbnQzMjsgLy8gTnVsbCBiZWNvbWVzIHplcm8sIHVuZGVmaW5lZCBiZWNv
bWVzIE5hTi4KKyAgICAgICAgICAgIGlmICh0eXBlICYgU3BlY051bGwpIHsKKyAgICAgICAgICAg
ICAgICB0eXBlICY9IH5TcGVjTnVsbDsKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNCb29s
SW50MzI7IC8vIE51bGwgYmVjb21lcyB6ZXJvCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHBy
b3Blcmx5IHJlY29yZCBpdCBhcyBhIGNvbnN0YW50CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodHlwZSAmIFNwZWNVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB0eXBlICY9IH5T
cGVjVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0RvdWJsZVB1cmVOYU47
IC8vIFVuZGVmaW5lZCBiZWNvbWVzIE5hTi4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogcHJv
cGVybHkgcmVjb3JkIGl0IGFzIGEgY29uc3RhbnQKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmICh0eXBlICYgU3BlY0Jvb2xlYW4pIHsKICAgICAgICAgICAgICAgICB0eXBlICY9IH5TcGVj
Qm9vbGVhbjsKQEAgLTE1OTksNyArMTYwNSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSBtYXNxdWVyYWRlcy1hcy11bmRlZmluZWQgd2F0
Y2hwb2ludCB0aGluZ3kuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0NDU2CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghKGNo
aWxkLm1fdHlwZSAmIChTcGVjT3RoZXIgfCBTcGVjT2JqZWN0T3RoZXIpKSkgeworICAgICAgICAg
ICAgaWYgKCEoY2hpbGQubV90eXBlICYgKFNwZWNVbmRlZmluZWQgfCBTcGVjT2JqZWN0T3RoZXIp
KSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxzZSkp
OwogICAgICAgICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTE2MTksMTkgKzE2MjUsMTkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkK
ICAgICAgICAgICAgIC8vIElzIHRoZSBjaGlsZCdzIHR5cGUgYW4gb2JqZWN0IHRoYXQgaXNuJ3Qg
YW4gb3RoZXItb2JqZWN0IChpLmUuIG9iamVjdCB0aGF0IGNvdWxkCiAgICAgICAgICAgICAvLyBo
YXZlIG1hc3F1YXJlZGVzLWFzLXVuZGVmaW5lZCB0cmFwcykgYW5kIGlzbid0IGEgZnVuY3Rpb24/
IFRoZW46IHdlIHNob3VsZCBmb2xkCiAgICAgICAgICAgICAvLyB0aGlzIHRvIHRydWUuCi0gICAg
ICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiB+KFNwZWNPYmplY3QgLSBTcGVjT2JqZWN0T3Ro
ZXIgLSBTcGVjRnVuY3Rpb24pKSkgeworICAgICAgICAgICAgLy8gV2UgYWxzbyBmb2xkIHRvIHRy
dWUgZm9yIE51bGwuCisgICAgICAgICAgICBpZiAoIShjaGlsZC5tX3R5cGUgJiB+KChTcGVjT2Jq
ZWN0IC0gU3BlY09iamVjdE90aGVyIC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxsKSkpIHsKICAg
ICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAg
ICAgICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBJcyB0aGUgY2hp
bGQncyB0eXBlIGRlZmluaXRlbHkgbm90IGVpdGhlciBvZjogYW4gb2JqZWN0IHRoYXQgaXNuJ3Qg
YSBmdW5jdGlvbiwKLSAgICAgICAgICAgIC8vIG9yIGVpdGhlciB1bmRlZmluZWQgb3IgbnVsbD8g
VGhlbjogd2Ugc2hvdWxkIGZvbGQgdGhpcyB0byBmYWxzZS4gVGhpcyBtZWFucworICAgICAgICAg
ICAgLy8gb3IgbnVsbD8gVGhlbjogd2Ugc2hvdWxkIGZvbGQgdGhpcyB0byBmYWxzZS4gVGhpcyBt
ZWFucwogICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUgdGhhdCBpZiBpdCdzIGFueSBub24tZnVu
Y3Rpb24gb2JqZWN0LCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBoYXZlCi0gICAgICAgICAgICAvLyBt
YXNxdWVyYWRlcy1hcy11bmRlZmluZWQgdHJhcHMsIHRoZW4gd2UgZG9uJ3QgZm9sZC4gSXQgYWxz
byBtZWFucyB3ZSB3b24ndCBmb2xkCi0gICAgICAgICAgICAvLyBpZiBpdCdzIHVuZGVmaW5lZC1v
ci1udWxsLCBzaW5jZSB0aGUgdHlwZSBiaXRzIGRvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAg
ICAgICAgICAgIC8vIHVuZGVmaW5lZCAod2hpY2ggc2hvdWxkIGZvbGQgdG8gZmFsc2UpIGFuZCBu
dWxsICh3aGljaCBzaG91bGQgZm9sZCB0byB0cnVlKS4KLSAgICAgICAgICAgIGlmICghKGNoaWxk
Lm1fdHlwZSAmICgoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikgfCBTcGVjT3RoZXIpKSkgewor
ICAgICAgICAgICAgLy8gbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHRyYXBzLCB0aGVuIHdlIGRv
bid0IGZvbGQuCisgICAgICAgICAgICAvLyBXZSBhbHNvIGZvbGQgdG8gZmFsc2UgZm9yIFVuZGVm
aW5lZC4KKyAgICAgICAgICAgIGlmICghKGNoaWxkLm1fdHlwZSAmICgoU3BlY09iamVjdCAtIFNw
ZWNGdW5jdGlvbikgfCBTcGVjTnVsbCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQo
bm9kZSwganNCb29sZWFuKGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk3OCw5ICsxOTg0LDkgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IFNwZWNPdGhlcikKKyAgICAgICAgICAg
IGlmICghKGxlZnRUeXBlICYgflNwZWNPdGhlcikpCiAgICAgICAgICAgICAgICAgc3RkOjpzd2Fw
KGxlZnRUeXBlLCByaWdodFR5cGUpOwotICAgICAgICAgICAgaWYgKHJpZ2h0VHlwZSA9PSBTcGVj
T3RoZXIpIHsKKyAgICAgICAgICAgIGlmICghKHJpZ2h0VHlwZSAmIH5TcGVjT3RoZXIpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGFuZCBOdWxsIGFyZSBhbHdheXMgZXF1YWwgd2hl
biBjb21wYXJlZCB0byBlYWNob3RoZXIuCiAgICAgICAgICAgICAgICAgaWYgKCEobGVmdFR5cGUg
JiB+U3BlY090aGVyKSkgewogICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBq
c0Jvb2xlYW4odHJ1ZSkpOwpAQCAtMjM4MCw3ICsyMzg2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJl
ckxpbWkKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIpOworICAgICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNPdGhlcik7IC8vIEZJWE1FOiB3aGVuIGNhbiB0aGlzIG5v
dCBqdXN0IGJlIGpzVW5kZWZpbmVkKCk/CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgpAQCAtMjQxNSw3ICsyNDIxLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5z
aWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAg
ICAgICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAg
ICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSB8IFNwZWNP
dGhlcik7CisgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJ
bnQzMk9ubHkgfCBTcGVjVW5kZWZpbmVkKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI0MjcsNyArMjQzMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29k
ZURvdWJsZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZURvdWJsZSB8IFNwZWNPdGhlcik7Cisg
ICAgICAgICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNv
ZGVEb3VibGUgfCBTcGVjVW5kZWZpbmVkKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUpOwogICAgICAgICAgICAgfSBlbHNlCkBAIC0yNTgzLDcgKzI1ODksNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcykKLSAgICAgICAg
ICAgICAgICByZXN1bHQubWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UoU3BlY1VuZGVmaW5lZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChyZXN1
bHQudmFsdWUoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50
Rm9sZGluZyh0cnVlKTsKQEAgLTI2MjcsMTIgKzI2MzMsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJl
ckxpbWkKICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdFeHAgfHwgcmVnRXhwLT5oYXNJbmRp
Y2VzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKG1fZ3JhcGgu
cmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5k
aWNlc1N0cnVjdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwg
c3RydWN0dXJlU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tZXJnZShT
cGVjT3RoZXIpOworICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1lcmdlKFNwZWNP
dGhlcik7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5
KTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY090aGVyIHwgU3BlY0FycmF5KTsg
Ly8gRklYTUU6IFNob3VsZCB0aGlzIGJlIFNwZWNVbmRlZmluZWQ/CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBSZWdFeHBUZXN0OgpAQCAtMjY0NSwxMiArMjY1MSwxMiBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0OgogICAgICAgICBBU1NFUlQo
bm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFJlZ0V4cE9iamVjdFVzZSk7CiAgICAgICAgIEFT
U0VSVChub2RlLT5jaGlsZDMoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IG5vZGUtPmNoaWxk
MygpLnVzZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgIHNldFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNPdGhlciB8IFNwZWNBcnJheSk7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVj
VW5kZWZpbmVkPwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUmVnRXhwTWF0Y2hGYXN0R2xv
YmFsOgogICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IFN0cmluZ1Vz
ZSB8fCBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gS25vd25TdHJpbmdVc2UpOwotICAgICAg
ICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOworICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT3RoZXIgfCBTcGVjQXJyYXkpOyAvLyBGSVhNRTogU2hv
dWxkIHRoaXMgYmUgU3BlY1VuZGVmaW5lZD8KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CkBAIC0zODU0LDcgKzM4NjAsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjT2JqZWN0
IHwgU3BlY090aGVyKTsKKyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY09iamVjdCB8
IFNwZWNPdGhlcik7IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBTcGVjVW5kZWZpbmVkPwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDI4NywxMSArNDI5MywxMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNTdHJpbmcgfCBTcGVjTnVsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdl
dEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNTdHJpbmcgfCBTcGVjTnVsbCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6IHsKQEAgLTQ0MzEsNyArNDQzNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJM
aW1pCiAgICAgICAgIGlmIChub2RlLT5pbnRyaW5zaWMoKSA9PSBDUFVSZHRzY0ludHJpbnNpYykK
ICAgICAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNPdGhlcik7CisgICAgICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY1Vu
ZGVmaW5lZCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1RyYXBzOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBmYzgx
ZjY5MDQyOTkuLmU3MDBiZGZhMGIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTQzNyw2ICs0MzcsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2Rl
LT5vcGVyYW5kKCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAg
ICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOworICAg
ICAgICAvLyBUaGUgbmV4dCBsaW5lIGlzIGEgYml0IHdlaXJkLCBzaW5jZSBhbGwgb3RoZXIgbV9w
cmVkaWN0aW9uIGFyZSBvbmx5IHNldCBpbiBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS4KKyAg
ICAgICAgLy8gSXRzIGdvYWwgaXMgdG8gdHJhbnNtaXQgdGhlIGluZm9ybWF0aW9uIHRvIFByZWRp
Y3Rpb25Qcm9wYWdhdGlvbi4KKyAgICAgICAgLy8gSWYgaXQgd2VyZSB0byByZWx5IG9uIHRoZSBw
cmVkaWN0aW9uIGluIHRoZSB2YXJpYWJsZUFjY2Vzc0RhdGEsIGl0IHdvdWxkIGxvc2UgcHJlY2lz
aW9uLCBzaW5jZSB2YXJpYWJsZUFjY2Vzc0RhdGEgY2FuIGJlIHVuaWZpZWQgd2l0aCB0aGUgZGF0
YSBmcm9tIG90aGVyIGJsb2Nrcy4KKyAgICAgICAgbm9kZS0+cHJlZGljdChwcmVkaWN0aW9uKTsK
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogCkBAIC0yMDQxLDYgKzIwNDUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIE9wZXJhbmQgcmVzdWx0LAogICAgICAgICBjb3VudFZhcmlhYmxlLT5wcmVkaWN0KFNwZWNJ
bnQzMk9ubHkpOwogICAgICAgICBjb3VudFZhcmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5i
b3godHJ1ZSk7CiAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50Q291bnQgPSBhZGRUb0dyYXBoKFNl
dEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKGNvdW50VmFyaWFibGUpKTsKKyAgICAgICAgc2V0
QXJndW1lbnRDb3VudC0+c2V0SGVhcFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChjb3VudFZhcmlhYmxl
LT5vcGVyYW5kKCksIHNldEFyZ3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0
ZU5ha2VkU2V0KTsKQEAgLTIwNTgsMTMgKzIwNjMsMjAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBPcGVyYW5kIHJlc3Vs
dCwKICAgICAgICAgICAgIC8vIHByZWRpY3Rpb25zIGZyb20gdGhlIGFyZ3VtZW50cyBsb2FkZWQg
YXQgdGhlIGNhbGxzaXRlLCByYXRoZXIgdGhhbiB0aGUKICAgICAgICAgICAgIC8vIGFyZ3VtZW50
cyByZWNlaXZlZCBpbnNpZGUgdGhlIGNhbGxlZS4gQnV0IHRoYXQgcHJvYmFibHkgd29uJ3QgbWF0
dGVyIGZvciBtb3N0CiAgICAgICAgICAgICAvLyBjYWxscy4KKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBTcGVjTm9uZTsKICAgICAgICAgICAgIGlmIChjb2RlQmxvY2sg
JiYgYXJndW1lbnQgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0g
Y29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCk7Ci0gICAgICAgICAg
ICAgICAgdmFyaWFibGUtPnByZWRpY3QocHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyKSk7CisgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IHByb2ZpbGUuY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPnByZWRp
Y3QocHJlZGljdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVudHMgPj0gbWFuZGF0
b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERlZmluaXRlbHksIE9w
SW5mbyh2YXJpYWJsZSkpOworCisgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudDsKKyAgICAg
ICAgICAgIGlmIChudW1TZXRBcmd1bWVudHMgPCBtYW5kYXRvcnlNaW5pbXVtKSB7CisgICAgICAg
ICAgICAgICAgc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwg
T3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnQtPnNldEhlYXBQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50TWF5YmUsIE9wSW5mbyh2YXJp
YWJsZSkpOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRP
cGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICsr
bnVtU2V0QXJndW1lbnRzOwogICAgICAgICB9CkBAIC01MTYxLDcgKzUxNzMsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBoYW5kbGVDYWxsKAogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyKCksIENhbGwsIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2Fs
bCwKICAgICAgICAgICAgIG9zckV4aXRJbmRleCwgc2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMg
LSAxLCByZWdpc3Rlck9mZnNldCwKLSAgICAgICAgICAgICp2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCksIFNwZWNPdGhlciwgZWNtYU1vZGUpOworICAgICAgICAgICAgKnZhcmlhbnQuY2FsbExpbmtT
dGF0dXMoKSwgU3BlY090aGVyLCBlY21hTW9kZSk7IC8vIEZJWE1FOiBpcyBTcGVjT3RoZXIgdGhl
IHJpZ2h0IGNob2ljZSBoZXJlPwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTM3
NSw3ICs1Mzg3LDggQEAgc3RhdGljIHVpbnQ2NF90IG1ha2VEeW5hbWljVmFyT3BJbmZvKHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIHVuc2lnbmVkIGdldFB1dEkKIAogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKLSAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKKyAg
ICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwogICAgIEJ5
dGVjb2RlSW5kZXggYmxvY2tCZWdpbiA9IG1fY3VycmVudEluZGV4OwogCiAgICAgLy8gSWYgd2Ug
YXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50
cy4gVGhpcyBhbGxvd3MKQEAgLTU0MDIsOSArNTQxNSwxOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgZW50cnlwb2ludEFyZ3Vt
ZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3Vt
ZW50KTsKICAgICAgICAgfQotICAgIH0KIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZyA9IDA7IGFyZyA8IG1fbnVtQXJndW1lbnRzOyArK2FyZykg
eworICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSYgcHJvZmlsZSA9IG1fcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBz
ZXRBcmd1bWVudCA9IGVudHJ5cG9pbnRBcmd1bWVudHNbYXJnXTsKKyAgICAgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKKyAgICAgICAgICAgICAgICBzZXRBcmd1bWVudC0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QodHlwZSk7CisgICAgICAgICAgICAgICAgc2V0QXJndW1lbnQtPnNldEhlYXBQcmVk
aWN0aW9uKHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCiAgICAgYXV0
byBqdW1wVGFyZ2V0ID0gWyZdKGludCB0YXJnZXQpIHsKICAgICAgICAgaWYgKHRhcmdldCkKQEAg
LTcxMjEsNiArNzE0NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQgbGltaXQpCiAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRU
b0dyYXBoKFNldEFyZ3VtZW50RGVmaW5pdGVseSwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNldEFyZ3VtZW50LT5vcmlnaW4uZm9yRXhpdCA9IENvZGVPcmlnaW4oZXhp
dEJ5dGVjb2RlSW5kZXgsIHNldEFyZ3VtZW50LT5vcmlnaW4uZm9yRXhpdC5pbmxpbmVDYWxsRnJh
bWUoKSk7CisgICAgICAgICAgICAgICAgICAgIHNldEFyZ3VtZW50LT5zZXRIZWFwUHJlZGljdGlv
bihhcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XSk7CiAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1l
bnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludEFyZ3VtZW50
c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBiNmRhYmI0Y2FmZGMuLjQ4
OGYzZWY3YmM1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCkBAIC0yODk5LDYgKzI4OTksNDQgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBub3QgQVNTRVJU
X0VOQUJMRUQKICAgICAgICAgfQogCisgICAgICAgIGlmIChPcHRpb25zOjpkdW1wVW50eXBlZE9w
Y29kZXNBZnRlckZpeHVwKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICAgICAgY2FzZSBGaWx0ZXJDYWxsTGlua1N0YXR1czoKKyAgICAgICAgICAgIGNhc2Ug
RmlsdGVyR2V0QnlTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZpbHRlclB1dEJ5SWRTdGF0dXM6
CisgICAgICAgICAgICBjYXNlIEZpbHRlckluQnlTdGF0dXM6CisgICAgICAgICAgICBjYXNlIEZp
bHRlckRlbGV0ZUJ5U3RhdHVzOgorICAgICAgICAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVC
cmFuZFN0YXR1czoKKyAgICAgICAgICAgIGNhc2UgRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
OgorICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoK
KyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBDYWxsOgorICAgICAg
ICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tOb3RFbXB0eToKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAg
ICAgICBib29sIGhhc0F0TGVhc3RPbmVDaGlsZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJv
b2wgYWxsQ2hpbGRyZW5BcmVVbnR5cGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmRvVG9DaGlsZHJlbihub2RlLCBbJl0oRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAg
IGhhc0F0TGVhc3RPbmVDaGlsZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGdl
LnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ2hp
bGRyZW5BcmVVbnR5cGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgaWYgKGhhc0F0TGVhc3RPbmVDaGlsZCAmJiBhbGxDaGlsZHJlbkFyZVVudHlwZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhtX2dyYXBoLm9wTmFtZShub2RlLT5vcCgpKSwg
IjogIik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKG5vZGUsIFsm
XShFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBTcGVjdWxhdGlvbihX
VEY6OmRhdGFGaWxlKCksIGVkZ2UtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIsICIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAg
IC8vIEl0IHdvdWxkIGJlIGludmFsaWQgZm9yIEZpeHVwIHRvIHRha2UgYSBub2RlIHRoYXQgZGlk
bid0IGNsb2JiZXIgZXhpdCBzdGF0ZSBhbmQgbWFyayBpdCBhcyBjbG9iYmVyaW5nIGFmdGVyd29y
ZHMuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgdXNlZFRvQ2xvYmJlckV4aXRT
dGF0ZSB8fCAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbm9kZSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzUuLmNhZGE3MzU1NWMxMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKQEAgLTE1MTMsOSArMTUxMywx
MiBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmJvdHRvbVZhbHVlTWF0Y2hpbmdTcGVjdWxhdGlvbihT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25l
KQogICAgICAgICByZXR1cm4gZnJlZXplKEpTVmFsdWUoKSk7CiAKLSAgICBpZiAoc3BlY3VsYXRp
b25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjT3RoZXIpKQorICAgIGlmIChzcGVjdWxhdGlvbkNv
bnRhaW5zKHByZWRpY3Rpb24sIFNwZWNOdWxsKSkKICAgICAgICAgcmV0dXJuIGZyZWV6ZShqc051
bGwoKSk7CiAKKyAgICBpZiAoc3BlY3VsYXRpb25Db250YWlucyhwcmVkaWN0aW9uLCBTcGVjVW5k
ZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuIGZyZWV6ZShqc1VuZGVmaW5lZCgpKTsKKwogICAgIGlm
IChzcGVjdWxhdGlvbkNvbnRhaW5zKHByZWRpY3Rpb24sIFNwZWNCb29sZWFuKSkKICAgICAgICAg
cmV0dXJuIGZyZWV6ZShqc0Jvb2xlYW4odHJ1ZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xhenlKU1ZhbHVlLmgKaW5kZXggN2EzMzY2NmFhNzFhLi4wNjM3YjljYTIzZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgKQEAgLTc3LDcgKzc3
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBuZXdTdHJpbmcoR3JhcGgmLCBj
b25zdCBTdHJpbmcmKTsKIAogICAgIExhemluZXNzS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9Ci0gICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRlZFR5cGUoKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgPT0gS25vd25WYWx1ZSA/IFNwZWNCeXRlY29kZVRvcCA6IFNwZWNTdHJpbmc7
IH0KKyAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGtp
bmQoKSA9PSBLbm93blZhbHVlID8gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUoKS0+dmFsdWUo
KSkgOiBTcGVjU3RyaW5nOyB9CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIHRyeUdldFZhbHVlKEdy
YXBoJikgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDY5
MTYyYmNmZjRmZC4uMWFhMGNjMWI4OWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aApAQCAtMTgzNiw2ICsxODM2LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIERhdGFWaWV3R2V0
SW50OgogICAgICAgICBjYXNlIERhdGFWaWV3R2V0RmxvYXQ6CiAgICAgICAgIGNhc2UgRGF0ZUdl
dEludDMyT3JOYU46CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCmluZGV4IDNiMTA4M2Y2MTgxYi4uNDUyMDAwYTYy
NzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcApAQCAtMTE0LDE0ICsxMTQsMTMgQEAgcHVibGlj
OgogICAgICAgICAKICAgICAgICAgQXJndW1lbnRzVmVjdG9yIG5ld0FyZ3VtZW50cyA9IG1fZ3Jh
cGgubV9yb290VG9Bcmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2VsaW5lLT5udW1Q
YXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIE5vZGUqIG9sZFNldEFyZ3Vt
ZW50ID0gbmV3QXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAgICAgICAgIEFTU0VSVChvbGRTZXRB
cmd1bWVudC0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkpOwogICAgICAgICAgICAgTm9k
ZSogb2xkTm9kZSA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsK
LSAgICAgICAgICAgIGlmICghb2xkTm9kZSkgewotICAgICAgICAgICAgICAgIC8vIEp1c3QgZm9y
IHNhbml0eSwgYWx3YXlzIGhhdmUgYSBTZXRBcmd1bWVudERlZmluaXRlbHkgZXZlbiBpZiBpdCdz
IG5vdCBuZWVkZWQuCi0gICAgICAgICAgICAgICAgb2xkTm9kZSA9IG5ld0FyZ3VtZW50c1thcmd1
bWVudF07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gb2xkTm9kZSA/IG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpIDogb2xkU2V0
QXJndW1lbnQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IFNldEFyZ3VtZW50RGVmaW5pdGVseSwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhv
bGROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZSksIE9wSW5mbyhvbGRTZXRBcmd1bWVudC0+Z2V0SGVhcFByZWRpY3Rpb24oKSkpOwog
ICAgICAgICAgICAgbmV3QXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuY3BwCmluZGV4IDk4NjYyZmE1OWJhOS4uMTc3MTU1NDMyNWI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCkBAIC00NiwyMSArNDYsNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCht
X2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
dW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOwogICAgICAgICAKLSAgICAgICAg
QVNTRVJUKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkgPj0gMSk7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jaygpLT5tX2xv
Y2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIHRo
ZSBhcmd1bWVudHMgYXQgdGhlIGZpcnN0IGJsb2NrLiBUaGUgYXJndW1lbnRzIGZyb20KLSAgICAg
ICAgICAgIC8vIG90aGVyIGVudHJ5cG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIHBvcHVsYXRlZCB3
aXRoIHRoZWlyIHByZWRpY3Rpb25zLgotICAgICAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9n
cmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKLQot
ICAgICAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKLSAgICAgICAgICAgICAg
ICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBwcm9maWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZv
ckFyZ3VtZW50KGFyZyk7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0KAotICAgICAgICAgICAgICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCA0MzI5YmU1YTVmYzkuLjJl
NjhkYzI5ZmU2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwyMSArMjgsMzYgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlRml4UG9pbnRMb29wcyA9IGZhbHNlOworc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2VHZXRMb2NhbCA9IGZhbHNlOwogCiBjbGFzcyBQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAicHJlZGljdGlvbiBw
cm9wYWdhdGlvbiIpCisgICAgICAgICwgbV90eXBlc0F0SGVhZChncmFwaCkKKyAgICAgICAgLCBt
X2xpdmVBdEhlYWQoZ3JhcGgpCisgICAgICAgICwgbV9ibG9ja3NUb1Zpc2l0KG1fZ3JhcGgubnVt
QmxvY2tzKCkpCisgICAgICAgICwgbV9ibG9ja3NUb1Zpc2l0SW5SYXJlQ2FzZVBhc3MobV9ncmFw
aC5udW1CbG9ja3MoKSkKICAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIG1fdHlwZXNBdEhl
YWRbYmxvY2tdID0gT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+KE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCwgU3BlY05vbmUpOworICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Js
b2NrXSA9IEJpdFZlY3RvcihibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFkW2ld
KQorICAgICAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdLnF1aWNrU2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGJvb2wgcnVuKCkKQEAg
LTU2LDkgKzcxLDEzIEBAIHB1YmxpYzoKIAogICAgICAgICBwcm9jZXNzSW52YXJpYW50cygpOwog
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpCisgICAgICAgICAgICBtX2Jsb2Nrc1RvVmlzaXQucXVpY2tTZXQoYmxvY2stPmlu
ZGV4KTsKICAgICAgICAgcHJvcGFnYXRlVG9GaXhwb2ludCgpOwogICAgICAgICAKICAgICAgICAg
bV9wYXNzID0gUmFyZUNhc2VQYXNzOworICAgICAgICAvLyBGSVhNRTogR2V0dGluZyByaWQgb2Yg
dGhpcyBzZWNvbmQgcGFzcyBhbHRvZ2V0aGVyIHdvdWxkIGJlIGF0dHJhY3RpdmUuCisgICAgICAg
IG1fYmxvY2tzVG9WaXNpdCA9IG1fYmxvY2tzVG9WaXNpdEluUmFyZUNhc2VQYXNzOwogICAgICAg
ICBwcm9wYWdhdGVUb0ZpeHBvaW50KCk7CiAgICAgICAgIAogICAgICAgICBtX3Bhc3MgPSBEb3Vi
bGVWb3RpbmdQYXNzOwpAQCAtNjksNDYgKzg4LDM4NSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgZG9Sb3VuZE9mRG91YmxlVm90aW5nKCk7
Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2Fy
ZCgpOworCisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IG1fZ2V0TG9jYWxzKSB7CisgICAg
ICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBwYWlyLmZpcnN0OworICAgICAgICAgICAgICAg
IEFTU0VSVChnZXRMb2NhbC0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlY2lzZVByZWRpY3Rpb24gPSBnZXRMb2NhbC0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNvYXJzZVByZWRpY3Rpb24gPSBnZXRMb2Nh
bC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKHByZWNpc2VQcmVkaWN0aW9uLCBpc1N1YnR5cGVTcGVjdWxhdGlvbihwcmVj
aXNlUHJlZGljdGlvbiwgY29hcnNlUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIC8vIElm
IGRvdWJsZSB2b3RpbmcgKG9yIGFuIGVhcmxpZXIgcGFzcykgZGVjaWRlZCB0aGF0IHRoaXMgdmFy
aWFibGUgc2hvdWxkIGJlIGEgZG91YmxlLCBsZXQncyBtYWtlIHN1cmUgdGhhdCBhbGwgY29ycmVz
cG9uZGluZyBnZXRMb2NhbHMga25vdyBpdC4KKyAgICAgICAgICAgICAgICBpZiAoZ2V0TG9jYWwt
PnByZWRpY3QoaW50ZXJzZWN0aW9uT2ZTcGVjdWxhdGlvbnMoY29hcnNlUHJlZGljdGlvbiwgU3Bl
Y0Z1bGxOdW1iZXIpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNr
U2V0KHBhaXIuc2Vjb25kLT5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9w
YWdhdGVUb0ZpeHBvaW50KCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CiAKICAgICAg
ICAgaWYgKHZlcmJvc2VGaXhQb2ludExvb3BzKQogICAgICAgICAgICAgZGF0YUxvZygiSXRlcmF0
ZWQgIiwgY291bnRlciwgIiB0aW1lcyBpbiBkb3VibGUgdm90aW5nIGZpeHBvaW50LlxuIik7Ci0g
ICAgICAgIAorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBwcm9wYWdhdGVUb0ZpeHBvaW50KCkKICAgICB7CisgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwogICAgICAgICB1bnNpZ25lZCBjb3VudGVyID0gMDsKICAgICAgICAgZG8gewog
ICAgICAgICAgICAgaWYgKHZlcmJvc2VGaXhQb2ludExvb3BzKQogICAgICAgICAgICAgICAgICsr
Y291bnRlcjsKIAotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBj
aGFuZ2VkID0gZmFsc2U7CiAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMg
bmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAotICAgICAgICAg
ICAgLy8gREZTLXNvcnRlZCBjb2RlLgotICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwot
ICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhl
IGxpa2VsaWhvb2QgdGhhdCBwYXRob2xvZ2ljYWwgY29kZSB3aWxsCi0gICAgICAgICAgICAvLyBj
YXVzZSBzbG93bmVzcy4gTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJh
Y2t3YXJkIGZsb3cuCi0gICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2Vz
OiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAotICAgICAgICAgICAgLy8g
Zm91bmQgYSBzb3VuZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZs
b3cuCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0
ZUJhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggOiBtX2Jsb2Nrc1RvVmlzaXQpIHsKKyAgICAgICAgICAg
ICAgICBtX2Jsb2Nrc1RvVmlzaXQucXVpY2tDbGVhcihibG9ja0luZGV4KTsKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwcm9wYWdhdGVUaHJvdWdoQmxvY2soYmxvY2sp
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKIAogICAgICAgICBpZiAodmVyYm9zZUZpeFBvaW50TG9v
cHMpCiAgICAgICAgICAgICBkYXRhTG9nKCJJdGVyYXRlZCAiLCBjb3VudGVyLCAiIHRpbWVzIGlu
IHByb3BhZ2F0ZVRvRml4cG9pbnQuXG4iKTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIHByb3Bh
Z2F0ZVRocm91Z2hCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlPiBjdXJyZW50VHlwZXMgPSBtX3R5cGVzQXRIZWFkW2Jsb2NrXTsK
KyAgICAgICAgT3BlcmFuZHM8dW5zaWduZWQ+IGxhc3RUaW1lT3ZlcndyaXR0ZW4geyBPcGVyYW5k
c0xpa2UsIGN1cnJlbnRUeXBlcywgMCB9OworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBub2RlOworICAgICAgICAgICAgcHJv
cGFnYXRlKG5vZGUsIGN1cnJlbnRUeXBlcywgbGFzdFRpbWVPdmVyd3JpdHRlbik7CisgICAgICAg
IH0KKworICAgICAgICBOb2RlKiB0ZXJtaW5hbCA9IGJsb2NrLT50ZXJtaW5hbCgpOworICAgICAg
ICBzd2l0Y2godGVybWluYWwtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAg
ICAgICByZXR1cm4gcHJvcGFnYXRlVG9TdWNjZXNzb3JzVGhyb3VnaEJyYW5jaCh0ZXJtaW5hbCwg
Y3VycmVudFR5cGVzLCBsYXN0VGltZU92ZXJ3cml0dGVuKTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6
CisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlVG9TdWNjZXNzb3JzVGhyb3VnaFN3aXRjaChi
bG9jaywgdGVybWluYWwsIGN1cnJlbnRUeXBlcywgbGFzdFRpbWVPdmVyd3JpdHRlbik7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gcHJvcGFnYXRlVG9TdWNjZXNzb3JzR2Vu
ZXJpYyhibG9jaywgY3VycmVudFR5cGVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
cHJvcGFnYXRlVG9TdWNjZXNzb3JzR2VuZXJpYyhCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgT3Bl
cmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBjdXJyZW50VHlwZXMpCisgICAgeworICAgICAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBi
bG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBBU1NFUlQoISFzdWNjZXNzb3IpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKHN1Y2Nlc3Nvciwg
Y3VycmVudFR5cGVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9
CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY2hhbmdlZCB0aGUgb2xkIHR5cGVzIGF0IGhl
YWQuCisgICAgLy8gSXQgYWxzbyB1cGRhdGVzIG1fYmxvY2tzVG9WaXNpdC4KKyAgICBib29sIG1l
cmdlUHJlZGljdGlvbnNBdEhlYWQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPiYgaW5jb21pbmdUeXBlcykKKyAgICB7CisgICAgICAgIE9wZXJhbmRzPFNw
ZWN1bGF0ZWRUeXBlPiYgb2xkVHlwZXMgPSBtX3R5cGVzQXRIZWFkW2Jsb2NrXTsKKworICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpIDogbV9saXZl
QXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihv
bGRUeXBlc1tpXSwgaW5jb21pbmdUeXBlc1tpXSk7CisgICAgICAgIGlmIChjaGFuZ2VkKQorICAg
ICAgICAgICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAg
IHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uc0F0SGVh
ZChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBpbmNv
bWluZ1R5cGVzLCBPcGVyYW5kIG9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKKyAgICB7
CisgICAgICAgIGlmIChmaWx0ZXIgPT0gU3BlY0Z1bGxUb3ApCisgICAgICAgICAgICByZXR1cm4g
bWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChibG9jaywgaW5jb21pbmdUeXBlcyk7CisKKyAgICAgICAg
T3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBvbGRUeXBlcyA9IG1fdHlwZXNBdEhlYWRbYmxvY2td
OworICAgICAgICBzaXplX3QgaW5kZXhUb0ZpbHRlciA9IGluY29taW5nVHlwZXMub3BlcmFuZElu
ZGV4KG9wZXJhbmQpOworCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgOiBtX2xpdmVBdEhlYWRbYmxvY2tdKSB7CisgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gaW5jb21pbmdUeXBlc1tpXTsKKyAgICAgICAgICAgIGlmIChpID09
IGluZGV4VG9GaWx0ZXIpCisgICAgICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb24odHlwZSwg
ZmlsdGVyKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTcGVjdWxhdGlvbihvbGRUeXBl
c1tpXSwgdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAg
ICBtX2Jsb2Nrc1RvVmlzaXQucXVpY2tTZXQoYmxvY2stPmluZGV4KTsKKyAgICAgICAgcmV0dXJu
IGNoYW5nZWQ7CisgICAgfQorCisgICAgYm9vbCBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKEJhc2lj
QmxvY2sqIGJsb2NrLCBjb25zdCBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIGluY29taW5nVHlw
ZXMsIE9wZXJhbmQgb3BlcmFuZDEsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjEsIE9wZXJhbmQgb3Bl
cmFuZDIsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjIpCisgICAgeworICAgICAgICBpZiAoZmlsdGVy
MSA9PSBTcGVjRnVsbFRvcCkKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb25zQXRI
ZWFkKGJsb2NrLCBpbmNvbWluZ1R5cGVzLCBvcGVyYW5kMiwgZmlsdGVyMik7CisgICAgICAgIGlm
IChmaWx0ZXIyID09IFNwZWNGdWxsVG9wKQorICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGlj
dGlvbnNBdEhlYWQoYmxvY2ssIGluY29taW5nVHlwZXMsIG9wZXJhbmQxLCBmaWx0ZXIxKTsKKwor
ICAgICAgICBPcGVyYW5kczxTcGVjdWxhdGVkVHlwZT4mIG9sZFR5cGVzID0gbV90eXBlc0F0SGVh
ZFtibG9ja107CisgICAgICAgIHNpemVfdCBpbmRleFRvRmlsdGVyMSA9IGluY29taW5nVHlwZXMu
b3BlcmFuZEluZGV4KG9wZXJhbmQxKTsKKyAgICAgICAgc2l6ZV90IGluZGV4VG9GaWx0ZXIyID0g
aW5jb21pbmdUeXBlcy5vcGVyYW5kSW5kZXgob3BlcmFuZDIpOworCisgICAgICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgOiBtX2xpdmVBdEhlYWRbYmxv
Y2tdKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gaW5jb21pbmdUeXBlc1tp
XTsKKyAgICAgICAgICAgIGlmIChpID09IGluZGV4VG9GaWx0ZXIxKQorICAgICAgICAgICAgICAg
IGZpbHRlclNwZWN1bGF0aW9uKHR5cGUsIGZpbHRlcjEpOworICAgICAgICAgICAgaWYgKGkgPT0g
aW5kZXhUb0ZpbHRlcjIpCisgICAgICAgICAgICAgICAgZmlsdGVyU3BlY3VsYXRpb24odHlwZSwg
ZmlsdGVyMik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3BlY3VsYXRpb24ob2xkVHlw
ZXNbaV0sIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAg
ICAgbV9ibG9ja3NUb1Zpc2l0LnF1aWNrU2V0KGJsb2NrLT5pbmRleCk7CisgICAgICAgIHJldHVy
biBjaGFuZ2VkOworICAgIH0KKworICAgIGJvb2wgcHJvcGFnYXRlVG9TdWNjZXNzb3JzVGhyb3Vn
aEJyYW5jaChOb2RlKiBicmFuY2gsIGNvbnN0IE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPiYgY3Vy
cmVudFR5cGVzLCBjb25zdCBPcGVyYW5kczx1bnNpZ25lZD4mIGxhc3RUaW1lT3ZlcndyaXR0ZW4p
CisgICAgeworICAgICAgICBBU1NFUlQoYnJhbmNoLT5vcCgpID09IEJyYW5jaCk7CisKKyAgICAg
ICAgcmV0dXJuIHByb3BhZ2F0ZUJhc2VkT25UcnV0aGluZXNzKGJyYW5jaC0+Y2hpbGQxKCkubm9k
ZSgpLCBicmFuY2gtPnN1Y2Nlc3NvckZvckNvbmRpdGlvbih0cnVlKSwgYnJhbmNoLT5zdWNjZXNz
b3JGb3JDb25kaXRpb24oZmFsc2UpLCBjdXJyZW50VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4p
OworICAgIH0KKworICAgIGJvb2wgaXNOb25PdmVyd3JpdHRlbkdldExvY2FsKE5vZGUqIG1heWJl
R2V0TG9jYWwsIGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVkPiYgbGFzdFRpbWVPdmVyd3JpdHRlbikK
KyAgICB7CisgICAgICAgIGlmIChtYXliZUdldExvY2FsLT5vcCgpICE9IEdldExvY2FsKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtYXliZUdl
dExvY2FsLT5vcGVyYW5kKCk7CisgICAgICAgIC8vIEhhdmluZyBpbmZvcm1hdGlvbiBhYm91dCB0
aGlzIEdldExvY2FsIGRvZXMgbm90IHRlbGwgdXMgYW55dGhpbmcgYWJvdXQgdGhlIG9wZXJhbmQg
YXQgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaWYgdGhlcmUgaXMgYW4gaW50ZXJ2ZW5pbmcgU2V0TG9j
YWwuCisgICAgICAgIHJldHVybiBsYXN0VGltZU92ZXJ3cml0dGVuLm9wZXJhbmQob3BlcmFuZCkg
PD0gbWF5YmVHZXRMb2NhbC0+aW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIHByb3BhZ2F0ZUJh
c2VkT25UcnV0aGluZXNzKE5vZGUqIG5vZGUsIEJhc2ljQmxvY2sqIHRha2VuLCBCYXNpY0Jsb2Nr
KiBub3RUYWtlbiwgY29uc3QgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiBjdXJyZW50VHlwZXMs
IGNvbnN0IE9wZXJhbmRzPHVuc2lnbmVkPiYgbGFzdFRpbWVPdmVyd3JpdHRlbikKKyAgICB7Cisg
ICAgICAgIGF1dG8gbWVyZ2VUb1N1Y2Nlc3NvcnMgPSBbJl0gKCkgeworICAgICAgICAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlv
bnNBdEhlYWQodGFrZW4sIGN1cnJlbnRUeXBlcyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbnNBdEhlYWQobm90VGFrZW4sIGN1cnJlbnRUeXBlcyk7CisgICAgICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBtZXJnZVRvU3VjY2Vz
c29yc1dpdGhPbmVGaWx0ZXIgPSBbJl0gKE5vZGUqIG1heWJlR2V0TG9jYWwsIFNwZWN1bGF0ZWRU
eXBlIHRydXRoeUZpbHRlciwgU3BlY3VsYXRlZFR5cGUgZmFsc3lGaWx0ZXIpIHsKKyAgICAgICAg
ICAgIGlmICghaXNOb25PdmVyd3JpdHRlbkdldExvY2FsKG1heWJlR2V0TG9jYWwsIGxhc3RUaW1l
T3ZlcndyaXR0ZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycygp
OworCisgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIE9wZXJh
bmQgb3BlcmFuZCA9IG1heWJlR2V0TG9jYWwtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZCh0YWtlbiwgY3VycmVudFR5cGVzLCBvcGVyYW5k
LCB0cnV0aHlGaWx0ZXIpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb25z
QXRIZWFkKG5vdFRha2VuLCBjdXJyZW50VHlwZXMsIG9wZXJhbmQsIGZhbHN5RmlsdGVyKTsKKyAg
ICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworCisgICAgICAgIH07CisgICAgICAgIGF1dG8gbWVy
Z2VUb1N1Y2Nlc3NvcnNXaXRoVHdvRmlsdGVycyA9IFsmXSAoTm9kZSogbWF5YmVHZXRMb2NhbDEs
IFNwZWN1bGF0ZWRUeXBlIHRydXRoeUZpbHRlcjEsIFNwZWN1bGF0ZWRUeXBlIGZhbHN5RmlsdGVy
MSwgTm9kZSogbWF5YmVHZXRMb2NhbDIsIFNwZWN1bGF0ZWRUeXBlIHRydXRoeUZpbHRlcjIsIFNw
ZWN1bGF0ZWRUeXBlIGZhbHN5RmlsdGVyMikgeworICAgICAgICAgICAgaWYgKCFpc05vbk92ZXJ3
cml0dGVuR2V0TG9jYWwobWF5YmVHZXRMb2NhbDEsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29yc1dpdGhPbmVGaWx0ZXIobWF5YmVH
ZXRMb2NhbDIsIHRydXRoeUZpbHRlcjIsIGZhbHN5RmlsdGVyMik7CisgICAgICAgICAgICBpZiAo
IWlzTm9uT3ZlcndyaXR0ZW5HZXRMb2NhbChtYXliZUdldExvY2FsMiwgbGFzdFRpbWVPdmVyd3Jp
dHRlbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzV2l0aE9uZUZp
bHRlcihtYXliZUdldExvY2FsMSwgdHJ1dGh5RmlsdGVyMSwgZmFsc3lGaWx0ZXIxKTsKKworICAg
ICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQxID0gbWF5YmVHZXRMb2NhbDEtPm9wZXJhbmQoKTsKKyAgICAgICAgICAgIE9wZXJhbmQgb3Bl
cmFuZDIgPSBtYXliZUdldExvY2FsMi0+b3BlcmFuZCgpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKHRha2VuLCBjdXJyZW50VHlwZXMsIG9wZXJhbmQxLCB0
cnV0aHlGaWx0ZXIxLCBvcGVyYW5kMiwgdHJ1dGh5RmlsdGVyMik7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlUHJlZGljdGlvbnNBdEhlYWQobm90VGFrZW4sIGN1cnJlbnRUeXBlcywgb3Bl
cmFuZDEsIGZhbHN5RmlsdGVyMSwgb3BlcmFuZDIsIGZhbHN5RmlsdGVyMik7CisgICAgICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKKyAgICAgICAgfTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgY2Fubm90QmVUcnV0aHlUeXBlID0gU3BlY0RvdWJsZU5hTiB8IFNwZWNPdGhlcjsKKyAgICAg
ICAgICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29yc1dpdGhPbmVGaWx0ZXIobm9kZSwgfmNhbm5v
dEJlVHJ1dGh5VHlwZSwgU3BlY0Z1bGxUb3ApOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29t
cGFyZVN0cmljdEVxOiB7CisgICAgICAgICAgICBOb2RlKiBsZWZ0Tm9kZSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIHJpZ2h0Tm9kZSA9IG5vZGUtPmNoaWxkMigp
Lm5vZGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0Tm9kZS0+b3AoKSAhPSBHZXRMb2NhbCAmJiBy
aWdodE5vZGUtPm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0UHJlZGljdGlvbiA9IGxlZnROb2RlLT5wcmVkaWN0
aW9uKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodFByZWRpY3Rpb24gPSByaWdo
dE5vZGUtPnByZWRpY3Rpb24oKTsKKworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdFRy
dWVGaWx0ZXIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9u
cyhyaWdodFByZWRpY3Rpb24pOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUcnVl
RmlsdGVyID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMo
bGVmdFByZWRpY3Rpb24pOworCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0RmFsc2VG
aWx0ZXIgPSBTcGVjRnVsbFRvcDsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0RmFs
c2VGaWx0ZXIgPSBTcGVjRnVsbFRvcDsKKyAgICAgICAgICAgIGlmIChsZWZ0UHJlZGljdGlvbiA9
PSBTcGVjTnVsbCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihyaWdodEZhbHNl
RmlsdGVyLCB+U3BlY051bGwpOworICAgICAgICAgICAgZWxzZSBpZiAobGVmdFByZWRpY3Rpb24g
PT0gU3BlY1VuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJTcGVjdWxhdGlvbihyaWdo
dEZhbHNlRmlsdGVyLCB+U3BlY1VuZGVmaW5lZCk7CisgICAgICAgICAgICBpZiAocmlnaHRQcmVk
aWN0aW9uID09IFNwZWNOdWxsKQorICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0aW9uKGxl
ZnRGYWxzZUZpbHRlciwgflNwZWNOdWxsKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0UHJl
ZGljdGlvbiA9PSBTcGVjVW5kZWZpbmVkKQorICAgICAgICAgICAgICAgIGZpbHRlclNwZWN1bGF0
aW9uKGxlZnRGYWxzZUZpbHRlciwgflNwZWNVbmRlZmluZWQpOworCisgICAgICAgICAgICByZXR1
cm4gbWVyZ2VUb1N1Y2Nlc3NvcnNXaXRoVHdvRmlsdGVycyhsZWZ0Tm9kZSwgbGVmdFRydWVGaWx0
ZXIsIGxlZnRGYWxzZUZpbHRlciwgcmlnaHROb2RlLCByaWdodFRydWVGaWx0ZXIsIHJpZ2h0RmFs
c2VGaWx0ZXIpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAg
ICAgICAvLyBUaGUgbG9naWMgb2YgdGhpcyBjYXNlIGNsb3NlbHkgZm9sbG93cyB2YWx1ZXNDb3Vs
ZEJlRXF1YWwoKSBpbiBTcGVjdWxhdGVkVHlwZS5jcHAKKyAgICAgICAgICAgIE5vZGUqIGxlZnRO
b2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgTm9kZSogcmlnaHROb2Rl
ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKGxlZnROb2RlLT5vcCgp
ICE9IEdldExvY2FsICYmIHJpZ2h0Tm9kZS0+b3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRQcmVkaWN0aW9uID0g
bGVmdE5vZGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0
UHJlZGljdGlvbiA9IHJpZ2h0Tm9kZS0+cHJlZGljdGlvbigpOworCisgICAgICAgICAgICAvLyBP
bmx5IGEgc3ltYm9sIG9yIGFuIG9iamVjdCBjYW4gYmUgZXF1YWwgdG8gYSBzeW1ib2wKKyAgICAg
ICAgICAgIGlmIChsZWZ0UHJlZGljdGlvbiA9PSBTcGVjU3ltYm9sKSB7CisgICAgICAgICAgICAg
ICAgbWVyZ2VUb1N1Y2Nlc3NvcnNXaXRoT25lRmlsdGVyKHJpZ2h0Tm9kZSwgU3BlY1N5bWJvbCB8
IFNwZWNPYmplY3QsIFNwZWNGdWxsVG9wKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyaWdodFByZWRpY3Rpb24gPT0gU3BlY1N5bWJvbCkg
eworICAgICAgICAgICAgICAgIG1lcmdlVG9TdWNjZXNzb3JzV2l0aE9uZUZpbHRlcihsZWZ0Tm9k
ZSwgU3BlY1N5bWJvbCB8IFNwZWNPYmplY3QsIFNwZWNGdWxsVG9wKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUHJldHR5IG11Y2ggYW55
dGhpbmcgY2FuIGJlIGVxdWFsIHRvIGEgU3RyaW5nLCBzbyB3ZSBnZXQgbm8gaW5mb3JtYXRpb24K
KyAgICAgICAgICAgIGlmICgobGVmdFByZWRpY3Rpb24gJiBTcGVjU3RyaW5nKSB8fCAocmlnaHRQ
cmVkaWN0aW9uICYgU3BlY1N0cmluZykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIC8vIElmIGJvdGggc2lkZXMgYXJlIGRlZmluaXRlbHkgb25seSBvYmplY3RzLCB0aGVu
IGVxdWFsaXR5IGlzIGZhaXJseSBzYW5lLgorICAgICAgICAgICAgLy8gU2FtZSBpZiBuZWl0aGVy
IGNhbiBiZSBhbiBvYmplY3QKKyAgICAgICAgICAgIGJvb2wgaXNTYW5lID0gaXNPYmplY3RTcGVj
dWxhdGlvbihsZWZ0UHJlZGljdGlvbikgJiYgaXNPYmplY3RTcGVjdWxhdGlvbihyaWdodFByZWRp
Y3Rpb24pOworICAgICAgICAgICAgaXNTYW5lIHw9ICEobGVmdFByZWRpY3Rpb24gJiBTcGVjT2Jq
ZWN0KSAmJiAhKHJpZ2h0UHJlZGljdGlvbiAmIFNwZWNPYmplY3QpOworICAgICAgICAgICAgaWYg
KCFpc1NhbmUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnRUcnVlRmlsdGVyID0gbGVhc3RVcHBlckJvdW5kT2ZFcXVpdmFsZW50U3BlY3Vs
YXRpb25zKHJpZ2h0UHJlZGljdGlvbik7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdo
dFRydWVGaWx0ZXIgPSBsZWFzdFVwcGVyQm91bmRPZkVxdWl2YWxlbnRTcGVjdWxhdGlvbnMobGVm
dFByZWRpY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzV2l0aFR3
b0ZpbHRlcnMobGVmdE5vZGUsIGxlZnRUcnVlRmlsdGVyLCBTcGVjRnVsbFRvcCwgcmlnaHROb2Rl
LCByaWdodFRydWVGaWx0ZXIsIFNwZWNGdWxsVG9wKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFRvQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBwcm9wYWdhdGVCYXNlZE9uVHJ1dGhpbmVz
cyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIHRha2VuLCBub3RUYWtlbiwgY3VycmVudFR5cGVzLCBs
YXN0VGltZU92ZXJ3cml0dGVuKTsKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICAg
ICAgcmV0dXJuIHByb3BhZ2F0ZUJhc2VkT25UcnV0aGluZXNzKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm90VGFrZW4sIHRha2VuLCBjdXJyZW50VHlwZXMsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pOwor
ICAgICAgICBjYXNlIElzVW5kZWZpbmVkT3JOdWxsOgorICAgICAgICAgICAgcmV0dXJuIG1lcmdl
VG9TdWNjZXNzb3JzV2l0aE9uZUZpbHRlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIFNwZWNPdGhl
ciwgflNwZWNPdGhlcik7CisgICAgICAgIGNhc2UgSXNCb29sZWFuOgorICAgICAgICAgICAgcmV0
dXJuIG1lcmdlVG9TdWNjZXNzb3JzV2l0aE9uZUZpbHRlcihub2RlLT5jaGlsZDEoKS5ub2RlKCks
IFNwZWNCb29sZWFuLCB+U3BlY0Jvb2xlYW4pOworICAgICAgICBjYXNlIElzTnVtYmVyOgorICAg
ICAgICAgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzV2l0aE9uZUZpbHRlcihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIFNwZWNGdWxsTnVtYmVyLCB+U3BlY0Z1bGxOdW1iZXIpOworICAgICAgICBj
YXNlIElzQmlnSW50OgorICAgICAgICAgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzV2l0aE9u
ZUZpbHRlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIFNwZWNCaWdJbnQsIH5TcGVjQmlnSW50KTsK
KyAgICAgICAgY2FzZSBJc1R5cGVkQXJyYXlWaWV3OgorICAgICAgICAgICAgcmV0dXJuIG1lcmdl
VG9TdWNjZXNzb3JzV2l0aE9uZUZpbHRlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIFNwZWNUeXBl
ZEFycmF5VmlldywgflNwZWNUeXBlZEFycmF5Vmlldyk7CisgICAgICAgIGNhc2UgSXNPYmplY3Q6
CisgICAgICAgICAgICByZXR1cm4gbWVyZ2VUb1N1Y2Nlc3NvcnNXaXRoT25lRmlsdGVyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgU3BlY09iamVjdCwgflNwZWNPYmplY3QpOworICAgICAgICBjYXNl
IElzRW1wdHk6CisgICAgICAgICAgICByZXR1cm4gbWVyZ2VUb1N1Y2Nlc3NvcnNXaXRoT25lRmls
dGVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgU3BlY0VtcHR5LCB+U3BlY0VtcHR5KTsKKyAgICAg
ICAgY2FzZSBUeXBlT2ZJc1VuZGVmaW5lZDoKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVRvU3Vj
Y2Vzc29yc1dpdGhPbmVGaWx0ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBTcGVjT2JqZWN0T3Ro
ZXIgfCBTcGVjVW5kZWZpbmVkLCB+U3BlY1VuZGVmaW5lZCk7CisgICAgICAgIGNhc2UgVHlwZU9m
SXNPYmplY3Q6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgc3VidGxlLgorICAgICAg
ICAgICAgLy8gLSBOdWxsIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIFRydWUuCisgICAgICAgICAg
ICAvLyAtIFRoZSBzYW1lIGlzIHRydWUgb2YgZXZlcnl0aGluZyBpbiBTcGVjT2JqZWN0IC0gU3Bl
Y09iamVjdE90aGVyIC0gU3BlY0Z1bmN0aW9uLgorICAgICAgICAgICAgLy8gLSBCdXQgU3BlY09i
amVjdE90aGVyIGNhbiByZXR1cm4gZWl0aGVyIFRydWUgb3IgRmFsc2UKKyAgICAgICAgICAgIC8v
IC0gRmluYWxseSwgZXZlcnl0aGluZyBlbHNlIHJldHVybnMgRmFsc2UuCisgICAgICAgICAgICAv
LyBTZWUgdGhlIGNvbW1lbnQgaW4gZXhlY3V0ZUVmZmVjdHMoKSAoaW4gREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCkgZm9yIGRldGFpbHMKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IG1heVJldHVyblRydWUgPSAoKFNwZWNPYmplY3QgLSBTcGVjRnVuY3Rpb24pIHwgU3BlY051bGwp
OworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgbWF5UmV0dXJuRmFsc2UgPSB+KChTcGVjT2Jq
ZWN0IC0gU3BlY09iamVjdE90aGVyIC0gU3BlY0Z1bmN0aW9uKSB8IFNwZWNOdWxsKTsKKyAgICAg
ICAgICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29yc1dpdGhPbmVGaWx0ZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBtYXlSZXR1cm5UcnVlLCBtYXlSZXR1cm5GYWxzZSk7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBUeXBlT2ZJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIElzQ2FsbGFibGU6IHsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG1heVJldHVyblRydWUgPSBTcGVjRnVuY3Rpb24g
fCBTcGVjT2JqZWN0T3RoZXIgfCBTcGVjUHJveHlPYmplY3Q7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBtYXlSZXR1cm5GYWxzZSA9IH5TcGVjRnVuY3Rpb247CisgICAgICAgICAgICByZXR1
cm4gbWVyZ2VUb1N1Y2Nlc3NvcnNXaXRoT25lRmlsdGVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bWF5UmV0dXJuVHJ1ZSwgbWF5UmV0dXJuRmFsc2UpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
SXNDZWxsV2l0aFR5cGU6IHsKKyAgICAgICAgICAgIGlmIChhdXRvIHF1ZXJpZWRUeXBlID0gbm9k
ZS0+c3BlY3VsYXRlZFR5cGVGb3JRdWVyeSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtZXJn
ZVRvU3VjY2Vzc29yc1dpdGhPbmVGaWx0ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAqcXVlcmll
ZFR5cGUsIH4qcXVlcmllZFR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBtZXJnZVRvU3VjY2Vzc29yc1dpdGhPbmVGaWx0ZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBTcGVjQ2VsbCwgU3BlY0Z1bGxUb3ApOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFz
RW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQ
cm9wZXJ0eToKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29yc1dpdGhPbmVGaWx0
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCB+U3BlY090aGVyLCBTcGVjRnVsbFRvcCk7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbWVyZ2VUb1N1Y2Nlc3NvcnMoKTsKKyAgICB9CisKKyAgICBib29sIHByb3BhZ2F0ZVRvU3Vj
Y2Vzc29yc1Rocm91Z2hTd2l0Y2goQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIG5vZGUsIE9wZXJh
bmRzPFNwZWN1bGF0ZWRUeXBlPiYgY3VycmVudFR5cGVzLCBjb25zdCBPcGVyYW5kczx1bnNpZ25l
ZD4mIGxhc3RUaW1lT3ZlcndyaXR0ZW4pCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBTd2l0Y2gpOworCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBT
d2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgpOworICAgICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKworICAgICAgICBzd2l0Y2goY2hpbGQtPm9wKCkp
IHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgaWYgKCFpc05vbk92ZXJ3
cml0dGVuR2V0TG9jYWwoY2hpbGQsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgZmFsbFRocm91Z2hGaWx0ZXIg
PSBTcGVjRnVsbFRvcDsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGNoaWxkLT5vcGVy
YW5kKCk7CisKKyAgICAgICAgICAgIGZvciAoU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIDogZGF0YS0+
Y2FzZXMpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3dpdGNoQ2Fz
ZS52YWx1ZS5zcGVjdWxhdGVkVHlwZSgpOworCisgICAgICAgICAgICAgICAgLy8gU2VtYW50aWNh
bGx5LCBhIHN3aXRjaCBkb2VzIHN0cmljdCBlcXVhbGl0eSwgc28gdGhpcyBjb2RlIGZvbGxvd3Mg
dGhlIENvbXBhcmVTdHJpY3RFcSBjYXNlIGluIGZpbHRlclNwZWN1bGF0aW9uc0Jhc2VkT25UcnV0
aGluZXNzLgorICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGNhc2VGaWx0ZXIgPSBsZWFz
dFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyh0eXBlKTsKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbnNBdEhlYWQoc3dpdGNoQ2FzZS50
YXJnZXQuYmxvY2ssIGN1cnJlbnRUeXBlcywgb3BlcmFuZCwgY2FzZUZpbHRlcik7CisKKyAgICAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBTcGVjVW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXJTcGVjdWxhdGlvbihmYWxsVGhyb3VnaEZpbHRlciwgflNwZWNVbmRlZmluZWQpOwor
ICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFNwZWNOdWxsKQorICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXJTcGVjdWxhdGlvbihmYWxsVGhyb3VnaEZpbHRlciwgflNwZWNOdWxsKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uc0F0SGVhZChk
YXRhLT5mYWxsVGhyb3VnaC5ibG9jaywgY3VycmVudFR5cGVzLCBvcGVyYW5kLCBmYWxsVGhyb3Vn
aEZpbHRlcik7CisgICAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFR5cGVPZjogeworICAgICAgICAgICAgaWYgKGRhdGEtPmtpbmQgIT0gU3dpdGNoU3Ry
aW5nKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBOb2RlKiBtYXliZUdl
dExvY2FsID0gY2hpbGQtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXNOb25P
dmVyd3JpdHRlbkdldExvY2FsKG1heWJlR2V0TG9jYWwsIGxhc3RUaW1lT3ZlcndyaXR0ZW4pKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgZmFsbFRo
cm91Z2hGaWx0ZXIgPSBTcGVjRnVsbFRvcDsKKyAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9
IG1heWJlR2V0TG9jYWwtPm9wZXJhbmQoKTsKKworICAgICAgICAgICAgZm9yIChTd2l0Y2hDYXNl
IHN3aXRjaENhc2UgOiBkYXRhLT5jYXNlcykgeworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwq
IGltcGwgPSBzd2l0Y2hDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKTsKKyAgICAgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBtYXRjaGVkRmlsdGVyID0gU3BlY0Z1bGxUb3A7CisgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgbm9uTWF0Y2hlZEZpbHRlciA9IFNwZWNGdWxsVG9wOworICAgICAg
ICAgICAgICAgIGlmIChpbXBsID09IHZtKCkuc21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygp
LT5nZXRWYWx1ZUltcGwoKSkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRmlsdGVyID0g
U3BlY1VuZGVmaW5lZCB8IFNwZWNPYmplY3RPdGhlcjsKKyAgICAgICAgICAgICAgICAgICAgbm9u
TWF0Y2hlZEZpbHRlciA9IH5TcGVjVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaW1wbCA9PSB2bSgpLnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCktPmdldFZhbHVlSW1w
bCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRGaWx0ZXIgPSBTcGVjQm9vbGVhbjsK
KyAgICAgICAgICAgICAgICAgICAgbm9uTWF0Y2hlZEZpbHRlciA9IH5TcGVjQm9vbGVhbjsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltcGwgPT0gdm0oKS5zbWFsbFN0cmluZ3MubnVtYmVy
U3RyaW5nKCktPmdldFZhbHVlSW1wbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRG
aWx0ZXIgPSBTcGVjRnVsbE51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgbm9uTWF0Y2hlZEZp
bHRlciA9IH5TcGVjRnVsbE51bWJlcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltcGwg
PT0gdm0oKS5zbWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCktPmdldFZhbHVlSW1wbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZWRGaWx0ZXIgPSBTcGVjU3RyaW5nOworICAgICAgICAg
ICAgICAgICAgICBub25NYXRjaGVkRmlsdGVyID0gflNwZWNTdHJpbmc7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChpbXBsID09IHZtKCkuc21hbGxTdHJpbmdzLnN5bWJvbFN0cmluZygpLT5n
ZXRWYWx1ZUltcGwoKSkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRmlsdGVyID0gU3Bl
Y1N5bWJvbDsKKyAgICAgICAgICAgICAgICAgICAgbm9uTWF0Y2hlZEZpbHRlciA9IH5TcGVjU3lt
Ym9sOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1wbCA9PSB2bSgpLnNtYWxsU3RyaW5n
cy5iaWdpbnRTdHJpbmcoKS0+Z2V0VmFsdWVJbXBsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlZEZpbHRlciA9IFNwZWNCaWdJbnQ7CisgICAgICAgICAgICAgICAgICAgIG5vbk1hdGNo
ZWRGaWx0ZXIgPSB+U3BlY0JpZ0ludDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltcGwg
PT0gdm0oKS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKS0+Z2V0VmFsdWVJbXBsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZpbHRlciA9IFNwZWNGdW5jdGlvbiB8IFNwZWNP
YmplY3RPdGhlciB8IFNwZWNQcm94eU9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgbm9uTWF0
Y2hlZEZpbHRlciA9IH5TcGVjRnVuY3Rpb247CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
bXBsID09IHZtKCkuc21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpLT5nZXRWYWx1ZUltcGwoKSkg
eworICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRmlsdGVyID0gKChTcGVjT2JqZWN0IC0gU3Bl
Y0Z1bmN0aW9uKSB8IFNwZWNOdWxsKTsKKyAgICAgICAgICAgICAgICAgICAgbm9uTWF0Y2hlZEZp
bHRlciA9IH4oKFNwZWNPYmplY3QgLSBTcGVjT2JqZWN0T3RoZXIgLSBTcGVjRnVuY3Rpb24pIHwg
U3BlY051bGwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbnNBdEhlYWQoc3dpdGNoQ2FzZS50YXJnZXQuYmxvY2ssIGN1cnJlbnRU
eXBlcywgb3BlcmFuZCwgbWF0Y2hlZEZpbHRlcik7CisgICAgICAgICAgICAgICAgZmlsdGVyU3Bl
Y3VsYXRpb24oZmFsbFRocm91Z2hGaWx0ZXIsIG5vbk1hdGNoZWRGaWx0ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb25zQXRIZWFkKGRhdGEt
PmZhbGxUaHJvdWdoLmJsb2NrLCBjdXJyZW50VHlwZXMsIG9wZXJhbmQsIGZhbGxUaHJvdWdoRmls
dGVyKTsKKyAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJv
cGFnYXRlVG9TdWNjZXNzb3JzR2VuZXJpYyhibG9jaywgY3VycmVudFR5cGVzKTsKKyAgICB9CisK
ICAgICBib29sIHNldFByZWRpY3Rpb24oU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5oYXNSZXN1bHQoKSk7CkBAIC0xNDYsNyAr
NTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0ZWREb3VibGVUeXBlRm9y
UHJlZGljdGlvbihtZXJnZVNwZWN1bGF0aW9ucyhsZWZ0LCByaWdodCkpOwogICAgIH0KIAotICAg
IHZvaWQgcHJvcGFnYXRlKE5vZGUqIG5vZGUpCisgICAgdm9pZCBwcm9wYWdhdGUoTm9kZSogbm9k
ZSwgT3BlcmFuZHM8U3BlY3VsYXRlZFR5cGU+JiB0eXBlcywgT3BlcmFuZHM8dW5zaWduZWQ+JiBs
YXN0VGltZU92ZXJ3cml0dGVuKQogICAgIHsKICAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5v
cCgpOwogCkBAIC0xNTUsMTcgKzUxMywzNSBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKG9w
KSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHR5cGVzLm9wZXJhbmQobm9kZS0+
b3BlcmFuZCgpKTsKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmNvdWxkUmVwcmVzZW50SW50
NTIoKSAmJiAocHJlZGljdGlvbiAmIFNwZWNOb25JbnQzMkFzSW50NTIpKQogICAgICAgICAgICAg
ICAgIHByZWRpY3Rpb24gPSAocHJlZGljdGlvbiB8IFNwZWNBbnlJbnRBc0RvdWJsZSkgJiB+U3Bl
Y05vbkludDMyQXNJbnQ1MjsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIG9sZFByZWRpY3Rp
b24gPSBub2RlLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJbIiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9wYXNzKSwgIl0gR2V0TG9jYWwgREAiLCBub2Rl
LT5pbmRleCgpLCAiOiAiKTsKKyAgICAgICAgICAgICAgICBkdW1wU3BlY3VsYXRpb24oV1RGOjpk
YXRhRmlsZSgpLCBvbGRQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgLT4g
Iik7CisgICAgICAgICAgICAgICAgZHVtcFNwZWN1bGF0aW9uKFdURjo6ZGF0YUZpbGUoKSwgbm9k
ZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QodHlwZSk7CisgICAgICAgICAgICBPcGVyYW5kIG9w
ZXJhbmQgPSBub2RlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICB0eXBlcy5vcGVyYW5kKG9wZXJh
bmQpID0gdHlwZTsKKyAgICAgICAgICAgIGxhc3RUaW1lT3ZlcndyaXR0ZW4ub3BlcmFuZChvcGVy
YW5kKSA9IG5vZGUtPmluZGV4KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSYgdHlwZUF0SGVhZCA9IHR5cGVzLm9wZXJhbmQobV9jdXJyZW50Tm9kZS0+b3BlcmFu
ZCgpKTsKKyAgICAgICAgICAgIGlmICh0eXBlQXRIZWFkID09IFNwZWNOb25lKQorICAgICAgICAg
ICAgICAgIHR5cGVBdEhlYWQgPSBtX2N1cnJlbnROb2RlLT5nZXRIZWFwUHJlZGljdGlvbigpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjMyLDIyICsxMDA4LDYgQEAgcHJp
dmF0ZToKIAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKICAgICB9Ci0gICAgICAgIAot
ICAgIHZvaWQgcHJvcGFnYXRlRm9yd2FyZCgpCi0gICAgewotICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgOiBtX2RlcGVuZGVudE5vZGVzKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gbm9k
ZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9kZXBlbmRlbnROb2Rlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IG1fY3VycmVudE5vZGUgPSBtX2RlcGVuZGVudE5vZGVzW2ldOwotICAgICAgICAgICAgcHJvcGFn
YXRlKG1fY3VycmVudE5vZGUpOwotICAgICAgICB9Ci0gICAgfQogICAgIAogICAgIHZvaWQgZG9E
b3VibGVWb3RpbmcoTm9kZSogbm9kZSwgZmxvYXQgd2VpZ2h0KQogICAgIHsKQEAgLTgyOCwxMiAr
MTE4OCwxMiBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9n
cmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gbm9kZTsKLSAg
ICAgICAgICAgICAgICBwcm9jZXNzSW52YXJpYW50c0Zvck5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzSW52YXJpYW50c0Zvck5vZGUoYmxvY2spOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgdm9pZCBwcm9jZXNzSW52YXJpYW50c0Zvck5vZGUoKQorICAgIHZv
aWQgcHJvY2Vzc0ludmFyaWFudHNGb3JOb2RlKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChtX2N1cnJlbnROb2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgSlNDb25z
dGFudDogewpAQCAtMTA2Nyw2ICsxNDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBzb21ldGhpbmcgbW9yZSBwcmVjaXNlPwogICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjT3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTEyMjgsMTEgKzE1ODksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1l
OiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKKyAg
ICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVjTnVsbCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOwor
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNOdWxsKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogewpAQCAt
MTI1OCwyNyArMTYxOSwzNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAorICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIG9ubHkgbm9kZXMgZm9yIHdoaWNoIHRoZSBC
eXRlY29kZVBhcnNlciBzb21ldGltZXMgc2V0cyBOb2RlTWF5T3ZlcmZsb3dJbnQzMkluQmFzZWxp
bmUgYW5kL29yIE5vZGVNYXlOZWdaZXJvSW5CYXNlbGluZQorICAgICAgICBjYXNlIFZhbHVlTmVn
YXRlOgorICAgICAgICBjYXNlIFZhbHVlTXVsOgorICAgICAgICBjYXNlIFZhbHVlRGl2OgorICAg
ICAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgICAgICBjYXNlIEFyaXRoRGl2OgorICAgICAgICBj
YXNlIEluYzoKKyAgICAgICAgY2FzZSBEZWM6CisgICAgICAgICAgICBtX2Jsb2Nrc1RvVmlzaXRJ
blJhcmVDYXNlUGFzcy5xdWlja1NldChibG9jay0+aW5kZXgpOworICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIG1fZ2V0TG9jYWxzLmFwcGVu
ZCh7IG1fY3VycmVudE5vZGUsIGJsb2NrIH0pOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAg
Y2FzZSBWYWx1ZU5lZ2F0ZToKICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBW
YWx1ZVN1YjoKLSAgICAgICAgY2FzZSBWYWx1ZU11bDoKLSAgICAgICAgY2FzZSBWYWx1ZURpdjoK
ICAgICAgICAgY2FzZSBWYWx1ZU1vZDoKICAgICAgICAgY2FzZSBWYWx1ZVBvdzoKICAgICAgICAg
Y2FzZSBWYWx1ZUJpdExTaGlmdDoKICAgICAgICAgY2FzZSBWYWx1ZUJpdFJTaGlmdDoKLSAgICAg
ICAgY2FzZSBJbmM6Ci0gICAgICAgIGNhc2UgRGVjOgogICAgICAgICBjYXNlIEFyaXRoQWRkOgog
ICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgogICAgICAg
ICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAgICAgICBjYXNlIEFy
aXRoTXVsOgotICAgICAgICBjYXNlIEFyaXRoRGl2OgogICAgICAgICBjYXNlIEFyaXRoTW9kOgog
ICAgICAgICBjYXNlIEFyaXRoQWJzOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgpAQCAtMTI5NCwx
MSArMTY2Miw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXRvbWljc09yOgogICAgICAgICBj
YXNlIEF0b21pY3NTdG9yZToKICAgICAgICAgY2FzZSBBdG9taWNzU3ViOgotICAgICAgICBjYXNl
IEF0b21pY3NYb3I6IHsKLSAgICAgICAgICAgIG1fZGVwZW5kZW50Tm9kZXMuYXBwZW5kKG1fY3Vy
cmVudE5vZGUpOworICAgICAgICBjYXNlIEF0b21pY3NYb3I6CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgY2FzZSBBdG9taWNzSXNMb2NrRnJl
ZTogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTEzMDgsNyArMTY3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
bV9jdXJyZW50Tm9kZS0+aW50cmluc2ljKCkgPT0gQ1BVUmR0c2NJbnRyaW5zaWMpCiAgICAgICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPdGhlcik7CisgICAgICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjVW5kZWZpbmVkKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTE0MTYsOCArMTc4Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHJv
ZmlsZVR5cGU6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNl
IEZvcmNlT1NSRXhpdDoKLSAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6CiAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnRNYXliZToKKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmlu
aXRlbHk6CiAgICAgICAgIGNhc2UgU2V0RnVuY3Rpb25OYW1lOgogICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgogICAgICAgICBjYXNlIENoZWNrSXNDb25zdGFudDoKQEAgLTE1MTMsNyArMTg3
OSwxMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2w7
CiAgICAgfQogCi0gICAgVmVjdG9yPE5vZGUqPiBtX2RlcGVuZGVudE5vZGVzOworICAgIEJsb2Nr
TWFwPE9wZXJhbmRzPFNwZWN1bGF0ZWRUeXBlPj4gbV90eXBlc0F0SGVhZDsKKyAgICBCbG9ja01h
cDxCaXRWZWN0b3I+IG1fbGl2ZUF0SGVhZDsKKyAgICBCaXRWZWN0b3IgbV9ibG9ja3NUb1Zpc2l0
OworICAgIEJpdFZlY3RvciBtX2Jsb2Nrc1RvVmlzaXRJblJhcmVDYXNlUGFzczsKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPE5vZGUqLCBCYXNpY0Jsb2NrKj4+IG1fZ2V0TG9jYWxzOwogICAgIE5vZGUq
IG1fY3VycmVudE5vZGU7CiAgICAgYm9vbCBtX2NoYW5nZWQgeyBmYWxzZSB9OwogICAgIFByZWRp
Y3Rpb25QYXNzIG1fcGFzcyB7IFByaW1hcnlQYXNzIH07IC8vIFdlIHVzZSBkaWZmZXJlbnQgbG9n
aWMgZm9yIGNvbnNpZGVyaW5nIHByZWRpY3Rpb25zIGRlcGVuZGluZyBvbiBob3cgZmFyIGFsb25n
IHdlIGFyZSBpbiBwcm9wYWdhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcAppbmRleCAyYWMyZWUzOWI0Y2MuLjA0NjQ3ZDk4
MDc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmNwcApAQCAtODYsOCArODYsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6
c2hvdWxkVXNlRG91YmxlRm9ybWF0QWNjb3JkaW5nVG9Wb3RlKCkKIHsKICAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IHRoaXMgZmFjaWxpdHkgZm9yIGFyZ3VtZW50cywgeWV0LgogICAgIC8vIEZJWE1F
OiBtYWtlIHRoaXMgd29yayBmb3IgYXJndW1lbnRzLgotICAgIGlmIChvcGVyYW5kKCkuaXNBcmd1
bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFvcGVyYW5kKCkuaXNB
cmd1bWVudCgpKTsKICAgICAgICAgCiAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhIG51
bWJlciBwcmVkaWN0aW9uLCB0aGVuIHRoaXMgZG9lc24ndAogICAgIC8vIG1ha2UgYW55IHNlbnNl
LgpAQCAtMTQ4LDEwICsxNDcsMTAgQEAgYm9vbCBWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlRG91
YmxlRm9ybWF0U3RhdGUoRG91YmxlRm9ybWF0U3RhdGUgZG91YmxlRm9ybWF0U3QKIGJvb2wgVmFy
aWFibGVBY2Nlc3NEYXRhOjptYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1hdCgpCiB7CiAgICAg
QVNTRVJUKGlzUm9vdCgpKTsKLSAgICAKKwogICAgIGlmIChtX2RvdWJsZUZvcm1hdFN0YXRlICE9
IFVzaW5nRG91YmxlRm9ybWF0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gbV9wcmVkaWN0aW9uOwogICAgIGlmICh0eXBlICYgflNwZWNC
eXRlY29kZU51bWJlcikKICAgICAgICAgdHlwZSB8PSBTcGVjRG91YmxlUHVyZU5hTjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCmluZGV4
IGJlMmZiNTQwMTM1Mi4uYWJkM2Q0MjUwZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCB0YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9ybWF0KCk7CiAgICAg
CiAgICAgYm9vbCBtZXJnZURvdWJsZUZvcm1hdFN0YXRlKERvdWJsZUZvcm1hdFN0YXRlKTsKLSAg
ICAKKwogICAgIGJvb2wgbWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQoKTsKICAgICAKICAg
ICBOb2RlRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA4ZDc3ODUyOWU3ZGIuLmJl
ZTU4ZTMxODVlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCkBAIC0xNzQsNiArMTc0LDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRD
YWdlKCk7CiAgICAgdihCb29sLCByZXBvcnRQYXJzZVRpbWVzLCBmYWxzZSwgTm9ybWFsLCAiZHVt
cHMgSlMgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCB0aGUgdGltZSBpdCB0b29rIHRvIHBhcnNlIikg
XAogICAgIHYoQm9vbCwgcmVwb3J0Qnl0ZWNvZGVDb21waWxlVGltZXMsIGZhbHNlLCBOb3JtYWws
ICJkdW1wcyBKUyBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSB0aW1lIGl0IHRvb2sgdG8gYnl0
ZWNvZGUgY29tcGlsZSIpIFwKICAgICB2KEJvb2wsIGNvdW50UGFyc2VUaW1lcywgZmFsc2UsIE5v
cm1hbCwgImNvdW50cyBwYXJzZSB0aW1lcyIpIFwKKyAgICB2KEJvb2wsIGR1bXBVbnR5cGVkT3Bj
b2Rlc0FmdGVyRml4dXAsIGZhbHNlLCBOb3JtYWwsICJhZnRlciBERkdGaXh1cCwgcmVwb3J0IGV2
ZXJ5IGludGVyZXN0aW5nIG5vZGUgdGhhdCB3ZSBmYWlsZWQgdG8gc3BlY3VsYXRpdmVseSBvcHRp
bWl6ZSIpIFwKICAgICB2KEJvb2wsIHZlcmJvc2VFeGl0UHJvZmlsZSwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZUNGQSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoQm9vbCwgdmVyYm9zZURGR0ZhaWx1cmUsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwK
</data>

          </attachment>
      

    </bug>

</bugzilla>