<?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>52299</bug_id>
          
          <creation_ts>2011-01-12 08:27:46 -0800</creation_ts>
          <short_desc>Missing Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h in WebKitGtk tarball</short_desc>
          <delta_ts>2011-01-12 09:47:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Robert Ancell">robert.ancell</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333097</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Ancell">robert.ancell</who>
    <bug_when>2011-01-12 08:27:46 -0800</bug_when>
    <thetext>The WebKit GTK+ tarball is missing the following header file:
Missing Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h

Which stops the build on ARMv7 (thumb) architectures.  It appears it is just missing from Source/JavaScriptCore/GNUmakefile.am

Observed in WebKit GTK+ 1.3.9 and 1.3.10 (at least)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333119</commentid>
    <comment_count>1</comment_count>
      <attachid>78698</attachid>
    <who name="Robert Ancell">robert.ancell</who>
    <bug_when>2011-01-12 09:22:23 -0800</bug_when>
    <thetext>Created attachment 78698
Patch being tested that adds missing files takes from WebKit svn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333123</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-12 09:47:25 -0800</bug_when>
    <thetext>Committed r75617: &lt;http://trac.webkit.org/changeset/75617&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78698</attachid>
            <date>2011-01-12 09:22:23 -0800</date>
            <delta_ts>2011-01-12 09:22:23 -0800</delta_ts>
            <desc>Patch being tested that adds missing files takes from WebKit svn</desc>
            <filename>01_missing_armv7_files.patch</filename>
            <type>text/plain</type>
            <size>136982</size>
            <attacher name="Robert Ancell">robert.ancell</attacher>
            
              <data encoding="base64">SW5kZXg6IHdlYmtpdC0xLjMuMTAvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdlYmtpdC0xLjMuMTAub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUuYW0JMjAxMS0wMS0xMiAxMDozMzoyMi43MTg5ODMwMDAgLTA2MDAKKysrIHdl
YmtpdC0xLjMuMTAvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCTIwMTEtMDEt
MTIgMTA6MzM6MDguMzk4OTgzMDAwIC0wNjAwCkBAIC03OCwxMiArNzgsMTUgQEAKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmNwcCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBcCkluZGV4OiB3ZWJraXQtMS4zLjEwL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysg
d2Via2l0LTEuMy4xMC9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1i
bGVyLmNwcAkyMDExLTAxLTEyIDEwOjU2OjUyLjg4ODk4MzAwMSAtMDYwMApAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEFTU0VN
QkxFUikgJiYgQ1BVKEFSTV9USFVNQjIpCisKKyNpbmNsdWRlICJBUk12N0Fzc2VtYmxlci5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgaW50IEFSTXY3QXNzZW1ibGVyOjpKdW1wU2l6ZXNb
XSA9IHsgMHhmZmZmZmZmZiwgc2l6ZW9mKHVpbnQxNl90KSwgc2l6ZW9mKHVpbnQxNl90KSwKKyAg
ICAyICogc2l6ZW9mKHVpbnQxNl90KSwgMiAqIHNpemVvZih1aW50MTZfdCksIDMgKiBzaXplb2Yo
dWludDE2X3QpLCA1ICogc2l6ZW9mKHVpbnQxNl90KSwgNiAqIHNpemVvZih1aW50MTZfdCkgfTsK
K2NvbnN0IGludCBBUk12N0Fzc2VtYmxlcjo6SnVtcFBhZGRpbmdTaXplc1tdID0geyAwLCA1ICog
c2l6ZW9mKHVpbnQxNl90KSwgNiAqIHNpemVvZih1aW50MTZfdCksCisgICAgNSAqIHNpemVvZih1
aW50MTZfdCksIDYgKiBzaXplb2YodWludDE2X3QpIH07CisKK30KKworI2VuZGlmCkluZGV4OiB3
ZWJraXQtMS4zLjEwL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAw
MDAgKzAwMDAKKysrIHdlYmtpdC0xLjMuMTAvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oCTIwMTEtMDEtMTIgMTA6NTY6NTIuODg4OTgzMDAxIC0wNjAwCkBA
IC0wLDAgKzEsMjM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQVJNQXNzZW1ibGVyX2gKKyNkZWZpbmUgQVJNQXNzZW1ibGVyX2gKKworI2lmIEVO
QUJMRShBU1NFTUJMRVIpICYmIENQVShBUk1fVEhVTUIyKQorCisjaW5jbHVkZSAiQXNzZW1ibGVy
QnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgQVJNUmVnaXN0ZXJzIHsKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICByMCwKKyAgICAg
ICAgcjEsCisgICAgICAgIHIyLAorICAgICAgICByMywKKyAgICAgICAgcjQsCisgICAgICAgIHI1
LAorICAgICAgICByNiwKKyAgICAgICAgcjcsIHdyID0gcjcsICAgLy8gdGh1bWIgd29yayByZWdp
c3RlcgorICAgICAgICByOCwKKyAgICAgICAgcjksIHNiID0gcjksICAgLy8gc3RhdGljIGJhc2UK
KyAgICAgICAgcjEwLCBzbCA9IHIxMCwgLy8gc3RhY2sgbGltaXQKKyAgICAgICAgcjExLCBmcCA9
IHIxMSwgLy8gZnJhbWUgcG9pbnRlcgorICAgICAgICByMTIsIGlwID0gcjEyLAorICAgICAgICBy
MTMsIHNwID0gcjEzLAorICAgICAgICByMTQsIGxyID0gcjE0LAorICAgICAgICByMTUsIHBjID0g
cjE1LAorICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIHMw
LAorICAgICAgICBzMSwKKyAgICAgICAgczIsCisgICAgICAgIHMzLAorICAgICAgICBzNCwKKyAg
ICAgICAgczUsCisgICAgICAgIHM2LAorICAgICAgICBzNywKKyAgICAgICAgczgsCisgICAgICAg
IHM5LAorICAgICAgICBzMTAsCisgICAgICAgIHMxMSwKKyAgICAgICAgczEyLAorICAgICAgICBz
MTMsCisgICAgICAgIHMxNCwKKyAgICAgICAgczE1LAorICAgICAgICBzMTYsCisgICAgICAgIHMx
NywKKyAgICAgICAgczE4LAorICAgICAgICBzMTksCisgICAgICAgIHMyMCwKKyAgICAgICAgczIx
LAorICAgICAgICBzMjIsCisgICAgICAgIHMyMywKKyAgICAgICAgczI0LAorICAgICAgICBzMjUs
CisgICAgICAgIHMyNiwKKyAgICAgICAgczI3LAorICAgICAgICBzMjgsCisgICAgICAgIHMyOSwK
KyAgICAgICAgczMwLAorICAgICAgICBzMzEsCisgICAgfSBGUFNpbmdsZVJlZ2lzdGVySUQ7CisK
KyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBkMCwKKyAgICAgICAgZDEsCisgICAgICAgIGQy
LAorICAgICAgICBkMywKKyAgICAgICAgZDQsCisgICAgICAgIGQ1LAorICAgICAgICBkNiwKKyAg
ICAgICAgZDcsCisgICAgICAgIGQ4LAorICAgICAgICBkOSwKKyAgICAgICAgZDEwLAorICAgICAg
ICBkMTEsCisgICAgICAgIGQxMiwKKyAgICAgICAgZDEzLAorICAgICAgICBkMTQsCisgICAgICAg
IGQxNSwKKyAgICAgICAgZDE2LAorICAgICAgICBkMTcsCisgICAgICAgIGQxOCwKKyAgICAgICAg
ZDE5LAorICAgICAgICBkMjAsCisgICAgICAgIGQyMSwKKyAgICAgICAgZDIyLAorICAgICAgICBk
MjMsCisgICAgICAgIGQyNCwKKyAgICAgICAgZDI1LAorICAgICAgICBkMjYsCisgICAgICAgIGQy
NywKKyAgICAgICAgZDI4LAorICAgICAgICBkMjksCisgICAgICAgIGQzMCwKKyAgICAgICAgZDMx
LAorICAgIH0gRlBEb3VibGVSZWdpc3RlcklEOworCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAg
ICAgcTAsCisgICAgICAgIHExLAorICAgICAgICBxMiwKKyAgICAgICAgcTMsCisgICAgICAgIHE0
LAorICAgICAgICBxNSwKKyAgICAgICAgcTYsCisgICAgICAgIHE3LAorICAgICAgICBxOCwKKyAg
ICAgICAgcTksCisgICAgICAgIHExMCwKKyAgICAgICAgcTExLAorICAgICAgICBxMTIsCisgICAg
ICAgIHExMywKKyAgICAgICAgcTE0LAorICAgICAgICBxMTUsCisgICAgICAgIHExNiwKKyAgICAg
ICAgcTE3LAorICAgICAgICBxMTgsCisgICAgICAgIHExOSwKKyAgICAgICAgcTIwLAorICAgICAg
ICBxMjEsCisgICAgICAgIHEyMiwKKyAgICAgICAgcTIzLAorICAgICAgICBxMjQsCisgICAgICAg
IHEyNSwKKyAgICAgICAgcTI2LAorICAgICAgICBxMjcsCisgICAgICAgIHEyOCwKKyAgICAgICAg
cTI5LAorICAgICAgICBxMzAsCisgICAgICAgIHEzMSwKKyAgICB9IEZQUXVhZFJlZ2lzdGVySUQ7
CisKKyAgICBpbmxpbmUgRlBTaW5nbGVSZWdpc3RlcklEIGFzU2luZ2xlKEZQRG91YmxlUmVnaXN0
ZXJJRCByZWcpCisgICAgeworICAgICAgICBBU1NFUlQocmVnIDwgZDE2KTsKKyAgICAgICAgcmV0
dXJuIChGUFNpbmdsZVJlZ2lzdGVySUQpKHJlZyA8PCAxKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
RlBEb3VibGVSZWdpc3RlcklEIGFzRG91YmxlKEZQU2luZ2xlUmVnaXN0ZXJJRCByZWcpCisgICAg
eworICAgICAgICBBU1NFUlQoIShyZWcgJiAxKSk7CisgICAgICAgIHJldHVybiAoRlBEb3VibGVS
ZWdpc3RlcklEKShyZWcgPj4gMSk7CisgICAgfQorfQorCitjbGFzcyBBUk12N0Fzc2VtYmxlcjsK
K2NsYXNzIEFSTVRodW1iSW1tZWRpYXRlIHsKKyAgICBmcmllbmQgY2xhc3MgQVJNdjdBc3NlbWJs
ZXI7CisKKyAgICB0eXBlZGVmIHVpbnQ4X3QgVGh1bWJJbW1lZGlhdGVUeXBlOworICAgIHN0YXRp
YyBjb25zdCBUaHVtYkltbWVkaWF0ZVR5cGUgVHlwZUludmFsaWQgPSAwOworICAgIHN0YXRpYyBj
b25zdCBUaHVtYkltbWVkaWF0ZVR5cGUgVHlwZUVuY29kZWQgPSAxOworICAgIHN0YXRpYyBjb25z
dCBUaHVtYkltbWVkaWF0ZVR5cGUgVHlwZVVJbnQxNiA9IDI7CisKKyAgICB0eXBlZGVmIHVuaW9u
IHsKKyAgICAgICAgaW50MTZfdCBhc0ludDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGltbTggOiA4OworICAgICAgICAgICAgdW5zaWduZWQgaW1tMyA6IDM7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpICAgIDogMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGltbTQgOiA0
OworICAgICAgICB9OworICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGVuY29kZWQgaW1tZWRpYXRl
LCB0aGVuIGl0IG1heSBkZXNjcmliZSBhIHNoaWZ0LCBvciBhIHBhdHRlcm4uCisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdFZhbHVlNyA6IDc7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzaGlmdEFtb3VudCA6IDU7CisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbW1lZGlhdGUgICA6IDg7CisgICAgICAgICAgICB1bnNp
Z25lZCBwYXR0ZXJuICAgICA6IDQ7CisgICAgICAgIH07CisgICAgfSBUaHVtYkltbWVkaWF0ZVZh
bHVlOworCisgICAgLy8gYnl0ZTAgY29udGFpbnMgbGVhc3Qgc2lnbmlmaWNhbnQgYml0OyBub3Qg
dXNpbmcgYW4gYXJyYXkgdG8gbWFrZSBjbGllbnQgY29kZSBlbmRpYW4gYWdub3N0aWMuCisgICAg
dHlwZWRlZiB1bmlvbiB7CisgICAgICAgIGludDMyX3QgYXNJbnQ7CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICB1aW50OF90IGJ5dGUwOworICAgICAgICAgICAgdWludDhfdCBieXRlMTsK
KyAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZTI7CisgICAgICAgICAgICB1aW50OF90IGJ5dGUzOwor
ICAgICAgICB9OworICAgIH0gUGF0dGVybkJ5dGVzOworCisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBjb3VudExlYWRpbmdaZXJvc1BhcnRpYWwodWludDMyX3QmIHZhbHVlLCBpbnQzMl90
JiB6ZXJvcywgY29uc3QgaW50IE4pCisgICAgeworICAgICAgICBpZiAodmFsdWUgJiB+KCgxIDw8
IE4pIC0gMSkpIC8qIGNoZWNrIGZvciBhbnkgb2YgdGhlIHRvcCBOIGJpdHMgKG9mIDJOIGJpdHMp
IGFyZSBzZXQgKi8KKyAgICAgICAgICAgIHZhbHVlID4+PSBOOyAgICAgICAgICAgICAvKiBpZiBh
bnkgd2VyZSBzZXQsIGxvc2UgdGhlIGJvdHRvbSBOICovCisgICAgICAgIGVsc2UgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogaWYgbm9uZSBvZiB0aGUgdG9wIE4gYml0cyBhcmUgc2V0LCAqLwor
ICAgICAgICAgICAgemVyb3MgKz0gTjsgICAgICAgICAgICAgIC8qIHRoZW4gd2UgaGF2ZSBpZGVu
dGlmaWVkIE4gbGVhZGluZyB6ZXJvcyAqLworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNv
dW50TGVhZGluZ1plcm9zKHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiAzMjsKKworICAgICAgICBpbnQzMl90IHplcm9zID0gMDsK
KyAgICAgICAgY291bnRMZWFkaW5nWmVyb3NQYXJ0aWFsKHZhbHVlLCB6ZXJvcywgMTYpOworICAg
ICAgICBjb3VudExlYWRpbmdaZXJvc1BhcnRpYWwodmFsdWUsIHplcm9zLCA4KTsKKyAgICAgICAg
Y291bnRMZWFkaW5nWmVyb3NQYXJ0aWFsKHZhbHVlLCB6ZXJvcywgNCk7CisgICAgICAgIGNvdW50
TGVhZGluZ1plcm9zUGFydGlhbCh2YWx1ZSwgemVyb3MsIDIpOworICAgICAgICBjb3VudExlYWRp
bmdaZXJvc1BhcnRpYWwodmFsdWUsIHplcm9zLCAxKTsKKyAgICAgICAgcmV0dXJuIHplcm9zOwor
ICAgIH0KKworICAgIEFSTVRodW1iSW1tZWRpYXRlKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZUlu
dmFsaWQpCisgICAgeworICAgICAgICBtX3ZhbHVlLmFzSW50ID0gMDsKKyAgICB9CisgICAgICAg
IAorICAgIEFSTVRodW1iSW1tZWRpYXRlKFRodW1iSW1tZWRpYXRlVHlwZSB0eXBlLCBUaHVtYklt
bWVkaWF0ZVZhbHVlIHZhbHVlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIEFSTVRodW1iSW1tZWRpYXRlKFRodW1i
SW1tZWRpYXRlVHlwZSB0eXBlLCB1aW50MTZfdCB2YWx1ZSkKKyAgICAgICAgOiBtX3R5cGUoVHlw
ZVVJbnQxNikKKyAgICB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGNvbnN0cnVjdG9yIGlz
IG9ubHkgcmVhY2hlZCB3aXRoIHR5cGUgVHlwZVVJbnQxNjsKKyAgICAgICAgLy8gdGhpcyBleHRy
YSBwYXJhbWV0ZXIgbWFrZXMgdGhlIGNvZGUgYSBsaXR0bGUgY2xlYXJlciBieSBtYWtpbmcgaXQK
KyAgICAgICAgLy8gZXhwbGljaXQgYXQgY2FsbCBzaXRlcyB3aGljaCB0eXBlIGlzIGJlaW5nIGNv
bnN0cnVjdGVkCisgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBUeXBlVUludDE2
KTsKKworICAgICAgICBtX3ZhbHVlLmFzSW50ID0gdmFsdWU7CisgICAgfQorCitwdWJsaWM6Cisg
ICAgc3RhdGljIEFSTVRodW1iSW1tZWRpYXRlIG1ha2VFbmNvZGVkSW1tKHVpbnQzMl90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgVGh1bWJJbW1lZGlhdGVWYWx1ZSBlbmNvZGluZzsKKyAgICAgICAg
ZW5jb2RpbmcuYXNJbnQgPSAwOworCisgICAgICAgIC8vIG9rYXksIHRoZXNlIGFyZSBlYXN5Lgor
ICAgICAgICBpZiAodmFsdWUgPCAyNTYpIHsKKyAgICAgICAgICAgIGVuY29kaW5nLmltbWVkaWF0
ZSA9IHZhbHVlOworICAgICAgICAgICAgZW5jb2RpbmcucGF0dGVybiA9IDA7CisgICAgICAgICAg
ICByZXR1cm4gQVJNVGh1bWJJbW1lZGlhdGUoVHlwZUVuY29kZWQsIGVuY29kaW5nKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGludDMyX3QgbGVhZGluZ1plcm9zID0gY291bnRMZWFkaW5nWmVyb3Mo
dmFsdWUpOworICAgICAgICAvLyBpZiB0aGVyZSB3ZXJlIDI0IG9yIG1vcmUgbGVhZGluZyB6ZXJv
cywgdGhlbiB3ZSdkIGhhdmUgaGl0IHRoZSAodmFsdWUgPCAyNTYpIGNhc2UuCisgICAgICAgIEFT
U0VSVChsZWFkaW5nWmVyb3MgPCAyNCk7CisKKyAgICAgICAgLy8gR2l2ZW4gYSBudW1iZXIgd2l0
aCBiaXQgZmllbGRzIFo6QjpDLCB3aGVyZSBjb3VudChaKStjb3VudChCKStjb3VudChDKSA9PSAz
MiwKKyAgICAgICAgLy8gWiBhcmUgdGhlIGJpdHMga25vd24gemVybywgQiBpcyB0aGUgOC1iaXQg
aW1tZWRpYXRlLCBDIGFyZSB0aGUgYml0cyB0byBjaGVjayBmb3IKKyAgICAgICAgLy8gemVyby4g
IGNvdW50KEIpID09IDgsIHNvIHRoZSBjb3VudCBvZiBiaXRzIHRvIGJlIGNoZWNrZWQgaXMgMjQg
LSBjb3VudChaKS4KKyAgICAgICAgaW50MzJfdCByaWdodFNoaWZ0QW1vdW50ID0gMjQgLSBsZWFk
aW5nWmVyb3M7CisgICAgICAgIGlmICh2YWx1ZSA9PSAoKHZhbHVlID4+IHJpZ2h0U2hpZnRBbW91
bnQpIDw8IHJpZ2h0U2hpZnRBbW91bnQpKSB7CisgICAgICAgICAgICAvLyBTaGlmdCB0aGUgdmFs
dWUgZG93biB0byB0aGUgbG93IGJ5dGUgcG9zaXRpb24uICBUaGUgYXNzaWduIHRvIAorICAgICAg
ICAgICAgLy8gc2hpZnRWYWx1ZTcgZHJvcHMgdGhlIGltcGxpY2l0IHRvcCBiaXQuCisgICAgICAg
ICAgICBlbmNvZGluZy5zaGlmdFZhbHVlNyA9IHZhbHVlID4+IHJpZ2h0U2hpZnRBbW91bnQ7Cisg
ICAgICAgICAgICAvLyBUaGUgZW5kb2RlZCBzaGlmdCBhbW91bnQgaXMgdGhlIG1hZ25pdHVkZSBv
ZiBhIHJpZ2h0IHJvdGF0ZS4KKyAgICAgICAgICAgIGVuY29kaW5nLnNoaWZ0QW1vdW50ID0gOCAr
IGxlYWRpbmdaZXJvczsKKyAgICAgICAgICAgIHJldHVybiBBUk1UaHVtYkltbWVkaWF0ZShUeXBl
RW5jb2RlZCwgZW5jb2RpbmcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQYXR0ZXJu
Qnl0ZXMgYnl0ZXM7CisgICAgICAgIGJ5dGVzLmFzSW50ID0gdmFsdWU7CisKKyAgICAgICAgaWYg
KChieXRlcy5ieXRlMCA9PSBieXRlcy5ieXRlMSkgJiYgKGJ5dGVzLmJ5dGUwID09IGJ5dGVzLmJ5
dGUyKSAmJiAoYnl0ZXMuYnl0ZTAgPT0gYnl0ZXMuYnl0ZTMpKSB7CisgICAgICAgICAgICBlbmNv
ZGluZy5pbW1lZGlhdGUgPSBieXRlcy5ieXRlMDsKKyAgICAgICAgICAgIGVuY29kaW5nLnBhdHRl
cm4gPSAzOworICAgICAgICAgICAgcmV0dXJuIEFSTVRodW1iSW1tZWRpYXRlKFR5cGVFbmNvZGVk
LCBlbmNvZGluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGJ5dGVzLmJ5dGUwID09IGJ5
dGVzLmJ5dGUyKSAmJiAhKGJ5dGVzLmJ5dGUxIHwgYnl0ZXMuYnl0ZTMpKSB7CisgICAgICAgICAg
ICBlbmNvZGluZy5pbW1lZGlhdGUgPSBieXRlcy5ieXRlMDsKKyAgICAgICAgICAgIGVuY29kaW5n
LnBhdHRlcm4gPSAxOworICAgICAgICAgICAgcmV0dXJuIEFSTVRodW1iSW1tZWRpYXRlKFR5cGVF
bmNvZGVkLCBlbmNvZGluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGJ5dGVzLmJ5dGUx
ID09IGJ5dGVzLmJ5dGUzKSAmJiAhKGJ5dGVzLmJ5dGUwIHwgYnl0ZXMuYnl0ZTIpKSB7CisgICAg
ICAgICAgICBlbmNvZGluZy5pbW1lZGlhdGUgPSBieXRlcy5ieXRlMTsKKyAgICAgICAgICAgIGVu
Y29kaW5nLnBhdHRlcm4gPSAyOworICAgICAgICAgICAgcmV0dXJuIEFSTVRodW1iSW1tZWRpYXRl
KFR5cGVFbmNvZGVkLCBlbmNvZGluZyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQVJN
VGh1bWJJbW1lZGlhdGUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQVJNVGh1bWJJbW1lZGlhdGUg
bWFrZVVJbnQxMihpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICghKHZhbHVl
ICYgMHhmZmZmZjAwMCkpCisgICAgICAgICAgICA/IEFSTVRodW1iSW1tZWRpYXRlKFR5cGVVSW50
MTYsICh1aW50MTZfdCl2YWx1ZSkKKyAgICAgICAgICAgIDogQVJNVGh1bWJJbW1lZGlhdGUoKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgQVJNVGh1bWJJbW1lZGlhdGUgbWFrZVVJbnQxMk9yRW5jb2Rl
ZEltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYSAx
Mi1iaXQgdW5zaWduZWQgaXQsIHRyeSBtYWtpbmcgYW4gZW5jb2RlZCBpbW1lZGlhdGUuCisgICAg
ICAgIHJldHVybiAoISh2YWx1ZSAmIDB4ZmZmZmYwMDApKQorICAgICAgICAgICAgPyBBUk1UaHVt
YkltbWVkaWF0ZShUeXBlVUludDE2LCAodWludDE2X3QpdmFsdWUpCisgICAgICAgICAgICA6IG1h
a2VFbmNvZGVkSW1tKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBUaGUgJ21ha2UnIG1ldGhvZHMs
IGFib3ZlLCByZXR1cm4gYSAhaXNWYWxpZCgpIHZhbHVlIGlmIHRoZSBhcmd1bWVudAorICAgIC8v
IGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyB0aGUgcmVxdWVzdGVkIHR5cGUuICBUaGlzIG1ldGhv
ZHMgIGlzIGNhbGxlZAorICAgIC8vICdnZXQnIHNpbmNlIHRoZSBhcmd1bWVudCBjYW4gYWx3YXlz
IGJlIHJlcHJlc2VudGVkLgorICAgIHN0YXRpYyBBUk1UaHVtYkltbWVkaWF0ZSBtYWtlVUludDE2
KHVpbnQxNl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFSTVRodW1iSW1tZWRpYXRl
KFR5cGVVSW50MTYsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgIT0gVHlwZUludmFsaWQ7CisgICAgfQorCisgICAg
Ly8gVGhlc2UgbWV0aG9kcyByZWx5IG9uIHRoZSBmb3JtYXQgb2YgZW5jb2RlZCBieXRlIHZhbHVl
cy4KKyAgICBib29sIGlzVUludDMoKSB7IHJldHVybiAhKG1fdmFsdWUuYXNJbnQgJiAweGZmZjgp
OyB9CisgICAgYm9vbCBpc1VJbnQ0KCkgeyByZXR1cm4gIShtX3ZhbHVlLmFzSW50ICYgMHhmZmYw
KTsgfQorICAgIGJvb2wgaXNVSW50NSgpIHsgcmV0dXJuICEobV92YWx1ZS5hc0ludCAmIDB4ZmZl
MCk7IH0KKyAgICBib29sIGlzVUludDYoKSB7IHJldHVybiAhKG1fdmFsdWUuYXNJbnQgJiAweGZm
YzApOyB9CisgICAgYm9vbCBpc1VJbnQ3KCkgeyByZXR1cm4gIShtX3ZhbHVlLmFzSW50ICYgMHhm
ZjgwKTsgfQorICAgIGJvb2wgaXNVSW50OCgpIHsgcmV0dXJuICEobV92YWx1ZS5hc0ludCAmIDB4
ZmYwMCk7IH0KKyAgICBib29sIGlzVUludDkoKSB7IHJldHVybiAobV90eXBlID09IFR5cGVVSW50
MTYpICYmICEobV92YWx1ZS5hc0ludCAmIDB4ZmUwMCk7IH0KKyAgICBib29sIGlzVUludDEwKCkg
eyByZXR1cm4gKG1fdHlwZSA9PSBUeXBlVUludDE2KSAmJiAhKG1fdmFsdWUuYXNJbnQgJiAweGZj
MDApOyB9CisgICAgYm9vbCBpc1VJbnQxMigpIHsgcmV0dXJuIChtX3R5cGUgPT0gVHlwZVVJbnQx
NikgJiYgIShtX3ZhbHVlLmFzSW50ICYgMHhmMDAwKTsgfQorICAgIGJvb2wgaXNVSW50MTYoKSB7
IHJldHVybiBtX3R5cGUgPT0gVHlwZVVJbnQxNjsgfQorICAgIHVpbnQ4X3QgZ2V0VUludDMoKSB7
IEFTU0VSVChpc1VJbnQzKCkpOyByZXR1cm4gbV92YWx1ZS5hc0ludDsgfQorICAgIHVpbnQ4X3Qg
Z2V0VUludDQoKSB7IEFTU0VSVChpc1VJbnQ0KCkpOyByZXR1cm4gbV92YWx1ZS5hc0ludDsgfQor
ICAgIHVpbnQ4X3QgZ2V0VUludDUoKSB7IEFTU0VSVChpc1VJbnQ1KCkpOyByZXR1cm4gbV92YWx1
ZS5hc0ludDsgfQorICAgIHVpbnQ4X3QgZ2V0VUludDYoKSB7IEFTU0VSVChpc1VJbnQ2KCkpOyBy
ZXR1cm4gbV92YWx1ZS5hc0ludDsgfQorICAgIHVpbnQ4X3QgZ2V0VUludDcoKSB7IEFTU0VSVChp
c1VJbnQ3KCkpOyByZXR1cm4gbV92YWx1ZS5hc0ludDsgfQorICAgIHVpbnQ4X3QgZ2V0VUludDgo
KSB7IEFTU0VSVChpc1VJbnQ4KCkpOyByZXR1cm4gbV92YWx1ZS5hc0ludDsgfQorICAgIHVpbnQ4
X3QgZ2V0VUludDkoKSB7IEFTU0VSVChpc1VJbnQ5KCkpOyByZXR1cm4gbV92YWx1ZS5hc0ludDsg
fQorICAgIHVpbnQ4X3QgZ2V0VUludDEwKCkgeyBBU1NFUlQoaXNVSW50MTAoKSk7IHJldHVybiBt
X3ZhbHVlLmFzSW50OyB9CisgICAgdWludDE2X3QgZ2V0VUludDEyKCkgeyBBU1NFUlQoaXNVSW50
MTIoKSk7IHJldHVybiBtX3ZhbHVlLmFzSW50OyB9CisgICAgdWludDE2X3QgZ2V0VUludDE2KCkg
eyBBU1NFUlQoaXNVSW50MTYoKSk7IHJldHVybiBtX3ZhbHVlLmFzSW50OyB9CisKKyAgICBib29s
IGlzRW5jb2RlZEltbSgpIHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlRW5jb2RlZDsgfQorCitwcml2
YXRlOgorICAgIFRodW1iSW1tZWRpYXRlVHlwZSBtX3R5cGU7CisgICAgVGh1bWJJbW1lZGlhdGVW
YWx1ZSBtX3ZhbHVlOworfTsKKworY2xhc3MgVkZQSW1tZWRpYXRlIHsKK3B1YmxpYzoKKyAgICBW
RlBJbW1lZGlhdGUoZG91YmxlIGQpCisgICAgICAgIDogbV92YWx1ZSgtMSkKKyAgICB7CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGk7CisgICAgICAgICAgICBkb3VibGUg
ZDsKKyAgICAgICAgfSB1OworCisgICAgICAgIHUuZCA9IGQ7CisKKyAgICAgICAgaW50IHNpZ24g
PSBzdGF0aWNfY2FzdDxpbnQ+KHUuaSA+PiA2Myk7CisgICAgICAgIGludCBleHBvbmVudCA9IHN0
YXRpY19jYXN0PGludD4odS5pID4+IDUyKSAmIDB4N2ZmOworICAgICAgICB1aW50NjRfdCBtYW50
aXNzYSA9IHUuaSAmIDB4MDAwZmZmZmZmZmZmZmZmZnVsbDsKKworICAgICAgICBpZiAoKGV4cG9u
ZW50ID49IDB4M2ZjKSAmJiAoZXhwb25lbnQgPD0gMHg0MDMpICYmICEobWFudGlzc2EgJiAweDAw
MDBmZmZmZmZmZmZmZmZ1bGwpKQorICAgICAgICAgICAgbV92YWx1ZSA9IChzaWduIDw8IDcpIHwg
KChleHBvbmVudCAmIDcpIDw8IDQpIHwgKGludCkobWFudGlzc2EgPj4gNDgpOworICAgIH0KKwor
ICAgIGJvb2wgaXNWYWxpZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSAtMTsK
KyAgICB9CisgICAgCisgICAgdWludDhfdCB2YWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
KHVpbnQ4X3QpbV92YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fdmFsdWU7Cit9
OworCit0eXBlZGVmIGVudW0geworICAgIFNSVHlwZV9MU0wsCisgICAgU1JUeXBlX0xTUiwKKyAg
ICBTUlR5cGVfQVNSLAorICAgIFNSVHlwZV9ST1IsCisKKyAgICBTUlR5cGVfUlJYID0gU1JUeXBl
X1JPUgorfSBBUk1TaGlmdFR5cGU7CisKK2NsYXNzIEFSTXY3QXNzZW1ibGVyOworY2xhc3MgU2hp
ZnRUeXBlQW5kQW1vdW50IHsKKyAgICBmcmllbmQgY2xhc3MgQVJNdjdBc3NlbWJsZXI7CisKK3B1
YmxpYzoKKyAgICBTaGlmdFR5cGVBbmRBbW91bnQoKQorICAgIHsKKyAgICAgICAgbV91LnR5cGUg
PSAoQVJNU2hpZnRUeXBlKTA7CisgICAgICAgIG1fdS5hbW91bnQgPSAwOworICAgIH0KKyAgICAK
KyAgICBTaGlmdFR5cGVBbmRBbW91bnQoQVJNU2hpZnRUeXBlIHR5cGUsIHVuc2lnbmVkIGFtb3Vu
dCkKKyAgICB7CisgICAgICAgIG1fdS50eXBlID0gdHlwZTsKKyAgICAgICAgbV91LmFtb3VudCA9
IGFtb3VudCAmIDMxOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsbzQoKSB7IHJldHVybiBt
X3UubG80OyB9CisgICAgdW5zaWduZWQgaGk0KCkgeyByZXR1cm4gbV91LmhpNDsgfQorICAgIAor
cHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNp
Z25lZCBsbzQgOiA0OworICAgICAgICAgICAgdW5zaWduZWQgaGk0IDogNDsKKyAgICAgICAgfTsK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHR5cGUgICA6IDI7CisgICAg
ICAgICAgICB1bnNpZ25lZCBhbW91bnQgOiA2OworICAgICAgICB9OworICAgIH0gbV91OworfTsK
KworY2xhc3MgQVJNdjdBc3NlbWJsZXIgeworcHVibGljOgorICAgIH5BUk12N0Fzc2VtYmxlcigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9qdW1wc1RvTGluay5pc0VtcHR5KCkpOworICAgIH0K
KworICAgIHR5cGVkZWYgQVJNUmVnaXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CisgICAg
dHlwZWRlZiBBUk1SZWdpc3RlcnM6OkZQU2luZ2xlUmVnaXN0ZXJJRCBGUFNpbmdsZVJlZ2lzdGVy
SUQ7CisgICAgdHlwZWRlZiBBUk1SZWdpc3RlcnM6OkZQRG91YmxlUmVnaXN0ZXJJRCBGUERvdWJs
ZVJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBBUk1SZWdpc3RlcnM6OkZQUXVhZFJlZ2lzdGVySUQg
RlBRdWFkUmVnaXN0ZXJJRDsKKworICAgIC8vIChIUywgTE8sIEhJLCBMUykgLT4gKEFFLCBCLCBB
LCBCRSkKKyAgICAvLyAoVlMsIFZDKSAtPiAoTywgTk8pCisgICAgdHlwZWRlZiBlbnVtIHsKKyAg
ICAgICAgQ29uZGl0aW9uRVEsCisgICAgICAgIENvbmRpdGlvbk5FLAorICAgICAgICBDb25kaXRp
b25IUywgQ29uZGl0aW9uQ1MgPSBDb25kaXRpb25IUywKKyAgICAgICAgQ29uZGl0aW9uTE8sIENv
bmRpdGlvbkNDID0gQ29uZGl0aW9uTE8sCisgICAgICAgIENvbmRpdGlvbk1JLAorICAgICAgICBD
b25kaXRpb25QTCwKKyAgICAgICAgQ29uZGl0aW9uVlMsCisgICAgICAgIENvbmRpdGlvblZDLAor
ICAgICAgICBDb25kaXRpb25ISSwKKyAgICAgICAgQ29uZGl0aW9uTFMsCisgICAgICAgIENvbmRp
dGlvbkdFLAorICAgICAgICBDb25kaXRpb25MVCwKKyAgICAgICAgQ29uZGl0aW9uR1QsCisgICAg
ICAgIENvbmRpdGlvbkxFLAorICAgICAgICBDb25kaXRpb25BTCwKKyAgICAgICAgQ29uZGl0aW9u
SW52YWxpZAorICAgIH0gQ29uZGl0aW9uOworCisgICAgZW51bSBKdW1wVHlwZSB7IEp1bXBGaXhl
ZCwgSnVtcE5vQ29uZGl0aW9uLCBKdW1wQ29uZGl0aW9uLCBKdW1wTm9Db25kaXRpb25GaXhlZFNp
emUsIEp1bXBDb25kaXRpb25GaXhlZFNpemUsIEp1bXBUeXBlQ291bnQgfTsKKyAgICBlbnVtIEp1
bXBMaW5rVHlwZSB7IExpbmtJbnZhbGlkLCBMaW5rSnVtcFQxLCBMaW5rSnVtcFQyLCBMaW5rSnVt
cFQzLAorICAgICAgICBMaW5rSnVtcFQ0LCBMaW5rQ29uZGl0aW9uYWxKdW1wVDQsIExpbmtCWCwg
TGlua0NvbmRpdGlvbmFsQlgsIEp1bXBMaW5rVHlwZUNvdW50IH07CisgICAgc3RhdGljIGNvbnN0
IGludCBKdW1wU2l6ZXNbSnVtcExpbmtUeXBlQ291bnRdOworICAgIHN0YXRpYyBjb25zdCBpbnQg
SnVtcFBhZGRpbmdTaXplc1tKdW1wVHlwZUNvdW50XTsKKyAgICBjbGFzcyBMaW5rUmVjb3JkIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIExpbmtSZWNvcmQoaW50cHRyX3QgZnJvbSwgaW50cHRyX3Qg
dG8sIEp1bXBUeXBlIHR5cGUsIENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgICAgICAgICA6IG1f
ZnJvbShmcm9tKQorICAgICAgICAgICAgLCBtX3RvKHRvKQorICAgICAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgICAgICwgbV9saW5rVHlwZShMaW5rSW52YWxpZCkKKyAgICAgICAgICAg
ICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
aW50cHRyX3QgZnJvbSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbTsgfQorICAgICAgICB2b2lkIHNl
dEZyb20oaW50cHRyX3QgZnJvbSkgeyBtX2Zyb20gPSBmcm9tOyB9CisgICAgICAgIGludHB0cl90
IHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQorICAgICAgICBKdW1wVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIEp1bXBMaW5rVHlwZSBsaW5rVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlua1R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRMaW5rVHlwZShKdW1w
TGlua1R5cGUgbGlua1R5cGUpIHsgQVNTRVJUKG1fbGlua1R5cGUgPT0gTGlua0ludmFsaWQpOyBt
X2xpbmtUeXBlID0gbGlua1R5cGU7IH0KKyAgICAgICAgQ29uZGl0aW9uIGNvbmRpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50cHRy
X3QgbV9mcm9tIDogMzE7CisgICAgICAgIGludHB0cl90IG1fdG8gOiAzMTsKKyAgICAgICAgSnVt
cFR5cGUgbV90eXBlIDogMzsKKyAgICAgICAgSnVtcExpbmtUeXBlIG1fbGlua1R5cGUgOiA0Owor
ICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb24gOiAxNjsKKyAgICB9OworICAgIAorICAgIGNs
YXNzIEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBBUk12N0Fzc2VtYmxlcjsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEFSTUluc3RydWN0aW9uRm9ybWF0dGVyOworICAgICAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAg
ICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0LCBKdW1wVHlwZSB0eXBlKQorICAgICAgICAgICAg
OiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fY29uZGl0aW9uKENvbmRpdGlvbklu
dmFsaWQpCisgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQobV90eXBlID09IEp1bXBGaXhlZCB8fCBtX3R5cGUgPT0gSnVtcE5vQ29uZGl0aW9u
IHx8IG1fdHlwZSA9PSBKdW1wTm9Db25kaXRpb25GaXhlZFNpemUpOworICAgICAgICB9CisKKyAg
ICAgICAgSm1wU3JjKGludCBvZmZzZXQsIEp1bXBUeXBlIHR5cGUsIENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV9jb25k
aXRpb24oY29uZGl0aW9uKQorICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBKdW1wRml4ZWQgfHwgbV90eXBlID09IEp1bXBD
b25kaXRpb24gfHwgbV90eXBlID09IEp1bXBDb25kaXRpb25GaXhlZFNpemUpOworICAgICAgICB9
CisKKyAgICAgICAgaW50IG1fb2Zmc2V0OworICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb24g
OiAxNjsKKyAgICAgICAgSnVtcFR5cGUgbV90eXBlIDogMTY7CisgICAgICAgIAorICAgIH07Cisg
ICAgCisgICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFSTXY3QXNzZW1i
bGVyOworICAgICAgICBmcmllbmQgY2xhc3MgQVJNSW5zdHJ1Y3Rpb25Gb3JtYXR0ZXI7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOworICAgIHB1YmxpYzoKKyAgICAgICAgSm1wRHN0
KCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7
IHJldHVybiBtX3VzZWQ7IH0KKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICht
X29mZnNldCAhPSAtMSk7IH0KKyAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCisgICAgICAgICAgICA6
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0gb2Zmc2V0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGludCBtX29mZnNldCA6IDMxOworICAgICAgICBpbnQgbV91c2VkIDogMTsKKyAgICB9
OworCitwcml2YXRlOgorCisgICAgLy8gQVJNdjcsIEFwcHgtQS42LjMKKyAgICBib29sIEJhZFJl
ZyhSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiAocmVnID09IEFSTVJlZ2lz
dGVyczo6c3ApIHx8IChyZWcgPT0gQVJNUmVnaXN0ZXJzOjpwYyk7CisgICAgfQorCisgICAgdWlu
dDMyX3Qgc2luZ2xlUmVnaXN0ZXJNYXNrKEZQU2luZ2xlUmVnaXN0ZXJJRCByZE51bSwgaW50IGhp
Z2hCaXRzU2hpZnQsIGludCBsb3dCaXRTaGlmdCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHJk
TWFzayA9IChyZE51bSA+PiAxKSA8PCBoaWdoQml0c1NoaWZ0OworICAgICAgICBpZiAocmROdW0g
JiAxKQorICAgICAgICAgICAgcmRNYXNrIHw9IDEgPDwgbG93Qml0U2hpZnQ7CisgICAgICAgIHJl
dHVybiByZE1hc2s7CisgICAgfQorCisgICAgdWludDMyX3QgZG91YmxlUmVnaXN0ZXJNYXNrKEZQ
RG91YmxlUmVnaXN0ZXJJRCByZE51bSwgaW50IGhpZ2hCaXRTaGlmdCwgaW50IGxvd0JpdHNTaGlm
dCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHJkTWFzayA9IChyZE51bSAmIDB4ZikgPDwgbG93
Qml0c1NoaWZ0OworICAgICAgICBpZiAocmROdW0gJiAxNikKKyAgICAgICAgICAgIHJkTWFzayB8
PSAxIDw8IGhpZ2hCaXRTaGlmdDsKKyAgICAgICAgcmV0dXJuIHJkTWFzazsKKyAgICB9CisKKyAg
ICB0eXBlZGVmIGVudW0geworICAgICAgICBPUF9BRERfcmVnX1QxICAgICAgID0gMHgxODAwLAor
ICAgICAgICBPUF9TVUJfcmVnX1QxICAgICAgID0gMHgxQTAwLAorICAgICAgICBPUF9BRERfaW1t
X1QxICAgICAgID0gMHgxQzAwLAorICAgICAgICBPUF9TVUJfaW1tX1QxICAgICAgID0gMHgxRTAw
LAorICAgICAgICBPUF9NT1ZfaW1tX1QxICAgICAgID0gMHgyMDAwLAorICAgICAgICBPUF9DTVBf
aW1tX1QxICAgICAgID0gMHgyODAwLAorICAgICAgICBPUF9BRERfaW1tX1QyICAgICAgID0gMHgz
MDAwLAorICAgICAgICBPUF9TVUJfaW1tX1QyICAgICAgID0gMHgzODAwLAorICAgICAgICBPUF9B
TkRfcmVnX1QxICAgICAgID0gMHg0MDAwLAorICAgICAgICBPUF9FT1JfcmVnX1QxICAgICAgID0g
MHg0MDQwLAorICAgICAgICBPUF9UU1RfcmVnX1QxICAgICAgID0gMHg0MjAwLAorICAgICAgICBP
UF9SU0JfaW1tX1QxICAgICAgID0gMHg0MjQwLAorICAgICAgICBPUF9DTVBfcmVnX1QxICAgICAg
ID0gMHg0MjgwLAorICAgICAgICBPUF9PUlJfcmVnX1QxICAgICAgID0gMHg0MzAwLAorICAgICAg
ICBPUF9NVk5fcmVnX1QxICAgICAgID0gMHg0M0MwLAorICAgICAgICBPUF9BRERfcmVnX1QyICAg
ICAgID0gMHg0NDAwLAorICAgICAgICBPUF9NT1ZfcmVnX1QxICAgICAgID0gMHg0NjAwLAorICAg
ICAgICBPUF9CTFggICAgICAgICAgICAgID0gMHg0NzAwLAorICAgICAgICBPUF9CWCAgICAgICAg
ICAgICAgID0gMHg0NzAwLAorICAgICAgICBPUF9TVFJfcmVnX1QxICAgICAgID0gMHg1MDAwLAor
ICAgICAgICBPUF9MRFJfcmVnX1QxICAgICAgID0gMHg1ODAwLAorICAgICAgICBPUF9MRFJIX3Jl
Z19UMSAgICAgID0gMHg1QTAwLAorICAgICAgICBPUF9MRFJCX3JlZ19UMSAgICAgID0gMHg1QzAw
LAorICAgICAgICBPUF9TVFJfaW1tX1QxICAgICAgID0gMHg2MDAwLAorICAgICAgICBPUF9MRFJf
aW1tX1QxICAgICAgID0gMHg2ODAwLAorICAgICAgICBPUF9MRFJCX2ltbV9UMSAgICAgID0gMHg3
ODAwLAorICAgICAgICBPUF9MRFJIX2ltbV9UMSAgICAgID0gMHg4ODAwLAorICAgICAgICBPUF9T
VFJfaW1tX1QyICAgICAgID0gMHg5MDAwLAorICAgICAgICBPUF9MRFJfaW1tX1QyICAgICAgID0g
MHg5ODAwLAorICAgICAgICBPUF9BRERfU1BfaW1tX1QxICAgID0gMHhBODAwLAorICAgICAgICBP
UF9BRERfU1BfaW1tX1QyICAgID0gMHhCMDAwLAorICAgICAgICBPUF9TVUJfU1BfaW1tX1QxICAg
ID0gMHhCMDgwLAorICAgICAgICBPUF9CS1BUICAgICAgICAgICAgID0gMHhCRTAwLAorICAgICAg
ICBPUF9JVCAgICAgICAgICAgICAgID0gMHhCRjAwLAorICAgICAgICBPUF9OT1BfVDEgICAgICAg
ICAgID0gMHhCRjAwLAorICAgIH0gT3Bjb2RlSUQ7CisKKyAgICB0eXBlZGVmIGVudW0geworICAg
ICAgICBPUF9CX1QxICAgICAgICAgPSAweEQwMDAsCisgICAgICAgIE9QX0JfVDIgICAgICAgICA9
IDB4RTAwMCwKKyAgICAgICAgT1BfQU5EX3JlZ19UMiAgID0gMHhFQTAwLAorICAgICAgICBPUF9U
U1RfcmVnX1QyICAgPSAweEVBMTAsCisgICAgICAgIE9QX09SUl9yZWdfVDIgICA9IDB4RUE0MCwK
KyAgICAgICAgT1BfT1JSX1NfcmVnX1QyID0gMHhFQTUwLAorICAgICAgICBPUF9BU1JfaW1tX1Qx
ICAgPSAweEVBNEYsCisgICAgICAgIE9QX0xTTF9pbW1fVDEgICA9IDB4RUE0RiwKKyAgICAgICAg
T1BfTFNSX2ltbV9UMSAgID0gMHhFQTRGLAorICAgICAgICBPUF9ST1JfaW1tX1QxICAgPSAweEVB
NEYsCisgICAgICAgIE9QX01WTl9yZWdfVDIgICA9IDB4RUE2RiwKKyAgICAgICAgT1BfRU9SX3Jl
Z19UMiAgID0gMHhFQTgwLAorICAgICAgICBPUF9BRERfcmVnX1QzICAgPSAweEVCMDAsCisgICAg
ICAgIE9QX0FERF9TX3JlZ19UMyA9IDB4RUIxMCwKKyAgICAgICAgT1BfU1VCX3JlZ19UMiAgID0g
MHhFQkEwLAorICAgICAgICBPUF9TVUJfU19yZWdfVDIgPSAweEVCQjAsCisgICAgICAgIE9QX0NN
UF9yZWdfVDIgICA9IDB4RUJCMCwKKyAgICAgICAgT1BfVlNUUiAgICAgICAgID0gMHhFRDAwLAor
ICAgICAgICBPUF9WTERSICAgICAgICAgPSAweEVEMTAsCisgICAgICAgIE9QX1ZNT1ZfU3RvQyAg
ICA9IDB4RUUwMCwKKyAgICAgICAgT1BfVk1PVl9DdG9TICAgID0gMHhFRTEwLAorICAgICAgICBP
UF9WTVVMX1QyICAgICAgPSAweEVFMjAsCisgICAgICAgIE9QX1ZBRERfVDIgICAgICA9IDB4RUUz
MCwKKyAgICAgICAgT1BfVlNVQl9UMiAgICAgID0gMHhFRTMwLAorICAgICAgICBPUF9WRElWICAg
ICAgICAgPSAweEVFODAsCisgICAgICAgIE9QX1ZDTVAgICAgICAgICA9IDB4RUVCMCwKKyAgICAg
ICAgT1BfVkNWVF9GUElWRlAgID0gMHhFRUIwLAorICAgICAgICBPUF9WTU9WX0lNTV9UMiAgPSAw
eEVFQjAsCisgICAgICAgIE9QX1ZNUlMgICAgICAgICA9IDB4RUVCMCwKKyAgICAgICAgT1BfQl9U
M2EgICAgICAgID0gMHhGMDAwLAorICAgICAgICBPUF9CX1Q0YSAgICAgICAgPSAweEYwMDAsCisg
ICAgICAgIE9QX0FORF9pbW1fVDEgICA9IDB4RjAwMCwKKyAgICAgICAgT1BfVFNUX2ltbSAgICAg
ID0gMHhGMDEwLAorICAgICAgICBPUF9PUlJfaW1tX1QxICAgPSAweEYwNDAsCisgICAgICAgIE9Q
X01PVl9pbW1fVDIgICA9IDB4RjA0MCwKKyAgICAgICAgT1BfTVZOX2ltbSAgICAgID0gMHhGMDYw
LAorICAgICAgICBPUF9FT1JfaW1tX1QxICAgPSAweEYwODAsCisgICAgICAgIE9QX0FERF9pbW1f
VDMgICA9IDB4RjEwMCwKKyAgICAgICAgT1BfQUREX1NfaW1tX1QzID0gMHhGMTEwLAorICAgICAg
ICBPUF9DTU5faW1tICAgICAgPSAweEYxMTAsCisgICAgICAgIE9QX1NVQl9pbW1fVDMgICA9IDB4
RjFBMCwKKyAgICAgICAgT1BfU1VCX1NfaW1tX1QzID0gMHhGMUIwLAorICAgICAgICBPUF9DTVBf
aW1tX1QyICAgPSAweEYxQjAsCisgICAgICAgIE9QX1JTQl9pbW1fVDIgICA9IDB4RjFDMCwKKyAg
ICAgICAgT1BfQUREX2ltbV9UNCAgID0gMHhGMjAwLAorICAgICAgICBPUF9NT1ZfaW1tX1QzICAg
PSAweEYyNDAsCisgICAgICAgIE9QX1NVQl9pbW1fVDQgICA9IDB4RjJBMCwKKyAgICAgICAgT1Bf
TU9WVCAgICAgICAgID0gMHhGMkMwLAorICAgICAgICBPUF9OT1BfVDJhICAgICAgPSAweEYzQUYs
CisgICAgICAgIE9QX0xEUkJfaW1tX1QzICA9IDB4RjgxMCwKKyAgICAgICAgT1BfTERSQl9yZWdf
VDIgID0gMHhGODEwLAorICAgICAgICBPUF9MRFJIX3JlZ19UMiAgPSAweEY4MzAsCisgICAgICAg
IE9QX0xEUkhfaW1tX1QzICA9IDB4RjgzMCwKKyAgICAgICAgT1BfU1RSX2ltbV9UNCAgID0gMHhG
ODQwLAorICAgICAgICBPUF9TVFJfcmVnX1QyICAgPSAweEY4NDAsCisgICAgICAgIE9QX0xEUl9p
bW1fVDQgICA9IDB4Rjg1MCwKKyAgICAgICAgT1BfTERSX3JlZ19UMiAgID0gMHhGODUwLAorICAg
ICAgICBPUF9MRFJCX2ltbV9UMiAgPSAweEY4OTAsCisgICAgICAgIE9QX0xEUkhfaW1tX1QyICA9
IDB4RjhCMCwKKyAgICAgICAgT1BfU1RSX2ltbV9UMyAgID0gMHhGOEMwLAorICAgICAgICBPUF9M
RFJfaW1tX1QzICAgPSAweEY4RDAsCisgICAgICAgIE9QX0xTTF9yZWdfVDIgICA9IDB4RkEwMCwK
KyAgICAgICAgT1BfTFNSX3JlZ19UMiAgID0gMHhGQTIwLAorICAgICAgICBPUF9BU1JfcmVnX1Qy
ICAgPSAweEZBNDAsCisgICAgICAgIE9QX1JPUl9yZWdfVDIgICA9IDB4RkE2MCwKKyAgICAgICAg
T1BfQ0xaICAgICAgICAgID0gMHhGQUIwLAorICAgICAgICBPUF9TTVVMTF9UMSAgICAgPSAweEZC
ODAsCisgICAgfSBPcGNvZGVJRDE7CisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBPUF9W
QUREX1QyYiAgICAgPSAweDBBMDAsCisgICAgICAgIE9QX1ZESVZiICAgICAgICA9IDB4MEEwMCwK
KyAgICAgICAgT1BfVkxEUmIgICAgICAgID0gMHgwQTAwLAorICAgICAgICBPUF9WTU9WX0lNTV9U
MmIgPSAweDBBMDAsCisgICAgICAgIE9QX1ZNVUxfVDJiICAgICA9IDB4MEEwMCwKKyAgICAgICAg
T1BfVlNUUmIgICAgICAgID0gMHgwQTAwLAorICAgICAgICBPUF9WTU9WX0N0b1NiICAgPSAweDBB
MTAsCisgICAgICAgIE9QX1ZNT1ZfU3RvQ2IgICA9IDB4MEExMCwKKyAgICAgICAgT1BfVk1SU2Ig
ICAgICAgID0gMHgwQTEwLAorICAgICAgICBPUF9WQ01QYiAgICAgICAgPSAweDBBNDAsCisgICAg
ICAgIE9QX1ZDVlRfRlBJVkZQYiA9IDB4MEE0MCwKKyAgICAgICAgT1BfVlNVQl9UMmIgICAgID0g
MHgwQTQwLAorICAgICAgICBPUF9OT1BfVDJiICAgICAgPSAweDgwMDAsCisgICAgICAgIE9QX0Jf
VDNiICAgICAgICA9IDB4ODAwMCwKKyAgICAgICAgT1BfQl9UNGIgICAgICAgID0gMHg5MDAwLAor
ICAgIH0gT3Bjb2RlSUQyOworCisgICAgc3RydWN0IEZvdXJGb3VycyB7CisgICAgICAgIEZvdXJG
b3Vycyh1bnNpZ25lZCBmMywgdW5zaWduZWQgZjIsIHVuc2lnbmVkIGYxLCB1bnNpZ25lZCBmMCkK
KyAgICAgICAgeworICAgICAgICAgICAgbV91LmYwID0gZjA7CisgICAgICAgICAgICBtX3UuZjEg
PSBmMTsKKyAgICAgICAgICAgIG1fdS5mMiA9IGYyOworICAgICAgICAgICAgbV91LmYzID0gZjM7
CisgICAgICAgIH0KKworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1
ZTsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZjAgOiA0
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGYxIDogNDsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmMiA6IDQ7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZjMgOiA0OworICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSBtX3U7CisgICAgfTsKKworICAgIGNsYXNzIEFSTUluc3RydWN0aW9u
Rm9ybWF0dGVyOworCisgICAgLy8gZmFsc2UgbWVhbnMgZWxzZSEKKyAgICBib29sIGlmVGhlbkVs
c2VDb25kaXRpb25CaXQoQ29uZGl0aW9uIGNvbmRpdGlvbiwgYm9vbCBpc0lmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzSWYgPyAoY29uZGl0aW9uICYgMSkgOiAhKGNvbmRpdGlvbiAmIDEpOwor
ICAgIH0KKyAgICB1aW50OF90IGlmVGhlbkVsc2UoQ29uZGl0aW9uIGNvbmRpdGlvbiwgYm9vbCBp
bnN0MmlmLCBib29sIGluc3QzaWYsIGJvb2wgaW5zdDRpZikKKyAgICB7CisgICAgICAgIGludCBt
YXNrID0gKGlmVGhlbkVsc2VDb25kaXRpb25CaXQoY29uZGl0aW9uLCBpbnN0MmlmKSA8PCAzKQor
ICAgICAgICAgICAgfCAoaWZUaGVuRWxzZUNvbmRpdGlvbkJpdChjb25kaXRpb24sIGluc3QzaWYp
IDw8IDIpCisgICAgICAgICAgICB8IChpZlRoZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwg
aW5zdDRpZikgPDwgMSkKKyAgICAgICAgICAgIHwgMTsKKyAgICAgICAgQVNTRVJUKChjb25kaXRp
b24gIT0gQ29uZGl0aW9uQUwpIHx8ICEobWFzayAmIChtYXNrIC0gMSkpKTsKKyAgICAgICAgcmV0
dXJuIChjb25kaXRpb24gPDwgNCkgfCBtYXNrOworICAgIH0KKyAgICB1aW50OF90IGlmVGhlbkVs
c2UoQ29uZGl0aW9uIGNvbmRpdGlvbiwgYm9vbCBpbnN0MmlmLCBib29sIGluc3QzaWYpCisgICAg
eworICAgICAgICBpbnQgbWFzayA9IChpZlRoZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwg
aW5zdDJpZikgPDwgMykKKyAgICAgICAgICAgIHwgKGlmVGhlbkVsc2VDb25kaXRpb25CaXQoY29u
ZGl0aW9uLCBpbnN0M2lmKSA8PCAyKQorICAgICAgICAgICAgfCAyOworICAgICAgICBBU1NFUlQo
KGNvbmRpdGlvbiAhPSBDb25kaXRpb25BTCkgfHwgIShtYXNrICYgKG1hc2sgLSAxKSkpOworICAg
ICAgICByZXR1cm4gKGNvbmRpdGlvbiA8PCA0KSB8IG1hc2s7CisgICAgfQorICAgIHVpbnQ4X3Qg
aWZUaGVuRWxzZShDb25kaXRpb24gY29uZGl0aW9uLCBib29sIGluc3QyaWYpCisgICAgeworICAg
ICAgICBpbnQgbWFzayA9IChpZlRoZW5FbHNlQ29uZGl0aW9uQml0KGNvbmRpdGlvbiwgaW5zdDJp
ZikgPDwgMykKKyAgICAgICAgICAgIHwgNDsKKyAgICAgICAgQVNTRVJUKChjb25kaXRpb24gIT0g
Q29uZGl0aW9uQUwpIHx8ICEobWFzayAmIChtYXNrIC0gMSkpKTsKKyAgICAgICAgcmV0dXJuIChj
b25kaXRpb24gPDwgNCkgfCBtYXNrOworICAgIH0KKworICAgIHVpbnQ4X3QgaWZUaGVuRWxzZShD
b25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgaW50IG1hc2sgPSA4OworICAgICAg
ICByZXR1cm4gKGNvbmRpdGlvbiA8PCA0KSB8IG1hc2s7CisgICAgfQorCitwdWJsaWM6CisgICAg
CisgICAgdm9pZCBhZGQoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBybiwgQVJNVGh1bWJJbW1l
ZGlhdGUgaW1tKQorICAgIHsKKyAgICAgICAgLy8gUmQgY2FuIG9ubHkgYmUgU1AgaWYgUm4gaXMg
YWxzbyBTUC4KKyAgICAgICAgQVNTRVJUKChyZCAhPSBBUk1SZWdpc3RlcnM6OnNwKSB8fCAocm4g
PT0gQVJNUmVnaXN0ZXJzOjpzcCkpOworICAgICAgICBBU1NFUlQocmQgIT0gQVJNUmVnaXN0ZXJz
OjpwYyk7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAg
QVNTRVJUKGltbS5pc1ZhbGlkKCkpOworCisgICAgICAgIGlmIChybiA9PSBBUk1SZWdpc3RlcnM6
OnNwKSB7CisgICAgICAgICAgICBpZiAoIShyZCAmIDgpICYmIGltbS5pc1VJbnQxMCgpKSB7Cisg
ICAgICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wNVJlZzNJbW04KE9QX0FERF9TUF9p
bW1fVDEsIHJkLCBpbW0uZ2V0VUludDEwKCkgPj4gMik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfSBlbHNlIGlmICgocmQgPT0gQVJNUmVnaXN0ZXJzOjpzcCkgJiYgaW1t
LmlzVUludDkoKSkgeworICAgICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDlJbW03
KE9QX0FERF9TUF9pbW1fVDIsIGltbS5nZXRVSW50OSgpID4+IDIpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghKChyZCB8IHJuKSAm
IDgpKSB7CisgICAgICAgICAgICBpZiAoaW1tLmlzVUludDMoKSkgeworICAgICAgICAgICAgICAg
IG1fZm9ybWF0dGVyLm9uZVdvcmRPcDdSZWczUmVnM1JlZzMoT1BfQUREX2ltbV9UMSwgKFJlZ2lz
dGVySUQpaW1tLmdldFVJbnQzKCksIHJuLCByZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICgocmQgPT0gcm4pICYmIGltbS5pc1VJbnQ4KCkpIHsKKyAg
ICAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A1UmVnM0ltbTgoT1BfQUREX2ltbV9U
MiwgcmQsIGltbS5nZXRVSW50OCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW1tLmlzRW5jb2RlZEltbSgpKQorICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tKE9QX0FE
RF9pbW1fVDMsIHJuLCByZCwgaW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoaW1tLmlzVUludDEyKCkpOworICAgICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wNWk2
SW1tNFJlZzRFbmNvZGVkSW1tKE9QX0FERF9pbW1fVDQsIHJuLCByZCwgaW1tKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgYWRkKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIFJl
Z2lzdGVySUQgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgocmQgIT0gQVJNUmVnaXN0ZXJzOjpzcCkgfHwgKHJuID09IEFSTVJlZ2lzdGVyczo6c3Ap
KTsKKyAgICAgICAgQVNTRVJUKHJkICE9IEFSTVJlZ2lzdGVyczo6cGMpOworICAgICAgICBBU1NF
UlQocm4gIT0gQVJNUmVnaXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJtKSk7
CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9BRERfcmVn
X1QzLCBybiwgRm91ckZvdXJzKHNoaWZ0LmhpNCgpLCByZCwgc2hpZnQubG80KCksIHJtKSk7Cisg
ICAgfQorCisgICAgLy8gTk9URTogSW4gYW4gSVQgYmxvY2ssIGFkZCBkb2Vzbid0IG1vZGlmeSB0
aGUgZmxhZ3MgcmVnaXN0ZXIuCisgICAgdm9pZCBhZGQoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBybiwgUmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAgIGlmIChyZCA9PSBybikKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDhSZWdSZWcxNDMoT1BfQUREX3JlZ19UMiwgcm0s
IHJkKTsKKyAgICAgICAgZWxzZSBpZiAocmQgPT0gcm0pCisgICAgICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVXb3JkT3A4UmVnUmVnMTQzKE9QX0FERF9yZWdfVDIsIHJuLCByZCk7CisgICAgICAgIGVs
c2UgaWYgKCEoKHJkIHwgcm4gfCBybSkgJiA4KSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZVdvcmRPcDdSZWczUmVnM1JlZzMoT1BfQUREX3JlZ19UMSwgcm0sIHJuLCByZCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFkZChyZCwgcm4sIHJtLCBTaGlmdFR5cGVBbmRBbW91bnQoKSk7
CisgICAgfQorCisgICAgLy8gTm90IGFsbG93ZWQgaW4gYW4gSVQgKGlmIHRoZW4pIGJsb2NrLgor
ICAgIHZvaWQgYWRkX1MoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBybiwgQVJNVGh1bWJJbW1l
ZGlhdGUgaW1tKQorICAgIHsKKyAgICAgICAgLy8gUmQgY2FuIG9ubHkgYmUgU1AgaWYgUm4gaXMg
YWxzbyBTUC4KKyAgICAgICAgQVNTRVJUKChyZCAhPSBBUk1SZWdpc3RlcnM6OnNwKSB8fCAocm4g
PT0gQVJNUmVnaXN0ZXJzOjpzcCkpOworICAgICAgICBBU1NFUlQocmQgIT0gQVJNUmVnaXN0ZXJz
OjpwYyk7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAg
QVNTRVJUKGltbS5pc0VuY29kZWRJbW0oKSk7CisKKyAgICAgICAgaWYgKCEoKHJkIHwgcm4pICYg
OCkpIHsKKyAgICAgICAgICAgIGlmIChpbW0uaXNVSW50MygpKSB7CisgICAgICAgICAgICAgICAg
bV9mb3JtYXR0ZXIub25lV29yZE9wN1JlZzNSZWczUmVnMyhPUF9BRERfaW1tX1QxLCAoUmVnaXN0
ZXJJRClpbW0uZ2V0VUludDMoKSwgcm4sIHJkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKChyZCA9PSBybikgJiYgaW1tLmlzVUludDgoKSkgeworICAg
ICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDVSZWczSW1tOChPUF9BRERfaW1tX1Qy
LCByZCwgaW1tLmdldFVJbnQ4KCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDVpNkltbTRS
ZWc0RW5jb2RlZEltbShPUF9BRERfU19pbW1fVDMsIHJuLCByZCwgaW1tKTsKKyAgICB9CisKKyAg
ICAvLyBOb3QgYWxsb3dlZCBpbiBhbiBJVCAoaWYgdGhlbikgYmxvY2s/CisgICAgdm9pZCBhZGRf
UyhSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJtLCBTaGlmdFR5cGVB
bmRBbW91bnQgc2hpZnQpCisgICAgeworICAgICAgICBBU1NFUlQoKHJkICE9IEFSTVJlZ2lzdGVy
czo6c3ApIHx8IChybiA9PSBBUk1SZWdpc3RlcnM6OnNwKSk7CisgICAgICAgIEFTU0VSVChyZCAh
PSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6
cGMpOworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOworICAgICAgICBtX2Zvcm1hdHRlci50
d29Xb3JkT3AxMlJlZzRGb3VyRm91cnMoT1BfQUREX1NfcmVnX1QzLCBybiwgRm91ckZvdXJzKHNo
aWZ0LmhpNCgpLCByZCwgc2hpZnQubG80KCksIHJtKSk7CisgICAgfQorCisgICAgLy8gTm90IGFs
bG93ZWQgaW4gYW4gSVQgKGlmIHRoZW4pIGJsb2NrLgorICAgIHZvaWQgYWRkX1MoUmVnaXN0ZXJJ
RCByZCwgUmVnaXN0ZXJJRCBybiwgUmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAgIGlmICgh
KChyZCB8IHJuIHwgcm0pICYgOCkpCisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A3
UmVnM1JlZzNSZWczKE9QX0FERF9yZWdfVDEsIHJtLCBybiwgcmQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhZGRfUyhyZCwgcm4sIHJtLCBTaGlmdFR5cGVBbmRBbW91bnQoKSk7CisgICAg
fQorCisgICAgdm9pZCBBUk1fYW5kKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIEFSTVRo
dW1iSW1tZWRpYXRlIGltbSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7Cisg
ICAgICAgIEFTU0VSVCghQmFkUmVnKHJuKSk7CisgICAgICAgIEFTU0VSVChpbW0uaXNFbmNvZGVk
SW1tKCkpOworICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJ
bW0oT1BfQU5EX2ltbV9UMSwgcm4sIHJkLCBpbW0pOworICAgIH0KKworICAgIHZvaWQgQVJNX2Fu
ZChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJtLCBTaGlmdFR5cGVB
bmRBbW91bnQgc2hpZnQpCisgICAgeworICAgICAgICBBU1NFUlQoIUJhZFJlZyhyZCkpOworICAg
ICAgICBBU1NFUlQoIUJhZFJlZyhybikpOworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOwor
ICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3AxMlJlZzRGb3VyRm91cnMoT1BfQU5EX3JlZ19U
Miwgcm4sIEZvdXJGb3VycyhzaGlmdC5oaTQoKSwgcmQsIHNoaWZ0LmxvNCgpLCBybSkpOworICAg
IH0KKworICAgIHZvaWQgQVJNX2FuZChSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBSZWdp
c3RlcklEIHJtKQorICAgIHsKKyAgICAgICAgaWYgKChyZCA9PSBybikgJiYgISgocmQgfCBybSkg
JiA4KSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDEwUmVnM1JlZzMoT1BfQU5E
X3JlZ19UMSwgcm0sIHJkKTsKKyAgICAgICAgZWxzZSBpZiAoKHJkID09IHJtKSAmJiAhKChyZCB8
IHJuKSAmIDgpKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wMTBSZWczUmVnMyhP
UF9BTkRfcmVnX1QxLCBybiwgcmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBUk1fYW5k
KHJkLCBybiwgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFz
cihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJtLCBpbnQzMl90IHNoaWZ0QW1vdW50KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFCYWRSZWcocmQpKTsKKyAgICAgICAgQVNTRVJUKCFCYWRSZWco
cm0pKTsKKyAgICAgICAgU2hpZnRUeXBlQW5kQW1vdW50IHNoaWZ0KFNSVHlwZV9BU1IsIHNoaWZ0
QW1vdW50KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZGb3VyRm91cnMoT1BfQVNS
X2ltbV9UMSwgRm91ckZvdXJzKHNoaWZ0LmhpNCgpLCByZCwgc2hpZnQubG80KCksIHJtKSk7Cisg
ICAgfQorCisgICAgdm9pZCBhc3IoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBybiwgUmVnaXN0
ZXJJRCBybSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFT
U0VSVCghQmFkUmVnKHJuKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJtKSk7CisgICAgICAg
IG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9BU1JfcmVnX1QyLCBybiwg
Rm91ckZvdXJzKDB4ZiwgcmQsIDAsIHJtKSk7CisgICAgfQorICAgIAorICAgIC8vIE9ubHkgYWxs
b3dlZCBpbiBJVCAoaWYgdGhlbikgYmxvY2sgaWYgbGFzdCBpbnN0cnVjdGlvbi4KKyAgICBKbXBT
cmMgYihKdW1wVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9w
MTZPcDE2KE9QX0JfVDRhLCBPUF9CX1Q0Yik7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9mb3Jt
YXR0ZXIuc2l6ZSgpLCB0eXBlKTsKKyAgICB9CisgICAgCisgICAgLy8gT25seSBhbGxvd2VkIGlu
IElUIChpZiB0aGVuKSBibG9jayBpZiBsYXN0IGluc3RydWN0aW9uLgorICAgIEptcFNyYyBibHgo
UmVnaXN0ZXJJRCBybSwgSnVtcFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChybSAh
PSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOFJlZ1Jl
ZzE0MyhPUF9CTFgsIHJtLCAoUmVnaXN0ZXJJRCk4KTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyht
X2Zvcm1hdHRlci5zaXplKCksIHR5cGUpOworICAgIH0KKworICAgIC8vIE9ubHkgYWxsb3dlZCBp
biBJVCAoaWYgdGhlbikgYmxvY2sgaWYgbGFzdCBpbnN0cnVjdGlvbi4KKyAgICBKbXBTcmMgYngo
UmVnaXN0ZXJJRCBybSwgSnVtcFR5cGUgdHlwZSwgQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDhSZWdSZWcxNDMoT1BfQlgsIHJtLCAoUmVn
aXN0ZXJJRCkwKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2Zvcm1hdHRlci5zaXplKCksIHR5
cGUsIGNvbmRpdGlvbik7CisgICAgfQorCisgICAgSm1wU3JjIGJ4KFJlZ2lzdGVySUQgcm0sIEp1
bXBUeXBlIHR5cGUpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A4UmVnUmVn
MTQzKE9QX0JYLCBybSwgKFJlZ2lzdGVySUQpMCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9m
b3JtYXR0ZXIuc2l6ZSgpLCB0eXBlKTsKKyAgICB9CisKKyAgICB2b2lkIGJrcHQodWludDhfdCBp
bW09MCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDhJbW04KE9QX0JLUFQs
IGltbSk7CisgICAgfQorCisgICAgdm9pZCBjbHooUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBy
bSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCgh
QmFkUmVnKHJtKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3Vy
cyhPUF9DTFosIHJtLCBGb3VyRm91cnMoMHhmLCByZCwgOCwgcm0pKTsKKyAgICB9CisKKyAgICB2
b2lkIGNtbihSZWdpc3RlcklEIHJuLCBBUk1UaHVtYkltbWVkaWF0ZSBpbW0pCisgICAgeworICAg
ICAgICBBU1NFUlQocm4gIT0gQVJNUmVnaXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVChpbW0u
aXNFbmNvZGVkSW1tKCkpOworCisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDVpNkltbTRS
ZWc0RW5jb2RlZEltbShPUF9DTU5faW1tLCBybiwgKFJlZ2lzdGVySUQpMHhmLCBpbW0pOworICAg
IH0KKworICAgIHZvaWQgY21wKFJlZ2lzdGVySUQgcm4sIEFSTVRodW1iSW1tZWRpYXRlIGltbSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAg
QVNTRVJUKGltbS5pc0VuY29kZWRJbW0oKSk7CisKKyAgICAgICAgaWYgKCEocm4gJiA4KSAmJiBp
bW0uaXNVSW50OCgpKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wNVJlZzNJbW04
KE9QX0NNUF9pbW1fVDEsIHJuLCBpbW0uZ2V0VUludDgoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2RlZEltbShPUF9DTVBf
aW1tX1QyLCBybiwgKFJlZ2lzdGVySUQpMHhmLCBpbW0pOworICAgIH0KKworICAgIHZvaWQgY21w
KFJlZ2lzdGVySUQgcm4sIFJlZ2lzdGVySUQgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAg
QVNTRVJUKCFCYWRSZWcocm0pKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTJSZWc0
Rm91ckZvdXJzKE9QX0NNUF9yZWdfVDIsIHJuLCBGb3VyRm91cnMoc2hpZnQuaGk0KCksIDB4Ziwg
c2hpZnQubG80KCksIHJtKSk7CisgICAgfQorCisgICAgdm9pZCBjbXAoUmVnaXN0ZXJJRCBybiwg
UmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAgIGlmICgocm4gfCBybSkgJiA4KQorICAgICAg
ICAgICAgY21wKHJuLCBybSwgU2hpZnRUeXBlQW5kQW1vdW50KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3AxMFJlZzNSZWczKE9QX0NNUF9yZWdfVDEs
IHJtLCBybik7CisgICAgfQorCisgICAgLy8geG9yIGlzIG5vdCBzcGVsbGVkIHdpdGggYW4gJ2Un
LiA6LSgKKyAgICB2b2lkIGVvcihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBBUk1UaHVt
YkltbWVkaWF0ZSBpbW0pCisgICAgeworICAgICAgICBBU1NFUlQoIUJhZFJlZyhyZCkpOworICAg
ICAgICBBU1NFUlQoIUJhZFJlZyhybikpOworICAgICAgICBBU1NFUlQoaW1tLmlzRW5jb2RlZElt
bSgpKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1t
KE9QX0VPUl9pbW1fVDEsIHJuLCByZCwgaW1tKTsKKyAgICB9CisKKyAgICAvLyB4b3IgaXMgbm90
IHNwZWxsZWQgd2l0aCBhbiAnZScuIDotKAorICAgIHZvaWQgZW9yKFJlZ2lzdGVySUQgcmQsIFJl
Z2lzdGVySUQgcm4sIFJlZ2lzdGVySUQgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVn
KHJuKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJtKSk7CisgICAgICAgIG1fZm9ybWF0dGVy
LnR3b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9FT1JfcmVnX1QyLCBybiwgRm91ckZvdXJzKHNo
aWZ0LmhpNCgpLCByZCwgc2hpZnQubG80KCksIHJtKSk7CisgICAgfQorCisgICAgLy8geG9yIGlz
IG5vdCBzcGVsbGVkIHdpdGggYW4gJ2UnLiA6LSgKKyAgICB2b2lkIGVvcihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJtKQorICAgIHsKKyAgICAgICAgaWYgKChyZCA9
PSBybikgJiYgISgocmQgfCBybSkgJiA4KSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdv
cmRPcDEwUmVnM1JlZzMoT1BfRU9SX3JlZ19UMSwgcm0sIHJkKTsKKyAgICAgICAgZWxzZSBpZiAo
KHJkID09IHJtKSAmJiAhKChyZCB8IHJuKSAmIDgpKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIu
b25lV29yZE9wMTBSZWczUmVnMyhPUF9FT1JfcmVnX1QxLCBybiwgcmQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlb3IocmQsIHJuLCBybSwgU2hpZnRUeXBlQW5kQW1vdW50KCkpOworICAg
IH0KKworICAgIHZvaWQgaXQoQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci5vbmVXb3JkT3A4SW1tOChPUF9JVCwgaWZUaGVuRWxzZShjb25kKSk7CisgICAgfQorCisg
ICAgdm9pZCBpdChDb25kaXRpb24gY29uZCwgYm9vbCBpbnN0MmlmKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lV29yZE9wOEltbTgoT1BfSVQsIGlmVGhlbkVsc2UoY29uZCwgaW5zdDJp
ZikpOworICAgIH0KKworICAgIHZvaWQgaXQoQ29uZGl0aW9uIGNvbmQsIGJvb2wgaW5zdDJpZiwg
Ym9vbCBpbnN0M2lmKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOEltbTgo
T1BfSVQsIGlmVGhlbkVsc2UoY29uZCwgaW5zdDJpZiwgaW5zdDNpZikpOworICAgIH0KKworICAg
IHZvaWQgaXQoQ29uZGl0aW9uIGNvbmQsIGJvb2wgaW5zdDJpZiwgYm9vbCBpbnN0M2lmLCBib29s
IGluc3Q0aWYpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A4SW1tOChPUF9J
VCwgaWZUaGVuRWxzZShjb25kLCBpbnN0MmlmLCBpbnN0M2lmLCBpbnN0NGlmKSk7CisgICAgfQor
CisgICAgLy8gcnQgPT0gQVJNUmVnaXN0ZXJzOjpwYyBvbmx5IGFsbG93ZWQgaWYgbGFzdCBpbnN0
cnVjdGlvbiBpbiBJVCAoaWYgdGhlbikgYmxvY2suCisgICAgdm9pZCBsZHIoUmVnaXN0ZXJJRCBy
dCwgUmVnaXN0ZXJJRCBybiwgQVJNVGh1bWJJbW1lZGlhdGUgaW1tKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6cGMpOyAvLyBMRFIgKGxpdGVyYWwpCisgICAgICAg
IEFTU0VSVChpbW0uaXNVSW50MTIoKSk7CisKKyAgICAgICAgaWYgKCEoKHJ0IHwgcm4pICYgOCkg
JiYgaW1tLmlzVUludDcoKSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDVJbW01
UmVnM1JlZzMoT1BfTERSX2ltbV9UMSwgaW1tLmdldFVJbnQ3KCkgPj4gMiwgcm4sIHJ0KTsKKyAg
ICAgICAgZWxzZSBpZiAoKHJuID09IEFSTVJlZ2lzdGVyczo6c3ApICYmICEocnQgJiA4KSAmJiBp
bW0uaXNVSW50MTAoKSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDVSZWczSW1t
OChPUF9MRFJfaW1tX1QyLCBydCwgaW1tLmdldFVJbnQxMCgpID4+IDIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3AxMlJlZzRSZWc0SW1tMTIoT1BfTERS
X2ltbV9UMywgcm4sIHJ0LCBpbW0uZ2V0VUludDEyKCkpOworICAgIH0KKworICAgIC8vIElmIGlu
ZGV4IGlzIHNldCwgdGhpcyBpcyBhIHJlZ3VsYXIgb2Zmc2V0IG9yIGEgcHJlLWluZGV4ZWQgbG9h
ZDsKKyAgICAvLyBpZiBpbmRleCBpcyBub3Qgc2V0IHRoZW4gaXMgaXMgYSBwb3N0LWluZGV4IGxv
YWQuCisgICAgLy8KKyAgICAvLyBJZiB3YmFjayBpcyBzZXQgcm4gaXMgdXBkYXRlZCAtIHRoaXMg
aXMgYSBwcmUgb3IgcG9zdCBpbmRleCBsb2FkLAorICAgIC8vIGlmIHdiYWNrIGlzIG5vdCBzZXQg
dGhpcyBpcyBhIHJlZ3VsYXIgb2Zmc2V0IG1lbW9yeSBhY2Nlc3MuCisgICAgLy8KKyAgICAvLyAo
LTI1NSA8PSBvZmZzZXQgPD0gMjU1KQorICAgIC8vIF9yZWcgPSBSRUdbcm5dCisgICAgLy8gX3Rt
cCA9IF9yZWcgKyBvZmZzZXQKKyAgICAvLyBNRU1baW5kZXggPyBfdG1wIDogX3JlZ10gPSBSRUdb
cnRdCisgICAgLy8gaWYgKHdiYWNrKSBSRUdbcm5dID0gX3RtcAorICAgIHZvaWQgbGRyKFJlZ2lz
dGVySUQgcnQsIFJlZ2lzdGVySUQgcm4sIGludCBvZmZzZXQsIGJvb2wgaW5kZXgsIGJvb2wgd2Jh
Y2spCisgICAgeworICAgICAgICBBU1NFUlQocnQgIT0gQVJNUmVnaXN0ZXJzOjpwYyk7CisgICAg
ICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKGluZGV4
IHx8IHdiYWNrKTsKKyAgICAgICAgQVNTRVJUKCF3YmFjayB8IChydCAhPSBybikpOworICAgIAor
ICAgICAgICBib29sIGFkZCA9IHRydWU7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAg
ICAgICAgICBhZGQgPSBmYWxzZTsKKyAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKChvZmZzZXQgJiB+MHhmZikgPT0gMCk7CisgICAgICAgIAor
ICAgICAgICBvZmZzZXQgfD0gKHdiYWNrIDw8IDgpOworICAgICAgICBvZmZzZXQgfD0gKGFkZCAg
IDw8IDkpOworICAgICAgICBvZmZzZXQgfD0gKGluZGV4IDw8IDEwKTsKKyAgICAgICAgb2Zmc2V0
IHw9ICgxIDw8IDExKTsKKyAgICAgICAgCisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEy
UmVnNFJlZzRJbW0xMihPUF9MRFJfaW1tX1Q0LCBybiwgcnQsIG9mZnNldCk7CisgICAgfQorCisg
ICAgLy8gcnQgPT0gQVJNUmVnaXN0ZXJzOjpwYyBvbmx5IGFsbG93ZWQgaWYgbGFzdCBpbnN0cnVj
dGlvbiBpbiBJVCAoaWYgdGhlbikgYmxvY2suCisgICAgdm9pZCBsZHIoUmVnaXN0ZXJJRCBydCwg
UmVnaXN0ZXJJRCBybiwgUmVnaXN0ZXJJRCBybSwgdW5zaWduZWQgc2hpZnQ9MCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsgLy8gTERSIChsaXRlcmFsKQor
ICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOworICAgICAgICBBU1NFUlQoc2hpZnQgPD0gMyk7
CisKKyAgICAgICAgaWYgKCFzaGlmdCAmJiAhKChydCB8IHJuIHwgcm0pICYgOCkpCisgICAgICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A3UmVnM1JlZzNSZWczKE9QX0xEUl9yZWdfVDEsIHJt
LCBybiwgcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3Jk
T3AxMlJlZzRGb3VyRm91cnMoT1BfTERSX3JlZ19UMiwgcm4sIEZvdXJGb3VycyhydCwgMCwgc2hp
ZnQsIHJtKSk7CisgICAgfQorCisgICAgLy8gcnQgPT0gQVJNUmVnaXN0ZXJzOjpwYyBvbmx5IGFs
bG93ZWQgaWYgbGFzdCBpbnN0cnVjdGlvbiBpbiBJVCAoaWYgdGhlbikgYmxvY2suCisgICAgdm9p
ZCBsZHJoKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcm4sIEFSTVRodW1iSW1tZWRpYXRlIGlt
bSkKKyAgICB7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsgLy8gTERS
IChsaXRlcmFsKQorICAgICAgICBBU1NFUlQoaW1tLmlzVUludDEyKCkpOworCisgICAgICAgIGlm
ICghKChydCB8IHJuKSAmIDgpICYmIGltbS5pc1VJbnQ2KCkpCisgICAgICAgICAgICBtX2Zvcm1h
dHRlci5vbmVXb3JkT3A1SW1tNVJlZzNSZWczKE9QX0xEUkhfaW1tX1QxLCBpbW0uZ2V0VUludDYo
KSA+PiAyLCBybiwgcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Zvcm1hdHRlci50
d29Xb3JkT3AxMlJlZzRSZWc0SW1tMTIoT1BfTERSSF9pbW1fVDIsIHJuLCBydCwgaW1tLmdldFVJ
bnQxMigpKTsKKyAgICB9CisKKyAgICAvLyBJZiBpbmRleCBpcyBzZXQsIHRoaXMgaXMgYSByZWd1
bGFyIG9mZnNldCBvciBhIHByZS1pbmRleGVkIGxvYWQ7CisgICAgLy8gaWYgaW5kZXggaXMgbm90
IHNldCB0aGVuIGlzIGlzIGEgcG9zdC1pbmRleCBsb2FkLgorICAgIC8vCisgICAgLy8gSWYgd2Jh
Y2sgaXMgc2V0IHJuIGlzIHVwZGF0ZWQgLSB0aGlzIGlzIGEgcHJlIG9yIHBvc3QgaW5kZXggbG9h
ZCwKKyAgICAvLyBpZiB3YmFjayBpcyBub3Qgc2V0IHRoaXMgaXMgYSByZWd1bGFyIG9mZnNldCBt
ZW1vcnkgYWNjZXNzLgorICAgIC8vCisgICAgLy8gKC0yNTUgPD0gb2Zmc2V0IDw9IDI1NSkKKyAg
ICAvLyBfcmVnID0gUkVHW3JuXQorICAgIC8vIF90bXAgPSBfcmVnICsgb2Zmc2V0CisgICAgLy8g
TUVNW2luZGV4ID8gX3RtcCA6IF9yZWddID0gUkVHW3J0XQorICAgIC8vIGlmICh3YmFjaykgUkVH
W3JuXSA9IF90bXAKKyAgICB2b2lkIGxkcmgoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBybiwg
aW50IG9mZnNldCwgYm9vbCBpbmRleCwgYm9vbCB3YmFjaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChydCAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lz
dGVyczo6cGMpOworICAgICAgICBBU1NFUlQoaW5kZXggfHwgd2JhY2spOworICAgICAgICBBU1NF
UlQoIXdiYWNrIHwgKHJ0ICE9IHJuKSk7CisgICAgCisgICAgICAgIGJvb2wgYWRkID0gdHJ1ZTsK
KyAgICAgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIGFkZCA9IGZhbHNlOworICAg
ICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKG9m
ZnNldCAmIH4weGZmKSA9PSAwKTsKKyAgICAgICAgCisgICAgICAgIG9mZnNldCB8PSAod2JhY2sg
PDwgOCk7CisgICAgICAgIG9mZnNldCB8PSAoYWRkICAgPDwgOSk7CisgICAgICAgIG9mZnNldCB8
PSAoaW5kZXggPDwgMTApOworICAgICAgICBvZmZzZXQgfD0gKDEgPDwgMTEpOworICAgICAgICAK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTJSZWc0UmVnNEltbTEyKE9QX0xEUkhfaW1t
X1QzLCBybiwgcnQsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBsZHJoKFJlZ2lzdGVySUQg
cnQsIFJlZ2lzdGVySUQgcm4sIFJlZ2lzdGVySUQgcm0sIHVuc2lnbmVkIHNoaWZ0PTApCisgICAg
eworICAgICAgICBBU1NFUlQoIUJhZFJlZyhydCkpOyAgIC8vIE1lbW9yeSBoaW50CisgICAgICAg
IEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsgLy8gTERSSCAobGl0ZXJhbCkKKyAgICAg
ICAgQVNTRVJUKCFCYWRSZWcocm0pKTsKKyAgICAgICAgQVNTRVJUKHNoaWZ0IDw9IDMpOworCisg
ICAgICAgIGlmICghc2hpZnQgJiYgISgocnQgfCBybiB8IHJtKSAmIDgpKQorICAgICAgICAgICAg
bV9mb3JtYXR0ZXIub25lV29yZE9wN1JlZzNSZWczUmVnMyhPUF9MRFJIX3JlZ19UMSwgcm0sIHJu
LCBydCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEy
UmVnNEZvdXJGb3VycyhPUF9MRFJIX3JlZ19UMiwgcm4sIEZvdXJGb3VycyhydCwgMCwgc2hpZnQs
IHJtKSk7CisgICAgfQorCisgICAgdm9pZCBsZHJiKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQg
cm4sIEFSTVRodW1iSW1tZWRpYXRlIGltbSkKKyAgICB7CisgICAgICAgIEFTU0VSVChybiAhPSBB
Uk1SZWdpc3RlcnM6OnBjKTsgLy8gTERSIChsaXRlcmFsKQorICAgICAgICBBU1NFUlQoaW1tLmlz
VUludDEyKCkpOworCisgICAgICAgIGlmICghKChydCB8IHJuKSAmIDgpICYmIGltbS5pc1VJbnQ1
KCkpCisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A1SW1tNVJlZzNSZWczKE9QX0xE
UkJfaW1tX1QxLCBpbW0uZ2V0VUludDUoKSwgcm4sIHJ0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTJSZWc0UmVnNEltbTEyKE9QX0xEUkJfaW1tX1Qy
LCBybiwgcnQsIGltbS5nZXRVSW50MTIoKSk7CisgICAgfQorCisgICAgdm9pZCBsZHJiKFJlZ2lz
dGVySUQgcnQsIFJlZ2lzdGVySUQgcm4sIGludCBvZmZzZXQsIGJvb2wgaW5kZXgsIGJvb2wgd2Jh
Y2spCisgICAgeworICAgICAgICBBU1NFUlQocnQgIT0gQVJNUmVnaXN0ZXJzOjpwYyk7CisgICAg
ICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKGluZGV4
IHx8IHdiYWNrKTsKKyAgICAgICAgQVNTRVJUKCF3YmFjayB8IChydCAhPSBybikpOworCisgICAg
ICAgIGJvb2wgYWRkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAg
ICAgIGFkZCA9IGZhbHNlOworICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVCghKG9mZnNldCAmIH4weGZmKSk7CisKKyAgICAgICAgb2Zmc2V0
IHw9ICh3YmFjayA8PCA4KTsKKyAgICAgICAgb2Zmc2V0IHw9IChhZGQgICA8PCA5KTsKKyAgICAg
ICAgb2Zmc2V0IHw9IChpbmRleCA8PCAxMCk7CisgICAgICAgIG9mZnNldCB8PSAoMSA8PCAxMSk7
CisKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTJSZWc0UmVnNEltbTEyKE9QX0xEUkJf
aW1tX1QzLCBybiwgcnQsIG9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBsZHJiKFJlZ2lzdGVy
SUQgcnQsIFJlZ2lzdGVySUQgcm4sIFJlZ2lzdGVySUQgcm0sIHVuc2lnbmVkIHNoaWZ0ID0gMCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsgLy8gTERSIChs
aXRlcmFsKQorICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOworICAgICAgICBBU1NFUlQoc2hp
ZnQgPD0gMyk7CisKKyAgICAgICAgaWYgKCFzaGlmdCAmJiAhKChydCB8IHJuIHwgcm0pICYgOCkp
CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A3UmVnM1JlZzNSZWczKE9QX0xEUkJf
cmVnX1QxLCBybSwgcm4sIHJ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mb3JtYXR0
ZXIudHdvV29yZE9wMTJSZWc0Rm91ckZvdXJzKE9QX0xEUkJfcmVnX1QyLCBybiwgRm91ckZvdXJz
KHJ0LCAwLCBzaGlmdCwgcm0pKTsKKyAgICB9CisKKyAgICB2b2lkIGxzbChSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJtLCBpbnQzMl90IHNoaWZ0QW1vdW50KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFCYWRSZWcocmQpKTsKKyAgICAgICAgQVNTRVJUKCFCYWRSZWcocm0pKTsKKyAgICAgICAg
U2hpZnRUeXBlQW5kQW1vdW50IHNoaWZ0KFNSVHlwZV9MU0wsIHNoaWZ0QW1vdW50KTsKKyAgICAg
ICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZGb3VyRm91cnMoT1BfTFNMX2ltbV9UMSwgRm91ckZv
dXJzKHNoaWZ0LmhpNCgpLCByZCwgc2hpZnQubG80KCksIHJtKSk7CisgICAgfQorCisgICAgdm9p
ZCBsc2woUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBybiwgUmVnaXN0ZXJJRCBybSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJu
KSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJtKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3
b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9MU0xfcmVnX1QyLCBybiwgRm91ckZvdXJzKDB4Ziwg
cmQsIDAsIHJtKSk7CisgICAgfQorCisgICAgdm9pZCBsc3IoUmVnaXN0ZXJJRCByZCwgUmVnaXN0
ZXJJRCBybSwgaW50MzJfdCBzaGlmdEFtb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFk
UmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJtKSk7CisgICAgICAgIFNoaWZ0VHlw
ZUFuZEFtb3VudCBzaGlmdChTUlR5cGVfTFNSLCBzaGlmdEFtb3VudCk7CisgICAgICAgIG1fZm9y
bWF0dGVyLnR3b1dvcmRPcDE2Rm91ckZvdXJzKE9QX0xTUl9pbW1fVDEsIEZvdXJGb3VycyhzaGlm
dC5oaTQoKSwgcmQsIHNoaWZ0LmxvNCgpLCBybSkpOworICAgIH0KKworICAgIHZvaWQgbHNyKFJl
Z2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAg
ICBBU1NFUlQoIUJhZFJlZyhyZCkpOworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybikpOworICAg
ICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOworICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3Ax
MlJlZzRGb3VyRm91cnMoT1BfTFNSX3JlZ19UMiwgcm4sIEZvdXJGb3VycygweGYsIHJkLCAwLCBy
bSkpOworICAgIH0KKworICAgIHZvaWQgbW92VDMoUmVnaXN0ZXJJRCByZCwgQVJNVGh1bWJJbW1l
ZGlhdGUgaW1tKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGltbS5pc1ZhbGlkKCkpOworICAgICAg
ICBBU1NFUlQoIWltbS5pc0VuY29kZWRJbW0oKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJk
KSk7CisgICAgICAgIAorICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3A1aTZJbW00UmVnNEVu
Y29kZWRJbW0oT1BfTU9WX2ltbV9UMywgaW1tLm1fdmFsdWUuaW1tNCwgcmQsIGltbSk7CisgICAg
fQorCisgICAgIHZvaWQgbW92KFJlZ2lzdGVySUQgcmQsIEFSTVRodW1iSW1tZWRpYXRlIGltbSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpbW0uaXNWYWxpZCgpKTsKKyAgICAgICAgQVNTRVJUKCFC
YWRSZWcocmQpKTsKKyAgICAgICAgCisgICAgICAgIGlmICgocmQgPCA4KSAmJiBpbW0uaXNVSW50
OCgpKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wNVJlZzNJbW04KE9QX01PVl9p
bW1fVDEsIHJkLCBpbW0uZ2V0VUludDgoKSk7CisgICAgICAgIGVsc2UgaWYgKGltbS5pc0VuY29k
ZWRJbW0oKSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDVpNkltbTRSZWc0RW5j
b2RlZEltbShPUF9NT1ZfaW1tX1QyLCAweGYsIHJkLCBpbW0pOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtb3ZUMyhyZCwgaW1tKTsKKyAgICB9CisKKyAgIHZvaWQgbW92KFJlZ2lzdGVySUQg
cmQsIFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A4
UmVnUmVnMTQzKE9QX01PVl9yZWdfVDEsIHJtLCByZCk7CisgICAgfQorCisgICAgdm9pZCBtb3Z0
KFJlZ2lzdGVySUQgcmQsIEFSTVRodW1iSW1tZWRpYXRlIGltbSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpbW0uaXNVSW50MTYoKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAg
ICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2RlZEltbShPUF9NT1ZULCBp
bW0ubV92YWx1ZS5pbW00LCByZCwgaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIG12bihSZWdpc3Rl
cklEIHJkLCBBUk1UaHVtYkltbWVkaWF0ZSBpbW0pCisgICAgeworICAgICAgICBBU1NFUlQoaW1t
LmlzRW5jb2RlZEltbSgpKTsKKyAgICAgICAgQVNTRVJUKCFCYWRSZWcocmQpKTsKKyAgICAgICAg
CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2RlZEltbShPUF9N
Vk5faW1tLCAweGYsIHJkLCBpbW0pOworICAgIH0KKworICAgIHZvaWQgbXZuKFJlZ2lzdGVySUQg
cmQsIFJlZ2lzdGVySUQgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJtKSk7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDE2Rm91ckZvdXJzKE9QX01WTl9yZWdfVDIsIEZv
dXJGb3VycyhzaGlmdC5oaTQoKSwgcmQsIHNoaWZ0LmxvNCgpLCBybSkpOworICAgIH0KKworICAg
IHZvaWQgbXZuKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBp
ZiAoISgocmQgfCBybSkgJiA4KSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDEw
UmVnM1JlZzMoT1BfTVZOX3JlZ19UMSwgcm0sIHJkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbXZuKHJkLCBybSwgU2hpZnRUeXBlQW5kQW1vdW50KCkpOworICAgIH0KKworICAgIHZvaWQg
bmVnKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBBUk1UaHVt
YkltbWVkaWF0ZSB6ZXJvID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTIoMCk7CisgICAg
ICAgIHN1YihyZCwgemVybywgcm0pOworICAgIH0KKworICAgIHZvaWQgb3JyKFJlZ2lzdGVySUQg
cmQsIFJlZ2lzdGVySUQgcm4sIEFSTVRodW1iSW1tZWRpYXRlIGltbSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJuKSk7CisgICAg
ICAgIEFTU0VSVChpbW0uaXNFbmNvZGVkSW1tKCkpOworICAgICAgICBtX2Zvcm1hdHRlci50d29X
b3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW0oT1BfT1JSX2ltbV9UMSwgcm4sIHJkLCBpbW0pOwor
ICAgIH0KKworICAgIHZvaWQgb3JyKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIFJlZ2lz
dGVySUQgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghQmFkUmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJuKSk7CisgICAgICAgIEFT
U0VSVCghQmFkUmVnKHJtKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZv
dXJGb3VycyhPUF9PUlJfcmVnX1QyLCBybiwgRm91ckZvdXJzKHNoaWZ0LmhpNCgpLCByZCwgc2hp
ZnQubG80KCksIHJtKSk7CisgICAgfQorCisgICAgdm9pZCBvcnIoUmVnaXN0ZXJJRCByZCwgUmVn
aXN0ZXJJRCBybiwgUmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAgIGlmICgocmQgPT0gcm4p
ICYmICEoKHJkIHwgcm0pICYgOCkpCisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3Ax
MFJlZzNSZWczKE9QX09SUl9yZWdfVDEsIHJtLCByZCk7CisgICAgICAgIGVsc2UgaWYgKChyZCA9
PSBybSkgJiYgISgocmQgfCBybikgJiA4KSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdv
cmRPcDEwUmVnM1JlZzMoT1BfT1JSX3JlZ19UMSwgcm4sIHJkKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3JyKHJkLCBybiwgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIG9ycl9TKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIFJlZ2lzdGVySUQg
cm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFk
UmVnKHJkKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJuKSk7CisgICAgICAgIEFTU0VSVCgh
QmFkUmVnKHJtKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3Vy
cyhPUF9PUlJfU19yZWdfVDIsIHJuLCBGb3VyRm91cnMoc2hpZnQuaGk0KCksIHJkLCBzaGlmdC5s
bzQoKSwgcm0pKTsKKyAgICB9CisKKyAgICB2b2lkIG9ycl9TKFJlZ2lzdGVySUQgcmQsIFJlZ2lz
dGVySUQgcm4sIFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBpZiAoKHJkID09IHJuKSAm
JiAhKChyZCB8IHJtKSAmIDgpKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wMTBS
ZWczUmVnMyhPUF9PUlJfcmVnX1QxLCBybSwgcmQpOworICAgICAgICBlbHNlIGlmICgocmQgPT0g
cm0pICYmICEoKHJkIHwgcm4pICYgOCkpCisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3Jk
T3AxMFJlZzNSZWczKE9QX09SUl9yZWdfVDEsIHJuLCByZCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG9ycl9TKHJkLCBybiwgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCgpKTsKKyAgICB9CisK
KyAgICB2b2lkIHJvcihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJtLCBpbnQzMl90IHNoaWZ0
QW1vdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFCYWRSZWcocmQpKTsKKyAgICAgICAgQVNT
RVJUKCFCYWRSZWcocm0pKTsKKyAgICAgICAgU2hpZnRUeXBlQW5kQW1vdW50IHNoaWZ0KFNSVHlw
ZV9ST1IsIHNoaWZ0QW1vdW50KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZGb3Vy
Rm91cnMoT1BfUk9SX2ltbV9UMSwgRm91ckZvdXJzKHNoaWZ0LmhpNCgpLCByZCwgc2hpZnQubG80
KCksIHJtKSk7CisgICAgfQorCisgICAgdm9pZCByb3IoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBybiwgUmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkKSk7
CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJuKSk7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJt
KSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9ST1Jf
cmVnX1QyLCBybiwgRm91ckZvdXJzKDB4ZiwgcmQsIDAsIHJtKSk7CisgICAgfQorCisgICAgdm9p
ZCBzbXVsbChSZWdpc3RlcklEIHJkTG8sIFJlZ2lzdGVySUQgcmRIaSwgUmVnaXN0ZXJJRCBybiwg
UmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghQmFkUmVnKHJkTG8pKTsKKyAg
ICAgICAgQVNTRVJUKCFCYWRSZWcocmRIaSkpOworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybikp
OworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOworICAgICAgICBBU1NFUlQocmRMbyAhPSBy
ZEhpKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTJSZWc0Rm91ckZvdXJzKE9QX1NN
VUxMX1QxLCBybiwgRm91ckZvdXJzKHJkTG8sIHJkSGksIDAsIHJtKSk7CisgICAgfQorCisgICAg
Ly8gcnQgPT0gQVJNUmVnaXN0ZXJzOjpwYyBvbmx5IGFsbG93ZWQgaWYgbGFzdCBpbnN0cnVjdGlv
biBpbiBJVCAoaWYgdGhlbikgYmxvY2suCisgICAgdm9pZCBzdHIoUmVnaXN0ZXJJRCBydCwgUmVn
aXN0ZXJJRCBybiwgQVJNVGh1bWJJbW1lZGlhdGUgaW1tKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHJ0ICE9IEFSTVJlZ2lzdGVyczo6cGMpOworICAgICAgICBBU1NFUlQocm4gIT0gQVJNUmVnaXN0
ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVChpbW0uaXNVSW50MTIoKSk7CisKKyAgICAgICAgaWYg
KCEoKHJ0IHwgcm4pICYgOCkgJiYgaW1tLmlzVUludDcoKSkKKyAgICAgICAgICAgIG1fZm9ybWF0
dGVyLm9uZVdvcmRPcDVJbW01UmVnM1JlZzMoT1BfU1RSX2ltbV9UMSwgaW1tLmdldFVJbnQ3KCkg
Pj4gMiwgcm4sIHJ0KTsKKyAgICAgICAgZWxzZSBpZiAoKHJuID09IEFSTVJlZ2lzdGVyczo6c3Ap
ICYmICEocnQgJiA4KSAmJiBpbW0uaXNVSW50MTAoKSkKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZVdvcmRPcDVSZWczSW1tOChPUF9TVFJfaW1tX1QyLCBydCwgaW1tLmdldFVJbnQxMCgpID4+
IDIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3AxMlJl
ZzRSZWc0SW1tMTIoT1BfU1RSX2ltbV9UMywgcm4sIHJ0LCBpbW0uZ2V0VUludDEyKCkpOworICAg
IH0KKworICAgIC8vIElmIGluZGV4IGlzIHNldCwgdGhpcyBpcyBhIHJlZ3VsYXIgb2Zmc2V0IG9y
IGEgcHJlLWluZGV4ZWQgc3RvcmU7CisgICAgLy8gaWYgaW5kZXggaXMgbm90IHNldCB0aGVuIGlz
IGlzIGEgcG9zdC1pbmRleCBzdG9yZS4KKyAgICAvLworICAgIC8vIElmIHdiYWNrIGlzIHNldCBy
biBpcyB1cGRhdGVkIC0gdGhpcyBpcyBhIHByZSBvciBwb3N0IGluZGV4IHN0b3JlLAorICAgIC8v
IGlmIHdiYWNrIGlzIG5vdCBzZXQgdGhpcyBpcyBhIHJlZ3VsYXIgb2Zmc2V0IG1lbW9yeSBhY2Nl
c3MuCisgICAgLy8KKyAgICAvLyAoLTI1NSA8PSBvZmZzZXQgPD0gMjU1KQorICAgIC8vIF9yZWcg
PSBSRUdbcm5dCisgICAgLy8gX3RtcCA9IF9yZWcgKyBvZmZzZXQKKyAgICAvLyBNRU1baW5kZXgg
PyBfdG1wIDogX3JlZ10gPSBSRUdbcnRdCisgICAgLy8gaWYgKHdiYWNrKSBSRUdbcm5dID0gX3Rt
cAorICAgIHZvaWQgc3RyKFJlZ2lzdGVySUQgcnQsIFJlZ2lzdGVySUQgcm4sIGludCBvZmZzZXQs
IGJvb2wgaW5kZXgsIGJvb2wgd2JhY2spCisgICAgeworICAgICAgICBBU1NFUlQocnQgIT0gQVJN
UmVnaXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBjKTsK
KyAgICAgICAgQVNTRVJUKGluZGV4IHx8IHdiYWNrKTsKKyAgICAgICAgQVNTRVJUKCF3YmFjayB8
IChydCAhPSBybikpOworICAgIAorICAgICAgICBib29sIGFkZCA9IHRydWU7CisgICAgICAgIGlm
IChvZmZzZXQgPCAwKSB7CisgICAgICAgICAgICBhZGQgPSBmYWxzZTsKKyAgICAgICAgICAgIG9m
ZnNldCA9IC1vZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKChvZmZzZXQgJiB+MHhm
ZikgPT0gMCk7CisgICAgICAgIAorICAgICAgICBvZmZzZXQgfD0gKHdiYWNrIDw8IDgpOworICAg
ICAgICBvZmZzZXQgfD0gKGFkZCAgIDw8IDkpOworICAgICAgICBvZmZzZXQgfD0gKGluZGV4IDw8
IDEwKTsKKyAgICAgICAgb2Zmc2V0IHw9ICgxIDw8IDExKTsKKyAgICAgICAgCisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNFJlZzRJbW0xMihPUF9TVFJfaW1tX1Q0LCBybiwgcnQs
IG9mZnNldCk7CisgICAgfQorCisgICAgLy8gcnQgPT0gQVJNUmVnaXN0ZXJzOjpwYyBvbmx5IGFs
bG93ZWQgaWYgbGFzdCBpbnN0cnVjdGlvbiBpbiBJVCAoaWYgdGhlbikgYmxvY2suCisgICAgdm9p
ZCBzdHIoUmVnaXN0ZXJJRCBydCwgUmVnaXN0ZXJJRCBybiwgUmVnaXN0ZXJJRCBybSwgdW5zaWdu
ZWQgc2hpZnQ9MCkKKyAgICB7CisgICAgICAgIEFTU0VSVChybiAhPSBBUk1SZWdpc3RlcnM6OnBj
KTsKKyAgICAgICAgQVNTRVJUKCFCYWRSZWcocm0pKTsKKyAgICAgICAgQVNTRVJUKHNoaWZ0IDw9
IDMpOworCisgICAgICAgIGlmICghc2hpZnQgJiYgISgocnQgfCBybiB8IHJtKSAmIDgpKQorICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wN1JlZzNSZWczUmVnMyhPUF9TVFJfcmVnX1Qx
LCBybSwgcm4sIHJ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIudHdv
V29yZE9wMTJSZWc0Rm91ckZvdXJzKE9QX1NUUl9yZWdfVDIsIHJuLCBGb3VyRm91cnMocnQsIDAs
IHNoaWZ0LCBybSkpOworICAgIH0KKworICAgIHZvaWQgc3ViKFJlZ2lzdGVySUQgcmQsIFJlZ2lz
dGVySUQgcm4sIEFSTVRodW1iSW1tZWRpYXRlIGltbSkKKyAgICB7CisgICAgICAgIC8vIFJkIGNh
biBvbmx5IGJlIFNQIGlmIFJuIGlzIGFsc28gU1AuCisgICAgICAgIEFTU0VSVCgocmQgIT0gQVJN
UmVnaXN0ZXJzOjpzcCkgfHwgKHJuID09IEFSTVJlZ2lzdGVyczo6c3ApKTsKKyAgICAgICAgQVNT
RVJUKHJkICE9IEFSTVJlZ2lzdGVyczo6cGMpOworICAgICAgICBBU1NFUlQocm4gIT0gQVJNUmVn
aXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVChpbW0uaXNWYWxpZCgpKTsKKworICAgICAgICBp
ZiAoKHJuID09IEFSTVJlZ2lzdGVyczo6c3ApICYmIChyZCA9PSBBUk1SZWdpc3RlcnM6OnNwKSAm
JiBpbW0uaXNVSW50OSgpKSB7CisgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A5SW1t
NyhPUF9TVUJfU1BfaW1tX1QxLCBpbW0uZ2V0VUludDkoKSA+PiAyKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfSBlbHNlIGlmICghKChyZCB8IHJuKSAmIDgpKSB7CisgICAgICAgICAg
ICBpZiAoaW1tLmlzVUludDMoKSkgeworICAgICAgICAgICAgICAgIG1fZm9ybWF0dGVyLm9uZVdv
cmRPcDdSZWczUmVnM1JlZzMoT1BfU1VCX2ltbV9UMSwgKFJlZ2lzdGVySUQpaW1tLmdldFVJbnQz
KCksIHJuLCByZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNl
IGlmICgocmQgPT0gcm4pICYmIGltbS5pc1VJbnQ4KCkpIHsKKyAgICAgICAgICAgICAgICBtX2Zv
cm1hdHRlci5vbmVXb3JkT3A1UmVnM0ltbTgoT1BfU1VCX2ltbV9UMiwgcmQsIGltbS5nZXRVSW50
OCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaW1tLmlzRW5jb2RlZEltbSgpKQorICAgICAgICAgICAgbV9mb3JtYXR0
ZXIudHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tKE9QX1NVQl9pbW1fVDMsIHJuLCByZCwg
aW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaW1tLmlzVUludDEyKCkp
OworICAgICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1t
KE9QX1NVQl9pbW1fVDQsIHJuLCByZCwgaW1tKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgc3ViKFJlZ2lzdGVySUQgcmQsIEFSTVRodW1iSW1tZWRpYXRlIGltbSwgUmVnaXN0ZXJJRCBy
bikKKyAgICB7CisgICAgICAgIEFTU0VSVChyZCAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAg
ICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6cGMpOworICAgICAgICBBU1NFUlQoaW1tLmlz
VmFsaWQoKSk7CisgICAgICAgIEFTU0VSVChpbW0uaXNVSW50MTIoKSk7CisKKyAgICAgICAgaWYg
KCEoKHJkIHwgcm4pICYgOCkgJiYgIWltbS5nZXRVSW50MTIoKSkKKyAgICAgICAgICAgIG1fZm9y
bWF0dGVyLm9uZVdvcmRPcDEwUmVnM1JlZzMoT1BfUlNCX2ltbV9UMSwgcm4sIHJkKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wNWk2SW1tNFJlZzRFbmNv
ZGVkSW1tKE9QX1JTQl9pbW1fVDIsIHJuLCByZCwgaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJtLCBTaGlmdFR5cGVB
bmRBbW91bnQgc2hpZnQpCisgICAgeworICAgICAgICBBU1NFUlQoKHJkICE9IEFSTVJlZ2lzdGVy
czo6c3ApIHx8IChybiA9PSBBUk1SZWdpc3RlcnM6OnNwKSk7CisgICAgICAgIEFTU0VSVChyZCAh
PSBBUk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6
cGMpOworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOworICAgICAgICBtX2Zvcm1hdHRlci50
d29Xb3JkT3AxMlJlZzRGb3VyRm91cnMoT1BfU1VCX3JlZ19UMiwgcm4sIEZvdXJGb3VycyhzaGlm
dC5oaTQoKSwgcmQsIHNoaWZ0LmxvNCgpLCBybSkpOworICAgIH0KKworICAgIC8vIE5PVEU6IElu
IGFuIElUIGJsb2NrLCBhZGQgZG9lc24ndCBtb2RpZnkgdGhlIGZsYWdzIHJlZ2lzdGVyLgorICAg
IHZvaWQgc3ViKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4sIFJlZ2lzdGVySUQgcm0pCisg
ICAgeworICAgICAgICBpZiAoISgocmQgfCBybiB8IHJtKSAmIDgpKQorICAgICAgICAgICAgbV9m
b3JtYXR0ZXIub25lV29yZE9wN1JlZzNSZWczUmVnMyhPUF9TVUJfcmVnX1QxLCBybSwgcm4sIHJk
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3ViKHJkLCBybiwgcm0sIFNoaWZ0VHlwZUFu
ZEFtb3VudCgpKTsKKyAgICB9CisKKyAgICAvLyBOb3QgYWxsb3dlZCBpbiBhbiBJVCAoaWYgdGhl
bikgYmxvY2suCisgICAgdm9pZCBzdWJfUyhSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBB
Uk1UaHVtYkltbWVkaWF0ZSBpbW0pCisgICAgeworICAgICAgICAvLyBSZCBjYW4gb25seSBiZSBT
UCBpZiBSbiBpcyBhbHNvIFNQLgorICAgICAgICBBU1NFUlQoKHJkICE9IEFSTVJlZ2lzdGVyczo6
c3ApIHx8IChybiA9PSBBUk1SZWdpc3RlcnM6OnNwKSk7CisgICAgICAgIEFTU0VSVChyZCAhPSBB
Uk1SZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKHJuICE9IEFSTVJlZ2lzdGVyczo6cGMp
OworICAgICAgICBBU1NFUlQoaW1tLmlzVmFsaWQoKSk7CisKKyAgICAgICAgaWYgKChybiA9PSBB
Uk1SZWdpc3RlcnM6OnNwKSAmJiAocmQgPT0gQVJNUmVnaXN0ZXJzOjpzcCkgJiYgaW1tLmlzVUlu
dDkoKSkgeworICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOUltbTcoT1BfU1VCX1NQ
X2ltbV9UMSwgaW1tLmdldFVJbnQ5KCkgPj4gMik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0gZWxzZSBpZiAoISgocmQgfCBybikgJiA4KSkgeworICAgICAgICAgICAgaWYgKGltbS5p
c1VJbnQzKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Zvcm1hdHRlci5vbmVXb3JkT3A3UmVnM1Jl
ZzNSZWczKE9QX1NVQl9pbW1fVDEsIChSZWdpc3RlcklEKWltbS5nZXRVSW50MygpLCBybiwgcmQp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKHJkID09
IHJuKSAmJiBpbW0uaXNVSW50OCgpKSB7CisgICAgICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25l
V29yZE9wNVJlZzNJbW04KE9QX1NVQl9pbW1fVDIsIHJkLCBpbW0uZ2V0VUludDgoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
bV9mb3JtYXR0ZXIudHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tKE9QX1NVQl9TX2ltbV9U
Mywgcm4sIHJkLCBpbW0pOworICAgIH0KKworICAgIC8vIE5vdCBhbGxvd2VkIGluIGFuIElUIChp
ZiB0aGVuKSBibG9jaz8KKyAgICB2b2lkIHN1Yl9TKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cm4sIFJlZ2lzdGVySUQgcm0sIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgocmQgIT0gQVJNUmVnaXN0ZXJzOjpzcCkgfHwgKHJuID09IEFSTVJlZ2lzdGVy
czo6c3ApKTsKKyAgICAgICAgQVNTRVJUKHJkICE9IEFSTVJlZ2lzdGVyczo6cGMpOworICAgICAg
ICBBU1NFUlQocm4gIT0gQVJNUmVnaXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVCghQmFkUmVn
KHJtKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDEyUmVnNEZvdXJGb3VycyhPUF9T
VUJfU19yZWdfVDIsIHJuLCBGb3VyRm91cnMoc2hpZnQuaGk0KCksIHJkLCBzaGlmdC5sbzQoKSwg
cm0pKTsKKyAgICB9CisKKyAgICAvLyBOb3QgYWxsb3dlZCBpbiBhbiBJVCAoaWYgdGhlbikgYmxv
Y2suCisgICAgdm9pZCBzdWJfUyhSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuLCBSZWdpc3Rl
cklEIHJtKQorICAgIHsKKyAgICAgICAgaWYgKCEoKHJkIHwgcm4gfCBybSkgJiA4KSkKKyAgICAg
ICAgICAgIG1fZm9ybWF0dGVyLm9uZVdvcmRPcDdSZWczUmVnM1JlZzMoT1BfU1VCX3JlZ19UMSwg
cm0sIHJuLCByZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1Yl9TKHJkLCBybiwgcm0s
IFNoaWZ0VHlwZUFuZEFtb3VudCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHRzdChSZWdpc3RlcklE
IHJuLCBBUk1UaHVtYkltbWVkaWF0ZSBpbW0pCisgICAgeworICAgICAgICBBU1NFUlQoIUJhZFJl
ZyhybikpOworICAgICAgICBBU1NFUlQoaW1tLmlzRW5jb2RlZEltbSgpKTsKKworICAgICAgICBt
X2Zvcm1hdHRlci50d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW0oT1BfVFNUX2ltbSwgcm4s
IChSZWdpc3RlcklEKTB4ZiwgaW1tKTsKKyAgICB9CisKKyAgICB2b2lkIHRzdChSZWdpc3RlcklE
IHJuLCBSZWdpc3RlcklEIHJtLCBTaGlmdFR5cGVBbmRBbW91bnQgc2hpZnQpCisgICAgeworICAg
ICAgICBBU1NFUlQoIUJhZFJlZyhybikpOworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybSkpOwor
ICAgICAgICBtX2Zvcm1hdHRlci50d29Xb3JkT3AxMlJlZzRGb3VyRm91cnMoT1BfVFNUX3JlZ19U
Miwgcm4sIEZvdXJGb3VycyhzaGlmdC5oaTQoKSwgMHhmLCBzaGlmdC5sbzQoKSwgcm0pKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRzdChSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJtKQorICAgIHsK
KyAgICAgICAgaWYgKChybiB8IHJtKSAmIDgpCisgICAgICAgICAgICB0c3Qocm4sIHJtLCBTaGlm
dFR5cGVBbmRBbW91bnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZm9ybWF0dGVy
Lm9uZVdvcmRPcDEwUmVnM1JlZzMoT1BfVFNUX3JlZ19UMSwgcm0sIHJuKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZhZGRfRjY0KEZQRG91YmxlUmVnaXN0ZXJJRCByZCwgRlBEb3VibGVSZWdpc3RlcklE
IHJuLCBGUERvdWJsZVJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci52
ZnBPcChPUF9WQUREX1QyLCBPUF9WQUREX1QyYiwgdHJ1ZSwgcm4sIHJkLCBybSk7CisgICAgfQor
CisgICAgdm9pZCB2Y21wX0Y2NChGUERvdWJsZVJlZ2lzdGVySUQgcmQsIEZQRG91YmxlUmVnaXN0
ZXJJRCBybSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnZmcE9wKE9QX1ZDTVAsIE9QX1ZD
TVBiLCB0cnVlLCBWRlBPcGVyYW5kKDQpLCByZCwgcm0pOworICAgIH0KKworICAgIHZvaWQgdmNt
cHpfRjY0KEZQRG91YmxlUmVnaXN0ZXJJRCByZCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVy
LnZmcE9wKE9QX1ZDTVAsIE9QX1ZDTVBiLCB0cnVlLCBWRlBPcGVyYW5kKDUpLCByZCwgVkZQT3Bl
cmFuZCgwKSk7CisgICAgfQorCisgICAgdm9pZCB2Y3Z0X0Y2NF9TMzIoRlBEb3VibGVSZWdpc3Rl
cklEIHJkLCBGUFNpbmdsZVJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICAvLyBib29sZWFu
IHZhbHVlcyBhcmUgNjRiaXQgKHRvSW50LCB1bnNpZ25lZCwgcm91bmRaZXJvKQorICAgICAgICBt
X2Zvcm1hdHRlci52ZnBPcChPUF9WQ1ZUX0ZQSVZGUCwgT1BfVkNWVF9GUElWRlBiLCB0cnVlLCB2
Y3Z0T3AoZmFsc2UsIGZhbHNlLCBmYWxzZSksIHJkLCBybSk7CisgICAgfQorCisgICAgdm9pZCB2
Y3Z0cl9TMzJfRjY0KEZQU2luZ2xlUmVnaXN0ZXJJRCByZCwgRlBEb3VibGVSZWdpc3RlcklEIHJt
KQorICAgIHsKKyAgICAgICAgLy8gYm9vbGVhbiB2YWx1ZXMgYXJlIDY0Yml0ICh0b0ludCwgdW5z
aWduZWQsIHJvdW5kWmVybykKKyAgICAgICAgbV9mb3JtYXR0ZXIudmZwT3AoT1BfVkNWVF9GUElW
RlAsIE9QX1ZDVlRfRlBJVkZQYiwgdHJ1ZSwgdmN2dE9wKHRydWUsIGZhbHNlLCB0cnVlKSwgcmQs
IHJtKTsKKyAgICB9CisKKyAgICB2b2lkIHZkaXZfRjY0KEZQRG91YmxlUmVnaXN0ZXJJRCByZCwg
RlBEb3VibGVSZWdpc3RlcklEIHJuLCBGUERvdWJsZVJlZ2lzdGVySUQgcm0pCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci52ZnBPcChPUF9WRElWLCBPUF9WRElWYiwgdHJ1ZSwgcm4sIHJkLCBy
bSk7CisgICAgfQorCisgICAgdm9pZCB2bGRyKEZQRG91YmxlUmVnaXN0ZXJJRCByZCwgUmVnaXN0
ZXJJRCBybiwgaW50MzJfdCBpbW0pCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci52ZnBNZW1P
cChPUF9WTERSLCBPUF9WTERSYiwgdHJ1ZSwgcm4sIHJkLCBpbW0pOworICAgIH0KKworICAgIHZv
aWQgdm1vdihSZWdpc3RlcklEIHJkLCBGUFNpbmdsZVJlZ2lzdGVySUQgcm4pCisgICAgeworICAg
ICAgICBBU1NFUlQoIUJhZFJlZyhyZCkpOworICAgICAgICBtX2Zvcm1hdHRlci52ZnBPcChPUF9W
TU9WX0N0b1MsIE9QX1ZNT1ZfQ3RvU2IsIGZhbHNlLCBybiwgcmQsIFZGUE9wZXJhbmQoMCkpOwor
ICAgIH0KKworICAgIHZvaWQgdm1vdihGUFNpbmdsZVJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQg
cm4pCisgICAgeworICAgICAgICBBU1NFUlQoIUJhZFJlZyhybikpOworICAgICAgICBtX2Zvcm1h
dHRlci52ZnBPcChPUF9WTU9WX1N0b0MsIE9QX1ZNT1ZfU3RvQ2IsIGZhbHNlLCByZCwgcm4sIFZG
UE9wZXJhbmQoMCkpOworICAgIH0KKworICAgIHZvaWQgdm1ycyhSZWdpc3RlcklEIHJlZyA9IEFS
TVJlZ2lzdGVyczo6cGMpCisgICAgeworICAgICAgICBBU1NFUlQocmVnICE9IEFSTVJlZ2lzdGVy
czo6c3ApOworICAgICAgICBtX2Zvcm1hdHRlci52ZnBPcChPUF9WTVJTLCBPUF9WTVJTYiwgZmFs
c2UsIFZGUE9wZXJhbmQoMSksIFZGUE9wZXJhbmQoMHgxMCB8IHJlZyksIFZGUE9wZXJhbmQoMCkp
OworICAgIH0KKworICAgIHZvaWQgdm11bF9GNjQoRlBEb3VibGVSZWdpc3RlcklEIHJkLCBGUERv
dWJsZVJlZ2lzdGVySUQgcm4sIEZQRG91YmxlUmVnaXN0ZXJJRCBybSkKKyAgICB7CisgICAgICAg
IG1fZm9ybWF0dGVyLnZmcE9wKE9QX1ZNVUxfVDIsIE9QX1ZNVUxfVDJiLCB0cnVlLCBybiwgcmQs
IHJtKTsKKyAgICB9CisKKyAgICB2b2lkIHZzdHIoRlBEb3VibGVSZWdpc3RlcklEIHJkLCBSZWdp
c3RlcklEIHJuLCBpbnQzMl90IGltbSkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnZmcE1l
bU9wKE9QX1ZTVFIsIE9QX1ZTVFJiLCB0cnVlLCBybiwgcmQsIGltbSk7CisgICAgfQorCisgICAg
dm9pZCB2c3ViX0Y2NChGUERvdWJsZVJlZ2lzdGVySUQgcmQsIEZQRG91YmxlUmVnaXN0ZXJJRCBy
biwgRlBEb3VibGVSZWdpc3RlcklEIHJtKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudmZw
T3AoT1BfVlNVQl9UMiwgT1BfVlNVQl9UMmIsIHRydWUsIHJuLCByZCwgcm0pOworICAgIH0KKwor
ICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAgICAgICByZXR1cm4gSm1wRHN0KG1fZm9ybWF0
dGVyLnNpemUoKSk7CisgICAgfQorICAgIAorICAgIEptcERzdCBhbGlnbihpbnQgYWxpZ25tZW50
KQorICAgIHsKKyAgICAgICAgd2hpbGUgKCFtX2Zvcm1hdHRlci5pc0FsaWduZWQoYWxpZ25tZW50
KSkKKyAgICAgICAgICAgIGJrcHQoKTsKKworICAgICAgICByZXR1cm4gbGFiZWwoKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwg
Sm1wU3JjIGp1bXApCisgICAgeworICAgICAgICBBU1NFUlQoanVtcC5tX29mZnNldCAhPSAtMSk7
CisKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8cHRyZGlmZl90Pihjb2RlKSArIGp1bXAubV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBEc3QgZGVzdGlu
YXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24ubV9vZmZzZXQgIT0gLTEp
OworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHB0cmRpZmZfdD4oY29kZSkgKyBkZXN0aW5hdGlvbi5tX29mZnNldCk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywg
Sm1wRHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9v
ZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5M
YWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3Qu
bV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQgZ2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNyYywgSm1wRHN0IGRzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorCisgICAg
aW50IGV4ZWN1dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KCFsb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50MzJfdCo+KG1fZm9ybWF0dGVyLmRhdGEoKSlbbG9jYXRpb24gLyBzaXplb2YoaW50
MzJfdCkgLSAxXTsKKyAgICB9CisgICAgCisgICAgaW50IGp1bXBTaXplRGVsdGEoSnVtcFR5cGUg
anVtcFR5cGUsIEp1bXBMaW5rVHlwZSBqdW1wTGlua1R5cGUpIHsgcmV0dXJuIEp1bXBQYWRkaW5n
U2l6ZXNbanVtcFR5cGVdIC0gSnVtcFNpemVzW2p1bXBMaW5rVHlwZV07IH0KKyAgICAKKyAgICAv
LyBBc3NlbWJsZXIgYWRtaW4gbWV0aG9kczoKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5zaXplKCk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgbGlua1JlY29yZFNvdXJjZUNvbXBhcmF0b3IoY29uc3QgTGlua1JlY29yZCYgYSwg
Y29uc3QgTGlua1JlY29yZCYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmZyb20oKSA8IGIu
ZnJvbSgpOworICAgIH0KKworICAgIGJvb2wgY2FuQ29tcGFjdChKdW1wVHlwZSBqdW1wVHlwZSkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2Fubm90IGJlIGNvbXBhY3RlZDoKKyAg
ICAgICAgLy8gICBKdW1wRml4ZWQ6IHJlcHJlc2VudHMgY3VzdG9tIGp1bXAgc2VxdWVuY2UKKyAg
ICAgICAgLy8gICBKdW1wTm9Db25kaXRpb25GaXhlZFNpemU6IHJlcHJlc2VudHMgdW5jb25kaXRp
b25hbCBqdW1wIHRoYXQgbXVzdCByZW1haW4gYSBmaXhlZCBzaXplCisgICAgICAgIC8vICAgSnVt
cENvbmRpdGlvbkZpeGVkU2l6ZTogcmVwcmVzZW50cyBjb25kaXRpb25hbCBqdW1wIHRoYXQgbXVz
dCByZW1haW4gYSBmaXhlZCBzaXplCisgICAgICAgIHJldHVybiAoanVtcFR5cGUgPT0gSnVtcE5v
Q29uZGl0aW9uKSB8fCAoanVtcFR5cGUgPT0gSnVtcENvbmRpdGlvbik7CisgICAgfQorICAgIAor
ICAgIEp1bXBMaW5rVHlwZSBjb21wdXRlSnVtcFR5cGUoSnVtcFR5cGUganVtcFR5cGUsIGNvbnN0
IHVpbnQ4X3QqIGZyb20sIGNvbnN0IHVpbnQ4X3QqIHRvKQorICAgIHsKKyAgICAgICAgaWYgKGp1
bXBUeXBlID09IEp1bXBGaXhlZCkKKyAgICAgICAgICAgIHJldHVybiBMaW5rSW52YWxpZDsKKyAg
ICAgICAgCisgICAgICAgIC8vIGZvciBwYXRjaGFibGUganVtcCB3ZSBtdXN0IGxlYXZlIHNwYWNl
IGZvciB0aGUgbG9uZ2VzdCBjb2RlIHNlcXVlbmNlCisgICAgICAgIGlmIChqdW1wVHlwZSA9PSBK
dW1wTm9Db25kaXRpb25GaXhlZFNpemUpCisgICAgICAgICAgICByZXR1cm4gTGlua0JYOworICAg
ICAgICBpZiAoanVtcFR5cGUgPT0gSnVtcENvbmRpdGlvbkZpeGVkU2l6ZSkKKyAgICAgICAgICAg
IHJldHVybiBMaW5rQ29uZGl0aW9uYWxCWDsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IGludCBw
YWRkaW5nU2l6ZSA9IEp1bXBQYWRkaW5nU2l6ZXNbanVtcFR5cGVdOworICAgICAgICBib29sIG1h
eVRyaWdnZXJFcnJhdGEgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChqdW1wVHlwZSA9
PSBKdW1wQ29uZGl0aW9uKSB7CisgICAgICAgICAgICAvLyAyLWJ5dGUgY29uZGl0aW9uYWwgVDEK
KyAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90KiBqdW1wVDFMb2NhdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihmcm9tIC0gKHBhZGRpbmdTaXplIC0gSnVtcFNpemVzW0xp
bmtKdW1wVDFdKSk7CisgICAgICAgICAgICBpZiAoY2FuQmVKdW1wVDEoanVtcFQxTG9jYXRpb24s
IHRvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUMTsKKyAgICAgICAgICAgIC8v
IDQtYnl0ZSBjb25kaXRpb25hbCBUMworICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGp1bXBU
M0xvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGZyb20gLSAocGFk
ZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1bXBUM10pKTsKKyAgICAgICAgICAgIGlmIChjYW5C
ZUp1bXBUMyhqdW1wVDNMb2NhdGlvbiwgdG8sIG1heVRyaWdnZXJFcnJhdGEpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFtYXlUcmlnZ2VyRXJyYXRhKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTGlua0p1bXBUMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDQtYnl0ZSBjb25k
aXRpb25hbCBUNCB3aXRoIElUCisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogY29uZGl0aW9u
YWxKdW1wVDRMb2NhdGlvbiA9IAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MTZfdCo+KGZyb20gLSAocGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0NvbmRpdGlvbmFs
SnVtcFQ0XSkpOworICAgICAgICAgICAgaWYgKGNhbkJlSnVtcFQ0KGNvbmRpdGlvbmFsSnVtcFQ0
TG9jYXRpb24sIHRvLCBtYXlUcmlnZ2VyRXJyYXRhKSkgeworICAgICAgICAgICAgICAgIGlmICgh
bWF5VHJpZ2dlckVycmF0YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtDb25kaXRp
b25hbEp1bXBUNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIDItYnl0ZSB1bmNvbmRpdGlvbmFsIFQyCisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCog
anVtcFQyTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oZnJvbSAt
IChwYWRkaW5nU2l6ZSAtIEp1bXBTaXplc1tMaW5rSnVtcFQyXSkpOworICAgICAgICAgICAgaWYg
KGNhbkJlSnVtcFQyKGp1bXBUMkxvY2F0aW9uLCB0bykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IExpbmtKdW1wVDI7CisgICAgICAgICAgICAvLyA0LWJ5dGUgdW5jb25kaXRpb25hbCBUNAorICAg
ICAgICAgICAgY29uc3QgdWludDE2X3QqIGp1bXBUNExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MTZfdCo+KGZyb20gLSAocGFkZGluZ1NpemUgLSBKdW1wU2l6ZXNbTGlua0p1
bXBUNF0pKTsKKyAgICAgICAgICAgIGlmIChjYW5CZUp1bXBUNChqdW1wVDRMb2NhdGlvbiwgdG8s
IG1heVRyaWdnZXJFcnJhdGEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXlUcmlnZ2VyRXJy
YXRhKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBUNDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIHVzZSBsb25nIGp1bXAgc2VxdWVuY2UKKyAgICAgICAgICAgIHJl
dHVybiBMaW5rQlg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChqdW1wVHlw
ZSA9PSBKdW1wQ29uZGl0aW9uKTsKKyAgICAgICAgcmV0dXJuIExpbmtDb25kaXRpb25hbEJYOwor
ICAgIH0KKyAgICAKKyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQm
IHJlY29yZCwgY29uc3QgdWludDhfdCogZnJvbSwgY29uc3QgdWludDhfdCogdG8pCisgICAgewor
ICAgICAgICBKdW1wTGlua1R5cGUgbGlua1R5cGUgPSBjb21wdXRlSnVtcFR5cGUocmVjb3JkLnR5
cGUoKSwgZnJvbSwgdG8pOworICAgICAgICByZWNvcmQuc2V0TGlua1R5cGUobGlua1R5cGUpOwor
ICAgICAgICByZXR1cm4gbGlua1R5cGU7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVjb3JkTGlu
a09mZnNldHMoaW50MzJfdCByZWdpb25TdGFydCwgaW50MzJfdCByZWdpb25FbmQsIGludDMyX3Qg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgaW50MzJfdCBwdHIgPSByZWdpb25TdGFydCAvIHNpemVv
ZihpbnQzMl90KTsKKyAgICAgICAgY29uc3QgaW50MzJfdCBlbmQgPSByZWdpb25FbmQgLyBzaXpl
b2YoaW50MzJfdCk7CisgICAgICAgIGludDMyX3QqIG9mZnNldHMgPSBzdGF0aWNfY2FzdDxpbnQz
Ml90Kj4obV9mb3JtYXR0ZXIuZGF0YSgpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkKKyAg
ICAgICAgICAgIG9mZnNldHNbcHRyKytdID0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBWZWN0
b3I8TGlua1JlY29yZD4mIGp1bXBzVG9MaW5rKCkKKyAgICB7CisgICAgICAgIHN0ZDo6c29ydCht
X2p1bXBzVG9MaW5rLmJlZ2luKCksIG1fanVtcHNUb0xpbmsuZW5kKCksIGxpbmtSZWNvcmRTb3Vy
Y2VDb21wYXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcHNUb0xpbms7CisgICAgfQorCisg
ICAgdm9pZCBsaW5rKExpbmtSZWNvcmQmIHJlY29yZCwgdWludDhfdCogZnJvbSwgdWludDhfdCog
dG8pCisgICAgeworICAgICAgICBzd2l0Y2ggKHJlY29yZC5saW5rVHlwZSgpKSB7CisgICAgICAg
IGNhc2UgTGlua0p1bXBUMToKKyAgICAgICAgICAgIGxpbmtKdW1wVDEocmVjb3JkLmNvbmRpdGlv
bigpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIExpbmtKdW1wVDI6CisgICAgICAgICAgICBsaW5rSnVtcFQy
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSwgdG8pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTGlua0p1bXBUMzoKKyAgICAgICAgICAgIGxpbmtKdW1wVDMocmVj
b3JkLmNvbmRpdGlvbigpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSksIHRvKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmtKdW1wVDQ6CisgICAgICAgICAg
ICBsaW5rSnVtcFQ0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSwgdG8pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGlua0NvbmRpdGlvbmFsSnVtcFQ0OgorICAg
ICAgICAgICAgbGlua0NvbmRpdGlvbmFsSnVtcFQ0KHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRl
cnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMaW5rQ29uZGl0aW9uYWxCWDoKKyAgICAgICAgICAgIGxpbmtDb25kaXRpb25h
bEJYKHJlY29yZC5jb25kaXRpb24oKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20p
LCB0byk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5rQlg6CisgICAgICAg
ICAgICBsaW5rQlgocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pLCB0byk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBtX2Zvcm1hdHRlci5kYXRhKCk7IH0KKyAgICAK
KyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjYWxsLm1fb2Zmc2V0ID49IDApOworICAgICAgICByZXR1cm4g
Y2FsbC5tX29mZnNldDsKKyAgICB9CisKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisgICAg
Ly8KKyAgICAvLyAnbGluaycgYW5kICdwYXRjaCcgbWV0aG9kcyBhcmUgZm9yIHVzZSBvbiB1bnBy
b3RlY3RlZCBjb2RlIC0gc3VjaCBhcyB0aGUgY29kZQorICAgIC8vIHdpdGhpbiB0aGUgQXNzZW1i
bGVyQnVmZmVyLCBhbmQgY29kZSBiZWluZyBwYXRjaGVkIGJ5IHRoZSBwYXRjaCBidWZmZXIuICBP
bmNlCisgICAgLy8gY29kZSBoYXMgYmVlbiBmaW5hbGl6ZWQgaXQgaXMgKHBsYXRmb3JtIHN1cHBv
cnQgcGVybWl0dGluZykgd2l0aGluIGEgbm9uLQorICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBt
ZW1vcnk7IHRvIG1vZGlmeSB0aGUgY29kZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCisg
ICAgLy8gcG9vbCB0aGUgJ3JlcGF0Y2gnIGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1
c2VkLgorCisgICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHRvLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20u
bV9vZmZzZXQgIT0gLTEpOworICAgICAgICBtX2p1bXBzVG9MaW5rLmFwcGVuZChMaW5rUmVjb3Jk
KGZyb20ubV9vZmZzZXQsIHRvLm1fb2Zmc2V0LCBmcm9tLm1fdHlwZSwgZnJvbS5tX2NvbmRpdGlv
bikpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNy
YyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9
IC0xKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBsb2NhdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDE2X3QqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZyb20u
bV9vZmZzZXQpOworICAgICAgICBsaW5rSnVtcEFic29sdXRlKGxvY2F0aW9uLCB0byk7CisgICAg
fQorCisgICAgLy8gYmFoLCB0aGlzIG1hdGhvZCBzaG91bGQgcmVhbGx5IGJlIHN0YXRpYywgc2lu
Y2UgaXQgaXMgdXNlZCBieSB0aGUgTGlua0J1ZmZlci4KKyAgICAvLyByZXR1cm4gYSBib29sIHNh
eWluZyB3aGV0aGVyIHRoZSBsaW5rIHdhcyBzdWNjZXNzZnVsPworICAgIHN0YXRpYyB2b2lkIGxp
bmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAg
IEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICYgMSkpOworICAgICAg
ICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAxKTsKKworICAgICAgICBzZXRQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZy
b20ubV9vZmZzZXQpIC0gMSwgdG8pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtQb2lu
dGVyKHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAg
ICBzZXRQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpICsgd2hlcmUubV9vZmZz
ZXQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQqIGZy
b20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbSkgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSAmIDEpKTsKKworICAgICAgICBsaW5rSnVtcEFic29sdXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSwgdG8pOworCisgICAgICAgIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmNhY2hlRmx1c2gocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pIC0gNSwg
NSAqIHNpemVvZih1aW50MTZfdCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZWxp
bmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAxKSk7CisgICAgICAgIEFTU0VSVChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAxKTsKKworICAgICAgICBzZXRQb2ludGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKSAtIDEsIHRvKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih3aGVyZSkgJiAx
KSk7CisgICAgICAgIAorICAgICAgICBzZXRJbnQzMih3aGVyZSwgdmFsdWUpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJl
KSAmIDEpKTsKKyAgICAgICAgCisgICAgICAgIHNldFBvaW50ZXIod2hlcmUsIHZhbHVlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIHdoZXJlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUp
ICYgMSkpOworICAgICAgICB1aW50MTZfdCogbG9hZE9wID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KHdoZXJlKSArIDQ7CisKKyAgICAgICAgQVNTRVJUKChsb2FkT3BbMF0gJiAweGZmZjAp
ID09IE9QX0xEUl9yZWdfVDIpOworICAgICAgICBBU1NFUlQoKGxvYWRPcFsxXSAmIDB4MGZmMCkg
PT0gMCk7CisgICAgICAgIGludCBybiA9IGxvYWRPcFswXSAmIDB4ZjsKKyAgICAgICAgaW50IHJ0
ID0gbG9hZE9wWzFdID4+IDEyOworICAgICAgICBpbnQgcm0gPSBsb2FkT3BbMV0gJiAweGY7CisK
KyAgICAgICAgbG9hZE9wWzBdID0gT1BfQUREX3JlZ19UMyB8IHJuOworICAgICAgICBsb2FkT3Bb
MV0gPSBydCA8PCA4IHwgcm07CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1
c2gobG9hZE9wLCBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8g
VkZQIG9wZXJhdGlvbnMgY29tbW9ubHkgdGFrZSBvbmUgb3IgbW9yZSA1LWJpdCBvcGVyYW5kcywg
dHlwaWNhbGx5IHJlcHJlc2VudGluZyBhCisgICAgLy8gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIg
bnVtYmVyLiAgVGhpcyB3aWxsIGNvbW1vbmx5IGJlIGVuY29kZWQgaW4gdGhlIGluc3RydWN0aW9u
CisgICAgLy8gaW4gdHdvIHBhcnRzLCB3aXRoIG9uZSBzaW5nbGUgYml0IGZpZWxkLCBhbmQgb25l
IDQtYml0IGZpZWxkLiAgSW4gdGhlIGNhc2Ugb2YKKyAgICAvLyBkb3VibGUgcHJlY2lzaW9uIG9w
ZXJhbmRzIHRoZSBoaWdoIGJpdCBvZiB0aGUgcmVnaXN0ZXIgbnVtYmVyIHdpbGwgYmUgZW5jb2Rl
ZAorICAgIC8vIHNlcGFyYXRlbHksIGFuZCBmb3Igc2luZ2xlIHByZWNpc2lvbiBvcGVyYW5kcyB0
aGUgaGlnaCBiaXQgb2YgdGhlIHJlZ2lzdGVyIG51bWJlcgorICAgIC8vIHdpbGwgYmUgZW5jb2Rl
ZCBpbmRpdmlkdWFsbHkuCisgICAgLy8gVkZQT3BlcmFuZCBlbmNhcHN1bGF0ZXMgYSA1LWJpdCBW
RlAgb3BlcmFuZCwgd2l0aCBiaXRzIDAuLjMgY29udGFpbmluZyB0aGUgNC1iaXQKKyAgICAvLyBm
aWVsZCB0byBiZSBlbmNvZGVkIHRvZ2V0aGVyIGluIHRoZSBpbnN0cnVjdGlvbiAodGhlIGxvdyA0
LWJpdHMgb2YgYSBkb3VibGUKKyAgICAvLyByZWdpc3RlciBudW1iZXIsIG9yIHRoZSBoaWdoIDQt
Yml0cyBvZiBhIHNpbmdsZSByZWdpc3RlciBudW1iZXIpLCBhbmQgYml0IDQKKyAgICAvLyBjb250
YWlucyB0aGUgYml0IHZhbHVlIHRvIGJlIGVuY29kZWQgaW5kaXZpZHVhbGx5LgorICAgIHN0cnVj
dCBWRlBPcGVyYW5kIHsKKyAgICAgICAgZXhwbGljaXQgVkZQT3BlcmFuZCh1aW50MzJfdCB2YWx1
ZSkKKyAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKCEobV92YWx1ZSAmIH4weDFmKSk7CisgICAgICAgIH0KKworICAgICAgICBWRlBPcGVy
YW5kKEZQRG91YmxlUmVnaXN0ZXJJRCByZWcpCisgICAgICAgICAgICA6IG1fdmFsdWUocmVnKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBWRlBPcGVyYW5kKFJlZ2lzdGVySUQgcmVn
KQorICAgICAgICAgICAgOiBtX3ZhbHVlKHJlZykKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgVkZQT3BlcmFuZChGUFNpbmdsZVJlZ2lzdGVySUQgcmVnKQorICAgICAgICAgICAgOiBt
X3ZhbHVlKCgocmVnICYgMSkgPDwgNCkgfCAocmVnID4+IDEpKSAvLyByb3RhdGUgdGhlIGxvd2Vz
dCBiaXQgb2YgJ3JlZycgdG8gdGhlIHRvcC4KKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgdWludDMyX3QgYml0czEoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiA0OworICAgICAgICB9CisKKyAgICAgICAgdWludDMyX3QgYml0czQoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZSAmIDB4ZjsKKyAgICAgICAgfQorCisgICAgICAg
IHVpbnQzMl90IG1fdmFsdWU7CisgICAgfTsKKworICAgIFZGUE9wZXJhbmQgdmN2dE9wKGJvb2wg
dG9JbnRlZ2VyLCBib29sIGlzVW5zaWduZWQsIGJvb2wgaXNSb3VuZFplcm8pCisgICAgeworICAg
ICAgICAvLyBDYW5ub3Qgc3BlY2lmeSByb3VuZGluZyB3aGVuIGNvbnZlcnRpbmcgdG8gZmxvYXQu
CisgICAgICAgIEFTU0VSVCh0b0ludGVnZXIgfHwgIWlzUm91bmRaZXJvKTsKKworICAgICAgICB1
aW50MzJfdCBvcCA9IDB4ODsKKyAgICAgICAgaWYgKHRvSW50ZWdlcikgeworICAgICAgICAgICAg
Ly8gb3BjMiBpbmRpY2F0ZXMgYm90aCB0b0ludGVnZXIgJiBpc1Vuc2lnbmVkLgorICAgICAgICAg
ICAgb3AgfD0gaXNVbnNpZ25lZCA/IDB4NCA6IDB4NTsKKyAgICAgICAgICAgIC8vICdvcCcgZmll
bGQgaW4gaW5zdHJ1Y3Rpb24gaXMgaXNSb3VuZFplcm8KKyAgICAgICAgICAgIGlmIChpc1JvdW5k
WmVybykKKyAgICAgICAgICAgICAgICBvcCB8PSAweDEwOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gJ29wJyBmaWVsZCBpbiBpbnN0cnVjdGlvbiBpcyBpc1Vuc2lnbmVkCisgICAg
ICAgICAgICBpZiAoIWlzVW5zaWduZWQpCisgICAgICAgICAgICAgICAgb3AgfD0gMHgxMDsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gVkZQT3BlcmFuZChvcCk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgc2V0SW50MzIodm9pZCogY29kZSwgdWludDMyX3QgdmFsdWUpCisgICAgeworICAg
ICAgICB1aW50MTZfdCogbG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oY29k
ZSk7CisgICAgICAgIEFTU0VSVChpc01PVl9pbW1fVDMobG9jYXRpb24gLSA0KSAmJiBpc01PVlQo
bG9jYXRpb24gLSAyKSk7CisKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgbG8xNiA9IEFSTVRo
dW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHN0YXRpY19jYXN0PHVpbnQxNl90Pih2YWx1ZSkpOwor
ICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBoaTE2ID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VV
SW50MTYoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhbHVlID4+IDE2KSk7CisgICAgICAgIGxvY2F0
aW9uWy00XSA9IHR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2RlZEltbUZpcnN0KE9QX01PVl9pbW1f
VDMsIGxvMTYpOworICAgICAgICBsb2NhdGlvblstM10gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVu
Y29kZWRJbW1TZWNvbmQoKGxvY2F0aW9uWy0zXSA+PiA4KSAmIDB4ZiwgbG8xNik7CisgICAgICAg
IGxvY2F0aW9uWy0yXSA9IHR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2RlZEltbUZpcnN0KE9QX01P
VlQsIGhpMTYpOworICAgICAgICBsb2NhdGlvblstMV0gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVu
Y29kZWRJbW1TZWNvbmQoKGxvY2F0aW9uWy0xXSA+PiA4KSAmIDB4ZiwgaGkxNik7CisKKyAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChsb2NhdGlvbiAtIDQsIDQgKiBzaXpl
b2YodWludDE2X3QpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBzZXRQb2ludGVyKHZvaWQq
IGNvZGUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW50MzIoY29kZSwgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c0Iodm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvbiA9
IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4oYWRkcmVzcyk7CisgICAgICAgIHJldHVybiAoKGluc3Ry
dWN0aW9uWzBdICYgMHhmODAwKSA9PSBPUF9CX1Q0YSkgJiYgKChpbnN0cnVjdGlvblsxXSAmIDB4
ZDAwMCkgPT0gT1BfQl9UNGIpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzQlgodm9pZCog
YWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvbiA9IHN0YXRpY19j
YXN0PHVpbnQxNl90Kj4oYWRkcmVzcyk7CisgICAgICAgIHJldHVybiAoaW5zdHJ1Y3Rpb25bMF0g
JiAweGZmODcpID09IE9QX0JYOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTU9WX2ltbV9U
Myh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uID0g
c3RhdGljX2Nhc3Q8dWludDE2X3QqPihhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuICgoaW5zdHJ1
Y3Rpb25bMF0gJiAweEZCRjApID09IE9QX01PVl9pbW1fVDMpICYmICgoaW5zdHJ1Y3Rpb25bMV0g
JiAweDgwMDApID09IDApOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTU9WVCh2b2lkKiBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uID0gc3RhdGljX2Nh
c3Q8dWludDE2X3QqPihhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuICgoaW5zdHJ1Y3Rpb25bMF0g
JiAweEZCRjApID09IE9QX01PVlQpICYmICgoaW5zdHJ1Y3Rpb25bMV0gJiAweDgwMDApID09IDAp
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTk9QX1QxKHZvaWQqIGFkZHJlc3MpCisgICAg
eworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDx1aW50MTZfdCo+
KGFkZHJlc3MpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25bMF0gPT0gT1BfTk9QX1QxOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzTk9QX1QyKHZvaWQqIGFkZHJlc3MpCisgICAgewor
ICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb24gPSBzdGF0aWNfY2FzdDx1aW50MTZfdCo+KGFk
ZHJlc3MpOworICAgICAgICByZXR1cm4gKGluc3RydWN0aW9uWzBdID09IE9QX05PUF9UMmEpICYm
IChpbnN0cnVjdGlvblsxXSA9PSBPUF9OT1BfVDJiKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBjYW5CZUp1bXBUMShjb25zdCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIGNvbnN0IHZvaWQqIHRh
cmdldCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGluc3RydWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgCisgICAgICAgIGludHB0cl90IHJlbGF0
aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAtIChyZWludGVycHJldF9j
YXN0PGludHB0cl90PihpbnN0cnVjdGlvbikpOworICAgICAgICAvLyBJdCBkb2VzIG5vdCBhcHBl
YXIgdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUgQVJNIEFSTSAoYmlnIHN1cnByaXNlKSwgYnV0Cisg
ICAgICAgIC8vIGZvciBPUF9CX1QxIHRoZSBicmFuY2ggZGlzcGxhY2VtZW50IGVuY29kZWQgaW4g
dGhlIGluc3RydWN0aW9uIGlzIDIgCisgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGRp
c3BsYWNlbWVudC4KKyAgICAgICAgcmVsYXRpdmUgLT0gMjsKKyAgICAgICAgcmV0dXJuICgocmVs
YXRpdmUgPDwgMjMpID4+IDIzKSA9PSByZWxhdGl2ZTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IGJvb2wgY2FuQmVKdW1wVDIoY29uc3QgdWludDE2X3QqIGluc3RydWN0aW9uLCBjb25zdCB2b2lk
KiB0YXJnZXQpCisgICAgeworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCBy
ZWxhdGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgLy8gSXQgZG9lcyBub3Qg
YXBwZWFyIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIEFSTSBBUk0gKGJpZyBzdXJwcmlzZSksIGJ1
dAorICAgICAgICAvLyBmb3IgT1BfQl9UMiB0aGUgYnJhbmNoIGRpc3BsYWNlbWVudCBlbmNvZGVk
IGluIHRoZSBpbnN0cnVjdGlvbiBpcyAyIAorICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIGFjdHVh
bCBkaXNwbGFjZW1lbnQuCisgICAgICAgIHJlbGF0aXZlIC09IDI7CisgICAgICAgIHJldHVybiAo
KHJlbGF0aXZlIDw8IDIwKSA+PiAyMCkgPT0gcmVsYXRpdmU7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGNhbkJlSnVtcFQzKGNvbnN0IHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgY29uc3Qg
dm9pZCogdGFyZ2V0LCBib29sJiBtYXlUcmlnZ2VyRXJyYXRhKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOwor
ICAgICAgICAKKyAgICAgICAgaW50cHRyX3QgcmVsYXRpdmUgPSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0YXJnZXQpIC0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9u
KSk7CisgICAgICAgIC8vIEZyb20gQ29ydGV4LUE4IGVycmF0YToKKyAgICAgICAgLy8gSWYgdGhl
IDMyLWJpdCBUaHVtYi0yIGJyYW5jaCBpbnN0cnVjdGlvbiBzcGFucyB0d28gNEtpQiByZWdpb25z
IGFuZAorICAgICAgICAvLyB0aGUgdGFyZ2V0IG9mIHRoZSBicmFuY2ggZmFsbHMgd2l0aGluIHRo
ZSBmaXJzdCByZWdpb24gaXQgaXMKKyAgICAgICAgLy8gcG9zc2libGUgZm9yIHRoZSBwcm9jZXNz
b3IgdG8gaW5jb3JyZWN0bHkgZGV0ZXJtaW5lIHRoZSBicmFuY2gKKyAgICAgICAgLy8gaW5zdHJ1
Y3Rpb24sIGFuZCBpdCBpcyBhbHNvIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgZm9yIHRoZSBwcm9j
ZXNzb3IKKyAgICAgICAgLy8gdG8gZW50ZXIgYSBkZWFkbG9jayBzdGF0ZS4KKyAgICAgICAgLy8g
VGhlIGluc3RydWN0aW9uIGlzIHNwYW5uaW5nIHR3byBwYWdlcyBpZiBpdCBlbmRzIGF0IGFuIGFk
ZHJlc3MgZW5kaW5nIDB4MDAyCisgICAgICAgIGJvb2wgc3BhbnNUd280SyA9ICgocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMHhmZmYpID09IDB4MDAyKTsKKyAgICAg
ICAgbWF5VHJpZ2dlckVycmF0YSA9IHNwYW5zVHdvNEs7CisgICAgICAgIC8vIFRoZSB0YXJnZXQg
aXMgaW4gdGhlIGZpcnN0IHBhZ2UgaWYgdGhlIGp1bXAgYnJhbmNoIGJhY2sgYnkgWzMuLjB4MTAw
Ml0gYnl0ZXMKKyAgICAgICAgYm9vbCB0YXJnZXRJbkZpcnN0UGFnZSA9IChyZWxhdGl2ZSA+PSAt
MHgxMDAyKSAmJiAocmVsYXRpdmUgPCAtMik7CisgICAgICAgIGJvb2wgd291bGRUcmlnZ2VyQThF
cnJhdGEgPSBzcGFuc1R3bzRLICYmIHRhcmdldEluRmlyc3RQYWdlOworICAgICAgICByZXR1cm4g
KChyZWxhdGl2ZSA8PCAxMSkgPj4gMTEpID09IHJlbGF0aXZlICYmICF3b3VsZFRyaWdnZXJBOEVy
cmF0YTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgY2FuQmVKdW1wVDQoY29uc3QgdWlu
dDE2X3QqIGluc3RydWN0aW9uLCBjb25zdCB2b2lkKiB0YXJnZXQsIGJvb2wmIG1heVRyaWdnZXJF
cnJhdGEpCisgICAgeworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90
PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCByZWxh
dGl2ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgLy8gRnJvbSBDb3J0ZXgtQTgg
ZXJyYXRhOgorICAgICAgICAvLyBJZiB0aGUgMzItYml0IFRodW1iLTIgYnJhbmNoIGluc3RydWN0
aW9uIHNwYW5zIHR3byA0S2lCIHJlZ2lvbnMgYW5kCisgICAgICAgIC8vIHRoZSB0YXJnZXQgb2Yg
dGhlIGJyYW5jaCBmYWxscyB3aXRoaW4gdGhlIGZpcnN0IHJlZ2lvbiBpdCBpcworICAgICAgICAv
LyBwb3NzaWJsZSBmb3IgdGhlIHByb2Nlc3NvciB0byBpbmNvcnJlY3RseSBkZXRlcm1pbmUgdGhl
IGJyYW5jaAorICAgICAgICAvLyBpbnN0cnVjdGlvbiwgYW5kIGl0IGlzIGFsc28gcG9zc2libGUg
aW4gc29tZSBjYXNlcyBmb3IgdGhlIHByb2Nlc3NvcgorICAgICAgICAvLyB0byBlbnRlciBhIGRl
YWRsb2NrIHN0YXRlLgorICAgICAgICAvLyBUaGUgaW5zdHJ1Y3Rpb24gaXMgc3Bhbm5pbmcgdHdv
IHBhZ2VzIGlmIGl0IGVuZHMgYXQgYW4gYWRkcmVzcyBlbmRpbmcgMHgwMDIKKyAgICAgICAgYm9v
bCBzcGFuc1R3bzRLID0gKChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikg
JiAweGZmZikgPT0gMHgwMDIpOworICAgICAgICBtYXlUcmlnZ2VyRXJyYXRhID0gc3BhbnNUd280
SzsKKyAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBpZiB0aGUganVt
cCBicmFuY2ggYmFjayBieSBbMy4uMHgxMDAyXSBieXRlcworICAgICAgICBib29sIHRhcmdldElu
Rmlyc3RQYWdlID0gKHJlbGF0aXZlID49IC0weDEwMDIpICYmIChyZWxhdGl2ZSA8IC0yKTsKKyAg
ICAgICAgYm9vbCB3b3VsZFRyaWdnZXJBOEVycmF0YSA9IHNwYW5zVHdvNEsgJiYgdGFyZ2V0SW5G
aXJzdFBhZ2U7CisgICAgICAgIHJldHVybiAoKHJlbGF0aXZlIDw8IDcpID4+IDcpID09IHJlbGF0
aXZlICYmICF3b3VsZFRyaWdnZXJBOEVycmF0YTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsaW5r
SnVtcFQxKENvbmRpdGlvbiBjb25kLCB1aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdl
dCkKKyAgICB7CisgICAgICAgIC8vIEZJTVhFOiB0aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFj
cm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAgCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgQVNTRVJU
KGNhbkJlSnVtcFQxKGluc3RydWN0aW9uLCB0YXJnZXQpKTsKKyAgICAgICAgCisgICAgICAgIGlu
dHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAtIChy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikpOworICAgICAgICAvLyBJdCBk
b2VzIG5vdCBhcHBlYXIgdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUgQVJNIEFSTSAoYmlnIHN1cnBy
aXNlKSwgYnV0CisgICAgICAgIC8vIGZvciBPUF9CX1QxIHRoZSBicmFuY2ggZGlzcGxhY2VtZW50
IGVuY29kZWQgaW4gdGhlIGluc3RydWN0aW9uIGlzIDIgCisgICAgICAgIC8vIGxlc3MgdGhhbiB0
aGUgYWN0dWFsIGRpc3BsYWNlbWVudC4KKyAgICAgICAgcmVsYXRpdmUgLT0gMjsKKyAgICAgICAg
CisgICAgICAgIC8vIEFsbCBicmFuY2ggb2Zmc2V0cyBzaG91bGQgYmUgYW4gZXZlbiBkaXN0YW5j
ZS4KKyAgICAgICAgQVNTRVJUKCEocmVsYXRpdmUgJiAxKSk7CisgICAgICAgIGluc3RydWN0aW9u
Wy0xXSA9IE9QX0JfVDEgfCAoKGNvbmQgJiAweGYpIDw8IDgpIHwgKChyZWxhdGl2ZSAmIDB4MWZl
KSA+PiAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXBUMih1aW50MTZf
dCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJTVhFOiB0
aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKCAgICAgICAg
CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RydWN0aW9u
KSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFy
Z2V0KSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKGNhbkJlSnVtcFQyKGluc3RydWN0aW9uLCB0YXJn
ZXQpKTsKKyAgICAgICAgCisgICAgICAgIGludHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAtIChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0
cnVjdGlvbikpOworICAgICAgICAvLyBJdCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgZG9jdW1lbnRl
ZCBpbiB0aGUgQVJNIEFSTSAoYmlnIHN1cnByaXNlKSwgYnV0CisgICAgICAgIC8vIGZvciBPUF9C
X1QyIHRoZSBicmFuY2ggZGlzcGxhY2VtZW50IGVuY29kZWQgaW4gdGhlIGluc3RydWN0aW9uIGlz
IDIgCisgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGRpc3BsYWNlbWVudC4KKyAgICAg
ICAgcmVsYXRpdmUgLT0gMjsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbCBicmFuY2ggb2Zmc2V0
cyBzaG91bGQgYmUgYW4gZXZlbiBkaXN0YW5jZS4KKyAgICAgICAgQVNTRVJUKCEocmVsYXRpdmUg
JiAxKSk7CisgICAgICAgIGluc3RydWN0aW9uWy0xXSA9IE9QX0JfVDIgfCAoKHJlbGF0aXZlICYg
MHhmZmUpID4+IDEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtKdW1wVDMoQ29uZGl0aW9u
IGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2VtYmxlciBsYXll
ci4gOi0oCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry
dWN0aW9uKSAmIDEpKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGFyZ2V0KSAmIDEpKTsKKyAgICAgICAgYm9vbCBzY3JhdGNoOworICAgICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaCk7CisgICAgICAgIEFTU0VSVChjYW5CZUp1bXBUMyhpbnN0cnVjdGlvbiwg
dGFyZ2V0LCBzY3JhdGNoKSk7CisgICAgICAgIAorICAgICAgICBpbnRwdHJfdCByZWxhdGl2ZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkgLSAocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oaW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbCBicmFuY2gg
b2Zmc2V0cyBzaG91bGQgYmUgYW4gZXZlbiBkaXN0YW5jZS4KKyAgICAgICAgQVNTRVJUKCEocmVs
YXRpdmUgJiAxKSk7CisgICAgICAgIGluc3RydWN0aW9uWy0yXSA9IE9QX0JfVDNhIHwgKChyZWxh
dGl2ZSAmIDB4MTAwMDAwKSA+PiAxMCkgfCAoKGNvbmQgJiAweGYpIDw8IDYpIHwgKChyZWxhdGl2
ZSAmIDB4M2YwMDApID4+IDEyKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTFdID0gT1BfQl9UM2Ig
fCAoKHJlbGF0aXZlICYgMHg4MDAwMCkgPj4gOCkgfCAoKHJlbGF0aXZlICYgMHg0MDAwMCkgPj4g
NSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+IDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCBsaW5rSnVtcFQ0KHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCogdGFyZ2V0KQorICAg
IHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRoZSBNYWNyb0Fzc2Vt
YmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAgICBib29sIHNjcmF0Y2g7
CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKGNhbkJlSnVt
cFQ0KGluc3RydWN0aW9uLCB0YXJnZXQsIHNjcmF0Y2gpKTsKKyAgICAgICAgCisgICAgICAgIGlu
dHB0cl90IHJlbGF0aXZlID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSAtIChy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikpOworICAgICAgICAvLyBBUk0g
ZW5jb2RpbmcgZm9yIHRoZSB0b3AgdHdvIGJpdHMgYmVsb3cgdGhlIHNpZ24gYml0IGlzICdwZWN1
bGlhcicuCisgICAgICAgIGlmIChyZWxhdGl2ZSA+PSAwKQorICAgICAgICAgICAgcmVsYXRpdmUg
Xj0gMHhDMDAwMDA7CisgICAgICAgIAorICAgICAgICAvLyBBbGwgYnJhbmNoIG9mZnNldHMgc2hv
dWxkIGJlIGFuIGV2ZW4gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVCghKHJlbGF0aXZlICYgMSkp
OworICAgICAgICBpbnN0cnVjdGlvblstMl0gPSBPUF9CX1Q0YSB8ICgocmVsYXRpdmUgJiAweDEw
MDAwMDApID4+IDE0KSB8ICgocmVsYXRpdmUgJiAweDNmZjAwMCkgPj4gMTIpOworICAgICAgICBp
bnN0cnVjdGlvblstMV0gPSBPUF9CX1Q0YiB8ICgocmVsYXRpdmUgJiAweDgwMDAwMCkgPj4gMTAp
IHwgKChyZWxhdGl2ZSAmIDB4NDAwMDAwKSA+PiAxMSkgfCAoKHJlbGF0aXZlICYgMHhmZmUpID4+
IDEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtDb25kaXRpb25hbEp1bXBUNChDb25kaXRp
b24gY29uZCwgdWludDE2X3QqIGluc3RydWN0aW9uLCB2b2lkKiB0YXJnZXQpCisgICAgeworICAg
ICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUgdXAgaW4gdGhlIE1hY3JvQXNzZW1ibGVyIGxh
eWVyLiA6LSggICAgICAgIAorICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbnN0cnVjdGlvbikgJiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHRhcmdldCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBpbnN0cnVjdGlv
blstM10gPSBpZlRoZW5FbHNlKGNvbmQpIHwgT1BfSVQ7CisgICAgICAgIGxpbmtKdW1wVDQoaW5z
dHJ1Y3Rpb24sIHRhcmdldCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxpbmtCWCh1
aW50MTZfdCogaW5zdHJ1Y3Rpb24sIHZvaWQqIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJ
TVhFOiB0aGlzIHNob3VsZCBiZSB1cCBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIgbGF5ZXIuIDotKAor
ICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cnVjdGlvbikg
JiAxKSk7CisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRhcmdl
dCkgJiAxKSk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50MTZfdCBKVU1QX1RFTVBPUkFS
WV9SRUdJU1RFUiA9IEFSTVJlZ2lzdGVyczo6aXA7CisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRl
IGxvMTYgPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNihzdGF0aWNfY2FzdDx1aW50MTZf
dD4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odGFyZ2V0KSArIDEpKTsKKyAgICAgICAgQVJN
VGh1bWJJbW1lZGlhdGUgaGkxNiA9IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHN0YXRp
Y19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0YXJnZXQpID4+IDE2
KSk7CisgICAgICAgIGluc3RydWN0aW9uWy01XSA9IHR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2Rl
ZEltbUZpcnN0KE9QX01PVl9pbW1fVDMsIGxvMTYpOworICAgICAgICBpbnN0cnVjdGlvblstNF0g
PSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1TZWNvbmQoSlVNUF9URU1QT1JBUllfUkVH
SVNURVIsIGxvMTYpOworICAgICAgICBpbnN0cnVjdGlvblstM10gPSB0d29Xb3JkT3A1aTZJbW00
UmVnNEVuY29kZWRJbW1GaXJzdChPUF9NT1ZULCBoaTE2KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25b
LTJdID0gdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tU2Vjb25kKEpVTVBfVEVNUE9SQVJZ
X1JFR0lTVEVSLCBoaTE2KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25bLTFdID0gT1BfQlggfCAoSlVN
UF9URU1QT1JBUllfUkVHSVNURVIgPDwgMyk7CisgICAgfQorICAgIAorICAgIHZvaWQgbGlua0Nv
bmRpdGlvbmFsQlgoQ29uZGl0aW9uIGNvbmQsIHVpbnQxNl90KiBpbnN0cnVjdGlvbiwgdm9pZCog
dGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklNWEU6IHRoaXMgc2hvdWxkIGJlIHVwIGluIHRo
ZSBNYWNyb0Fzc2VtYmxlciBsYXllci4gOi0oICAgICAgICAKKyAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAgICAK
KyAgICAgICAgbGlua0JYKGluc3RydWN0aW9uLCB0YXJnZXQpOworICAgICAgICBpbnN0cnVjdGlv
blstNl0gPSBpZlRoZW5FbHNlKGNvbmQsIHRydWUsIHRydWUpIHwgT1BfSVQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wQWJzb2x1dGUodWludDE2X3QqIGluc3RydWN0aW9u
LCB2b2lkKiB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBGSU1YRTogdGhpcyBzaG91bGQgYmUg
dXAgaW4gdGhlIE1hY3JvQXNzZW1ibGVyIGxheWVyLiA6LSgKKyAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHJ1Y3Rpb24pICYgMSkpOworICAgICAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0YXJnZXQpICYgMSkpOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKChpc01PVl9pbW1fVDMoaW5zdHJ1Y3Rpb24gLSA1KSAmJiBpc01PVlQo
aW5zdHJ1Y3Rpb24gLSAzKSAmJiBpc0JYKGluc3RydWN0aW9uIC0gMSkpCisgICAgICAgICAgICAg
ICB8fCAoaXNOT1BfVDEoaW5zdHJ1Y3Rpb24gLSA1KSAmJiBpc05PUF9UMihpbnN0cnVjdGlvbiAt
IDQpICYmIGlzQihpbnN0cnVjdGlvbiAtIDIpKSk7CisgICAgICAgIAorICAgICAgICBib29sIHNj
cmF0Y2g7CisgICAgICAgIGlmIChjYW5CZUp1bXBUNChpbnN0cnVjdGlvbiwgdGFyZ2V0LCBzY3Jh
dGNoKSkgeworICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIGEgYmV0dGVyIHdheSB0byBmaXgg
dGhpcywgYnV0IHJpZ2h0IG5vdyBwdXQgdGhlIE5PUHMgZmlyc3QsIHNpbmNlIGluIHRoZQorICAg
ICAgICAgICAgLy8gY2FzZSBvZiBhbiBjb25kaXRpb25hbCBicmFuY2ggdGhpcyB3aWxsIGJlIGNv
bWluZyBhZnRlciBhbiBJVFRUIHByZWRpY2F0aW5nICp0aHJlZSoKKyAgICAgICAgICAgIC8vIGlu
c3RydWN0aW9ucyEgIExvb2tpbmcgYmFja3dhcmRzIHRvIG1vZGlmeSB0aGUgSVRUVCB0byBhbiBJ
VCBpcyBub3QgZWFzeSwgZHVlIHRvCisgICAgICAgICAgICAvLyB2YXJpYWJsZSB3ZGl0aCBlbmNv
ZGluZyAtIHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbiBtaWdodCAqbG9vayogbGlrZSBhbiBJVFRU
IGJ1dAorICAgICAgICAgICAgLy8gYWN0dWFsbHkgYmUgdGhlIHNlY29uZCBoYWxmIG9mIGEgMi13
b3JkIG9wLgorICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bLTVdID0gT1BfTk9QX1QxOworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25bLTRdID0gT1BfTk9QX1QyYTsKKyAgICAgICAgICAgIGluc3RydWN0
aW9uWy0zXSA9IE9QX05PUF9UMmI7CisgICAgICAgICAgICBsaW5rSnVtcFQ0KGluc3RydWN0aW9u
LCB0YXJnZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgdWludDE2X3Qg
SlVNUF9URU1QT1JBUllfUkVHSVNURVIgPSBBUk1SZWdpc3RlcnM6OmlwOworICAgICAgICAgICAg
QVJNVGh1bWJJbW1lZGlhdGUgbG8xNiA9IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHN0
YXRpY19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0YXJnZXQpICsg
MSkpOworICAgICAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgaGkxNiA9IEFSTVRodW1iSW1tZWRp
YXRlOjptYWtlVUludDE2KHN0YXRpY19jYXN0PHVpbnQxNl90PihyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Pih0YXJnZXQpID4+IDE2KSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvblstNV0gPSB0
d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdChPUF9NT1ZfaW1tX1QzLCBsbzE2KTsK
KyAgICAgICAgICAgIGluc3RydWN0aW9uWy00XSA9IHR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2Rl
ZEltbVNlY29uZChKVU1QX1RFTVBPUkFSWV9SRUdJU1RFUiwgbG8xNik7CisgICAgICAgICAgICBp
bnN0cnVjdGlvblstM10gPSB0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29kZWRJbW1GaXJzdChPUF9N
T1ZULCBoaTE2KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uWy0yXSA9IHR3b1dvcmRPcDVpNklt
bTRSZWc0RW5jb2RlZEltbVNlY29uZChKVU1QX1RFTVBPUkFSWV9SRUdJU1RFUiwgaGkxNik7Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvblstMV0gPSBPUF9CWCB8IChKVU1QX1RFTVBPUkFSWV9SRUdJ
U1RFUiA8PCAzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDE2X3Qg
dHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tRmlyc3QodWludDE2X3Qgb3AsIEFSTVRodW1i
SW1tZWRpYXRlIGltbSkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCB8IChpbW0ubV92YWx1ZS5p
IDw8IDEwKSB8IGltbS5tX3ZhbHVlLmltbTQ7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQxNl90
IHR3b1dvcmRPcDVpNkltbTRSZWc0RW5jb2RlZEltbVNlY29uZCh1aW50MTZfdCByZCwgQVJNVGh1
bWJJbW1lZGlhdGUgaW1tKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbW0ubV92YWx1ZS5pbW0z
IDw8IDEyKSB8IChyZCA8PCA4KSB8IGltbS5tX3ZhbHVlLmltbTg7CisgICAgfQorCisgICAgY2xh
c3MgQVJNSW5zdHJ1Y3Rpb25Gb3JtYXR0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBv
bmVXb3JkT3A1UmVnM0ltbTgoT3Bjb2RlSUQgb3AsIFJlZ2lzdGVySUQgcmQsIHVpbnQ4X3QgaW1t
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChvcCB8IChyZCA8PCA4
KSB8IGltbSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgb25lV29yZE9wNUlt
bTVSZWczUmVnMyhPcGNvZGVJRCBvcCwgdWludDhfdCBpbW0sIFJlZ2lzdGVySUQgcmVnMSwgUmVn
aXN0ZXJJRCByZWcyKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChv
cCB8IChpbW0gPDwgNikgfCAocmVnMSA8PCAzKSB8IHJlZzIpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBvbmVXb3JkT3A3UmVnM1JlZzNSZWczKE9wY29kZUlEIG9wLCBSZWdpc3RlcklEIHJl
ZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCByZWczKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2J1ZmZlci5wdXRTaG9ydChvcCB8IChyZWcxIDw8IDYpIHwgKHJlZzIgPDwgMykgfCBy
ZWczKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgb25lV29yZE9wOEltbTgoT3Bjb2RlSUQg
b3AsIHVpbnQ4X3QgaW1tKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9y
dChvcCB8IGltbSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG9uZVdvcmRPcDhSZWdSZWcx
NDMoT3Bjb2RlSUQgb3AsIFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChvcCB8ICgocmVnMiAmIDgpIDw8IDQp
IHwgKHJlZzEgPDwgMykgfCAocmVnMiAmIDcpKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIG9u
ZVdvcmRPcDlJbW03KE9wY29kZUlEIG9wLCB1aW50OF90IGltbSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9idWZmZXIucHV0U2hvcnQob3AgfCBpbW0pOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBvbmVXb3JkT3AxMFJlZzNSZWczKE9wY29kZUlEIG9wLCBSZWdpc3RlcklEIHJlZzEsIFJl
Z2lzdGVySUQgcmVnMikKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIucHV0U2hvcnQo
b3AgfCAocmVnMSA8PCAzKSB8IHJlZzIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0d29X
b3JkT3AxMlJlZzRGb3VyRm91cnMoT3Bjb2RlSUQxIG9wLCBSZWdpc3RlcklEIHJlZywgRm91ckZv
dXJzIGZmKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChvcCB8IHJl
Zyk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChmZi5tX3UudmFsdWUpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHR3b1dvcmRPcDE2Rm91ckZvdXJzKE9wY29kZUlE
MSBvcCwgRm91ckZvdXJzIGZmKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRT
aG9ydChvcCk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChmZi5tX3UudmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHR3b1dvcmRPcDE2T3AxNihPcGNvZGVJ
RDEgb3AxLCBPcGNvZGVJRDIgb3AyKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5w
dXRTaG9ydChvcDEpOworICAgICAgICAgICAgbV9idWZmZXIucHV0U2hvcnQob3AyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgdHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tKE9wY29k
ZUlEMSBvcCwgaW50IGltbTQsIFJlZ2lzdGVySUQgcmQsIEFSTVRodW1iSW1tZWRpYXRlIGltbSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgbmV3SW1tID0gaW1tOwor
ICAgICAgICAgICAgbmV3SW1tLm1fdmFsdWUuaW1tNCA9IGltbTQ7CisKKyAgICAgICAgICAgIG1f
YnVmZmVyLnB1dFNob3J0KEFSTXY3QXNzZW1ibGVyOjp0d29Xb3JkT3A1aTZJbW00UmVnNEVuY29k
ZWRJbW1GaXJzdChvcCwgbmV3SW1tKSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydChB
Uk12N0Fzc2VtYmxlcjo6dHdvV29yZE9wNWk2SW1tNFJlZzRFbmNvZGVkSW1tU2Vjb25kKHJkLCBu
ZXdJbW0pKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdHdvV29yZE9wMTJSZWc0UmVnNElt
bTEyKE9wY29kZUlEMSBvcCwgUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIHVpbnQx
Nl90IGltbSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIucHV0U2hvcnQob3AgfCBy
ZWcxKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0KChyZWcyIDw8IDEyKSB8IGltbSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JtYXRzIHVwIGluc3RydWN0aW9ucyBvZiB0aGUg
cGF0dGVybjoKKyAgICAgICAgLy8gICAgMTExMTExMTExQjExYWFhYTpiYmJiMjIyU0EyQzJjY2Nj
CisgICAgICAgIC8vIFdoZXJlIDFzIGluIHRoZSBwYXR0ZXJuIGNvbWUgZnJvbSBvcDEsIDJzIGlu
IHRoZSBwYXR0ZXJuIGNvbWUgZnJvbSBvcDIsIFMgaXMgdGhlIHByb3ZpZGVkIHNpemUgYml0Lgor
ICAgICAgICAvLyBPcGVyYW5kcyBwcm92aWRlIDUgYml0IHZhbHVlcyBvZiB0aGUgZm9ybSBBYWFh
YSwgQmJiYmIsIENjY2NjLgorICAgICAgICB2b2lkIHZmcE9wKE9wY29kZUlEMSBvcDEsIE9wY29k
ZUlEMiBvcDIsIGJvb2wgc2l6ZSwgVkZQT3BlcmFuZCBhLCBWRlBPcGVyYW5kIGIsIFZGUE9wZXJh
bmQgYykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCEob3AxICYgMHgwMDRmKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIShvcDIgJiAweGYxYWYpKTsKKyAgICAgICAgICAgIG1fYnVmZmVy
LnB1dFNob3J0KG9wMSB8IGIuYml0czEoKSA8PCA2IHwgYS5iaXRzNCgpKTsKKyAgICAgICAgICAg
IG1fYnVmZmVyLnB1dFNob3J0KG9wMiB8IGIuYml0czQoKSA8PCAxMiB8IHNpemUgPDwgOCB8IGEu
Yml0czEoKSA8PCA3IHwgYy5iaXRzMSgpIDw8IDUgfCBjLmJpdHM0KCkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQXJtIHZmcCBhZGRyZXNzZXMgY2FuIGJlIG9mZnNldCBieSBhIDktYml0IG9u
ZXMtY29tcCBpbW1lZGlhdGUsIGxlZnQgc2hpZnRlZCBieSAyLgorICAgICAgICAvLyAoaS5lLiAr
Ly0oMC4uMjU1KSAzMi1iaXQgd29yZHMpCisgICAgICAgIHZvaWQgdmZwTWVtT3AoT3Bjb2RlSUQx
IG9wMSwgT3Bjb2RlSUQyIG9wMiwgYm9vbCBzaXplLCBSZWdpc3RlcklEIHJuLCBWRlBPcGVyYW5k
IHJkLCBpbnQzMl90IGltbSkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCB1cCA9IHRydWU7
CisgICAgICAgICAgICBpZiAoaW1tIDwgMCkgeworICAgICAgICAgICAgICAgIGltbSA9IC1pbW07
CisgICAgICAgICAgICAgICAgdXAgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gaW1tOworICAgICAgICAgICAgQVNTRVJU
KCEob2Zmc2V0ICYgfjB4M2ZjKSk7CisgICAgICAgICAgICBvZmZzZXQgPj49IDI7CisKKyAgICAg
ICAgICAgIG1fYnVmZmVyLnB1dFNob3J0KG9wMSB8ICh1cCA8PCA3KSB8IHJkLmJpdHMxKCkgPDwg
NiB8IHJuKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0KG9wMiB8IHJkLmJpdHM0KCkg
PDwgMTIgfCBzaXplIDw8IDggfCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRt
aW5pc3RyYXRpdmUgbWV0aG9kczoKKworICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLnNpemUoKTsgfQorICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25t
ZW50KSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KTsgfQorICAg
ICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAg
ICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpIHsgcmV0
dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7IH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlciBtX2J1ZmZlcjsKKyAgICB9IG1fZm9ybWF0dGVyOwor
CisgICAgVmVjdG9yPExpbmtSZWNvcmQ+IG1fanVtcHNUb0xpbms7CisgICAgVmVjdG9yPGludDMy
X3Q+IG1fb2Zmc2V0czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEFTU0VNQkxFUikgJiYgQ1BVKEFSTV9USFVNQjIpCisKKyNlbmRpZiAvLyBBUk1Bc3NlbWJs
ZXJfaApJbmRleDogd2Via2l0LTEuMy4xMC9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0w
MSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIHdlYmtpdC0xLjMuMTAvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJMjAxMS0wMS0xMiAxMDo1
Njo1Mi44ODg5ODMwMDEgLTA2MDAKQEAgLTAsMCArMSwxMzc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlckFSTXY3X2gKKyNk
ZWZpbmUgTWFjcm9Bc3NlbWJsZXJBUk12N19oCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCisj
aW5jbHVkZSAiQVJNdjdBc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTXY3IDog
cHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QVJNdjdBc3NlbWJsZXI+IHsKKyAgICAvLyBG
SVhNRTogc3dpdGNoIGRhdGFUZW1wUmVnaXN0ZXIgJiBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBvciBw
b3NzaWJseSB1c2Ugcjc/CisgICAgLy8gICAgICAgIC0gZFRSIGlzIGxpa2VseSB1c2VkIG1vcmUg
dGhhbiBhVFIsIGFuZCB3ZSdsbCBnZXQgYmV0dGVyIGluc3RydWN0aW9uCisgICAgLy8gICAgICAg
IGVuY29kaW5nIGlmIGl0J3MgaW4gdGhlIGxvdyA4IHJlZ2lzdGVycy4KKyAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjppcDsKKyAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJz
OjpyMzsKKworICAgIHN0YXRpYyBjb25zdCBBUk1SZWdpc3RlcnM6OkZQRG91YmxlUmVnaXN0ZXJJ
RCBmcFRlbXBSZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6ZDc7CisgICAgaW5saW5lIEFSTVJlZ2lz
dGVyczo6RlBTaW5nbGVSZWdpc3RlcklEIGZwVGVtcFJlZ2lzdGVyQXNTaW5nbGUoKSB7IHJldHVy
biBBUk1SZWdpc3RlcnM6OmFzU2luZ2xlKGZwVGVtcFJlZ2lzdGVyKTsgfQorCitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBBUk12N0Fzc2VtYmxlcjo6TGlua1JlY29yZCBMaW5rUmVjb3JkOworICAgIHR5
cGVkZWYgQVJNdjdBc3NlbWJsZXI6Okp1bXBUeXBlIEp1bXBUeXBlOworICAgIHR5cGVkZWYgQVJN
djdBc3NlbWJsZXI6Okp1bXBMaW5rVHlwZSBKdW1wTGlua1R5cGU7CisKKyAgICBNYWNyb0Fzc2Vt
YmxlckFSTXY3KCkKKyAgICAgICAgOiBtX2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGZhbHNlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgp
IHsgbV9pblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSA9IHRydWU7IH0KKyAgICB2b2lkIGVuZFVuaW50
ZXJydXB0ZWRTZXF1ZW5jZSgpIHsgbV9pblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSA9IGZhbHNlOyB9
CisgICAgVmVjdG9yPExpbmtSZWNvcmQ+JiBqdW1wc1RvTGluaygpIHsgcmV0dXJuIG1fYXNzZW1i
bGVyLmp1bXBzVG9MaW5rKCk7IH0KKyAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJldHVybiBt
X2Fzc2VtYmxlci51bmxpbmtlZENvZGUoKTsgfQorICAgIGJvb2wgY2FuQ29tcGFjdChKdW1wVHlw
ZSBqdW1wVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuY2FuQ29tcGFjdChqdW1wVHlwZSk7IH0K
KyAgICBKdW1wTGlua1R5cGUgY29tcHV0ZUp1bXBUeXBlKEp1bXBUeXBlIGp1bXBUeXBlLCBjb25z
dCB1aW50OF90KiBmcm9tLCBjb25zdCB1aW50OF90KiB0bykgeyByZXR1cm4gbV9hc3NlbWJsZXIu
Y29tcHV0ZUp1bXBUeXBlKGp1bXBUeXBlLCBmcm9tLCB0byk7IH0KKyAgICBKdW1wTGlua1R5cGUg
Y29tcHV0ZUp1bXBUeXBlKExpbmtSZWNvcmQmIHJlY29yZCwgY29uc3QgdWludDhfdCogZnJvbSwg
Y29uc3QgdWludDhfdCogdG8pIHsgcmV0dXJuIG1fYXNzZW1ibGVyLmNvbXB1dGVKdW1wVHlwZShy
ZWNvcmQsIGZyb20sIHRvKTsgfQorICAgIHZvaWQgcmVjb3JkTGlua09mZnNldHMoaW50MzJfdCBy
ZWdpb25TdGFydCwgaW50MzJfdCByZWdpb25FbmQsIGludDMyX3Qgb2Zmc2V0KSB7cmV0dXJuIG1f
YXNzZW1ibGVyLnJlY29yZExpbmtPZmZzZXRzKHJlZ2lvblN0YXJ0LCByZWdpb25FbmQsIG9mZnNl
dCk7IH0KKyAgICBpbnQganVtcFNpemVEZWx0YShKdW1wVHlwZSBqdW1wVHlwZSwgSnVtcExpbmtU
eXBlIGp1bXBMaW5rVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuanVtcFNpemVEZWx0YShqdW1w
VHlwZSwganVtcExpbmtUeXBlKTsgfQorICAgIHZvaWQgbGluayhMaW5rUmVjb3JkJiByZWNvcmQs
IHVpbnQ4X3QqIGZyb20sIHVpbnQ4X3QqIHRvKSB7IHJldHVybiBtX2Fzc2VtYmxlci5saW5rKHJl
Y29yZCwgZnJvbSwgdG8pOyB9CisKKyAgICBzdHJ1Y3QgQXJtQWRkcmVzcyB7CisgICAgICAgIGVu
dW0gQWRkcmVzc1R5cGUgeworICAgICAgICAgICAgSGFzT2Zmc2V0LAorICAgICAgICAgICAgSGFz
SW5kZXgsCisgICAgICAgIH0gdHlwZTsKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlOworICAgICAg
ICB1bmlvbiB7CisgICAgICAgICAgICBpbnQzMl90IG9mZnNldDsKKyAgICAgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBpbmRleDsKKyAgICAgICAgICAgICAgICBT
Y2FsZSBzY2FsZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gdTsKKyAgICAgICAgCisgICAg
ICAgIGV4cGxpY2l0IEFybUFkZHJlc3MoUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgICAgICAgICA6IHR5cGUoSGFzT2Zmc2V0KQorICAgICAgICAgICAgLCBiYXNlKGJh
c2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBleHBsaWNpdCBBcm1BZGRyZXNzKFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBpbmRleCwgU2NhbGUgc2NhbGUgPSBUaW1lc09uZSkKKyAgICAgICAgICAgIDog
dHlwZShIYXNJbmRleCkKKyAgICAgICAgICAgICwgYmFzZShiYXNlKQorICAgICAgICB7CisgICAg
ICAgICAgICB1LmluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICB1LnNjYWxlID0gc2NhbGU7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIAorcHVibGljOgorICAgIHR5cGVkZWYgQVJNUmVnaXN0ZXJz
OjpGUERvdWJsZVJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOworCisgICAgc3RhdGljIGNvbnN0IFNj
YWxlIFNjYWxlUHRyID0gVGltZXNGb3VyOworCisgICAgZW51bSBDb25kaXRpb24geworICAgICAg
ICBFcXVhbCA9IEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25FUSwKKyAgICAgICAgTm90RXF1YWwg
PSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uTkUsCisgICAgICAgIEFib3ZlID0gQVJNdjdBc3Nl
bWJsZXI6OkNvbmRpdGlvbkhJLAorICAgICAgICBBYm92ZU9yRXF1YWwgPSBBUk12N0Fzc2VtYmxl
cjo6Q29uZGl0aW9uSFMsCisgICAgICAgIEJlbG93ID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlv
bkxPLAorICAgICAgICBCZWxvd09yRXF1YWwgPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uTFMs
CisgICAgICAgIEdyZWF0ZXJUaGFuID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbkdULAorICAg
ICAgICBHcmVhdGVyVGhhbk9yRXF1YWwgPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uR0UsCisg
ICAgICAgIExlc3NUaGFuID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbkxULAorICAgICAgICBM
ZXNzVGhhbk9yRXF1YWwgPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uTEUsCisgICAgICAgIE92
ZXJmbG93ID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvblZTLAorICAgICAgICBTaWduZWQgPSBB
Uk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uTUksCisgICAgICAgIFplcm8gPSBBUk12N0Fzc2VtYmxl
cjo6Q29uZGl0aW9uRVEsCisgICAgICAgIE5vblplcm8gPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0
aW9uTkUKKyAgICB9OworICAgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAgLy8gVGhl
c2UgY29uZGl0aW9ucyB3aWxsIG9ubHkgZXZhbHVhdGUgdG8gdHJ1ZSBpZiB0aGUgY29tcGFyaXNv
biBpcyBvcmRlcmVkIC0gaS5lLiBuZWl0aGVyIG9wZXJhbmQgaXMgTmFOLgorICAgICAgICBEb3Vi
bGVFcXVhbCA9IEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25FUSwKKyAgICAgICAgRG91YmxlTm90
RXF1YWwgPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uVkMsIC8vIE5vdCB0aGUgcmlnaHQgZmxh
ZyEgY2hlY2sgZm9yIHRoaXMgJiBoYW5kbGUgZGlmZmVyZW50bHkuCisgICAgICAgIERvdWJsZUdy
ZWF0ZXJUaGFuID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbkdULAorICAgICAgICBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwgPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uR0UsCisgICAgICAg
IERvdWJsZUxlc3NUaGFuID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbkxPLAorICAgICAgICBE
b3VibGVMZXNzVGhhbk9yRXF1YWwgPSBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uTFMsCisgICAg
ICAgIC8vIElmIGVpdGhlciBvcGVyYW5kIGlzIE5hTiwgdGhlc2UgY29uZGl0aW9ucyBhbHdheXMg
ZXZhbHVhdGUgdG8gdHJ1ZS4KKyAgICAgICAgRG91YmxlRXF1YWxPclVub3JkZXJlZCA9IEFSTXY3
QXNzZW1ibGVyOjpDb25kaXRpb25WUywgLy8gTm90IHRoZSByaWdodCBmbGFnISBjaGVjayBmb3Ig
dGhpcyAmIGhhbmRsZSBkaWZmZXJlbnRseS4KKyAgICAgICAgRG91YmxlTm90RXF1YWxPclVub3Jk
ZXJlZCA9IEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25ORSwKKyAgICAgICAgRG91YmxlR3JlYXRl
clRoYW5PclVub3JkZXJlZCA9IEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25ISSwKKyAgICAgICAg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBBUk12N0Fzc2VtYmxlcjo6Q29u
ZGl0aW9uSFMsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQgPSBBUk12N0Fzc2Vt
Ymxlcjo6Q29uZGl0aW9uTFQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRl
cmVkID0gQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbkxFLAorICAgIH07CisKKyAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6c3A7
CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGlua1JlZ2lzdGVyID0gQVJNUmVnaXN0ZXJz
OjpscjsKKworICAgIC8vIEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zOgorICAgIC8vCisg
ICAgLy8gT3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IHR3byBvcGVyYW5kIC0gb3BlcmF0aW9uKHNv
dXJjZSwgc3JjRHN0KQorICAgIC8vIEZvciBtYW55IG9wZXJhdGlvbnMgdGhlIHNvdXJjZSBtYXkg
YmUgYW4gSW1tMzIsIHRoZSBzcmNEc3Qgb3BlcmFuZAorICAgIC8vIG1heSBvZnRlbiBiZSBhIG1l
bW9yeSBsb2NhdGlvbiAoZXhwbGljdGx5IGRlc2NyaWJlZCB1c2luZyBhbiBBZGRyZXNzCisgICAg
Ly8gb2JqZWN0KS4KKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZChkZXN0LCBkZXN0LCBzcmMpOwor
ICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBhZGQzMihpbW0sIGRlc3QsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRk
MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VV
SW50MTJPckVuY29kZWRJbW0oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoYXJtSW1tLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZChkZXN0LCBzcmMsIGFybUltbSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkKGRlc3QsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIp
OworCisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGFybUltbSA9IEFSTVRodW1iSW1tZWRpYXRl
OjptYWtlVUludDEyT3JFbmNvZGVkSW1tKGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGFybUlt
bS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGQoZGF0YVRlbXBSZWdpc3Rl
ciwgZGF0YVRlbXBSZWdpc3RlciwgYXJtSW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAvLyBIcnJybSwgc2luY2UgZGF0YVRlbXBSZWdpc3RlciBob2xkcyB0aGUgZGF0YSBsb2FkZWQs
CisgICAgICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciB0byBob2xkIHRoZSBpbW1l
ZGlhdGUuCisgICAgICAgICAgICBtb3ZlKGltbSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGQoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMyKGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBhZGQzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcy5tX3B0ciwgZGF0YVRlbXBSZWdpc3Rlcik7
CisKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6
Om1ha2VVSW50MTJPckVuY29kZWRJbW0oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoYXJtSW1t
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZChkYXRhVGVtcFJlZ2lzdGVy
LCBkYXRhVGVtcFJlZ2lzdGVyLCBhcm1JbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEhycnJtLCBzaW5jZSBkYXRhVGVtcFJlZ2lzdGVyIGhvbGRzIHRoZSBkYXRhIGxvYWRlZCwK
KyAgICAgICAgICAgIC8vIHVzZSBhZGRyZXNzVGVtcFJlZ2lzdGVyIHRvIGhvbGQgdGhlIGltbWVk
aWF0ZS4KKyAgICAgICAgICAgIG1vdmUoaW1tLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZChkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIoZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuQVJNX2FuZChkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBUk1UaHVtYkltbWVkaWF0
ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0oaW1tLm1fdmFsdWUp
OworICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LkFSTV9hbmQoZGVzdCwgZGVzdCwgYXJtSW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5B
Uk1fYW5kKGRlc3QsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBjb3VudExlYWRpbmdaZXJvczMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbHooZGVzdCwgc3JjKTsKKyAgICB9
CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICAvLyBDbGFtcCB0aGUgc2hpZnQgdG8gdGhlIHJhbmdlIDAu
LjMxCisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGFybUltbSA9IEFSTVRodW1iSW1tZWRpYXRl
OjptYWtlRW5jb2RlZEltbSgweDFmKTsKKyAgICAgICAgQVNTRVJUKGFybUltbS5pc1ZhbGlkKCkp
OworICAgICAgICBtX2Fzc2VtYmxlci5BUk1fYW5kKGRhdGFUZW1wUmVnaXN0ZXIsIHNoaWZ0X2Ft
b3VudCwgYXJtSW1tKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sc2woZGVzdCwgZGVzdCwgZGF0
YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxzbChkZXN0LCBkZXN0
LCBpbW0ubV92YWx1ZSAmIDB4MWYpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNtdWxs
KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBt
dWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNtdWxsKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgfQorCisgICAgdm9pZCBuZWczMihSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5uZWcoc3JjRGVzdCwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCBu
b3QzMihSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdm4o
c3JjRGVzdCwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnIoZGVzdCwg
ZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVt
YkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoYXJt
SW1tLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9ycihkZXN0LCBkZXN0LCBh
cm1JbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9ycihkZXN0LCBkZXN0LCBkYXRhVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0
ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8vIENs
YW1wIHRoZSBzaGlmdCB0byB0aGUgcmFuZ2UgMC4uMzEKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlh
dGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVkSW1tKDB4MWYpOworICAg
ICAgICBBU1NFUlQoYXJtSW1tLmlzVmFsaWQoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLkFSTV9h
bmQoZGF0YVRlbXBSZWdpc3Rlciwgc2hpZnRfYW1vdW50LCBhcm1JbW0pOworCisgICAgICAgIG1f
YXNzZW1ibGVyLmFzcihkZXN0LCBkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYXNyKGRlc3QsIGRlc3QsIGltbS5tX3ZhbHVlICYgMHgxZik7CisgICAg
fQorICAgIAorICAgIHZvaWQgdXJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICAvLyBDbGFtcCB0aGUgc2hpZnQgdG8gdGhlIHJh
bmdlIDAuLjMxCisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGFybUltbSA9IEFSTVRodW1iSW1t
ZWRpYXRlOjptYWtlRW5jb2RlZEltbSgweDFmKTsKKyAgICAgICAgQVNTRVJUKGFybUltbS5pc1Zh
bGlkKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5BUk1fYW5kKGRhdGFUZW1wUmVnaXN0ZXIsIHNo
aWZ0X2Ftb3VudCwgYXJtSW1tKTsKKyAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmxzcihk
ZXN0LCBkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB1cnNo
aWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sc3IoZGVzdCwgZGVzdCwgaW1tLm1fdmFsdWUgJiAweDFmKTsKKyAgICB9CisKKyAgICB2
b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5zdWIoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVJNVGh1bWJJ
bW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTJPckVuY29kZWRJ
bW0oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YihkZXN0LCBkZXN0LCBhcm1JbW0pOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN1YihkZXN0LCBkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisKKyAgICAgICAg
QVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTJP
ckVuY29kZWRJbW0oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YihkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyLCBhcm1JbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEhycnJtLCBz
aW5jZSBkYXRhVGVtcFJlZ2lzdGVyIGhvbGRzIHRoZSBkYXRhIGxvYWRlZCwKKyAgICAgICAgICAg
IC8vIHVzZSBhZGRyZXNzVGVtcFJlZ2lzdGVyIHRvIGhvbGQgdGhlIGltbWVkaWF0ZS4KKyAgICAg
ICAgICAgIG1vdmUoaW1tLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN1YihkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIHN1YjMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIGxvYWQzMihhZGRyZXNzLm1fcHRyLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBB
Uk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxMk9y
RW5jb2RlZEltbShpbW0ubV92YWx1ZSk7CisgICAgICAgIGlmIChhcm1JbW0uaXNWYWxpZCgpKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3ViKGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGFybUltbSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gSHJycm0sIHNp
bmNlIGRhdGFUZW1wUmVnaXN0ZXIgaG9sZHMgdGhlIGRhdGEgbG9hZGVkLAorICAgICAgICAgICAg
Ly8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgdG8gaG9sZCB0aGUgaW1tZWRpYXRlLgorICAgICAg
ICAgICAgbW92ZShpbW0sIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3ViKGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzLm1fcHRyKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3IoZGVzdCwg
ZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1
bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVkSW1tKGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGFy
bUltbS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lb3IoZGVzdCwgZGVzdCwg
YXJtSW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lb3IoZGVzdCwgZGVzdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisKKyAgICAvLyBNZW1vcnkgYWNj
ZXNzIG9wZXJhdGlvbnM6CisgICAgLy8KKyAgICAvLyBMb2FkcyBhcmUgb2YgdGhlIGZvcm0gbG9h
ZChhZGRyZXNzLCBkZXN0aW5hdGlvbikgYW5kIHN0b3JlcyBvZiB0aGUgZm9ybQorICAgIC8vIHN0
b3JlKHNvdXJjZSwgYWRkcmVzcykuICBUaGUgc291cmNlIGZvciBhIHN0b3JlIG1heSBiZSBhbiBJ
bW0zMi4gIEFkZHJlc3MKKyAgICAvLyBvcGVyYW5kIG9iamVjdHMgdG8gbG9hZHMgYW5kIHN0b3Jl
IHdpbGwgYmUgaW1wbGljaXRseSBjb25zdHJ1Y3RlZCBpZiBhCisgICAgLy8gcmVnaXN0ZXIgaXMg
cGFzc2VkLgorCitwcml2YXRlOgorICAgIHZvaWQgbG9hZDMyKEFybUFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3MudHlwZSA9PSBBcm1B
ZGRyZXNzOjpIYXNJbmRleCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcihkZXN0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MudS5pbmRleCwgYWRkcmVzcy51LnNjYWxlKTsKKyAgICAgICAgZWxz
ZSBpZiAoYWRkcmVzcy51Lm9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICBBUk1UaHVtYkltbWVk
aWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxMihhZGRyZXNzLnUub2Zm
c2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChhcm1JbW0uaXNWYWxpZCgpKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxkcihkZXN0LCBhZGRyZXNzLmJhc2UsIGFybUltbSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoYWRkcmVzcy51Lm9mZnNldCA+PSAtMjU1KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MudS5v
ZmZzZXQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZDE2
KEFybUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KGFkZHJlc3MudHlwZSA9PSBBcm1BZGRyZXNzOjpIYXNJbmRleCkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxkcmgoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLnUuaW5kZXgsIGFkZHJlc3Mu
dS5zY2FsZSk7CisgICAgICAgIGVsc2UgaWYgKGFkZHJlc3MudS5vZmZzZXQgPj0gMCkgeworICAg
ICAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1h
a2VVSW50MTIoYWRkcmVzcy51Lm9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQoYXJtSW1tLmlz
VmFsaWQoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRlc3QsIGFkZHJlc3MuYmFz
ZSwgYXJtSW1tKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChhZGRyZXNz
LnUub2Zmc2V0ID49IC0yNTUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyaChkZXN0LCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MudS5vZmZzZXQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgbG9hZDgoQXJtQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy50eXBlID09IEFybUFkZHJlc3M6Okhhc0lu
ZGV4KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyYihkZXN0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MudS5pbmRleCwgYWRkcmVzcy51LnNjYWxlKTsKKyAgICAgICAgZWxzZSBpZiAoYWRkcmVz
cy51Lm9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0g
PSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxMihhZGRyZXNzLnUub2Zmc2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChhcm1JbW0uaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxkcmIoZGVzdCwgYWRkcmVzcy5iYXNlLCBhcm1JbW0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKGFkZHJlc3MudS5vZmZzZXQgPj0gLTI1NSk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sZHJiKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy51Lm9mZnNldCwgdHJ1
ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVy
SUQgc3JjLCBBcm1BZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoYWRkcmVzcy50
eXBlID09IEFybUFkZHJlc3M6Okhhc0luZGV4KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Ry
KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLnUuaW5kZXgsIGFkZHJlc3MudS5zY2FsZSk7Cisg
ICAgICAgIGVsc2UgaWYgKGFkZHJlc3MudS5vZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgQVJN
VGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTIoYWRk
cmVzcy51Lm9mZnNldCk7CisgICAgICAgICAgICBBU1NFUlQoYXJtSW1tLmlzVmFsaWQoKSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHIoc3JjLCBhZGRyZXNzLmJhc2UsIGFybUltbSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoYWRkcmVzcy51Lm9mZnNldCA+PSAt
MjU1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cihzcmMsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy51Lm9mZnNldCwgdHJ1ZSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCitwdWJsaWM6
CisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzZXR1cEFybUFkZHJlc3MoYWRkcmVzcyksIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIoc2V0dXBBcm1BZGRyZXNzKGFkZHJlc3MpLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihz
ZXR1cEFybUFkZHJlc3MoYWRkcmVzcyksIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMy
KHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoSW1t
UHRyKGFkZHJlc3MpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bGRyKGRlc3QsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUlu
dDE2KDApKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ4KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChzZXR1cEFybUFkZHJlc3Mo
YWRkcmVzcyksIGRlc3QpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCA9IG1vdmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5v
ZmZzZXQpLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbG9hZDMyKEFybUFkZHJlc3MoYWRk
cmVzcy5iYXNlLCBkYXRhVGVtcFJlZ2lzdGVyKSwgZGVzdCk7CisgICAgICAgIHJldHVybiBsYWJl
bDsKKyAgICB9CisKKyAgICBMYWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsK
KyAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMihhZGRyZXNzLm9mZnNldCksIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBsb2FkMzIoQXJtQWRkcmVzcyhhZGRyZXNzLmJhc2Us
IGRhdGFUZW1wUmVnaXN0ZXIpLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0K
KworICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRlc3QsIG1ha2VCYXNlSW5kZXhCYXNlKGFk
ZHJlc3MpLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBsb2FkMTYoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGFybUltbSA9IEFSTVRodW1iSW1tZWRpYXRl
OjptYWtlVUludDEyKGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgaWYgKGFybUltbS5pc1ZhbGlk
KCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRlc3QsIGFkZHJlc3MuYmFzZSwgYXJt
SW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRl
c3QsIGFkZHJlc3MuYmFzZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwg
PSBtb3ZlV2l0aFBhdGNoKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIHN0b3JlMzIoc3JjLCBBcm1BZGRyZXNzKGFkZHJlc3MuYmFzZSwgZGF0YVRlbXBS
ZWdpc3RlcikpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgdm9pZCBzdG9y
ZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIHN0b3JlMzIoc3JjLCBzZXR1cEFybUFkZHJlc3MoYWRkcmVzcykpOworICAgIH0KKworICAg
IHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgewor
ICAgICAgICBzdG9yZTMyKHNyYywgc2V0dXBBcm1BZGRyZXNzKGFkZHJlc3MpKTsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmUz
MihkYXRhVGVtcFJlZ2lzdGVyLCBzZXR1cEFybUFkZHJlc3MoYWRkcmVzcykpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1vdmUoSW1tUHRyKGFkZHJlc3MpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3RyKHNyYywgYWRkcmVzc1RlbXBSZWdpc3RlciwgQVJNVGh1bWJJbW1l
ZGlhdGU6Om1ha2VVSW50MTYoMCkpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBp
bW0sIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKGltbSwgZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CisgICAg
fQorCisKKyAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zOgorCisgICAgYm9vbCBzdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gT24geDg2
KF82NCkgdGhlIE1hY3JvQXNzZW1ibGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0cnVuY2F0
ZSBhIGRvdWJsZSB0byBhbiBpbnRlZ2VyLgorICAgIC8vIElmIGEgdmFsdWUgaXMgbm90IHJlcHJl
c2VudGFibGUgYXMgYW4gaW50ZWdlciwgYW5kIHBvc3NpYmx5IGZvciBzb21lIHZhbHVlcyB0aGF0
IGFyZSwKKyAgICAvLyAob24geDg2IElOVF9NSU4sIHNpbmNlIHRoaXMgaXMgaW5kaXN0aW5ndWlz
aGFibGUgZnJvbSByZXN1bHRzIGZvciBvdXQtb2YtcmFuZ2UvTmFOIGlucHV0KQorICAgIC8vIGEg
YnJhbmNoIHdpbGwgIGJlIHRha2VuLiAgSXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgdGhpcyBpbnRl
cmZhY2Ugd2lsbCBiZSB3ZWxsIHN1aXRlZCB0bworICAgIC8vIG90aGVyIHBsYXRmb3Jtcy4gIE9u
IEFSTXY3IHRoZSBoYXJkd2FyZSB0cnVuY2F0aW9uIG9wZXJhdGlvbiBwcm9kdWNlcyBtdWx0aXBs
ZSBwb3NzaWJsZQorICAgIC8vIGZhaWx1cmUgdmFsdWVzIChzYXR1cmF0ZXMgdG8gSU5UX01JTiAm
IElOVF9NQVgsIE5hTiByZXVsc3RzIGluIGEgdmFsdWUgb2YgMCkuICBUaGlzIGlzIGEKKyAgICAv
LyB0ZW1wb3Jhcnkgc29sdXRpb24gd2hpbGUgd2Ugd29yayBvdXQgd2hhdCB0aGlzIGludGVyZmFj
ZSBzaG91bGQgYmUuICBFaXRoZXIgd2UgbmVlZCB0bworICAgIC8vIGRlY2lkZSB0byBtYWtlIHRo
aXMgaW50ZXJmYWNlIHdvcmsgb24gYWxsIHBsYXRmb3JtcywgcmV3b3JrIHRoZSBpbnRlcmZhY2Ug
dG8gbWFrZSBpdCBtb3JlCisgICAgLy8gZ2VuZXJpYywgb3IgZGVjaWRlIHRoYXQgdGhlIE1hY3Jv
QXNzZW1ibGVyIGNhbm5vdCBwcmFjdGljYWxseSBiZSB1c2VkIHRvIGFic3RyYWN0ZWQgdGhlc2UK
KyAgICAvLyBvcGVyYXRpb25zLCBhbmQgbWFrZSBjbGllbnRzIGdvIGRpcmVjdGx5IHRvIHRoZSBt
X2Fzc2VtYmxlciB0byBwbGFudCB0cnVuY2F0aW9uIGluc3RydWN0aW9ucy4KKyAgICAvLyBJbiBz
aG9ydCwgRklYTUU6LgorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRT
cXJ0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBiYXNlID0gYWRkcmVzcy5iYXNlOworICAgICAg
ICBpbnQzMl90IG9mZnNldCA9IGFkZHJlc3Mub2Zmc2V0OworCisgICAgICAgIC8vIEFybSB2ZnAg
YWRkcmVzc2VzIGNhbiBiZSBvZmZzZXQgYnkgYSA5LWJpdCBvbmVzLWNvbXAgaW1tZWRpYXRlLCBs
ZWZ0IHNoaWZ0ZWQgYnkgMi4KKyAgICAgICAgaWYgKChvZmZzZXQgJiAzKSB8fCAob2Zmc2V0ID4g
KDI1NSAqIDQpKSB8fCAob2Zmc2V0IDwgLSgyNTUgKiA0KSkpIHsKKyAgICAgICAgICAgIGFkZDMy
KEltbTMyKG9mZnNldCksIGJhc2UsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAg
YmFzZSA9IGFkZHJlc3NUZW1wUmVnaXN0ZXI7CisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci52bGRyKGRlc3QsIGJhc2UsIG9m
ZnNldCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKGNvbnN0IHZvaWQqIGFkZHJlc3Ms
IEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShJbW1QdHIoYWRkcmVzcyks
IGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci52bGRyKGRlc3QsIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIsIDApOworICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBS
ZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIGJhc2UgPSBhZGRyZXNzLmJhc2U7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0g
YWRkcmVzcy5vZmZzZXQ7CisKKyAgICAgICAgLy8gQXJtIHZmcCBhZGRyZXNzZXMgY2FuIGJlIG9m
ZnNldCBieSBhIDktYml0IG9uZXMtY29tcCBpbW1lZGlhdGUsIGxlZnQgc2hpZnRlZCBieSAyLgor
ICAgICAgICBpZiAoKG9mZnNldCAmIDMpIHx8IChvZmZzZXQgPiAoMjU1ICogNCkpIHx8IChvZmZz
ZXQgPCAtKDI1NSAqIDQpKSkgeworICAgICAgICAgICAgYWRkMzIoSW1tMzIob2Zmc2V0KSwgYmFz
ZSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBiYXNlID0gYWRkcmVzc1RlbXBS
ZWdpc3RlcjsKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fYXNzZW1ibGVyLnZzdHIoc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIudmFkZF9GNjQoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgZnBUZW1wUmVnaXN0ZXIpOworICAgICAgICBh
ZGREb3VibGUoZnBUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgZGl2RG91
YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIudmRpdl9GNjQoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lk
IHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnZzdWJfRjY0KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisg
ICAgdm9pZCBzdWJEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbG9hZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc3ViRG91
YmxlKGZwVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShG
UFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnZtdWxfRjY0KGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtdWxE
b3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9h
ZERvdWJsZShzcmMsIGZwVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbXVsRG91YmxlKGZwVGVtcFJl
Z2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNxcnREb3VibGUoRlBSZWdpc3RlcklE
LCBGUFJlZ2lzdGVySUQpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnZtb3YoZnBUZW1wUmVn
aXN0ZXJBc1NpbmdsZSgpLCBzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci52Y3Z0X0Y2NF9TMzIo
ZGVzdCwgZnBUZW1wUmVnaXN0ZXJBc1NpbmdsZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZl
cnRJbnQzMlRvRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICAvLyBGaXhtZTogbG9hZCBkaXJlY3RseSBpbnRvIHRoZSBmcHIhCisgICAgICAg
IGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
dm1vdihmcFRlbXBSZWdpc3RlckFzU2luZ2xlKCksIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBtX2Fzc2VtYmxlci52Y3Z0X0Y2NF9TMzIoZGVzdCwgZnBUZW1wUmVnaXN0ZXJBc1NpbmdsZSgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8vIEZpeG1lOiBs
b2FkIGRpcmVjdGx5IGludG8gdGhlIGZwciEKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MubV9wdHIs
IGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci52bW92KGZwVGVtcFJlZ2lz
dGVyQXNTaW5nbGUoKSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnZj
dnRfRjY0X1MzMihkZXN0LCBmcFRlbXBSZWdpc3RlckFzU2luZ2xlKCkpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoRG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVm
dCwgRlBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudmNtcF9G
NjQobGVmdCwgcmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci52bXJzKCk7CisKKyAgICAgICAg
aWYgKGNvbmQgPT0gRG91YmxlTm90RXF1YWwpIHsKKyAgICAgICAgICAgIC8vIENvbmRpdGlvbk5F
IGp1bXBzIGlmIE5vdEVxdWFsICpvciogdW5vcmRlcmVkIC0gZm9yY2UgdGhlIHVub3JkZXJlZCBj
YXNlcyBub3QgdG8ganVtcC4KKyAgICAgICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFrZUJyYW5j
aChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOworICAgICAgICAgICAgSnVtcCByZXN1bHQg
PSBtYWtlQnJhbmNoKEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25ORSk7CisgICAgICAgICAgICB1
bm9yZGVyZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgeworICAgICAg
ICAgICAgSnVtcCB1bm9yZGVyZWQgPSBtYWtlQnJhbmNoKEFSTXY3QXNzZW1ibGVyOjpDb25kaXRp
b25WUyk7CisgICAgICAgICAgICBKdW1wIG5vdEVxdWFsID0gbWFrZUJyYW5jaChBUk12N0Fzc2Vt
Ymxlcjo6Q29uZGl0aW9uTkUpOworICAgICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7Cisg
ICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBlaXRoZXIgdW5vcmRlcmVkIG9yIGVxdWFsLgor
ICAgICAgICAgICAgSnVtcCByZXN1bHQgPSBtYWtlSnVtcCgpOworICAgICAgICAgICAgbm90RXF1
YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1ha2VCcmFuY2goY29uZCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklELCBSZWdpc3RlcklEKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAg
fQorCisgICAgLy8gQ29udmVydCAnc3JjJyB0byBhbiBpbnRlZ2VyLCBhbmQgcGxhY2VzIHRoZSBy
ZXN1bHRpbmcgJ2Rlc3QnLgorICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFi
bGUgYXMgYSAzMiBiaXQgdmFsdWUsIGJyYW5jaC4KKyAgICAvLyBNYXkgYWxzbyBicmFuY2ggZm9y
IHNvbWUgdmFsdWVzIHRoYXQgYXJlIHJlcHJlc2VudGFibGUgaW4gMzIgYml0cworICAgIC8vIChz
cGVjaWZpY2FsbHksIGluIHRoaXMgY2FzZSwgMCkuCisgICAgdm9pZCBicmFuY2hDb252ZXJ0RG91
YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIEp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMsIEZQUmVnaXN0ZXJJRCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnZj
dnRyX1MzMl9GNjQoZnBUZW1wUmVnaXN0ZXJBc1NpbmdsZSgpLCBzcmMpOworICAgICAgICBtX2Fz
c2VtYmxlci52bW92KGRlc3QsIGZwVGVtcFJlZ2lzdGVyQXNTaW5nbGUoKSk7CisKKyAgICAgICAg
Ly8gQ29udmVydCB0aGUgaW50ZWdlciByZXN1bHQgYmFjayB0byBmbG9hdCAmIGNvbXBhcmUgdG8g
dGhlIG9yaWdpbmFsIHZhbHVlIC0gaWYgbm90IGVxdWFsIG9yIHVub3JkZXJlZCAoTmFOKSB0aGVu
IGp1bXAuCisgICAgICAgIG1fYXNzZW1ibGVyLnZjdnRfRjY0X1MzMihmcFRlbXBSZWdpc3Rlciwg
ZnBUZW1wUmVnaXN0ZXJBc1NpbmdsZSgpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChi
cmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgc3JjLCBmcFRlbXBSZWdpc3Rl
cikpOworCisgICAgICAgIC8vIElmIHRoZSByZXN1bHQgaXMgemVybywgaXQgbWlnaHQgaGF2ZSBi
ZWVuIC0wLjAsIGFuZCB0aGUgZG91YmxlIGNvbXBhcmlzb24gd29uJ3QgY2F0Y2ggdGhpcyEKKyAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgZGVzdCkpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJlZ2lzdGVySUQgcmVnLCBGUFJl
Z2lzdGVySUQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci52Y21wel9GNjQocmVnKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIudm1ycygpOworICAgICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VC
cmFuY2goQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgSnVtcCByZXN1bHQg
PSBtYWtlQnJhbmNoKEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25ORSk7CisgICAgICAgIHVub3Jk
ZXJlZC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoRG91YmxlWmVyb09yTmFOKEZQUmVnaXN0ZXJJRCByZWcsIEZQUmVnaXN0ZXJJRCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnZjbXB6X0Y2NChyZWcpOworICAgICAgICBtX2Fz
c2VtYmxlci52bXJzKCk7CisgICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFrZUJyYW5jaChBUk12
N0Fzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOworICAgICAgICBKdW1wIG5vdEVxdWFsID0gbWFrZUJy
YW5jaChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uTkUpOworICAgICAgICB1bm9yZGVyZWQubGlu
ayh0aGlzKTsKKyAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgZWl0aGVyIHVub3JkZXJlZCBvciBl
cXVhbC4KKyAgICAgICAgSnVtcCByZXN1bHQgPSBtYWtlSnVtcCgpOworICAgICAgICBub3RFcXVh
bC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIFN0
YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gVGhlIEFCSSBpcyBh
c3N1bWVkIHRvIHByb3ZpZGUgYSBzdGFjayBhYnN0cmFjdGlvbiB0byBtZW1vcnksCisgICAgLy8g
Y29udGFpbmluZyBtYWNoaW5lIHdvcmQgc2l6ZWQgdW5pdHMgb2YgZGF0YS4gIFB1c2ggYW5kIHBv
cAorICAgIC8vIG9wZXJhdGlvbnMgYWRkIGFuZCByZW1vdmUgYSBzaW5nbGUgcmVnaXN0ZXIgc2l6
ZWQgdW5pdCBvZiBkYXRhCisgICAgLy8gdG8gb3IgZnJvbSB0aGUgc3RhY2suICBQZWVrIGFuZCBw
b2tlIG9wZXJhdGlvbnMgcmVhZCBvciB3cml0ZQorICAgIC8vIHZhbHVlcyBvbiB0aGUgc3RhY2ss
IHdpdGhvdXQgbW92aW5nIHRoZSBjdXJyZW50IHN0YWNrIHBvc2l0aW9uLgorICAgIAorICAgIHZv
aWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8vIHN0b3JlIHBvc3RpbmRl
eGVkIHdpdGggd3JpdGViYWNrCisgICAgICAgIG1fYXNzZW1ibGVyLmxkcihkZXN0LCBBUk1SZWdp
c3RlcnM6OnNwLCBzaXplb2Yodm9pZCopLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgLy8gc3RvcmUgcHJlaW5kZXhl
ZCB3aXRoIHdyaXRlYmFjaworICAgICAgICBtX2Fzc2VtYmxlci5zdHIoc3JjLCBBUk1SZWdpc3Rl
cnM6OnNwLCAtc2l6ZW9mKHZvaWQqKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBw
dXNoKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcHVzaChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisK
KyAgICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBwdXNoKGRhdGFUZW1wUmVnaXN0ZXIpOworICAgIH0KKwor
ICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9uczoKKyAgICAvLworICAgIC8vIE1vdmUgdmFs
dWVzIGluIHJlZ2lzdGVycy4KKworICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhbHVlID0gaW1tLm1fdmFsdWU7CisKKyAg
ICAgICAgaWYgKGltbS5tX2lzUG9pbnRlcikKKyAgICAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5j
b2RpbmcoaW1tLCBkZXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBUk1UaHVtYklt
bWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0odmFsdWUp
OworCisgICAgICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3YoZGVzdCwgYXJtSW1tKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKChhcm1J
bW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0ofnZhbHVlKSkuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm12bihkZXN0LCBhcm1JbW0pOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92KGRlc3QsIEFSTVRo
dW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlICYgMHhmZmZmMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChk
ZXN0LCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNih2YWx1ZSA+PiAxNikpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3YoZGVzdCwg
c3JjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbW92ZShJbW0zMihpbW0pLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIpCisgICAgeworICAgICAg
ICBtb3ZlKHJlZzEsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtb3ZlKHJlZzIsIHJlZzEp
OworICAgICAgICBtb3ZlKGRhdGFUZW1wUmVnaXN0ZXIsIHJlZzIpOworICAgIH0KKworICAgIHZv
aWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAg
ICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisKKyAgICAvLyBGb3J3YXJkcyAvIGV4dGVy
bmFsIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgorICAgIC8vCisgICAgLy8gVGhpcyBzZXQgb2Yg
anVtcCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlvbnMgcmV0dXJuIGEgSnVtcAorICAg
IC8vIG9iamVjdCB3aGljaCBtYXkgbGlua2VkIGF0IGEgbGF0ZXIgcG9pbnQsIGFsbG93IGZvcndh
cmRzIGp1bXAsCisgICAgLy8gb3IganVtcHMgdGhhdCB3aWxsIHJlcXVpcmUgZXh0ZXJuYWwgbGlu
a2FnZSAoYWZ0ZXIgdGhlIGNvZGUgaGFzIGJlZW4KKyAgICAvLyByZWxvY2F0ZWQpLgorICAgIC8v
CisgICAgLy8gRm9yIGJyYW5jaGVzLCBzaWduZWQgPCwgPiwgPD0gYW5kID49IGFyZSBkZW5vdGVk
IGFzIGwsIGcsIGxlLCBhbmQgZ2UKKyAgICAvLyByZXNwZWNpdHZlbHksIGZvciB1bnNpZ25lZCBj
b21wYXJpc29ucyB0aGUgbmFtZXMgYiwgYSwgYmUsIGFuZCBhZSBhcmUKKyAgICAvLyB1c2VkIChy
ZXByZXNlbnRpbmcgdGhlIG5hbWVzICdiZWxvdycgYW5kICdhYm92ZScpLgorICAgIC8vCisgICAg
Ly8gT3BlcmFuZHMgdG8gdGhlIGNvbXBhcmlzaW9uIGFyZSBwcm92aWRlZCBpbiB0aGUgZXhwZWN0
ZWQgb3JkZXIsIGUuZy4KKyAgICAvLyBqbGUzMihyZWcxLCBJbW0zMig1KSkgd2lsbCBicmFuY2gg
aWYgdGhlIHZhbHVlIGhlbGQgaW4gcmVnMSwgd2hlbgorICAgIC8vIHRyZWF0ZWQgYXMgYSBzaWdu
ZWQgMzJiaXQgdmFsdWUsIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1LgorICAgIC8vCisgICAg
Ly8ganogYW5kIGpueiB0ZXN0IHdoZXRoZXIgdGhlIGZpcnN0IG9wZXJhbmQgaXMgZXF1YWwgdG8g
emVybywgYW5kIHRha2UKKyAgICAvLyBhbiBvcHRpb25hbCBzZWNvbmQgb3BlcmFuZCBvZiBhIG1h
c2sgdW5kZXIgd2hpY2ggdG8gcGVyZm9ybSB0aGUgdGVzdC4KK3ByaXZhdGU6CisKKyAgICAvLyBT
aG91bGQgd2UgYmUgdXNpbmcgVEVRIGZvciBlcXVhbC9ub3QtZXF1YWw/CisgICAgdm9pZCBjb21w
YXJlMzIoUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGludDMy
X3QgaW1tID0gcmlnaHQubV92YWx1ZTsKKyAgICAgICAgaWYgKCFpbW0pCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci50c3QobGVmdCwgbGVmdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
QVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVk
SW1tKGltbSk7CisgICAgICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXAobGVmdCwgYXJtSW1tKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KChhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0oLWltbSkpLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbW4obGVmdCwgYXJtSW1tKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmUoSW1tMzIoaW1tKSwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wKGxlZnQsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCB0ZXN0MzIoUmVnaXN0ZXJJRCByZWcsIEltbTMyIG1hc2spCisgICAgeworICAgICAgICBpbnQz
Ml90IGltbSA9IG1hc2subV92YWx1ZTsKKworICAgICAgICBpZiAoaW1tID09IC0xKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIudHN0KHJlZywgcmVnKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVu
Y29kZWRJbW0oaW1tKTsKKyAgICAgICAgICAgIGlmIChhcm1JbW0uaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnRzdChyZWcsIGFybUltbSk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBtb3ZlKG1hc2ssIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnRzdChyZWcsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCitwdWJsaWM6CisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuY21wKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEp1
bXAobWFrZUJyYW5jaChjb25kKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGNv
bXBhcmUzMihsZWZ0LCByaWdodCk7CisgICAgICAgIHJldHVybiBKdW1wKG1ha2VCcmFuY2goY29u
ZCkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihyaWdodCwgZGF0
YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIo
bGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBk
YXRhVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIC8v
IHVzZSBhZGRyZXNzVGVtcFJlZ2lzdGVyIGluY2FzZSB0aGUgYnJhbmNoMzIgd2UgY2FsbCB1c2Vz
IGRhdGFUZW1wUmVnaXN0ZXIuIDotLworICAgICAgICBsb2FkMzIobGVmdCwgYWRkcmVzc1RlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lz
dGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
QmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgLy8gdXNlIGFkZHJl
c3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBS
ZWdpc3Rlci4gOi0vCisgICAgICAgIGxvYWQzMihsZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJpZ2h0
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhDb25k
aXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
Ly8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVz
ZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxm
V29yZHMobGVmdCwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQg
cmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgZGF0YVRlbXBSZWdpc3Rl
cik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBkYXRhVGVtcFJlZ2lzdGVyLCByaWdo
dCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVB
ZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgLy8gdXNlIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdp
c3Rlci4gOi0vCisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBhZGRyZXNzVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJp
Z2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5k
ZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQxNihsZWZ0LCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHNsKGFkZHJlc3NUZW1wUmVn
aXN0ZXIsIHJpZ2h0LCAxNik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxzbChkYXRhVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCAxNik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25k
LCBkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQp
CisgICAgeworICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJy
YW5jaDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KKyAgICAgICAgbG9hZDE2
KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5sc2woYWRk
cmVzc1RlbXBSZWdpc3RlciwgYWRkcmVzc1RlbXBSZWdpc3RlciwgMTYpOworICAgICAgICByZXR1
cm4gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgSW1tMzIocmlnaHQubV92YWx1
ZSA8PCAxNikpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUzMihsZWZ0
LCByaWdodCk7CisgICAgICAgIHJldHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiBy
aWdodCkKKyAgICB7CisgICAgICAgIC8vIHVzZSBhZGRyZXNzVGVtcFJlZ2lzdGVyIGluY2FzZSB0
aGUgYnJhbmNoOCB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIGxv
YWQ4KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoOChj
b25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2sp
CisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVy
bykpOworICAgICAgICBtX2Fzc2VtYmxlci50c3QocmVnLCBtYXNrKTsKKyAgICAgICAgcmV0dXJu
IEp1bXAobWFrZUJyYW5jaChjb25kKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIo
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KTsKKyAgICAgICAgdGVzdDMyKHJlZywgbWFzayk7CisgICAgICAgIHJldHVybiBKdW1wKG1ha2VC
cmFuY2goY29uZCkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj
b25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJyYW5jaFRlc3QzMiB3ZSBj
YWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3Qz
MihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigt
MSkpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9u
WmVybykpOworICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJy
YW5jaFRlc3QzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIGxv
YWQzMihhZGRyZXNzLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3QzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAo
Y29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIHRlc3QzMihyZWcsIG1hc2spOworICAgICAgICBy
ZXR1cm4gSnVtcChtYWtlQnJhbmNoKGNvbmQpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRl
c3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigt
MSkpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9u
WmVybykpOworICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJy
YW5jaFRlc3Q4IHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KKyAgICAgICAgbG9h
ZDgoYWRkcmVzcywgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hU
ZXN0OChjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1w
IGp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEp1bXAobWFrZUp1bXAoKSk7CisgICAgfQor
CisgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYngodGFyZ2V0LCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKTsKKyAgICB9CisKKyAg
ICAvLyBBZGRyZXNzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3Mg
dG8ganVtcCB0bworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LmJ4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpOworICAgIH0K
KworCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKKyAgICAvLwor
ICAgIC8vIFRoaXMgc2V0IG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBvcGVyYXRpb25zIGJyYW5jaCBi
YXNlZAorICAgIC8vIG9uIHRoZSByZXN1bHQgb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24uICBU
aGUgb3BlcmF0aW9uCisgICAgLy8gaXMgcGVyZm9ybWVkIGFzIG5vcm1hbCwgc3RvcmluZyB0aGUg
cmVzdWx0LgorICAgIC8vCisgICAgLy8gKiBqeiBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgcmVz
dWx0IGlzIHplcm8uCisgICAgLy8gKiBqbyBvcGVyYXRpb25zIGJyYW5jaCBpZiB0aGUgKHNpZ25l
ZCkgYXJpdGhtZXRpYworICAgIC8vICAgb3BlcmF0aW9uIGNhdXNlZCBhbiBvdmVyZmxvdyB0byBv
Y2N1ci4KKyAgICAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09
IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkX1MoZGVzdCwgZGVzdCwgc3Jj
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobWFrZUJyYW5jaChjb25kKSk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09
IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29k
ZWRJbW0oaW1tLm1fdmFsdWUpOworICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZF9TKGRlc3QsIGRlc3QsIGFybUltbSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkX1MoZGVzdCwgZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIEp1bXAobWFrZUJyYW5jaChjb25kKSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY29uZCwgY29uZCA9PSBP
dmVyZmxvdyk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNtdWxsKGRlc3QsIGRhdGFUZW1wUmVnaXN0
ZXIsIGRlc3QsIHNyYyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFzcihhZGRyZXNzVGVtcFJlZ2lz
dGVyLCBkZXN0LCAzMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgYWRkcmVz
c1RlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjb25kLCBjb25kID09IE92
ZXJmbG93KTsKKyAgICAgICAgbW92ZShpbW0sIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBt
X2Fzc2VtYmxlci5zbXVsbChkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCBzcmMsIGRhdGFUZW1wUmVn
aXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hc3IoYWRkcmVzc1RlbXBSZWdpc3RlciwgZGVz
dCwgMzEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIGFkZHJlc3NUZW1wUmVn
aXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoT3IzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyX1MoZGVzdCwgZGVzdCwgc3Jj
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobWFrZUJyYW5jaChjb25kKSk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNv
bmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnN1Yl9TKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgICAgIHJldHVy
biBKdW1wKG1ha2VCcmFuY2goY29uZCkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoU3ViMzIo
Q29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25k
ID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgQVJNVGh1bWJJbW1lZGlh
dGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVkSW1tKGltbS5tX3ZhbHVl
KTsKKyAgICAgICAgaWYgKGFybUltbS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJfUyhkZXN0LCBkZXN0LCBhcm1JbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1
Yl9TKGRlc3QsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbGF0
aXZlVGFibGVKdW1wKFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzY2FsZSA+PSAwICYmIHNjYWxlIDw9IDMxKTsKKworICAgICAgICAvLyBkYXRhVGVt
cFJlZ2lzdGVyIHdpbGwgcG9pbnQgYWZ0ZXIgdGhlIGp1bXAgaWYgaW5kZXggcmVnaXN0ZXIgY29u
dGFpbnMgemVybworICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cGMsIGRhdGFUZW1wUmVnaXN0
ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGQoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBS
ZWdpc3RlciwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVkSW1tKDkpKTsKKworICAgICAg
ICBTaGlmdFR5cGVBbmRBbW91bnQgc2hpZnQoU1JUeXBlX0xTTCwgc2NhbGUpOworICAgICAgICBt
X2Fzc2VtYmxlci5hZGQoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW5kZXgs
IHNoaWZ0KTsKKyAgICAgICAganVtcChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICAv
LyBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnM6CisKKyAgICB2b2lkIGJyZWFrcG9pbnQoKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgwKTsKKyAgICB9CisKKyAgICBDYWxsIG5lYXJD
YWxsKCkKKyAgICB7CisgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCksIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0
YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxl
TmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIG1vdmVGaXhl
ZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6
Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVn
aXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5i
bHgodGFyZ2V0LCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZpeGVkKSwgQ2FsbDo6Tm9uZSk7CisgICAg
fQorCisgICAgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQz
MihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3Nl
bWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBD
YWxsOjpOb25lKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5ieChsaW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpOworICAg
IH0KKworICAgIHZvaWQgc2V0MzJDb21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuY21wKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuaXQoYXJt
VjdDb25kaXRpb24oY29uZCksIGZhbHNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92KGRlc3Qs
IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KDEpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92KGRlc3QsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KDApKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldDMyQ29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgZGF0YVRl
bXBSZWdpc3RlciwgcmlnaHQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJDb21wYXJl
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUzMihsZWZ0LCByaWdodCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLml0KGFybVY3Q29uZGl0aW9uKGNvbmQpLCBmYWxzZSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdihkZXN0LCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNigxKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdihkZXN0LCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQx
NigwKSk7CisgICAgfQorCisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHJpZ2h0LCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHNldDhDb21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwg
UmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc2V0MzJD
b21wYXJlMzIoY29uZCwgbGVmdCwgcmlnaHQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0
OENvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVm
dCwgcmlnaHQsIGRlc3QpOworICAgIH0KKworICAgIC8vIEZJWE1FOgorICAgIC8vIFRoZSBtYXNr
IHNob3VsZCBiZSBvcHRpb25hbC4uLiBwYWVyaGFwcyB0aGUgYXJndW1lbnQgb3JkZXIgc2hvdWxk
IGJlCisgICAgLy8gZGVzdC1zcmMsIG9wZXJhdGlvbnMgYWx3YXlzIGhhdmUgYSBkZXN0PyAuLi4g
cG9zc2libHkgbm90IHRydWUsIGNvbnNpZGVyaW5nCisgICAgLy8gYXNtIG9wcyBsaWtlIHRlc3Qs
IG9yIHBzZXVkbyBvcHMgbGlrZSBwb3AoKS4KKyAgICB2b2lkIHNldDMyVGVzdDMyKENvbmRpdGlv
biBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
dGVzdDMyKGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2spOworICAgICAgICBtX2Fzc2VtYmxlci5pdChh
cm1WN0NvbmRpdGlvbihjb25kKSwgZmFsc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3YoZGVz
dCwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTYoMSkpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3YoZGVzdCwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTYoMCkpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0MzJUZXN0OChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0z
MiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChhZGRyZXNzLCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgdGVzdDMyKGRhdGFUZW1wUmVnaXN0ZXIsIG1hc2sp
OworICAgICAgICBtX2Fzc2VtYmxlci5pdChhcm1WN0NvbmRpdGlvbihjb25kKSwgZmFsc2UpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3YoZGVzdCwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50
MTYoMSkpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3YoZGVzdCwgQVJNVGh1bWJJbW1lZGlhdGU6
Om1ha2VVSW50MTYoMCkpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIG1vdmVXaXRoUGF0Y2go
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1vdmVGaXhlZFdpZHRo
RW5jb2RpbmcoaW1tLCBkc3QpOworICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7Cisg
ICAgfQorCisgICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goSW1tUHRyIGltbSwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKEltbTMyKGlt
bSksIGRzdCk7CisgICAgICAgIHJldHVybiBEYXRhTGFiZWxQdHIodGhpcyk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IElt
bVB0cigwKSkKKyAgICB7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlh
bFJpZ2h0VmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIo
Y29uZCwgbGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQ
dHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBk
YXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7Cisg
ICAgICAgIGxvYWQzMihsZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgZGF0YUxh
YmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0
Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwg
ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRk
cmVzcyk7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisgICAgRGF0YUxhYmVsUHRyIHN0
b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKSB7IHJldHVybiBzdG9yZVB0
cldpdGhQYXRjaChJbW1QdHIoMCksIGFkZHJlc3MpOyB9CisKKworICAgIENhbGwgdGFpbFJlY3Vy
c2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgLy8gTGlrZSBhIG5vcm1hbCBjYWxsLCBidXQgZG9u
J3QgbGluay4KKyAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhJbW0zMigwKSwgZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1w
UmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7Cisg
ICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAg
IHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMpOworICAgICAgICByZXR1cm4gdGFpbFJlY3Vy
c2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICAKKyAgICBpbnQgZXhlY3V0YWJsZU9mZnNldEZvcihp
bnQgbG9jYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuZXhlY3V0YWJs
ZU9mZnNldEZvcihsb2NhdGlvbik7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBpblVu
aW50ZXJydXB0ZWRTZXF1ZW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9pblVuaW50ZXJy
dXB0ZWRTZXF1ZW5jZTsKKyAgICB9CisKKyAgICBBUk12N0Fzc2VtYmxlcjo6Sm1wU3JjIG1ha2VK
dW1wKCkKKyAgICB7CisgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCksIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuYngoZGF0YVRlbXBS
ZWdpc3RlciwgaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1w
Tm9Db25kaXRpb25GaXhlZFNpemUgOiBBUk12N0Fzc2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uKTsK
KyAgICB9CisKKyAgICBBUk12N0Fzc2VtYmxlcjo6Sm1wU3JjIG1ha2VCcmFuY2goQVJNdjdBc3Nl
bWJsZXI6OkNvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuaXQoY29u
ZCwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoSW1tMzIoMCks
IGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuYngoZGF0YVRl
bXBSZWdpc3RlciwgaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKSA/IEFSTXY3QXNzZW1ibGVyOjpK
dW1wQ29uZGl0aW9uRml4ZWRTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1bXBDb25kaXRpb24sIGNv
bmQpOworICAgIH0KKyAgICBBUk12N0Fzc2VtYmxlcjo6Sm1wU3JjIG1ha2VCcmFuY2goQ29uZGl0
aW9uIGNvbmQpIHsgcmV0dXJuIG1ha2VCcmFuY2goYXJtVjdDb25kaXRpb24oY29uZCkpOyB9Cisg
ICAgQVJNdjdBc3NlbWJsZXI6OkptcFNyYyBtYWtlQnJhbmNoKERvdWJsZUNvbmRpdGlvbiBjb25k
KSB7IHJldHVybiBtYWtlQnJhbmNoKGFybVY3Q29uZGl0aW9uKGNvbmQpKTsgfQorCisgICAgQXJt
QWRkcmVzcyBzZXR1cEFybUFkZHJlc3MoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBpZiAoYWRkcmVzcy5vZmZzZXQpIHsKKyAgICAgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGlt
bSA9IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEyT3JFbmNvZGVkSW1tKGFkZHJlc3Mub2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmIChpbW0uaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZChhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UsIGltbSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkKGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBBcm1BZGRyZXNzKGFkZHJl
c3NUZW1wUmVnaXN0ZXIsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBBcm1BZGRyZXNzKGFkZHJlc3MuYmFzZSwgYWRkcmVz
cy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorCisgICAgQXJtQWRkcmVzcyBzZXR1cEFy
bUFkZHJlc3MoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYgKChhZGRyZXNzLm9m
ZnNldCA+PSAtMHhmZikgJiYgKGFkZHJlc3Mub2Zmc2V0IDw9IDB4ZmZmKSkKKyAgICAgICAgICAg
IHJldHVybiBBcm1BZGRyZXNzKGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworCisgICAg
ICAgIG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIEFybUFkZHJlc3MoYWRkcmVzcy5iYXNlLCBhZGRyZXNzVGVtcFJlZ2lzdGVy
KTsKKyAgICB9CisKKyAgICBBcm1BZGRyZXNzIHNldHVwQXJtQWRkcmVzcyhJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmICgoYWRkcmVzcy5vZmZzZXQgPj0gLTB4ZmYp
ICYmIChhZGRyZXNzLm9mZnNldCA8PSAweGZmZikpCisgICAgICAgICAgICByZXR1cm4gQXJtQWRk
cmVzcyhhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKworICAgICAgICBtb3ZlKEltbTMy
KGFkZHJlc3Mub2Zmc2V0KSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBB
cm1BZGRyZXNzKGFkZHJlc3MuYmFzZSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgfQorCisg
ICAgUmVnaXN0ZXJJRCBtYWtlQmFzZUluZGV4QmFzZShCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gYWRkcmVz
cy5iYXNlOworCisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGltbSA9IEFSTVRodW1iSW1tZWRp
YXRlOjptYWtlVUludDEyT3JFbmNvZGVkSW1tKGFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgaWYg
KGltbS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGQoYWRkcmVzc1RlbXBS
ZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBpbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZChhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzLmJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFkZHJl
c3NUZW1wUmVnaXN0ZXI7CisgICAgfQorCisgICAgdm9pZCBtb3ZlRml4ZWRXaWR0aEVuY29kaW5n
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MzJfdCB2YWx1
ZSA9IGltbS5tX3ZhbHVlOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZUMyhkc3QsIEFSTVRodW1i
SW1tZWRpYXRlOjptYWtlVUludDE2KHZhbHVlICYgMHhmZmZmKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdnQoZHN0LCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNih2YWx1ZSA+PiAxNikp
OworICAgIH0KKworICAgIEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb24gYXJtVjdDb25kaXRpb24o
Q29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QVJNdjdB
c3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAgfQorCisgICAgQVJNdjdBc3NlbWJsZXI6
OkNvbmRpdGlvbiBhcm1WN0NvbmRpdGlvbihEb3VibGVDb25kaXRpb24gY29uZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25k
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAg
ZnJpZW5kIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2
b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHsKKyAgICAg
ICAgQVJNdjdBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9qbXAsIGZ1bmN0aW9uLnZh
bHVlKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlv
bkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAg
ICBBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5h
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBh
dGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQor
ICAgIHsKKyAgICAgICAgQVJNdjdBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRp
b24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgbV9pblVuaW50ZXJydXB0ZWRTZXF1ZW5jZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKworI2VuZGlmIC8vIE1hY3JvQXNzZW1i
bGVyQVJNdjdfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>