<?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>230259</bug_id>
          
          <creation_ts>2021-09-14 05:41:05 -0700</creation_ts>
          <short_desc>[GTK][a11y] Add initial WTR accessibility support when building with ATSPI</short_desc>
          <delta_ts>2021-11-18 03:46:20 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>230256</dependson>
    
    <dependson>232141</dependson>
          <blocked>230253</blocked>
    
    <blocked>232300</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793265</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-09-14 05:41:05 -0700</bug_when>
    <thetext>Add WTR support to run the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808330</commentid>
    <comment_count>1</comment_count>
      <attachid>442353</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-25 03:27:12 -0700</bug_when>
    <thetext>Created attachment 442353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809271</commentid>
    <comment_count>2</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-27 08:52:07 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #1)
&gt; Created attachment 442353 [details]
&gt; Patch

--- a/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
+++ a/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
@@ -246,7 +246,11 @@ void* WKAccessibilityRootObject(WKBundlePageRef pageRef)
 #if ENABLE(ACCESSIBILITY)
     if (!pageRef)
         return 0;
-
+
+#if USE(ATSPI)
+    return WebKit::toImpl(pageRef)-&gt;accessibilityRootObject().child();
+#endif

Why the root obtained down below doesn&apos;t work for ATSPI?

    WebCore::AXCoreObject* root = core.document()-&gt;axObjectCache()-&gt;rootObject();
    if (!root)
        return 0;
    
    return root-&gt;wrapper();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809272</commentid>
    <comment_count>3</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-10-27 08:56:40 -0700</bug_when>
    <thetext>@@ -273,7 +277,11 @@ void* WKAccessibilityFocusedObject(WKBundlePageRef pageRef)
 #if ENABLE(ACCESSIBILITY)
     if (!pageRef)
         return 0;
-
+
+#if USE(ATSPI)
+    return WebKit::toImpl(pageRef)-&gt;accessibilityRootObject().focusedObject();
+#endif

Same question here. Why this is not good for ATSPI?

    auto* focusedObject = axObjectCache-&gt;focusedUIElementForPage(page);
    if (!focusedObject)
        return 0;
    
    return focusedObject-&gt;wrapper();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809609</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-28 01:51:16 -0700</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #2)
&gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; Created attachment 442353 [details]
&gt; &gt; Patch
&gt; 
&gt; --- a/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
&gt; +++ a/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp
&gt; @@ -246,7 +246,11 @@ void* WKAccessibilityRootObject(WKBundlePageRef pageRef)
&gt;  #if ENABLE(ACCESSIBILITY)
&gt;      if (!pageRef)
&gt;          return 0;
&gt; -
&gt; +
&gt; +#if USE(ATSPI)
&gt; +    return WebKit::toImpl(pageRef)-&gt;accessibilityRootObject().child();
&gt; +#endif
&gt; 
&gt; Why the root obtained down below doesn&apos;t work for ATSPI?
&gt; 
&gt;     WebCore::AXCoreObject* root =
&gt; core.document()-&gt;axObjectCache()-&gt;rootObject();
&gt;     if (!root)
&gt;         return 0;
&gt;     
&gt;     return root-&gt;wrapper();

In the web process the web page has an accessibility object that is the parent of the root object. In case of ATK that&apos;s WebKitWebPageAccessibilityObject, in atspi it&apos;s WebCore::AccessibilityRootAtspi. When running layout tests we don&apos;t really need a parent for the root object, but in atspi WebCore::AccessibilityRootAtspi contains the AccessibilityAtspi object that implements the communication with atspi service. So, all wrappers expect to have a valid root that they use to talk to atspi service. In case of ATK, when tests are run the web page accessibility object is never connected to the root object wrapper, but in atspi we need to make that connection that happens in AccessibilityRootAtspi::child(). That&apos;s why we get the root object wrapper as the child of the web page accessibility object (the root of the tree in the web process).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810000</commentid>
    <comment_count>5</comment_count>
      <attachid>442792</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-29 01:07:42 -0700</bug_when>
    <thetext>Created attachment 442792
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812099</commentid>
    <comment_count>6</comment_count>
      <attachid>443386</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-11-05 03:36:27 -0700</bug_when>
    <thetext>Created attachment 443386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814997</commentid>
    <comment_count>7</comment_count>
      <attachid>443386</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-11-15 02:03:50 -0800</bug_when>
    <thetext>Comment on attachment 443386
Patch

There has not been further comments by Andres, and the patch
and clarifications LGTM, so let&apos;s try and get this landed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816378</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-11-18 03:46:20 -0800</bug_when>
    <thetext>Committed r285996 (244393@main): &lt;https://commits.webkit.org/244393@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442353</attachid>
            <date>2021-10-25 03:27:12 -0700</date>
            <delta_ts>2021-10-29 01:07:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wtr-atspi.diff</filename>
            <type>text/plain</type>
            <size>58974</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYzczZGJhMzI5NGEuLjU0MDc0YTQyMzRlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI0IEBACisyMDIxLTEwLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBXVFIgYWNjZXNz
aWJpbGl0eSBzdXBwb3J0IHdoZW4gYnVpbGRpbmcgd2l0aCBBVFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMjU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHN5bWJvbHMgcmVxdWlyZWQg
YnkgV1RSLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpydW5Mb29wIGNv
bnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4
dEF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
dGV4dCBjb25zdCk6IFJlbW92ZSBpbnZhbGlkIG9wdGltaXphdGlvbiwgd2UgbmVlZCB0byBjYWxs
CisgICAgICAgIHVwZGF0ZUJhY2tpbmdTdG9yZSwgc28gYmV0dGVyIHVzZSB0aGUgc2FtZSBjb2Rl
IHNpbmNlIGNhbGxPbk1haW5UaHJlYWQganVzdCBjYWxscyB0aGUgbGFtYmRhIGlmIGFscmVhZHkg
aW4gdGhlCisgICAgICAgIG1haW4gdGhyZWFkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRz
cGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpOjpmb2N1c2VkT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaDoKKwogMjAyMS0xMC0yMiAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11b
YTExeV0gTG9jYWxpemVkIHJvbGUgbmFtZSBkb2Vzbid0IHdvcmsgd2l0aCBBVFNQSSBlbmFibGVk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlBdHNwaS5jcHAKaW5kZXggMzMyYmQwMmU4YWUyLi44ZmZjZDYyNzY0MDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0
c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlBdHNwaS5jcHAKQEAgLTQ4LDYgKzQ4LDExIEBAIEFjY2Vzc2liaWxpdHlBdHNwaTo6QWNj
ZXNzaWJpbGl0eUF0c3BpKGNvbnN0IFN0cmluZyYgYnVzQWRkcmVzcykKICAgICB9KTsKIH0KIAor
UnVuTG9vcCYgQWNjZXNzaWJpbGl0eUF0c3BpOjpydW5Mb29wKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9xdWV1ZS0+cnVuTG9vcCgpOworfQorCiBjb25zdCBjaGFyKiBBY2Nlc3NpYmlsaXR5QXRz
cGk6OnVuaXF1ZU5hbWUoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0Fj
Y2Vzc2liaWxpdHlBdHNwaS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5QXRzcGkuaAppbmRleCA4MjZmZDQ0NWY4YmUuLjUzZGI1YmY4MzA0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5
QXRzcGkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlBdHNwaS5oCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5
QXRzcGkoY29uc3QgU3RyaW5nJik7CiAgICAgfkFjY2Vzc2liaWxpdHlBdHNwaSgpID0gZGVmYXVs
dDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFJ1bkxvb3AmIHJ1bkxvb3AoKSBjb25zdDsKKwogICAg
IGNvbnN0IGNoYXIqIHVuaXF1ZU5hbWUoKSBjb25zdDsKICAgICBHVmFyaWFudCogbnVsbFJlZmVy
ZW5jZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaAppbmRleCA5Njk3N2NiM2Iw
ZmUuLjNhYzZhMzgxNTMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCkBAIC01MCwxMCAr
NTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0IE9wdGlvblNldDxJbnRlcmZhY2U+JiBpbnRlcmZh
Y2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmZhY2VzOyB9CiAKICAgICB2b2lkIHNldFJvb3Qo
QWNjZXNzaWJpbGl0eVJvb3RBdHNwaSopOwotICAgIEFjY2Vzc2liaWxpdHlSb290QXRzcGkqIHJv
b3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKiBy
b290KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQYXJlbnQoc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkqPik7Ci0gICAgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkqPiBwYXJlbnQoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Kj4gcGFyZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVCYWNraW5n
U3RvcmUoKTsKIAogICAgIHZvaWQgYXR0YWNoKEFYQ29yZU9iamVjdCopOwogICAgIHZvaWQgZGV0
YWNoKCk7CkBAIC02NiwyNCArNjYsMjQgQEAgcHVibGljOgogICAgIEdWYXJpYW50KiByZWZlcmVu
Y2UoKTsKICAgICB2b2lkIHNlcmlhbGl6ZShHVmFyaWFudEJ1aWxkZXIqKSBjb25zdDsKIAotICAg
IFN0cmluZyBpZCgpIGNvbnN0OwotICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIENTdHJp
bmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICB1bnNpZ25lZCByb2xlKCkgY29uc3Q7Ci0gICAg
dW5zaWduZWQgY2hpbGRDb3VudCgpIGNvbnN0OwotICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpPj4gY2hpbGRyZW4oKSBjb25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIGNoaWxkQXQodW5zaWduZWQpIGNvbnN0OwotICAgIHVpbnQ2NF90IHN0YXRlKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgQ1N0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQ1N0cmlu
ZyBkZXNjcmlwdGlvbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHJvbGUo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjaGlsZENvdW50KCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk+PiBjaGlsZHJlbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSogY2hpbGRBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dWludDY0X3Qgc3RhdGUoKSBjb25zdDsKICAgICB2b2lkIHN0YXRlQ2hhbmdlZChjb25zdCBjaGFy
KiwgYm9vbCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlcygpIGNvbnN0
OwotICAgIEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpPj4+IHJlbGF0aW9uTWFwKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlcygpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Pj4+IHJlbGF0aW9uTWFwKCkgY29uc3Q7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkq
IGhpdFRlc3QoY29uc3QgSW50UG9pbnQmLCB1aW50MzJfdCkgY29uc3Q7Ci0gICAgSW50UmVjdCBl
bGVtZW50UmVjdCh1aW50MzJfdCkgY29uc3Q7Ci0gICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxl
KHVpbnQzMl90KSBjb25zdDsKLSAgICB2b2lkIHNjcm9sbFRvUG9pbnQoY29uc3QgSW50UG9pbnQm
LCB1aW50MzJfdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpKiBoaXRUZXN0KGNvbnN0IEludFBvaW50JiwgdWludDMyX3QpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIEludFJlY3QgZWxlbWVudFJlY3QodWludDMyX3QpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSh1aW50MzJfdCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb1BvaW50KGNvbnN0IEludFBvaW50JiwgdWlu
dDMyX3QpIGNvbnN0OwogCi0gICAgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgIGVudW0gY2xhc3MgVGV4dEdyYW51bGFyaXR5
IHsKICAgICAgICAgQ2hhcmFjdGVyLAogICAgICAgICBXb3JkU3RhcnQsCkBAIC05NCwxNiArOTQs
MTYgQEAgcHVibGljOgogICAgICAgICBMaW5lRW5kLAogICAgICAgICBQYXJhZ3JhcGgKICAgICB9
OwotICAgIEludFBvaW50IGJvdW5kYXJ5T2Zmc2V0KHVuc2lnbmVkLCBUZXh0R3JhbnVsYXJpdHkp
IGNvbnN0OwotICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkLCB1
aW50MzJfdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UG9pbnQgYm91bmRhcnlPZmZz
ZXQodW5zaWduZWQsIFRleHRHcmFudWxhcml0eSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
SW50UmVjdCBib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQsIHVpbnQzMl90KSBjb25z
dDsKICAgICBzdHJ1Y3QgVGV4dEF0dHJpYnV0ZXMgewogICAgICAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBhdHRyaWJ1dGVzOwogICAgICAgICBpbnQgc3RhcnRPZmZzZXQ7CiAgICAgICAgIGlu
dCBlbmRPZmZzZXQ7CiAgICAgfTsKLSAgICBUZXh0QXR0cmlidXRlcyB0ZXh0QXR0cmlidXRlcyhz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCwgYm9vbCA9IGZhbHNlKSBjb25z
dDsKLSAgICBJbnRQb2ludCBzZWxlY3RlZFJhbmdlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxl
Y3RlZFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgVGV4dEF0
dHJpYnV0ZXMgdGV4dEF0dHJpYnV0ZXMoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51
bGxvcHQsIGJvb2wgPSBmYWxzZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UG9pbnQg
c2VsZWN0ZWRSYW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VsZWN0
ZWRSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpOwogICAgIHZvaWQgdGV4dEluc2VydGVkKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIHZvaWQgdGV4dERlbGV0ZWQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCB0ZXh0QXR0
cmlidXRlc0NoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwCmlu
ZGV4IGUwNzNjMTViYzAxNS4uODQ3NzUwYTgwYjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVj
dFRleHRBdHNwaS5jcHAKQEAgLTI3OCw5ICsyNzgsNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjp0ZXh0KCkgY29uc3QKICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gdmFsdWU7CiAKLSAgICBpZiAoYXhPYmplY3QgPT0gbV9jb3JlT2JqZWN0KQotICAg
ICAgICByZXR1cm4gbV9jb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlU
ZXh0VW5kZXJFbGVtZW50TW9kZShBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGU6OlRl
eHRVbmRlckVsZW1lbnRNb2RlSW5jbHVkZUFsbENoaWxkcmVuKSk7Ci0KICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFN0cmluZz4oW3RoaXNdKCkg
LT4gU3RyaW5nIHsKICAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKICAgICAgICAgICAgIG1fY29y
ZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcApp
bmRleCA2ZDYxZjYyNmYyYmMuLmNlODU2NGI3NzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGku
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMu
aCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGlJbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgpAQCAt
MjI0LDYgKzIyNSwzOCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlS
b290QXRzcGk6OmNoaWxkKCkgY29uc3QKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAorQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpmb2N1c2VkT2JqZWN0
KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBBWE9iamVj
dENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBmb2N1c2VkRG9jdW1lbnQgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCk7CisgICAg
aWYgKCFmb2N1c2VkRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byogY2FjaGUgPSBmb2N1c2VkRG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNh
Y2hlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGZvY3VzZWRPYmplY3Qg
PSBjYWNoZS0+Zm9jdXNlZFVJRWxlbWVudEZvclBhZ2UobV9wYWdlLmdldCgpKTsKKyAgICBpZiAo
IWZvY3VzZWRPYmplY3QpCisgICAgICAgIGZvY3VzZWRPYmplY3QgPSBjYWNoZS0+Zm9jdXNlZE9i
amVjdEZvclBhZ2UobV9wYWdlLmdldCgpKTsKKyAgICBpZiAoIWZvY3VzZWRPYmplY3QpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogd3JhcHBlciA9IGZvY3VzZWRPYmplY3Qt
PndyYXBwZXIoKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgd3JhcHBlci0+c2V0Um9vdChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlSb290QXRzcGkq
Pih0aGlzKSk7CisKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5
Um9vdEF0c3BpOjpzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyKSBjb25zdAogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5o
CmluZGV4IGEyNzVmM2ZkZTQ2ZC4uYmQxNTI3ZGRlODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGku
aApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgR1ZhcmlhbnQqIGFwcGxpY2F0aW9uUmVm
ZXJlbmNlKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eUF0c3BpJiBhdHNwaSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXRzcGk7IH0KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIGNoaWxkKCkg
Y29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBmb2N1c2VkT2JqZWN0KCkgY29u
c3Q7CiAKICAgICB2b2lkIHNlcmlhbGl6ZShHVmFyaWFudEJ1aWxkZXIqKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCA3MDY0ZWQ2MmY2MTkuLjFhMmE3NGIyMDA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAyMS0xMC0yNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS11bYTExeV0gQWRkIGluaXRpYWwgV1RSIGFjY2Vzc2liaWxpdHkg
c3VwcG9ydCB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIGNhc2Ugb2YgQVRTUEkgd2UgbmVlZCB0aGUgd2Vi
IHBhZ2UgYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gZ2V0IHRoZSByb290IGFuZCBmb2N1c2VkIG9i
amVjdCB3cmFwcGVycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3Qp
OgorICAgICAgICAoV0tBY2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdCk6CisKIDIwMjEtMTAtMjIg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvIG92ZXIg
cGVlciBjb25uZWN0aW9uIGJlY29tZXMgbGF0ZW50IHdoZW4gY2hhbmdpbmcgdGhlIG91dHB1dApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCA4NGVhNTkxYjk3OGYuLjdjNjhhYzZiMWEy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKQEAgLTI0Niw3ICsyNDYsMTEgQEAgdm9p
ZCogV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKICNp
ZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAoIXBhZ2VSZWYpCiAgICAgICAgIHJldHVy
biAwOwotICAgIAorCisjaWYgVVNFKEFUU1BJKQorICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+YWNjZXNzaWJpbGl0eVJvb3RPYmplY3QoKS5jaGlsZCgpOworI2VuZGlmCisKICAg
ICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdl
KCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3Myw3ICsyNzcsMTEg
QEAgdm9pZCogV0tBY2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdChXS0J1bmRsZVBhZ2VSZWYgcGFn
ZVJlZikKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAoIXBhZ2VSZWYpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAorCisjaWYgVVNFKEFUU1BJKQorICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKS0+YWNjZXNzaWJpbGl0eVJvb3RPYmplY3QoKS5mb2N1c2VkT2JqZWN0
KCk7CisjZW5kaWYKKwogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+Y29yZVBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiAwOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU2NzRm
ZDhjOTIyOC4uYmY1ZDZiNmU2N2M0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMjEtMTAtMjUgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW2ExMXldIEFk
ZCBpbml0aWFsIFdUUiBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgd2hlbiBidWlsZGluZyB3aXRoIEFU
U1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAy
NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0
c3BpL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwOgorICAgICAgICAoV1RSOjpmaW5k
QWNjZXNzaWJsZU9iamVjdEJ5SWQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpheFJ1bkxvb3ApOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbkFYVGhyZWFkKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbk1haW5UaHJlYWQpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
c3BpLmNwcDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
RXF1YWwpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNv
dW50KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9p
bnQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXgp
OgorICAgICAgICAoV1RSOjplbGVtZW50Rm9yUmVsYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRl
eCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFDb250cm9sc0Vs
ZW1lbnRBdEluZGV4KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0
bGVVSUVsZW1lbnQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJl
bnRFbGVtZW50KToKKyAgICAgICAgKFdUUjo6YXR0cmlidXRlc09mRWxlbWVudCk6CisgICAgICAg
IChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnRzKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXVFI6
OmNoZWNrRWxlbWVudFN0YXRlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOgorICAgICAgICAoV1RSOjpyb2xlVmFsdWVUb1N0
cmluZyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24pOgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6eCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnkpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkpOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQpOgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUgY29uc3QpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkIGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkIGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWluYXRlIGNvbnN0KToK
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGllcmFyY2hpY2FsTGV2ZWwg
Y29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFi
YmVkIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURy
b3BFZmZlY3RzIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bGluZUZvckluZGV4KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmFu
Z2VGb3JMaW5lKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRz
Rm9yUmFuZ2UpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdG
b3JSYW5nZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZWRTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0ZvY3VzYWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4gY29uc3QpOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSBjb25zdCk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KToKKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAgY29uc3QpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludCk6Cisg
ICAgICAgIChXVFI6OnN0cmluZ0F0T2Zmc2V0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y2hhcmFjdGVyQXRPZmZzZXQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp3b3JkQXRPZmZzZXQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsaW5lQXRPZmZzZXQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZW50ZW5jZUF0T2Zmc2V0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0
ay9tYWluLmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDIxLTEwLTIyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVthMTF5XSBMb2Nh
bGl6ZWQgcm9sZSBuYW1lIGRvZXNuJ3Qgd29yayB3aXRoIEFUU1BJIGVuYWJsZWQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCBlOWQwZjU1Y2IwZDcuLjkwYjQ1NGM2NDg5YSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2lmIFBMQVRG
T1JNKENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0
Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gZWxlbWVudEF0UG9pbnQoaW50IHgs
IGludCB5KTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKTsKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgdm9pZCBleGVjdXRlT25B
WFRocmVhZEFuZFdhaXQoRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGV4ZWN1dGVPbkFY
VGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBleGVjdXRlT25NYWluVGhyZWFk
KEZ1bmN0aW9uPHZvaWQoKT4mJik7CkBAIC0xMDQsNiArMTA1LDEwIEBAIHByaXZhdGU6CiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICB2b2lkIHVwZGF0ZUlzb2xh
dGVkVHJlZU1vZGUoKTsKIAorI2lmIFVTRShBVFNQSSkKKyAgICBSdW5Mb29wJiBheFJ1bkxvb3Ao
KTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gX0FYVUlFbGVtZW50VXNl
U2Vjb25kYXJ5QVhUaHJlYWQgYW5kIF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25k
YXJ5QVhUaHJlYWQKICAgICAvLyBkbyBub3Qgd29yayBmb3IgV2ViS2l0VGVzdFJ1bm5lciBzaW5j
ZSB0aGlzIGlzIGNhbGxpbmcgZGlyZWN0bHkgaW50bwpAQCAtMTEzLDYgKzExOCw5IEBAIHByaXZh
dGU6CiAjZW5kaWYKICAgICBib29sIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgeyBm
YWxzZSB9OwogICAgIEJpbmFyeVNlbWFwaG9yZSBtX3NlbWFwaG9yZTsKKyNpZiBVU0UoQVRTUEkp
CisgICAgUnVuTG9vcCogbV9heFJ1bkxvb3AgeyBudWxscHRyIH07CisjZW5kaWYKICNlbmRpZgog
fTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCBkMzU0ZTlkNGRkOGIuLjU5MTJh
MjEwODk4NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTQyMiw2ICs0MjIsNyBA
QCBwcml2YXRlOgogI2lmIFVTRShBVEspCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyPiBtX25vdGlmaWNhdGlvbkhhbmRsZXI7CiAjZWxpZiBVU0UoQVRTUEkpCisg
ICAgc3RhdGljIFJlZlB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gc19jb250cm9sbGVyOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IG1fZWxlbWVudDsK
ICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0c3BpLmNwcAppbmRleCA0MGQ3NGYzMjMwNzcuLmI3NzIyZDllOGU4OSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckF0c3BpLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwCkBAIC0zMiw3
ICszMiw5IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW5j
bHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlSb290QXRzcGku
aD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgogCiBuYW1lc3BhY2Ug
V1RSIHsKQEAgLTQxLDE0ICs0Myw0NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKIHsKIH0KIAotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNT
dHJpbmdSZWYgaWQpCitzdGF0aWMgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBm
aW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
JiBheE9iamVjdCwgY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpCiB7CisgICAgYXhPYmplY3QudXBk
YXRlQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKGF4T2JqZWN0LmlkKCkgPT0gZWxlbWVudElEKQor
ICAgICAgICByZXR1cm4gJmF4T2JqZWN0OworCisgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBjaGlsZHJlbjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+ZXhlY3V0ZU9uQVhUaHJlYWRB
bmRXYWl0KFtheE9iamVjdCA9IFJlZiB7IGF4T2JqZWN0IH0sICZjaGlsZHJlbl0geworICAgICAg
ICBheE9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIGNoaWxkcmVuID0gYXhP
YmplY3QtPmNoaWxkcmVuKCk7CisgICAgfSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6
IGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZmluZEFjY2Vzc2libGVP
YmplY3RCeUlkKCpjaGlsZCwgZWxlbWVudElEKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OworICAgIH0KKwogICAgIHJldHVybiBudWxscHRyOwogfQogCitSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJ
ZChKU1N0cmluZ1JlZiBpZCkKK3sKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvKiByb290T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4oV0tBY2Nl
c3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFN0cmluZyBlbGVtZW50SUQgPSB0b1dURlN0cmluZyhp
ZCk7CisgICAgYXV0byogZWxlbWVudCA9IGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZCgqcm9vdE9i
amVjdCwgZWxlbWVudElEKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50
KTsKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpwbGF0Zm9ybU5hbWUoKQogewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9y
bU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhdHNwaSIpKTsKKyAg
ICAvLyBGSVhNRTogVXNlIGF0ayBhcyBwbGF0Zm9ybSBuYW1lIGZvciBub3csIGJlY2F1c2UgdGhl
IGV4cGVjdGVkIGJlaGF2aW9yIGlzIHRoZSBzYW1lLgorICAgIC8vIE9uY2Ugd2UgcmVwbGFjZSB0
aGUgYXRrIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGF0c3BpIG9uZSB3ZSBjYW4gdXNlIGF0c3Bp
IGFuZAorICAgIC8vIHVwZGF0ZSB0aGUgdGVzdHMgaGVscGVyIHNjcmlwdHMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIyMjcuCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImF0ayIpKTsKICAgICByZXR1cm4gcGxhdGZvcm1OYW1lOwogfQogCkBAIC04Niw2ICsxMjAs
NDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6dXBkYXRlSXNvbGF0ZWRUcmVlTW9k
ZSgpCiB7CiB9CiAKK1J1bkxvb3AmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpheFJ1bkxvb3Ao
KQoreworICAgIGlmICghbV9heFJ1bkxvb3ApIHsKKyAgICAgICAgV0tCdW5kbGVQYWdlUmVmIHBh
Z2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgICAg
IGF1dG8qIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkqPihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZWxlbWVudCk7CisgICAgICAgIG1fYXhSdW5Mb29wID0gJmVsZW1lbnQtPnJvb3Qo
KS0+YXRzcGkoKS5ydW5Mb29wKCk7CisgICAgfQorCisgICAgcmV0dXJuICptX2F4UnVuTG9vcDsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZXhlY3V0ZU9uQVhUaHJlYWRBbmRX
YWl0KEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBheFJ1bkxvb3AoKS5kaXNw
YXRjaChbdGhpcywgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAgICAgICBmdW5j
dGlvbigpOworICAgICAgICBtX3NlbWFwaG9yZS5zaWduYWwoKTsKKyAgICB9KTsKKyAgICBtX3Nl
bWFwaG9yZS53YWl0KCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1
dGVPbkFYVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBheFJ1bkxv
b3AoKS5kaXNwYXRjaChbdGhpcywgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAg
ICAgICBmdW5jdGlvbigpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpleGVjdXRlT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sK
KyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF4UnVuTG9vcCgpLmRpc3BhdGNoKFt0aGlzLCBmdW5jdGlv
biA9IFdURk1vdmUoZnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RS
CiAKICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0c3BpLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcAppbmRleCAzYmNmODlk
ZGM5M2EuLmRmZGU5MDQ2MDliNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudEF0c3BpLmNwcApAQCAtMzEsMTQgKzMxLDIzIEBACiAjaW5jbHVkZSAiSW5qZWN0
ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZUZyYW1lLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9u
Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNl
IFdUUiB7CiAKK1JlZlB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c19jb250cm9sbGVyOworCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKIHsKKyAgICBpZiAoIXNfY29udHJvbGxlcikKKyAgICAgICAgc19jb250cm9s
bGVyID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
KCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
Y29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCkBAIC01Myw3ICs2Miw3IEBAIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkKIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIG90
aGVyRWxlbWVudCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LmdldCgpID09IG90aGVyRWxlbWVu
dC0+cGxhdGZvcm1VSUVsZW1lbnQoKTsKKyAgICByZXR1cm4gb3RoZXJFbGVtZW50ICYmIG1fZWxl
bWVudC5nZXQoKSA9PSBvdGhlckVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCk7CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJc29sYXRlZE9iamVjdCgpIGNvbnN0CkBAIC03
MSwxMiArODAsMjQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldp
dGhSYW5nZShWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUUKIAogaW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQogewotICAgIHJldHVybiAwOworICAgIGlmICgh
bV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNoaWxkQ291bnQ7
CisgICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZjaGls
ZENvdW50XSB7CisgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAg
ICAgIGNoaWxkQ291bnQgPSBtX2VsZW1lbnQtPmNoaWxkQ291bnQoKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gY2hpbGRDb3VudDsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKIHsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9lbGVtZW50LT5oaXRUZXN0KHsgeCwgeSB9
LCBXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQgPyBlbGVtZW50
IDogbV9lbGVtZW50LmdldCgpKTsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCkBAIC04Niw3
ICsxMDcsMzcgQEAgdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxk
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUo
KTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IGNoaWxk
OworICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmY2hp
bGQsIGluZGV4XSB7CisgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Cisg
ICAgICAgIGNoaWxkID0gbV9lbGVtZW50LT5jaGlsZEF0KGluZGV4KTsKKyAgICB9KTsKKyAgICBp
ZiAoIWNoaWxkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoY2hpbGQuZ2V0KCkpOworfQorCitzdGF0aWMgUmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGVsZW1lbnRGb3JSZWxhdGlvbkF0SW5kZXgoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBlbGVtZW50LCBXZWJDb3JlOjpBdHNwaTo6UmVs
YXRpb24gcmVsYXRpb24sIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmICghZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlbGF0aW9uTWFwID0gZWxlbWVudC0+
cmVsYXRpb25NYXAoKTsKKyAgICBhdXRvIHRhcmdldHMgPSByZWxhdGlvbk1hcC5nZXQocmVsYXRp
b24pOworICAgIGlmICh0YXJnZXRzLmlzRW1wdHkoKSB8fCBpbmRleCA+PSB0YXJnZXRzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHRhcmdldCA9IHRhcmdldHNb
aW5kZXhdOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUodGFyZ2V0LmdldCgpKTsKIH0K
IAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCkBAIC05NiwxNyArMTQ3LDE3
IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2ln
bmVkIGluZGV4KQogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBlbGVtZW50Rm9y
UmVsYXRpb25BdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlJlbGF0aW9u
OjpOb2RlUGFyZW50T2YsIGluZGV4KTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCh1bnNp
Z25lZCBpbmRleCkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZWxlbWVudEZv
clJlbGF0aW9uQXRJbmRleChtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpSZWxhdGlv
bjo6Rmxvd3NUbywgaW5kZXgpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUNvbnRyb2xzRWxlbWVudEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGVsZW1lbnRGb3JS
ZWxhdGlvbkF0SW5kZXgobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6UmVsYXRpb246
OkNvbnRyb2xsZXJGb3IsIGluZGV4KTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQg
aW5kZXgpCkBAIC0xMzYsMTIgKzE4NywyNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KHVuc2lnbgogCiBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0
bGVVSUVsZW1lbnQoKQogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBlbGVtZW50
Rm9yUmVsYXRpb25BdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlJlbGF0
aW9uOjpMYWJlbGxlZEJ5LCAwKTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQogewotICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPiBwYXJlbnQ7CisgICAgc19jb250cm9sbGVyLT5l
eGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZwYXJlbnRdIHsKKyAgICAgICAgbV9lbGVt
ZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRXcmFwcGVyID0g
bV9lbGVtZW50LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudFdyYXBwZXIpCisgICAgICAg
ICAgICBwYXJlbnQgPSBwYXJlbnRXcmFwcGVyLnZhbHVlKCk7CisgICAgfSk7CisgICAgaWYgKCFw
YXJlbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShwYXJlbnQuZ2V0KCkpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQpA
QCAtMTU5LDE0ICsyMjUsMTEwIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIH0KIAorc3RhdGljIFN0cmluZyBhdHRy
aWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgYnVpbGRlci5hcHBlbmQoZWxlbWVudC5yb2xl
KCktPnN0cmluZygpLCAnXG4nKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFBhcmVudDogIik7
CisgICAgaWYgKGF1dG8gcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQocGFyZW50LT5yb2xlKCktPnN0cmluZygpLnN1YnN0cmluZyg4KSk7
CisgICAgICAgIGF1dG8gcGFyZW50TmFtZSA9IHBhcmVudC0+dGl0bGUoKS0+c3RyaW5nKCkuc3Vi
c3RyaW5nKDkpOworICAgICAgICBpZiAoIXBhcmVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIjogIiwgcGFyZW50TmFtZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIobnVsbCkiKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKwor
ICAgIGJ1aWxkZXIuYXBwZW5kKCJBWENoaWxkcmVuOiAiLCBlbGVtZW50LmNoaWxkcmVuQ291bnQo
KSwgJ1xuJyk7CisKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhQb3NpdGlvbjogIHsgIiwgRm9ybWF0
dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbihlbGVtZW50LngoKSwgNiwgS2VlcFRyYWlsaW5nWmVy
b3MpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiLCAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkUHJl
Y2lzaW9uKGVsZW1lbnQueSgpLCA2LCBLZWVwVHJhaWxpbmdaZXJvcykpOworICAgIGJ1aWxkZXIu
YXBwZW5kKCIgfVxuIik7CisKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhTaXplOiB7ICIsIEZvcm1h
dHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oZWxlbWVudC53aWR0aCgpLCA2LCBLZWVwVHJhaWxp
bmdaZXJvcykpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4
ZWRQcmVjaXNpb24oZWxlbWVudC5oZWlnaHQoKSwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpKTsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiIH1cbiIpOworCisgICAgU3RyaW5nIHRpdGxlID0gZWxlbWVudC50
aXRsZSgpLT5zdHJpbmcoKTsKKyAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkgeworICAgICAgICBi
dWlsZGVyLmFwcGVuZCh0aXRsZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAg
IH0KKworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGVsZW1lbnQuZGVzY3JpcHRpb24oKS0+c3Ry
aW5nKCk7CisgICAgaWYgKCFkZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGRlc2NyaXB0aW9uLnV0ZjgoKS5kYXRhKCksICdcbicpOworCisgICAgU3RyaW5nIHZh
bHVlID0gZWxlbWVudC5zdHJpbmdWYWx1ZSgpLT5zdHJpbmcoKTsKKyAgICBpZiAoIXZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWUsICdcbicpOworCisgICAgYnVp
bGRlci5hcHBlbmQoIkFYRm9jdXNhYmxlOiAiLCBlbGVtZW50LmlzRm9jdXNhYmxlKCksICdcbicp
OworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEZvY3VzZWQ6ICIsIGVsZW1lbnQuaXNGb2N1c2VkKCks
ICdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFNlbGVjdGFibGU6ICIsIGVsZW1lbnQuaXNT
ZWxlY3RhYmxlKCksICdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFNlbGVjdGVkOiAiLCBl
bGVtZW50LmlzU2VsZWN0ZWQoKSwgJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYTXVsdGlT
ZWxlY3RhYmxlOiAiLCBlbGVtZW50LmlzTXVsdGlTZWxlY3RhYmxlKCksICdcbicpOworICAgIGJ1
aWxkZXIuYXBwZW5kKCJBWEVuYWJsZWQ6ICIsIGVsZW1lbnQuaXNFbmFibGVkKCksICdcbicpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEV4cGFuZGVkOiAiLCBlbGVtZW50LmlzRXhwYW5kZWQoKSwg
J1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYUmVxdWlyZWQ6ICIsIGVsZW1lbnQuaXNSZXF1
aXJlZCgpLCAnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhDaGVja2VkOiAiLCBlbGVtZW50
LmlzQ2hlY2tlZCgpLCAnXG4nKTsKKworICAgIFN0cmluZyB1cmwgPSBlbGVtZW50LnVybCgpLT5z
dHJpbmcoKTsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHVybCwgJ1xuJyk7CisKKyAgICAvLyBXZSBhcHBlbmQgdGhlIHBsYXRmb3JtIGF0dHJpYnV0ZXMg
YXMgYSBzaW5nbGUgbGluZSBhdCB0aGUgZW5kLgorICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFBsYXRm
b3JtQXR0cmlidXRlczogIik7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gZWxlbWVudC5wbGF0Zm9y
bVVJRWxlbWVudCgpLT5hdHRyaWJ1dGVzKCk7CisgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8gaXQgOiBhdHRyaWJ1dGVzKSB7CisgICAgICAgIGlmICghaXNGaXJz
dCkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICBpc0ZpcnN0ID0g
ZmFsc2U7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGl0LmtleSwgJzonLCBpdC52YWx1ZSk7Cisg
ICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworCisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50cyhWZWN0b3I8
UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiYgZWxlbWVudHMpCit7CisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKQorICAg
ICAgICBidWlsZGVyLmFwcGVuZChhdHRyaWJ1dGVzT2ZFbGVtZW50KCplbGVtZW50KSwgIlxuLS0t
LS0tLS0tLS0tXG4iKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Q2hpbGRyZW4oKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aT4+IGNoaWxkcmVuOworICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0
KFt0aGlzLCAmY2hpbGRyZW5dIHsKKyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKKyAgICAgICAgY2hpbGRyZW4gPSBtX2VsZW1lbnQtPmNoaWxkcmVuKCk7CisgICAgfSk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiBlbGVtZW50czsK
KyAgICBlbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNoaWxkcmVuLnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICBlbGVtZW50cy51bmNoZWNr
ZWRBcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGNoaWxkLmdldCgpKSk7CisK
KyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShhdHRyaWJ1dGVzT2ZFbGVtZW50
cyhlbGVtZW50cykpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50KQorICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJl
dHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGF0dHJpYnV0ZXNPZkVsZW1lbnQoKnRoaXMp
KS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYg
YXR0cmlidXRlKQpAQCAtMTc2LDExICszMzgsMzggQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWwK
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKKyAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CisKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRvV1RGU3RyaW5nKGF0dHJpYnV0ZSk7Cisg
ICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYU2VsZWN0ZWRUZXh0IikgeworICAgICAgICBpZiAo
IW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgICAgIGF1dG8gdGV4dCA9IG1fZWxl
bWVudC0+dGV4dCgpOworICAgICAgICBhdXRvIG9mZnNldCA9IG1fZWxlbWVudC0+c2VsZWN0ZWRS
YW5nZSgpOworICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0ZXh0LnN1
YnN0cmluZyhvZmZzZXQueCgpLCBvZmZzZXQueSgpIC0gb2Zmc2V0LngoKSkpLmxlYWtSZWYoKTsK
KyAgICB9CisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKTsK
KyAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhQbGFjZWhvbGRlclZhbHVlIikKKyAgICAgICAg
cmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoYXR0cmlidXRlcy5nZXQoInBsYWNlaG9s
ZGVyLXRleHQiKSkubGVha1JlZigpOworCiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1i
ZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0
b1dURlN0cmluZyhhdHRyaWJ1dGUpOworICAgIGF1dG8gYXR0cmlidXRlcyA9IG1fZWxlbWVudC0+
YXR0cmlidXRlcygpOworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWEFSSUFTZXRTaXplIikK
KyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KCJzZXRzaXplIikudG9Eb3VibGUoKTsKKyAg
ICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhBUklBUG9zSW5TZXQiKQorICAgICAgICByZXR1cm4g
YXR0cmlidXRlcy5nZXQoInBvc2luc2V0IikudG9Eb3VibGUoKTsKKwogICAgIHJldHVybiAwOwog
fQogCkBAIC0yMDQsOCArMzkzLDIwIEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShKCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKK3N0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogZWxlbWVudCwgV2ViQ29yZTo6QXRzcGk6OlN0YXRl
IHN0YXRlKQoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGVsZW1lbnQtPnN0YXRlKCkgJiAoR19HVUlOVDY0X0NPTlNUQU5UKDEpIDw8IHN0
YXRlKTsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib29sQXR0cmlidXRlVmFs
dWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogeworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0g
dG9XVEZTdHJpbmcoYXR0cmlidXRlKTsKKyAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhFbGVt
ZW50QnVzeSIpCisgICAgICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0
KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6QnVzeSk7CisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTIxNiw2ICs0MTcsMTYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0
dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
CiB7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0
cmluZyBhdHRyaWJ1dGVOYW1lID0gdG9XVEZTdHJpbmcoYXR0cmlidXRlKTsKKyAgICBhdXRvIGF0
dHJpYnV0ZXMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoYXR0cmlidXRlTmFt
ZSA9PSAiQVhBUklBU2V0U2l6ZSIpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmNvbnRhaW5z
KCJzZXRzaXplIik7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJQVBvc0luU2V0IikK
KyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuY29udGFpbnMoInBvc2luc2V0Iik7CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTIyNCw5ICs0MzUsMTkyIEBAIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFt
ZXMoKQogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogfQog
CitzdGF0aWMgU3RyaW5nIHJvbGVWYWx1ZVRvU3RyaW5nKHVuc2lnbmVkIHJvbGVWYWx1ZSkKK3sK
KyAgICBzd2l0Y2ggKHJvbGVWYWx1ZSkgeworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6
OkFsZXJ0OgorICAgICAgICByZXR1cm4gIkFYQWxlcnQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpB
dHNwaTo6Um9sZTo6QXJ0aWNsZToKKyAgICAgICAgcmV0dXJuICJBWEFydGljbGUiX3M7CisgICAg
Y2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6QXVkaW86CisgICAgICAgIHJldHVybiAiQVhBdWRp
byJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpCbG9ja1F1b3RlOgorICAgICAg
ICByZXR1cm4gIkFYQmxvY2txdW90ZSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xl
OjpDYW52YXM6CisgICAgICAgIHJldHVybiAiQVhDYW52YXMiX3M7CisgICAgY2FzZSBXZWJDb3Jl
OjpBdHNwaTo6Um9sZTo6Q2FwdGlvbjoKKyAgICAgICAgcmV0dXJuICJBWENhcHRpb24iX3M7Cisg
ICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Q2hlY2tCb3g6CisgICAgICAgIHJldHVybiAi
QVhDaGVja0JveCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpDaGVja01lbnVJ
dGVtOgorICAgICAgICByZXR1cm4gIkFYQ2hlY2tNZW51SXRlbSJfczsKKyAgICBjYXNlIFdlYkNv
cmU6OkF0c3BpOjpSb2xlOjpDb2xvckNob29zZXI6CisgICAgICAgIHJldHVybiAiQVhDb2xvcldl
bGwiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Q29sdW1uSGVhZGVyOgorICAg
IGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRhYmxlQ29sdW1uSGVhZGVyOgorICAgICAgICBy
ZXR1cm4gIkFYQ29sdW1uSGVhZGVyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6
OkNvbWJvQm94OgorICAgICAgICByZXR1cm4gIkFYQ29tYm9Cb3giX3M7CisgICAgY2FzZSBXZWJD
b3JlOjpBdHNwaTo6Um9sZTo6Q29tbWVudDoKKyAgICAgICAgcmV0dXJuICJBWENvbW1lbnQiX3M7
CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Q29udGVudERlbGV0aW9uOgorICAgICAg
ICByZXR1cm4gIkFYRGVsZXRpb24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6
Q29udGVudEluc2VydGlvbjoKKyAgICAgICAgcmV0dXJuICJBWEluc2VydGlvbiJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpEZWZpbml0aW9uOgorICAgICAgICByZXR1cm4gIkFY
RGVmaW5pdGlvbiJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpEZXNjcmlwdGlv
bkxpc3Q6CisgICAgICAgIHJldHVybiAiQVhEZXNjcmlwdGlvbkxpc3QiX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6RGVzY3JpcHRpb25UZXJtOgorICAgICAgICByZXR1cm4gIkFY
RGVzY3JpcHRpb25UZXJtIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkRlc2Ny
aXB0aW9uVmFsdWU6CisgICAgICAgIHJldHVybiAiQVhEZXNjcmlwdGlvblZhbHVlIl9zOworICAg
IGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkRpYWxvZzoKKyAgICAgICAgcmV0dXJuICJBWERp
YWxvZyJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpEb2N1bWVudEZyYW1lOgor
ICAgICAgICByZXR1cm4gIkFYRG9jdW1lbnQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6
Um9sZTo6RG9jdW1lbnRXZWI6CisgICAgICAgIHJldHVybiAiQVhXZWJBcmVhIl9zOworICAgIGNh
c2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkVtYmVkZGVkOgorICAgICAgICByZXR1cm4gIkFYRW1i
ZWRkZWQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6RW50cnk6CisgICAgICAg
IHJldHVybiAiQVhUZXh0RmllbGQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6
Rm9vdGVyOgorICAgICAgICByZXR1cm4gIkFYRm9vdGVyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6
QXRzcGk6OlJvbGU6OkZvb3Rub3RlOgorICAgICAgICByZXR1cm4gIkFYRm9vdG5vdGUiX3M7Cisg
ICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Rm9ybToKKyAgICAgICAgcmV0dXJuICJBWEZv
cm0iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6R3JvdXBpbmc6CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6UGFuZWw6CisgICAgICAgIHJldHVybiAiQVhHcm91cCJf
czsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpIZWFkaW5nOgorICAgICAgICByZXR1
cm4gIkFYSGVhZGluZyJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpJbWFnZToK
KyAgICAgICAgcmV0dXJuICJBWEltYWdlIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJv
bGU6OkltYWdlTWFwOgorICAgICAgICByZXR1cm4gIkFYSW1hZ2VNYXAiX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6SW52YWxpZFJvbGU6CisgICAgICAgIHJldHVybiAiQVhJbnZh
bGlkIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkxhYmVsOgorICAgICAgICBy
ZXR1cm4gIkFYTGFiZWwiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TGV2ZWxC
YXI6CisgICAgICAgIHJldHVybiAiQVhMZXZlbEluZGljYXRvciJfczsKKyAgICBjYXNlIFdlYkNv
cmU6OkF0c3BpOjpSb2xlOjpMaW5rOgorICAgICAgICByZXR1cm4gIkFYTGluayJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpMaXN0Qm94OgorICAgICAgICByZXR1cm4gIkFYTGlz
dEJveCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpMaXN0OgorICAgICAgICBy
ZXR1cm4gIkFYTGlzdCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpMaXN0SXRl
bToKKyAgICAgICAgcmV0dXJuICJBWExpc3RJdGVtIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRz
cGk6OlJvbGU6OkxvZzoKKyAgICAgICAgcmV0dXJuICJBWExvZyJfczsKKyAgICBjYXNlIFdlYkNv
cmU6OkF0c3BpOjpSb2xlOjpNYXJxdWVlOgorICAgICAgICByZXR1cm4gIkFYTWFycXVlZSJfczsK
KyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpNYXRoOgorICAgICAgICByZXR1cm4gIkFY
TWF0aCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpNYXRoRnJhY3Rpb246Cisg
ICAgICAgIHJldHVybiAiQVhNYXRoRnJhY3Rpb24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6TWF0aFJvb3Q6CisgICAgICAgIHJldHVybiAiQVhNYXRoUm9vdCJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpNZW51OgorICAgICAgICByZXR1cm4gIkFYTWVudSJf
czsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpNZW51QmFyOgorICAgICAgICByZXR1
cm4gIkFYTWVudUJhciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpNZW51SXRl
bToKKyAgICAgICAgcmV0dXJuICJBWE1lbnVJdGVtIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRz
cGk6OlJvbGU6Ok5vdGlmaWNhdGlvbjoKKyAgICAgICAgcmV0dXJuICJBWE5vdGlmaWNhdGlvbiJf
czsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpQYWdlVGFiOgorICAgICAgICByZXR1
cm4gIkFYVGFiIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlBhZ2VUYWJMaXN0
OgorICAgICAgICByZXR1cm4gIkFYVGFiR3JvdXAiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6UGFyYWdyYXBoOgorICAgICAgICByZXR1cm4gIkFYUGFyYWdyYXBoIl9zOworICAg
IGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlBhc3N3b3JkVGV4dDoKKyAgICAgICAgcmV0dXJu
ICJBWFBhc3N3b3JkRmllbGQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6UHJv
Z3Jlc3NCYXI6CisgICAgICAgIHJldHVybiAiQVhQcm9ncmVzc0luZGljYXRvciJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpQdXNoQnV0dG9uOgorICAgICAgICByZXR1cm4gIkFY
QnV0dG9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlJhZGlvQnV0dG9uOgor
ICAgICAgICByZXR1cm4gIkFYUmFkaW9CdXR0b24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6UmFkaW9NZW51SXRlbToKKyAgICAgICAgcmV0dXJuICJBWFJhZGlvTWVudUl0ZW0i
X3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Um93SGVhZGVyOgorICAgIGNhc2Ug
V2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRhYmxlUm93SGVhZGVyOgorICAgICAgICByZXR1cm4gIkFY
Um93SGVhZGVyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlJ1bGVyOgorICAg
ICAgICByZXR1cm4gIkFYUnVsZXIiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6
U2Nyb2xsQmFyOgorICAgICAgICByZXR1cm4gIkFYU2Nyb2xsQmFyIl9zOworICAgIGNhc2UgV2Vi
Q29yZTo6QXRzcGk6OlJvbGU6OlNjcm9sbFBhbmU6CisgICAgICAgIHJldHVybiAiQVhTY3JvbGxB
cmVhIjsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpTZWN0aW9uOgorICAgICAgICBy
ZXR1cm4gIkFYU2VjdGlvbiJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpTZXBh
cmF0b3I6CisgICAgICAgIHJldHVybiAiQVhTZXBhcmF0b3IiX3M7CisgICAgY2FzZSBXZWJDb3Jl
OjpBdHNwaTo6Um9sZTo6U2xpZGVyOgorICAgICAgICByZXR1cm4gIkFYU2xpZGVyIl9zOworICAg
IGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlNwaW5CdXR0b246CisgICAgICAgIHJldHVybiAi
QVhTcGluQnV0dG9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlN0YXRpYzoK
KyAgICAgICAgcmV0dXJuICJBWFN0YXRpYyJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpS
b2xlOjpTdGF0dXNCYXI6CisgICAgICAgIHJldHVybiAiQVhTdGF0dXNCYXIiX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U3Vic2NyaXB0OgorICAgICAgICByZXR1cm4gIkFYU3Vi
c2NyaXB0Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlN1cGVyc2NyaXB0Ogor
ICAgICAgICByZXR1cm4gIkFYU3VwZXJzY3JpcHQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6VGFibGU6CisgICAgICAgIHJldHVybiAiQVhUYWJsZSJfczsKKyAgICBjYXNlIFdl
YkNvcmU6OkF0c3BpOjpSb2xlOjpUYWJsZUNlbGw6CisgICAgICAgIHJldHVybiAiQVhDZWxsIl9z
OworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRhYmxlUm93OgorICAgICAgICByZXR1
cm4gIkFYUm93Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRpbWVyOgorICAg
ICAgICByZXR1cm4gIkFYVGltZXIiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6
VG9nZ2xlQnV0dG9uOgorICAgICAgICByZXR1cm4gIkFYVG9nZ2xlQnV0dG9uIl9zOworICAgIGNh
c2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRvb2xCYXI6CisgICAgICAgIHJldHVybiAiQVhUb29s
YmFyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRvb2xUaXA6CisgICAgICAg
IHJldHVybiAiQVhVc2VySW50ZXJmYWNlVG9vbHRpcCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0
c3BpOjpSb2xlOjpUcmVlOgorICAgICAgICByZXR1cm4gIkFYVHJlZSJfczsKKyAgICBjYXNlIFdl
YkNvcmU6OkF0c3BpOjpSb2xlOjpUcmVlVGFibGU6CisgICAgICAgIHJldHVybiAiQVhUcmVlR3Jp
ZCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpUcmVlSXRlbToKKyAgICAgICAg
cmV0dXJuICJBWFRyZWVJdGVtIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlVu
a25vd246CisgICAgICAgIHJldHVybiAiQVhVbmtub3duIl9zOworICAgIGNhc2UgV2ViQ29yZTo6
QXRzcGk6OlJvbGU6OlZpZGVvOgorICAgICAgICByZXR1cm4gIkFYVmlkZW8iX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6V2luZG93OgorICAgICAgICByZXR1cm4gIkFYV2luZG93
Il9zOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB7
IH07Cit9CisKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb2xlKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICB1bnNpZ25lZCByb2xlVmFsdWU7CisgICAgc19jb250
cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZyb2xlVmFsdWVdIHsKKyAg
ICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgcm9sZVZhbHVl
ID0gbV9lbGVtZW50LT5yb2xlKCk7CisgICAgfSk7CisgICAgYXV0byByb2xlVmFsdWVTdHJpbmcg
PSByb2xlVmFsdWVUb1N0cmluZyhyb2xlVmFsdWUpOworICAgIGlmIChyb2xlVmFsdWVTdHJpbmcu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG1ha2VTdHJpbmco
IkFYUm9sZTogIiwgcm9sZVZhbHVlU3RyaW5nKSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCkBAIC0yMzYs
MzIgKzYzMCw3OSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3Vicm9sZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGF1dG8gcm9sZURl
c2NyaXB0aW9uID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCkuZ2V0KCJyb2xlZGVzY3JpcHRpb24i
KTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShtYWtlU3RyaW5nKCJBWFJv
bGVEZXNjcmlwdGlvbjogIiwgcm9sZURlc2NyaXB0aW9uKSkubGVha1JlZigpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xl
U3RyaW5nKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBhdXRvIGNvbXB1dGVkUm9sZSA9IG1fZWxlbWVudC0+
YXR0cmlidXRlcygpLmdldCgiY29tcHV0ZWQtcm9sZSIpOworICAgIGlmIChjb21wdXRlZFJvbGUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGNvbXB1dGVkUm9s
ZSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZyBuYW1lOworICAgIHNf
Y29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmbmFtZV0geworICAg
ICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBuYW1lID0gU3Ry
aW5nOjpmcm9tVVRGOChtX2VsZW1lbnQtPm5hbWUoKS5kYXRhKCkpOworICAgIH0pOworCisgICAg
YXV0byB0aXRsZVZhbHVlID0gbWFrZVN0cmluZygiQVhUaXRsZTogIiwgbmFtZSk7CisgICAgcmV0
dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUodGl0bGVWYWx1ZSkubGVha1JlZigpOwogfQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3Jp
cHRpb24oKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICBzX2NvbnRy
b2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJmRlc2NyaXB0aW9uXSB7Cisg
ICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIGRlc2NyaXB0
aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtX2VsZW1lbnQtPmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsK
KyAgICB9KTsKKworICAgIGF1dG8gZGVzY3JpcHRpb25WYWx1ZSA9IG1ha2VTdHJpbmcoIkFYRGVz
Y3JpcHRpb246ICIsIGRlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRy
eUNyZWF0ZShkZXNjcmlwdGlvblZhbHVlKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYg
KCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworCisgICAgY29uc3QgY2hhciogb3JpZW50YXRpb24gPSBudWxscHRyOworICAgIGlm
IChjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0
ZTo6SG9yaXpvbnRhbCkpCisgICAgICAgIG9yaWVudGF0aW9uID0gIkFYSG9yaXpvbnRhbE9yaWVu
dGF0aW9uIjsKKyAgICBlbHNlIGlmIChjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCks
IFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6VmVydGljYWwpKQorICAgICAgICBvcmllbnRhdGlvbiA9
ICJBWFZlcnRpY2FsT3JpZW50YXRpb24iOworICAgIGVsc2UKKyAgICAgICAgb3JpZW50YXRpb24g
PSAiQVhVbmtub3duT3JpZW50YXRpb24iOworCisgICAgYXV0byBvcmllbnRhdGlvblZhbHVlID0g
bWFrZVN0cmluZygiQVhPcmllbnRhdGlvbjogIiwgb3JpZW50YXRpb24pOworICAgIHJldHVybiBP
cGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG9yaWVudGF0aW9uVmFsdWUpLmxlYWtSZWYoKTsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z1ZhbHVlKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFp
bnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IGF1dG8gdmFsdWUgPSBtYWtlU3RyaW5nKCJBWFZhbHVlOiAiLCBtX2VsZW1lbnQtPnRleHQoKS5y
ZXBsYWNlKCJcbiIsICI8XFxuPiIpLnJlcGxhY2Uob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIs
ICI8b2JqPiIpKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh2YWx1ZSku
bGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bGFuZ3VhZ2UoKQpAQCAtMjcxLDM3ICs3MTIsNzYgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKIAogSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBp
ZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnMoMCwgMCk7CisKKyAgICBhdXRvIHJlbGF0aW9uTWFwID0gbV9lbGVtZW50LT5yZWxhdGlvbk1h
cCgpOworICAgIGF1dG8gdGFyZ2V0cyA9IHJlbGF0aW9uTWFwLmdldChXZWJDb3JlOjpBdHNwaTo6
UmVsYXRpb246OkRlc2NyaWJlZEJ5KTsKKyAgICBpZiAodGFyZ2V0cy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEhlbHA6ICIpOworCisg
ICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRh
cmdldHMpIHsKKyAgICAgICAgaWYgKCFpc0ZpcnN0KQorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKKyAgICAgICAgaXNGaXJzdCA9IGZhbHNlOworICAgICAgICBidWlsZGVyLmFwcGVu
ZCh0YXJnZXQtPnRleHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0
cnlDcmVhdGUoYnVpbGRlci50b1N0cmluZygpKS5sZWFrUmVmKCk7CiB9CiAKIGRvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9lbGVtZW50LT5lbGVtZW50
UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzKS54
KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIHsKLSAgICByZXR1
cm4gMDsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gbV9lbGVtZW50LT5lbGVtZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6
OlNjcmVlbkNvb3JkaW5hdGVzKS55KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp3aWR0aCgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29y
ZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlcykud2lkdGgoKTsKIH0K
IAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgpCiB7Ci0gICAgcmV0dXJu
IDA7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1fZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpT
Y3JlZW5Db29yZGluYXRlcykuaGVpZ2h0KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjbGlja1BvaW50WCgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2VsZW1l
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZWN0ID0gbV9lbGVtZW50LT5lbGVt
ZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVz
KTsKKyAgICByZXR1cm4gcmVjdC5jZW50ZXIoKS54KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjbGlja1BvaW50WSgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZWN0ID0gbV9lbGVtZW50
LT5lbGVtZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3Jk
aW5hdGVzKTsKKyAgICByZXR1cm4gcmVjdC5jZW50ZXIoKS55KCk7CiB9CiAKIGRvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CkBAIC0zNDYsNDcgKzgyNiw1NCBA
QCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVk
KCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQogewotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgp
LCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkVuYWJsZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNw
aTo6U3RhdGU6OlJlcXVpcmVkKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0ZvY3VzZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tF
bGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkZvY3Vz
ZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBjb25z
dAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9l
bGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OlNlbGVjdGVkKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxl
bWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpBY3RpdmUpOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAogewotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJD
b3JlOjpBdHNwaTo6U3RhdGU6OkV4cGFuZGVkKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3Rh
dGU6OkNoZWNrZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRl
cm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6SW5kZXRl
cm1pbmF0ZSk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoaWVyYXJjaGljYWxM
ZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9lbGVtZW50KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gbGV2ZWwgPSBtX2VsZW1lbnQtPmF0dHJpYnV0
ZXMoKS5nZXQoImxldmVsIik7CisgICAgaWYgKGxldmVsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8aW50
PihsZXZlbCkudmFsdWVfb3IoMCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzcGVha0FzKCkKQEAgLTM5NiwyMiArODgzLDUyIEBAIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzcGVha0FzKCkKIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5nZXQoImdyYWJiZWQiKSA9
PSAidHJ1ZSI7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGF1dG8gZHJv
cEVmZmVjdHMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5nZXQoImRyb3BlZmZlY3QiKTsKKyAg
ICBpZiAoZHJvcEVmZmVjdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNy
ZWF0ZShkcm9wRWZmZWN0cykubGVha1JlZigpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bGluZUZvckluZGV4KGludCBpbmRleCkKIHsKLSAgICByZXR1cm4gLTE7CisgICAgaWYg
KCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0
dXJuIC0xOworCisgICAgYXV0byB0ZXh0ID0gbV9lbGVtZW50LT50ZXh0KCk7CisgICAgaWYgKGlu
ZGV4IDwgMCB8fCBpbmRleCA+IHN0YXRpY19jYXN0PGludD4odGV4dC5sZW5ndGgoKSkpCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIGludCBsaW5lTnVtYmVyID0gMDsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICB9CisKKyAgICByZXR1cm4gbGluZU51bWJlcjsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJh
bmdlRm9yTGluZShpbnQgbGluZSkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9lbGVtZW50LT5pbnRlcmZh
Y2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZh
Y2U6OlRleHQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8PSBsaW5lOyArK2kpCisgICAgICAgIG9mZnNldCA9IG1fZWxlbWVudC0+Ym91bmRhcnlP
ZmZzZXQob2Zmc2V0LnkoKSwgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0
R3JhbnVsYXJpdHk6OkxpbmVTdGFydCk7CisKKyAgICBhdXRvIHJhbmdlID0gbWFrZVN0cmluZygn
eycsIG9mZnNldC54KCksICIsICIsIG9mZnNldC55KCkgLSBvZmZzZXQueCgpLCAnfScpOworICAg
IHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHJhbmdlKS5sZWFrUmVmKCk7CiB9CiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZv
clBvc2l0aW9uKGludCB4LCBpbnQgeSkKQEAgLTQyMSwxNyArOTM4LDUxIEBAIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGlu
dCB4LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgp
CiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAg
aWYgKCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBhdXRvIHJl
Y3QgPSBtX2VsZW1lbnQtPmJvdW5kc0ZvclJhbmdlKGxvY2F0aW9uLCBsZW5ndGgsIFdlYkNvcmU6
OkF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXMpOworICAgIGF1dG8gYm91
bmRzID0gbWFrZVN0cmluZygneycsIHJlY3QueCgpLCAiLCAiLCByZWN0LnkoKSwgIiwgIiwgcmVj
dC53aWR0aCgpLCAiLCAiLCByZWN0LmhlaWdodCgpLCAnfScpOworICAgIHJldHVybiBPcGFxdWVK
U1N0cmluZzo6dHJ5Q3JlYXRlKGJvdW5kcykubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWdu
ZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9lbGVtZW50
LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
OjpJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG1f
ZWxlbWVudC0+dGV4dCgpLnN1YnN0cmluZyhsb2NhdGlvbiwgbGVuZ3RoKSkubGVha1JlZigpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgp
CiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAg
aWYgKCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisKKyAgICBhdXRvIGJ1aWxkQXR0cmlidXRlcyA9IFsmXShjb25zdCBX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OlRleHRBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKSB7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBhdHRyaWJ1dGVzLmF0dHJpYnV0
ZXMpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcblx0XHQiKTsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGl0LmtleSwgJzonLCBpdC52YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgYnVpbGRlci5hcHBlbmQoIlxuXHREZWZhdWx0IHRleHQgYXR0cmlidXRlczoiKTsK
KyAgICBidWlsZEF0dHJpYnV0ZXMobV9lbGVtZW50LT50ZXh0QXR0cmlidXRlcygpKTsKKworICAg
IGF1dG8gdGV4dCA9IG1fZWxlbWVudC0+dGV4dCgpOworICAgIGludCBlbmRPZmZzZXQgPSAwOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IGxvY2F0aW9uOyBpIDwgbG9jYXRpb24gKyBsZW5ndGg7IGkg
PSBlbmRPZmZzZXQpIHsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gbV9lbGVtZW50LT50ZXh0
QXR0cmlidXRlcyhpKTsKKyAgICAgICAgYXV0byByYW5nZVN0YXJ0ID0gc3RkOjptYXg8aW50Pihs
b2NhdGlvbiwgYXR0cmlidXRlcy5zdGFydE9mZnNldCk7CisgICAgICAgIGF1dG8gcmFuZ2VFbmQg
PSBzdGQ6Om1pbjxpbnQ+KGxvY2F0aW9uICsgbGVuZ3RoLCBhdHRyaWJ1dGVzLmVuZE9mZnNldCk7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcblx0UmFuZ2UgYXR0cmlidXRlcyBmb3IgJyIsIHRl
eHQuc3Vic3RyaW5nKHJhbmdlU3RhcnQsIHJhbmdlRW5kIC0gcmFuZ2VTdGFydCkucmVwbGFjZSgi
XG4iLCAiPFxcbj4iKS5yZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAiPG9iaj4i
KSwgIic6Iik7CisgICAgICAgIGJ1aWxkQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICAgICAg
ZW5kT2Zmc2V0ID0gYXR0cmlidXRlcy5lbmRPZmZzZXQ7CisgICAgfQorCisgICAgcmV0dXJuIE9w
YXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoYnVpbGRlci50b1N0cmluZygpKS5sZWFrUmVmKCk7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1JhbmdlSXNN
aXNzcGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC01MjYsMTIg
KzEwNzcsMjIgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKIHsKLSAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1f
ZWxlbWVudCB8fCAhbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGF1dG8gb2Zmc2V0ID0g
bV9lbGVtZW50LT5zZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTdHJpbmco
J3snLCBvZmZzZXQueCgpLCAiLCAiLCBvZmZzZXQueSgpIC0gb2Zmc2V0LngoKSwgJ30nKTsKKyAg
ICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShyYW5nZSkubGVha1JlZigpOwogfQog
CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gdGV4dExlbmd0aCA9IG1fZWxlbWVudC0+dGV4dCgp
Lmxlbmd0aCgpOworICAgIG1fZWxlbWVudC0+c2V0U2VsZWN0ZWRSYW5nZShzdGQ6Om1pbihsb2Nh
dGlvbiwgdGV4dExlbmd0aCksIHN0ZDo6bWluKGxlbmd0aCwgdGV4dExlbmd0aCkpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgp
CkBAIC01OTgsMzIgKzExNTksMzIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hl
Y2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkZv
Y3VzYWJsZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0
YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpTZWxlY3RhYmxlKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZSht
X2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6TXVsdGlzZWxlY3RhYmxlKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAogewot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50
LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OlZpc2libGUpOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuICFjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNv
cmU6OkF0c3BpOjpTdGF0ZTo6U2hvd2luZyk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3Rh
dGU6OkNvbGxhcHNlZCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25v
cmVkKCkgY29uc3QKQEAgLTYzMywxNyArMTE5NCwxNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNo
ZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpT
aW5nbGVMaW5lKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGlu
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0VsZW1lbnRT
dGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6TXVsdGlMaW5lKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQu
Z2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6SGFzUG9wdXApOwogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCkBAIC03ODAsMTAgKzEzNDEsMTggQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZShBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclIKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3Jv
bGxUb01ha2VWaXNpYmxlKCkKIHsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9lbGVtZW50LT5zY3JvbGxUb01ha2VWaXNpYmxlKFdlYkNvcmU6OkF0c3BpOjpT
Y3JvbGxUeXBlOjpBbnl3aGVyZSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCiB7CisgICAgaWYgKCFtX2VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fZWxlbWVudC0+c2Nyb2xsVG9Qb2ludCh7IHgsIHkg
fSwgV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlcyk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhT
dWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKQEAgLTgxNSwyNCAr
MTM4NCw0NyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2xhc3NMaXN0KCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorc3RhdGljIFN0
cmluZyBzdHJpbmdBdE9mZnNldChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIGVs
ZW1lbnQsIGludCBvZmZzZXQsIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVu
dC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gdGV4
dCA9IGVsZW1lbnQtPnRleHQoKTsKKyAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzdGF0
aWNfY2FzdDxpbnQ+KHRleHQubGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byBib3VuZHMgPSBlbGVtZW50LT5ib3VuZGFyeU9mZnNldChvZmZzZXQsIGdyYW51bGFyaXR5
KTsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHN0ZDo6bWF4PGludD4oYm91bmRzLngoKSwg
MCk7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjptaW48aW50Pihib3VuZHMueSgpLCB0
ZXh0Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyh0ZXh0LnN1YnN0cmluZyhzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLCAiLCAiLCBzdGFydE9mZnNldCwgIiwg
IiwgZW5kT2Zmc2V0KTsKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNoYXJhY3RlckF0T2Zmc2V0KGludCBvZmZzZXQpCiB7Ci0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQg
fHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBhdXRvIHRleHQgPSBtX2VsZW1lbnQt
PnRleHQoKTsKKyAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzdGF0aWNfY2FzdDxpbnQ+
KHRleHQubGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKworICAgIGF1dG8gc3RyaW5nID0gbWFrZVN0cmluZyh0ZXh0LnN1YnN0cmlu
ZyhvZmZzZXQsIDEpLCAiLCAiLCBvZmZzZXQsICIsICIsIG9mZnNldCArIDEpOworICAgIHJldHVy
biBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHN0cmluZykubGVha1JlZigpOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d29yZEF0T2Zmc2V0
KGludCBvZmZzZXQpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc3RyaW5nQXRPZmZz
ZXQobV9lbGVtZW50LmdldCgpLCBvZmZzZXQsIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6VGV4dEdyYW51bGFyaXR5OjpXb3JkU3RhcnQpKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lQXRPZmZzZXQo
aW50IG9mZnNldCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzdHJpbmdBdE9mZnNl
dChtX2VsZW1lbnQuZ2V0KCksIG9mZnNldCwgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpUZXh0R3JhbnVsYXJpdHk6OkxpbmVTdGFydCkpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbnRlbmNlQXRPZmZz
ZXQoaW50IG9mZnNldCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzdHJpbmdBdE9m
ZnNldChtX2VsZW1lbnQuZ2V0KCksIG9mZnNldCwgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpUZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNlU3RhcnQpKS5sZWFrUmVmKCk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVwbGFjZVRleHRJblJhbmdlKEpTU3RyaW5n
UmVmLCBpbnQsIGludCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21h
aW4uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAKaW5kZXggYjVhOTIy
YTQ0OGZlLi44OTQ5MTA0NWJlMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Z3RrL21haW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwCkBA
IC0zMyw2ICszMyw3IEBACiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAg
Z19zZXRlbnYoIldFQktJVF9ESVNBQkxFX01FTU9SWV9QUkVTU1VSRV9NT05JVE9SIiwgIjEiLCBG
QUxTRSk7CisgICAgZ19zZXRlbnYoIldFQktJVF9BMTFZX0JVU19BRERSRVNTIiwgIiIsIEZBTFNF
KTsKIAogICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442792</attachid>
            <date>2021-10-29 01:07:42 -0700</date>
            <delta_ts>2021-11-05 03:36:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wtr-a11y-atspi.diff</filename>
            <type>text/plain</type>
            <size>58152</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzU3MzRmN2NlN2YuLmJkMWY1ZTI0MTE5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDIxLTEwLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBXVFIgYWNjZXNz
aWJpbGl0eSBzdXBwb3J0IHdoZW4gYnVpbGRpbmcgd2l0aCBBVFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMjU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHN5bWJvbHMgcmVxdWlyZWQg
YnkgV1RSLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpydW5Mb29wIGNv
bnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmZvY3VzZWRP
YmplY3QgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eVJvb3RBdHNwaS5oOgorCiAyMDIxLTEwLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBBWDogQVhWYWx1ZUNoYW5nZWQgaXMgb25seSBzZW50
IGZvciByYW5nZSBlbGVtZW50cyB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgd2l0aCB0aGUga2V5Ym9h
cmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eUF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNj
ZXNzaWJpbGl0eUF0c3BpLmNwcAppbmRleCAzMzJiZDAyZThhZTIuLjhmZmNkNjI3NjQwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5
QXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eUF0c3BpLmNwcApAQCAtNDgsNiArNDgsMTEgQEAgQWNjZXNzaWJpbGl0eUF0c3BpOjpB
Y2Nlc3NpYmlsaXR5QXRzcGkoY29uc3QgU3RyaW5nJiBidXNBZGRyZXNzKQogICAgIH0pOwogfQog
CitSdW5Mb29wJiBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJ1bkxvb3AoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3F1ZXVlLT5ydW5Mb29wKCk7Cit9CisKIGNvbnN0IGNoYXIqIEFjY2Vzc2liaWxpdHlB
dHNwaTo6dW5pcXVlTmFtZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eUF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3Bp
L0FjY2Vzc2liaWxpdHlBdHNwaS5oCmluZGV4IDgyNmZkNDQ1ZjhiZS4uNTNkYjViZjgzMDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eUF0c3BpLmgKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxp
dHlBdHNwaShjb25zdCBTdHJpbmcmKTsKICAgICB+QWNjZXNzaWJpbGl0eUF0c3BpKCkgPSBkZWZh
dWx0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgUnVuTG9vcCYgcnVuTG9vcCgpIGNvbnN0OworCiAg
ICAgY29uc3QgY2hhciogdW5pcXVlTmFtZSgpIGNvbnN0OwogICAgIEdWYXJpYW50KiBudWxsUmVm
ZXJlbmNlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCmluZGV4IDk2OTc3Y2Iz
YjBmZS4uM2FjNmEzODE1MzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKQEAgLTUwLDEw
ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgT3B0aW9uU2V0PEludGVyZmFjZT4mIGludGVy
ZmFjZXMoKSBjb25zdCB7IHJldHVybiBtX2ludGVyZmFjZXM7IH0KIAogICAgIHZvaWQgc2V0Um9v
dChBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKik7Ci0gICAgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSog
cm9vdCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2liaWxpdHlSb290QXRzcGkq
IHJvb3QoKSBjb25zdDsKICAgICB2b2lkIHNldFBhcmVudChzdGQ6Om9wdGlvbmFsPEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSo+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPEFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaSo+IHBhcmVudCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkqPiBwYXJlbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJhY2tp
bmdTdG9yZSgpOwogCiAgICAgdm9pZCBhdHRhY2goQVhDb3JlT2JqZWN0Kik7CiAgICAgdm9pZCBk
ZXRhY2goKTsKQEAgLTY2LDI0ICs2NiwyNCBAQCBwdWJsaWM6CiAgICAgR1ZhcmlhbnQqIHJlZmVy
ZW5jZSgpOwogICAgIHZvaWQgc2VyaWFsaXplKEdWYXJpYW50QnVpbGRlciopIGNvbnN0OwogCi0g
ICAgU3RyaW5nIGlkKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAgQ1N0
cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotICAgIHVuc2lnbmVkIHJvbGUoKSBjb25zdDsKLSAg
ICB1bnNpZ25lZCBjaGlsZENvdW50KCkgY29uc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk+PiBjaGlsZHJlbigpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSogY2hpbGRBdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdWludDY0X3Qgc3RhdGUo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWQoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU3Ry
aW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgcm9s
ZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNoaWxkQ291bnQoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaT4+IGNoaWxkcmVuKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpKiBjaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB1aW50NjRfdCBzdGF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhdGVDaGFuZ2VkKGNvbnN0IGNo
YXIqLCBib29sKTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKCkgY29u
c3Q7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk+Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk+Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSogaGl0VGVzdChjb25zdCBJbnRQb2ludCYsIHVpbnQzMl90KSBjb25zdDsKLSAgICBJbnRSZWN0
IGVsZW1lbnRSZWN0KHVpbnQzMl90KSBjb25zdDsKLSAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2li
bGUodWludDMyX3QpIGNvbnN0OwotICAgIHZvaWQgc2Nyb2xsVG9Qb2ludChjb25zdCBJbnRQb2lu
dCYsIHVpbnQzMl90KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmLCB1aW50MzJfdCkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgSW50UmVjdCBlbGVtZW50UmVjdCh1aW50MzJfdCkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKHVpbnQzMl90KSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvUG9pbnQoY29uc3QgSW50UG9pbnQmLCB1
aW50MzJfdCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICAgZW51bSBjbGFzcyBUZXh0R3JhbnVsYXJp
dHkgewogICAgICAgICBDaGFyYWN0ZXIsCiAgICAgICAgIFdvcmRTdGFydCwKQEAgLTk0LDE2ICs5
NCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIExpbmVFbmQsCiAgICAgICAgIFBhcmFncmFwaAogICAg
IH07Ci0gICAgSW50UG9pbnQgYm91bmRhcnlPZmZzZXQodW5zaWduZWQsIFRleHRHcmFudWxhcml0
eSkgY29uc3Q7Ci0gICAgSW50UmVjdCBib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQs
IHVpbnQzMl90KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRQb2ludCBib3VuZGFyeU9m
ZnNldCh1bnNpZ25lZCwgVGV4dEdyYW51bGFyaXR5KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCwgdWludDMyX3QpIGNv
bnN0OwogICAgIHN0cnVjdCBUZXh0QXR0cmlidXRlcyB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGF0dHJpYnV0ZXM7CiAgICAgICAgIGludCBzdGFydE9mZnNldDsKICAgICAgICAg
aW50IGVuZE9mZnNldDsKICAgICB9OwotICAgIFRleHRBdHRyaWJ1dGVzIHRleHRBdHRyaWJ1dGVz
KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0LCBib29sID0gZmFsc2UpIGNv
bnN0OwotICAgIEludFBvaW50IHNlbGVjdGVkUmFuZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFNl
bGVjdGVkUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0
QXR0cmlidXRlcyB0ZXh0QXR0cmlidXRlcyhzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6
bnVsbG9wdCwgYm9vbCA9IGZhbHNlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRQb2lu
dCBzZWxlY3RlZFJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTZWxl
Y3RlZFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoY29u
c3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCB0ZXh0RGVsZXRl
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2b2lkIHRleHRB
dHRyaWJ1dGVzQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAKaW5kZXggNmQ2MWY2
MjZmMmJjLi5jZTg1NjRiNzcxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcApAQCAtMjUs
NiArMjUsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNwaUVudW1zLmgiCiAjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eUF0c3BpSW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KQEAgLTIyNCw2ICsyMjUs
MzggQEAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpj
aGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaSogQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6Zm9jdXNlZE9iamVjdCgpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5h
YmxlQWNjZXNzaWJpbGl0eSgpOworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byogZm9jdXNlZERvY3VtZW50ID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5kb2N1bWVudCgpOworICAgIGlmICghZm9jdXNl
ZERvY3VtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNhY2hlID0g
Zm9jdXNlZERvY3VtZW50LT5heE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBmb2N1c2VkT2JqZWN0ID0gY2FjaGUtPmZv
Y3VzZWRVSUVsZW1lbnRGb3JQYWdlKG1fcGFnZS5nZXQoKSk7CisgICAgaWYgKCFmb2N1c2VkT2Jq
ZWN0KQorICAgICAgICBmb2N1c2VkT2JqZWN0ID0gY2FjaGUtPmZvY3VzZWRPYmplY3RGb3JQYWdl
KG1fcGFnZS5nZXQoKSk7CisgICAgaWYgKCFmb2N1c2VkT2JqZWN0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8qIHdyYXBwZXIgPSBmb2N1c2VkT2JqZWN0LT53cmFwcGVyKCk7
CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHdyYXBw
ZXItPnNldFJvb3QoY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKj4odGhpcykpOwor
CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6
c2VyaWFsaXplKEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaAppbmRleCBhMjc1
ZjNmZGU0NmQuLmJkMTUyN2RkZTg5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgKQEAgLTQ5LDYg
KzQ5LDcgQEAgcHVibGljOgogICAgIEdWYXJpYW50KiBhcHBsaWNhdGlvblJlZmVyZW5jZSgpIGNv
bnN0OwogICAgIEFjY2Vzc2liaWxpdHlBdHNwaSYgYXRzcGkoKSBjb25zdCB7IHJldHVybiBtX2F0
c3BpOyB9CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjaGlsZCgpIGNvbnN0OworICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogZm9jdXNlZE9iamVjdCgpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGMw
ZDNiM2UyZmQ4Li40MmRmMzk5ZWI3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEt
MTAtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdW2ExMXldIEFkZCBpbml0aWFsIFdUUiBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgd2hl
biBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzAyNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbiBjYXNlIG9mIEFUU1BJIHdlIG5lZWQgdGhlIHdlYiBwYWdlIGFjY2Vz
c2liaWxpdHkgb2JqZWN0IHRvIGdldCB0aGUgcm9vdCBhbmQgZm9jdXNlZCBvYmplY3Qgd3JhcHBl
cnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZS5jcHA6CisgICAgICAgIChXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KToKKyAgICAgICAg
KFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3QpOgorCiAyMDIxLTEwLTI4ICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBGZXRjaCBBUEk6IE5ldHdvcmsgcHJv
Y2VzcyBsZWFrcyB3aGVuIGJsb2JzIGFyZSB1bnVzZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5j
cHAKaW5kZXggODRlYTU5MWI5NzhmLi43YzY4YWM2YjFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuY3BwCkBAIC0yNDYsNyArMjQ2LDExIEBAIHZvaWQqIFdLQWNjZXNzaWJpbGl0eVJvb3RP
YmplY3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkp
CiAgICAgaWYgKCFwYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKworI2lmIFVTRShB
VFNQSSkKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmFjY2Vzc2liaWxpdHlS
b290T2JqZWN0KCkuY2hpbGQoKTsKKyNlbmRpZgorCiAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9
IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpOwogICAgIGlmICghcGFnZSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0yNzMsNyArMjc3LDExIEBAIHZvaWQqIFdLQWNjZXNzaWJpbGl0
eUZvY3VzZWRPYmplY3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiAjaWYgRU5BQkxFKEFDQ0VT
U0lCSUxJVFkpCiAgICAgaWYgKCFwYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwor
I2lmIFVTRShBVFNQSSkKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmFjY2Vz
c2liaWxpdHlSb290T2JqZWN0KCkuZm9jdXNlZE9iamVjdCgpOworI2VuZGlmCisKICAgICBXZWJD
b3JlOjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NDRkZmM0ZTEyZTAuLjk1NzY0MmI4ODJjNSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDkzIEBACisyMDIxLTEwLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBXVFIgYWNjZXNzaWJp
bGl0eSBzdXBwb3J0IHdoZW4gYnVpbGRpbmcgd2l0aCBBVFNQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMjU5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0c3BpLmNwcDoKKyAgICAgICAgKFdUUjo6ZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKToK
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50
QnlJZCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5h
bWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YXhSdW5Mb29wKToK
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbkFYVGhyZWFk
QW5kV2FpdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpleGVjdXRl
T25BWFRocmVhZCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpleGVj
dXRlT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHA6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsKToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdUUjo6ZWxlbWVu
dEZvclJlbGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphcmlhQ29udHJvbHNFbGVtZW50QXRJbmRleCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KToKKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAgIChX
VFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnQpOgorICAgICAgICAoV1RSOjphdHRyaWJ1dGVzT2ZFbGVt
ZW50cyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0
cmlidXRlcyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0
dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVt
YmVyQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV1RSOjpjaGVja0VsZW1lbnRTdGF0ZSk6Cisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9y
dGVkKToKKyAgICAgICAgKFdUUjo6cm9sZVZhbHVlVG9TdHJpbmcpOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Om9yaWVudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpo
ZWxwVGV4dCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Ongp
OgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgpOgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjbGlja1BvaW50WCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNsaWNrUG9pbnRZKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNFbmFibGVkKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9j
dXNlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkT3B0aW9uQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNFeHBhbmRlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzQ2hlY2tlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVsIGNvbnN0KToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCBjb25zdCk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cyBjb25zdCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yTGluZSk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UpOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UpOgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSk6Cisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdl
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUgY29u
c3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUg
Y29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2Vs
ZWN0YWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
VmlzaWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
T2ZmU2NyZWVuIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNDb2xsYXBzZWQgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NpbmdsZUxpbmUgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc011bHRpTGluZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omhhc1BvcHVwIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAoV1RSOjpzdHJpbmdBdE9m
ZnNldCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoYXJhY3RlckF0
T2Zmc2V0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d29yZEF0T2Zm
c2V0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUF0T2Zmc2V0
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VudGVuY2VBdE9mZnNl
dCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHA6CisgICAgICAgICht
YWluKToKKwogMjAyMS0xMC0yNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW3dlYmtpdHNjbXB5XSBHZW5lcmF0ZSBjb21taXQgbWVzc2FnZSB0ZW1wbGF0
ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IGU5ZDBmNTVjYjBkNy4uOTBiNDU0
YzY0ODlhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCkBAIC0zNCw2ICszNCw3IEBA
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlm
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKQEAgLTY5LDcgKzcwLDcg
QEAgcHVibGljOgogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBlbGVtZW50QXRQ
b2ludChpbnQgeCwgaW50IHkpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBh
Y2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpOwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVFNQSSkKICAgICB2b2lk
IGV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
ZXhlY3V0ZU9uQVhUaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGV4ZWN1dGVP
bk1haW5UaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmKTsKQEAgLTEwNCw2ICsxMDUsMTAgQEAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIHZvaWQg
dXBkYXRlSXNvbGF0ZWRUcmVlTW9kZSgpOwogCisjaWYgVVNFKEFUU1BJKQorICAgIFJ1bkxvb3Am
IGF4UnVuTG9vcCgpOworI2VuZGlmCisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBfQVhV
SUVsZW1lbnRVc2VTZWNvbmRhcnlBWFRocmVhZCBhbmQgX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZp
Y2VkQnlTZWNvbmRhcnlBWFRocmVhZAogICAgIC8vIGRvIG5vdCB3b3JrIGZvciBXZWJLaXRUZXN0
UnVubmVyIHNpbmNlIHRoaXMgaXMgY2FsbGluZyBkaXJlY3RseSBpbnRvCkBAIC0xMTMsNiArMTE4
LDkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIGJvb2wgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRU
cmVlTW9kZSB7IGZhbHNlIH07CiAgICAgQmluYXJ5U2VtYXBob3JlIG1fc2VtYXBob3JlOworI2lm
IFVTRShBVFNQSSkKKyAgICBSdW5Mb29wKiBtX2F4UnVuTG9vcCB7IG51bGxwdHIgfTsKKyNlbmRp
ZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IGQzNTRlOWQ0
ZGQ4Yi4uNTkxMmEyMTA4OTg0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtNDIy
LDYgKzQyMiw3IEBAIHByaXZhdGU6CiAjaWYgVVNFKEFUSykKICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI+IG1fbm90aWZpY2F0aW9uSGFuZGxlcjsKICNlbGlmIFVT
RShBVFNQSSkKKyAgICBzdGF0aWMgUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBzX2Nv
bnRyb2xsZXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4g
bV9lbGVtZW50OwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdHNwaS5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyQXRzcGkuY3BwCmluZGV4IDQwZDc0ZjMyMzA3Ny4uYjc3MjJkOWU4ZTg5
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3Bp
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdHNwaS5j
cHAKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBh
Z2UuaCIKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0
eVJvb3RBdHNwaS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CiAK
IG5hbWVzcGFjZSBXVFIgewpAQCAtNDEsMTQgKzQzLDQ2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKQogewogfQogCi1SZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVt
ZW50QnlJZChKU1N0cmluZ1JlZiBpZCkKK3N0YXRpYyBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkmIGF4T2JqZWN0LCBjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCkKIHsKKyAgICBh
eE9iamVjdC51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAoYXhPYmplY3QuaWQoKSA9PSBl
bGVtZW50SUQpCisgICAgICAgIHJldHVybiAmYXhPYmplY3Q7CisKKyAgICBWZWN0b3I8UmVmUHRy
PFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IGNoaWxkcmVuOworICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5leGVjdXRl
T25BWFRocmVhZEFuZFdhaXQoW2F4T2JqZWN0ID0gUmVmIHsgYXhPYmplY3QgfSwgJmNoaWxkcmVu
XSB7CisgICAgICAgIGF4T2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgY2hp
bGRyZW4gPSBheE9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICB9KTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBmaW5k
QWNjZXNzaWJsZU9iamVjdEJ5SWQoKmNoaWxkLCBlbGVtZW50SUQpKQorICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgfQorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkKQoreworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8q
IHJvb3RPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkqPihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKKyAgICBpZiAoIXJvb3RPYmpl
Y3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgU3RyaW5nIGVsZW1lbnRJRCA9IHRv
V1RGU3RyaW5nKGlkKTsKKyAgICBhdXRvKiBlbGVtZW50ID0gZmluZEFjY2Vzc2libGVPYmplY3RC
eUlkKCpyb290T2JqZWN0LCBlbGVtZW50SUQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3Jl
YXRlKGVsZW1lbnQpOworfQorCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnBsYXRmb3JtTmFtZSgpCiB7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImF0
c3BpIikpOworICAgIC8vIEZJWE1FOiBVc2UgYXRrIGFzIHBsYXRmb3JtIG5hbWUgZm9yIG5vdywg
YmVjYXVzZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaXMgdGhlIHNhbWUuCisgICAgLy8gT25jZSB3
ZSByZXBsYWNlIHRoZSBhdGsgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgYXRzcGkgb25lIHdlIGNh
biB1c2UgYXRzcGkgYW5kCisgICAgLy8gdXBkYXRlIHRoZSB0ZXN0cyBoZWxwZXIgc2NyaXB0cy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyNy4KKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gcGxhdGZvcm1OYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiYXRrIikpOwogICAgIHJldHVybiBwbGF0Zm9ybU5hbWU7CiB9CiAKQEAg
LTg2LDYgKzEyMCw0NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp1cGRhdGVJc29s
YXRlZFRyZWVNb2RlKCkKIHsKIH0KIAorUnVuTG9vcCYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmF4UnVuTG9vcCgpCit7CisgICAgaWYgKCFtX2F4UnVuTG9vcCkgeworICAgICAgICBXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KTsKKyAgICAgICAgYXV0byogZWxlbWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSo+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlbGVtZW50KTsKKyAgICAgICAgbV9heFJ1bkxvb3AgPSAmZWxl
bWVudC0+cm9vdCgpLT5hdHNwaSgpLnJ1bkxvb3AoKTsKKyAgICB9CisKKyAgICByZXR1cm4gKm1f
YXhSdW5Mb29wOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpleGVjdXRlT25B
WFRocmVhZEFuZFdhaXQoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQoreworICAgIGF4UnVu
TG9vcCgpLmRpc3BhdGNoKFt0aGlzLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pXSB7Cisg
ICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIG1fc2VtYXBob3JlLnNpZ25hbCgpOworICAgIH0p
OworICAgIG1fc2VtYXBob3JlLndhaXQoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6ZXhlY3V0ZU9uQVhUaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQorewor
ICAgIGF4UnVuTG9vcCgpLmRpc3BhdGNoKFt0aGlzLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rp
b24pXSB7CisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbk1haW5UaHJlYWQoRnVuY3Rpb248dm9pZCgpPiYmIGZ1
bmN0aW9uKQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAgICBmdW5jdGlvbigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXhSdW5Mb29wKCkuZGlzcGF0Y2goW3Ro
aXMsIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildKCkgbXV0YWJsZSB7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoV1RGTW92ZShmdW5jdGlvbikpOworICAgIH0pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVFIKIAogI2VuZGlmIC8vIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJ
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNw
aS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCmlu
ZGV4IDNiY2Y4OWRkYzkzYS4uODc0MmQ2NWY3YWZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNw
aS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCkBAIC0zMSwxNCArMzEsMjMgQEAKICNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZVBhZ2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZ1JlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVu
ZGxlRnJhbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdl
ckNvbnZlcnNpb24uaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgog
CiBuYW1lc3BhY2UgV1RSIHsKIAorUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzX2NvbnRyb2xsZXI7CisKIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKICAg
ICA6IG1fZWxlbWVudChlbGVtZW50KQogeworICAgIGlmICghc19jb250cm9sbGVyKQorICAgICAg
ICBzX2NvbnRyb2xsZXIgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIoKTsKIH0KIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudChjb25zdCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50JiBvdGhlcikKQEAgLTUzLDcg
KzYyLDcgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
KQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogb3RoZXJFbGVtZW50KQogewotICAgIHJldHVybiBtX2VsZW1lbnQuZ2V0KCkgPT0g
b3RoZXJFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpOworICAgIHJldHVybiBvdGhlckVsZW1l
bnQgJiYgbV9lbGVtZW50LmdldCgpID09IG90aGVyRWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQo
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lzb2xhdGVkT2JqZWN0KCkg
Y29uc3QKQEAgLTcxLDEyICs4MCwyNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omdl
dENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRQogCiBpbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCgpCiB7Ci0gICAgcmV0dXJuIDA7
CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQg
Y2hpbGRDb3VudDsKKyAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChb
dGhpcywgJmNoaWxkQ291bnRdIHsKKyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKKyAgICAgICAgY2hpbGRDb3VudCA9IG1fZWxlbWVudC0+Y2hpbGRDb3VudCgpOworICAg
IH0pOworICAgIHJldHVybiBjaGlsZENvdW50OwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGlu
dCB5KQogewotICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGVsZW1lbnQgPSBtX2VsZW1lbnQtPmhpdFRl
c3QoeyB4LCB5IH0sIFdlYkNvcmU6OkF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29vcmRp
bmF0ZXMpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoZWxlbWVu
dCA/IGVsZW1lbnQgOiBtX2VsZW1lbnQuZ2V0KCkpOwogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjppbmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVu
dCkKQEAgLTg2LDcgKzEwNywzNyBAQCB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKIAogUmVmUHRyPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkQXRJbmRl
eCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaT4gY2hpbGQ7CisgICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQo
W3RoaXMsICZjaGlsZCwgaW5kZXhdIHsKKyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5n
U3RvcmUoKTsKKyAgICAgICAgY2hpbGQgPSBtX2VsZW1lbnQtPmNoaWxkQXQoaW5kZXgpOworICAg
IH0pOworICAgIGlmICghY2hpbGQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShjaGlsZC5nZXQoKSk7Cit9CisKK3N0
YXRpYyBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gZWxlbWVudEZvclJlbGF0aW9uQXRJ
bmRleChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIGVsZW1lbnQsIFdlYkNvcmU6
OkF0c3BpOjpSZWxhdGlvbiByZWxhdGlvbiwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVsYXRpb25NYXAg
PSBlbGVtZW50LT5yZWxhdGlvbk1hcCgpOworICAgIGF1dG8gdGFyZ2V0cyA9IHJlbGF0aW9uTWFw
LmdldChyZWxhdGlvbik7CisgICAgaWYgKHRhcmdldHMuaXNFbXB0eSgpIHx8IGluZGV4ID49IHRh
cmdldHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gdGFyZ2V0
ID0gdGFyZ2V0c1tpbmRleF07CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZSh0YXJnZXQu
Z2V0KCkpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKQEAgLTk2
LDE3ICsxNDcsMTcgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW4KIAogUmVmUHRyPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0
SW5kZXgodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGVsZW1lbnRGb3JSZWxhdGlvbkF0SW5kZXgobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNw
aTo6UmVsYXRpb246Ok5vZGVQYXJlbnRPZiwgaW5kZXgpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRB
dEluZGV4KHVuc2lnbmVkIGluZGV4KQogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBlbGVtZW50Rm9yUmVsYXRpb25BdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRz
cGk6OlJlbGF0aW9uOjpGbG93c1RvLCBpbmRleCk7CiB9CiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhQ29udHJvbHNFbGVtZW50QXRJ
bmRleCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
ZWxlbWVudEZvclJlbGF0aW9uQXRJbmRleChtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3Bp
OjpSZWxhdGlvbjo6Q29udHJvbGxlckZvciwgaW5kZXgpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkUm93QXRJbmRl
eCh1bnNpZ25lZCBpbmRleCkKQEAgLTEzNiwxMiArMTg3LDI3IEBAIFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgo
dW5zaWduCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIGVsZW1lbnRGb3JSZWxhdGlvbkF0SW5kZXgobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpB
dHNwaTo6UmVsYXRpb246OkxhYmVsbGVkQnksIDApOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCgpCiB7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgIFJl
ZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IHBhcmVudDsKKyAgICBzX2Nv
bnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJnBhcmVudF0geworICAg
ICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBhdXRvIHBhcmVu
dFdyYXBwZXIgPSBtX2VsZW1lbnQtPnBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50V3JhcHBl
cikKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFdyYXBwZXIudmFsdWUoKTsKKyAgICB9KTsK
KyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHBhcmVudC5nZXQoKSk7CiB9CiAKIFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9z
ZWRCeVJvdygpCkBAIC0xNTksMTQgKzIyNSwxMTAgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQogICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogfQogCitzdGF0aWMg
U3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgZWxlbWVu
dCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICBidWlsZGVyLmFwcGVuZChl
bGVtZW50LnJvbGUoKS0+c3RyaW5nKCksICdcbicpOworCisgICAgYnVpbGRlci5hcHBlbmQoIkFY
UGFyZW50OiAiKTsKKyAgICBpZiAoYXV0byBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQo
KSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZChwYXJlbnQtPnJvbGUoKS0+c3RyaW5nKCkuc3Vi
c3RyaW5nKDgpKTsKKyAgICAgICAgYXV0byBwYXJlbnROYW1lID0gcGFyZW50LT50aXRsZSgpLT5z
dHJpbmcoKS5zdWJzdHJpbmcoOSk7CisgICAgICAgIGlmICghcGFyZW50TmFtZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiAiLCBwYXJlbnROYW1lKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIihudWxsKSIpOworICAgIGJ1aWxkZXIuYXBwZW5k
KCdcbicpOworCisgICAgYnVpbGRlci5hcHBlbmQoIkFYQ2hpbGRyZW46ICIsIGVsZW1lbnQuY2hp
bGRyZW5Db3VudCgpLCAnXG4nKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFBvc2l0aW9uOiAg
eyAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkUHJlY2lzaW9uKGVsZW1lbnQueCgpLCA2LCBLZWVw
VHJhaWxpbmdaZXJvcykpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIsIEZvcm1hdHRlZE51bWJl
cjo6Zml4ZWRQcmVjaXNpb24oZWxlbWVudC55KCksIDYsIEtlZXBUcmFpbGluZ1plcm9zKSk7Cisg
ICAgYnVpbGRlci5hcHBlbmQoIiB9XG4iKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFNpemU6
IHsgIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbihlbGVtZW50LndpZHRoKCksIDYs
IEtlZXBUcmFpbGluZ1plcm9zKSk7CisgICAgYnVpbGRlci5hcHBlbmQoIiwgIiwgRm9ybWF0dGVk
TnVtYmVyOjpmaXhlZFByZWNpc2lvbihlbGVtZW50LmhlaWdodCgpLCA2LCBLZWVwVHJhaWxpbmda
ZXJvcykpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIgfVxuIik7CisKKyAgICBTdHJpbmcgdGl0bGUg
PSBlbGVtZW50LnRpdGxlKCktPnN0cmluZygpOworICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRpdGxlKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7CisgICAgfQorCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZWxlbWVudC5kZXNjcmlw
dGlvbigpLT5zdHJpbmcoKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uLmlzRW1wdHkoKSkKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoZGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSwgJ1xuJyk7CisKKyAg
ICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LnN0cmluZ1ZhbHVlKCktPnN0cmluZygpOworICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSwgJ1xuJyk7
CisKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhGb2N1c2FibGU6ICIsIGVsZW1lbnQuaXNGb2N1c2Fi
bGUoKSwgJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYRm9jdXNlZDogIiwgZWxlbWVudC5p
c0ZvY3VzZWQoKSwgJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYU2VsZWN0YWJsZTogIiwg
ZWxlbWVudC5pc1NlbGVjdGFibGUoKSwgJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYU2Vs
ZWN0ZWQ6ICIsIGVsZW1lbnQuaXNTZWxlY3RlZCgpLCAnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVu
ZCgiQVhNdWx0aVNlbGVjdGFibGU6ICIsIGVsZW1lbnQuaXNNdWx0aVNlbGVjdGFibGUoKSwgJ1xu
Jyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYRW5hYmxlZDogIiwgZWxlbWVudC5pc0VuYWJsZWQo
KSwgJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYRXhwYW5kZWQ6ICIsIGVsZW1lbnQuaXNF
eHBhbmRlZCgpLCAnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhSZXF1aXJlZDogIiwgZWxl
bWVudC5pc1JlcXVpcmVkKCksICdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWENoZWNrZWQ6
ICIsIGVsZW1lbnQuaXNDaGVja2VkKCksICdcbicpOworCisgICAgU3RyaW5nIHVybCA9IGVsZW1l
bnQudXJsKCktPnN0cmluZygpOworICAgIGlmICghdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQodXJsLCAnXG4nKTsKKworICAgIC8vIFdlIGFwcGVuZCB0aGUgcGxhdGZvcm0g
YXR0cmlidXRlcyBhcyBhIHNpbmdsZSBsaW5lIGF0IHRoZSBlbmQuCisgICAgYnVpbGRlci5hcHBl
bmQoIkFYUGxhdGZvcm1BdHRyaWJ1dGVzOiAiKTsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBlbGVt
ZW50LnBsYXRmb3JtVUlFbGVtZW50KCktPmF0dHJpYnV0ZXMoKTsKKyAgICBib29sIGlzRmlyc3Qg
PSB0cnVlOworICAgIGZvciAoY29uc3QgYXV0byBpdCA6IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAg
aWYgKCFpc0ZpcnN0KQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAg
IGlzRmlyc3QgPSBmYWxzZTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQua2V5LCAnOicsIGl0
LnZhbHVlKTsKKyAgICB9CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisKKyAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1l
bnRzKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+JiBlbGVtZW50cykKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxl
bWVudHMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoKmVsZW1l
bnQpLCAiXG4tLS0tLS0tLS0tLS1cbiIpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgbV9lbGVtZW50LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpPj4gY2hpbGRyZW47CisgICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRo
cmVhZEFuZFdhaXQoW3RoaXMsICZjaGlsZHJlbl0geworICAgICAgICBtX2VsZW1lbnQtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBjaGlsZHJlbiA9IG1fZWxlbWVudC0+Y2hpbGRyZW4o
KTsKKyAgICB9KTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+
IGVsZW1lbnRzOworICAgIGVsZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2hpbGRyZW4u
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgIGVsZW1l
bnRzLnVuY2hlY2tlZEFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoY2hpbGQu
Z2V0KCkpKTsKKworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGF0dHJpYnV0
ZXNPZkVsZW1lbnRzKGVsZW1lbnRzKSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCiB7Ci0gICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoYXR0cmlidXRlc09mRWxl
bWVudCgqdGhpcykpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCkBAIC0xNzYsMTEgKzMzOCwzOSBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRGVzY3JpcHRpb25PZkF0
dHJpYnV0ZVZhbAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogeworICAg
IGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdG9XVEZTdHJpbmcoYXR0
cmlidXRlKTsKKyAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhTZWxlY3RlZFRleHQiKSB7Cisg
ICAgICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICAgICAgbV9lbGVt
ZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgYXV0byB0ZXh0ID0gbV9lbGVtZW50
LT50ZXh0KCk7CisgICAgICAgIGF1dG8gb2Zmc2V0ID0gbV9lbGVtZW50LT5zZWxlY3RlZFJhbmdl
KCk7CisgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHRleHQuc3Vic3Ry
aW5nKG9mZnNldC54KCksIG9mZnNldC55KCkgLSBvZmZzZXQueCgpKSkubGVha1JlZigpOworICAg
IH0KKworICAgIGF1dG8gYXR0cmlidXRlcyA9IG1fZWxlbWVudC0+YXR0cmlidXRlcygpOworICAg
IGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWFBsYWNlaG9sZGVyVmFsdWUiKQorICAgICAgICByZXR1
cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShhdHRyaWJ1dGVzLmdldCgicGxhY2Vob2xkZXIt
dGV4dCIpKS5sZWFrUmVmKCk7CisKICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKIH0KIAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0
dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKKyAgICBpZiAoIW1fZWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRvV1RG
U3RyaW5nKGF0dHJpYnV0ZSk7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gbV9lbGVtZW50LT5hdHRy
aWJ1dGVzKCk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJQVNldFNpemUiKQorICAg
ICAgICByZXR1cm4gYXR0cmlidXRlcy5nZXQoInNldHNpemUiKS50b0RvdWJsZSgpOworICAgIGlm
IChhdHRyaWJ1dGVOYW1lID09ICJBWEFSSUFQb3NJblNldCIpCisgICAgICAgIHJldHVybiBhdHRy
aWJ1dGVzLmdldCgicG9zaW5zZXQiKS50b0RvdWJsZSgpOworCiAgICAgcmV0dXJuIDA7CiB9CiAK
QEAgLTIwNCw4ICszOTQsMjAgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEF0dHJpYnV0ZVZhbHVlKEoKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAorc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBlbGVtZW50LCBXZWJDb3JlOjpBdHNwaTo6U3RhdGUgc3Rh
dGUpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gZWxlbWVudC0+c3RhdGUoKSAmIChHX0dVSU5UNjRfQ09OU1RBTlQoMSkgPDwgc3RhdGUp
OworfQorCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CisgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0b1dU
RlN0cmluZyhhdHRyaWJ1dGUpOworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWEVsZW1lbnRC
dXN5IikKKyAgICAgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwg
V2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpCdXN5KTsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtMjE2LDYgKzQxOCwxNiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsK
KyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5n
IGF0dHJpYnV0ZU5hbWUgPSB0b1dURlN0cmluZyhhdHRyaWJ1dGUpOworICAgIGF1dG8gYXR0cmli
dXRlcyA9IG1fZWxlbWVudC0+YXR0cmlidXRlcygpOworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09
ICJBWEFSSUFTZXRTaXplIikKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuY29udGFpbnMoInNl
dHNpemUiKTsKKyAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhBUklBUG9zSW5TZXQiKQorICAg
ICAgICByZXR1cm4gYXR0cmlidXRlcy5jb250YWlucygicG9zaW5zZXQiKTsKKwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMjI0LDkgKzQzNiwxOTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygp
CiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiB9CiAKK3N0
YXRpYyBTdHJpbmcgcm9sZVZhbHVlVG9TdHJpbmcodW5zaWduZWQgcm9sZVZhbHVlKQoreworICAg
IHN3aXRjaCAocm9sZVZhbHVlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6QWxl
cnQ6CisgICAgICAgIHJldHVybiAiQVhBbGVydCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3Bp
OjpSb2xlOjpBcnRpY2xlOgorICAgICAgICByZXR1cm4gIkFYQXJ0aWNsZSJfczsKKyAgICBjYXNl
IFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpBdWRpbzoKKyAgICAgICAgcmV0dXJuICJBWEF1ZGlvIl9z
OworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkJsb2NrUXVvdGU6CisgICAgICAgIHJl
dHVybiAiQVhCbG9ja3F1b3RlIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkNh
bnZhczoKKyAgICAgICAgcmV0dXJuICJBWENhbnZhcyJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0
c3BpOjpSb2xlOjpDYXB0aW9uOgorICAgICAgICByZXR1cm4gIkFYQ2FwdGlvbiJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpDaGVja0JveDoKKyAgICAgICAgcmV0dXJuICJBWENo
ZWNrQm94Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkNoZWNrTWVudUl0ZW06
CisgICAgICAgIHJldHVybiAiQVhDaGVja01lbnVJdGVtIl9zOworICAgIGNhc2UgV2ViQ29yZTo6
QXRzcGk6OlJvbGU6OkNvbG9yQ2hvb3NlcjoKKyAgICAgICAgcmV0dXJuICJBWENvbG9yV2VsbCJf
czsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpDb2x1bW5IZWFkZXI6CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VGFibGVDb2x1bW5IZWFkZXI6CisgICAgICAgIHJldHVy
biAiQVhDb2x1bW5IZWFkZXIiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Q29t
Ym9Cb3g6CisgICAgICAgIHJldHVybiAiQVhDb21ib0JveCJfczsKKyAgICBjYXNlIFdlYkNvcmU6
OkF0c3BpOjpSb2xlOjpDb21tZW50OgorICAgICAgICByZXR1cm4gIkFYQ29tbWVudCJfczsKKyAg
ICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpDb250ZW50RGVsZXRpb246CisgICAgICAgIHJl
dHVybiAiQVhEZWxldGlvbiJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpDb250
ZW50SW5zZXJ0aW9uOgorICAgICAgICByZXR1cm4gIkFYSW5zZXJ0aW9uIl9zOworICAgIGNhc2Ug
V2ViQ29yZTo6QXRzcGk6OlJvbGU6OkRlZmluaXRpb246CisgICAgICAgIHJldHVybiAiQVhEZWZp
bml0aW9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkRlc2NyaXB0aW9uTGlz
dDoKKyAgICAgICAgcmV0dXJuICJBWERlc2NyaXB0aW9uTGlzdCJfczsKKyAgICBjYXNlIFdlYkNv
cmU6OkF0c3BpOjpSb2xlOjpEZXNjcmlwdGlvblRlcm06CisgICAgICAgIHJldHVybiAiQVhEZXNj
cmlwdGlvblRlcm0iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6RGVzY3JpcHRp
b25WYWx1ZToKKyAgICAgICAgcmV0dXJuICJBWERlc2NyaXB0aW9uVmFsdWUiX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6RGlhbG9nOgorICAgICAgICByZXR1cm4gIkFYRGlhbG9n
Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkRvY3VtZW50RnJhbWU6CisgICAg
ICAgIHJldHVybiAiQVhEb2N1bWVudCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xl
OjpEb2N1bWVudFdlYjoKKyAgICAgICAgcmV0dXJuICJBWFdlYkFyZWEiX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6RW1iZWRkZWQ6CisgICAgICAgIHJldHVybiAiQVhFbWJlZGRl
ZCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpFbnRyeToKKyAgICAgICAgcmV0
dXJuICJBWFRleHRGaWVsZCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpGb290
ZXI6CisgICAgICAgIHJldHVybiAiQVhGb290ZXIiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6Rm9vdG5vdGU6CisgICAgICAgIHJldHVybiAiQVhGb290bm90ZSJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpGb3JtOgorICAgICAgICByZXR1cm4gIkFYRm9ybSJf
czsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpHcm91cGluZzoKKyAgICBjYXNlIFdl
YkNvcmU6OkF0c3BpOjpSb2xlOjpQYW5lbDoKKyAgICAgICAgcmV0dXJuICJBWEdyb3VwIl9zOwor
ICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkhlYWRpbmc6CisgICAgICAgIHJldHVybiAi
QVhIZWFkaW5nIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkltYWdlOgorICAg
ICAgICByZXR1cm4gIkFYSW1hZ2UiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6
SW1hZ2VNYXA6CisgICAgICAgIHJldHVybiAiQVhJbWFnZU1hcCJfczsKKyAgICBjYXNlIFdlYkNv
cmU6OkF0c3BpOjpSb2xlOjpJbnZhbGlkUm9sZToKKyAgICAgICAgcmV0dXJuICJBWEludmFsaWQi
X3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TGFiZWw6CisgICAgICAgIHJldHVy
biAiQVhMYWJlbCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpMZXZlbEJhcjoK
KyAgICAgICAgcmV0dXJuICJBWExldmVsSW5kaWNhdG9yIl9zOworICAgIGNhc2UgV2ViQ29yZTo6
QXRzcGk6OlJvbGU6Okxpbms6CisgICAgICAgIHJldHVybiAiQVhMaW5rIl9zOworICAgIGNhc2Ug
V2ViQ29yZTo6QXRzcGk6OlJvbGU6Okxpc3RCb3g6CisgICAgICAgIHJldHVybiAiQVhMaXN0Qm94
Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Okxpc3Q6CisgICAgICAgIHJldHVy
biAiQVhMaXN0Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Okxpc3RJdGVtOgor
ICAgICAgICByZXR1cm4gIkFYTGlzdEl0ZW0iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6
Um9sZTo6TG9nOgorICAgICAgICByZXR1cm4gIkFYTG9nIl9zOworICAgIGNhc2UgV2ViQ29yZTo6
QXRzcGk6OlJvbGU6Ok1hcnF1ZWU6CisgICAgICAgIHJldHVybiAiQVhNYXJxdWVlIl9zOworICAg
IGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Ok1hdGg6CisgICAgICAgIHJldHVybiAiQVhNYXRo
Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Ok1hdGhGcmFjdGlvbjoKKyAgICAg
ICAgcmV0dXJuICJBWE1hdGhGcmFjdGlvbiJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpS
b2xlOjpNYXRoUm9vdDoKKyAgICAgICAgcmV0dXJuICJBWE1hdGhSb290Il9zOworICAgIGNhc2Ug
V2ViQ29yZTo6QXRzcGk6OlJvbGU6Ok1lbnU6CisgICAgICAgIHJldHVybiAiQVhNZW51Il9zOwor
ICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Ok1lbnVCYXI6CisgICAgICAgIHJldHVybiAi
QVhNZW51QmFyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Ok1lbnVJdGVtOgor
ICAgICAgICByZXR1cm4gIkFYTWVudUl0ZW0iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6
Um9sZTo6Tm90aWZpY2F0aW9uOgorICAgICAgICByZXR1cm4gIkFYTm90aWZpY2F0aW9uIl9zOwor
ICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlBhZ2VUYWI6CisgICAgICAgIHJldHVybiAi
QVhUYWIiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6UGFnZVRhYkxpc3Q6Cisg
ICAgICAgIHJldHVybiAiQVhUYWJHcm91cCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpS
b2xlOjpQYXJhZ3JhcGg6CisgICAgICAgIHJldHVybiAiQVhQYXJhZ3JhcGgiX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6UGFzc3dvcmRUZXh0OgorICAgICAgICByZXR1cm4gIkFY
UGFzc3dvcmRGaWVsZCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpQcm9ncmVz
c0JhcjoKKyAgICAgICAgcmV0dXJuICJBWFByb2dyZXNzSW5kaWNhdG9yIl9zOworICAgIGNhc2Ug
V2ViQ29yZTo6QXRzcGk6OlJvbGU6OlB1c2hCdXR0b246CisgICAgICAgIHJldHVybiAiQVhCdXR0
b24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6UmFkaW9CdXR0b246CisgICAg
ICAgIHJldHVybiAiQVhSYWRpb0J1dHRvbiJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpS
b2xlOjpSYWRpb01lbnVJdGVtOgorICAgICAgICByZXR1cm4gIkFYUmFkaW9NZW51SXRlbSJfczsK
KyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpSb3dIZWFkZXI6CisgICAgY2FzZSBXZWJD
b3JlOjpBdHNwaTo6Um9sZTo6VGFibGVSb3dIZWFkZXI6CisgICAgICAgIHJldHVybiAiQVhSb3dI
ZWFkZXIiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6UnVsZXI6CisgICAgICAg
IHJldHVybiAiQVhSdWxlciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpTY3Jv
bGxCYXI6CisgICAgICAgIHJldHVybiAiQVhTY3JvbGxCYXIiX3M7CisgICAgY2FzZSBXZWJDb3Jl
OjpBdHNwaTo6Um9sZTo6U2Nyb2xsUGFuZToKKyAgICAgICAgcmV0dXJuICJBWFNjcm9sbEFyZWEi
OworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlNlY3Rpb246CisgICAgICAgIHJldHVy
biAiQVhTZWN0aW9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlNlcGFyYXRv
cjoKKyAgICAgICAgcmV0dXJuICJBWFNlcGFyYXRvciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0
c3BpOjpSb2xlOjpTbGlkZXI6CisgICAgICAgIHJldHVybiAiQVhTbGlkZXIiX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U3BpbkJ1dHRvbjoKKyAgICAgICAgcmV0dXJuICJBWFNw
aW5CdXR0b24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U3RhdGljOgorICAg
ICAgICByZXR1cm4gIkFYU3RhdGljIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6
OlN0YXR1c0JhcjoKKyAgICAgICAgcmV0dXJuICJBWFN0YXR1c0JhciJfczsKKyAgICBjYXNlIFdl
YkNvcmU6OkF0c3BpOjpSb2xlOjpTdWJzY3JpcHQ6CisgICAgICAgIHJldHVybiAiQVhTdWJzY3Jp
cHQiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U3VwZXJzY3JpcHQ6CisgICAg
ICAgIHJldHVybiAiQVhTdXBlcnNjcmlwdCJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpS
b2xlOjpUYWJsZToKKyAgICAgICAgcmV0dXJuICJBWFRhYmxlIl9zOworICAgIGNhc2UgV2ViQ29y
ZTo6QXRzcGk6OlJvbGU6OlRhYmxlQ2VsbDoKKyAgICAgICAgcmV0dXJuICJBWENlbGwiX3M7Cisg
ICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VGFibGVSb3c6CisgICAgICAgIHJldHVybiAi
QVhSb3ciX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VGltZXI6CisgICAgICAg
IHJldHVybiAiQVhUaW1lciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpUb2dn
bGVCdXR0b246CisgICAgICAgIHJldHVybiAiQVhUb2dnbGVCdXR0b24iX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6VG9vbEJhcjoKKyAgICAgICAgcmV0dXJuICJBWFRvb2xiYXIi
X3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VG9vbFRpcDoKKyAgICAgICAgcmV0
dXJuICJBWFVzZXJJbnRlcmZhY2VUb29sdGlwIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6
OlJvbGU6OlRyZWU6CisgICAgICAgIHJldHVybiAiQVhUcmVlIl9zOworICAgIGNhc2UgV2ViQ29y
ZTo6QXRzcGk6OlJvbGU6OlRyZWVUYWJsZToKKyAgICAgICAgcmV0dXJuICJBWFRyZWVHcmlkIl9z
OworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRyZWVJdGVtOgorICAgICAgICByZXR1
cm4gIkFYVHJlZUl0ZW0iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VW5rbm93
bjoKKyAgICAgICAgcmV0dXJuICJBWFVua25vd24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6VmlkZW86CisgICAgICAgIHJldHVybiAiQVhWaWRlbyJfczsKKyAgICBjYXNlIFdl
YkNvcmU6OkF0c3BpOjpSb2xlOjpXaW5kb3c6CisgICAgICAgIHJldHVybiAiQVhXaW5kb3ciX3M7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsK
K30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJv
bGUoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
ICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKKworICAgIHVuc2lnbmVkIHJvbGVWYWx1ZTsKKyAgICBzX2NvbnRyb2xs
ZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJnJvbGVWYWx1ZV0geworICAgICAg
ICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICByb2xlVmFsdWUgPSBt
X2VsZW1lbnQtPnJvbGUoKTsKKyAgICB9KTsKKyAgICBhdXRvIHJvbGVWYWx1ZVN0cmluZyA9IHJv
bGVWYWx1ZVRvU3RyaW5nKHJvbGVWYWx1ZSk7CisgICAgaWYgKHJvbGVWYWx1ZVN0cmluZy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUobWFrZVN0cmluZygiQVhS
b2xlOiAiLCByb2xlVmFsdWVTdHJpbmcpKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKQEAgLTIzNiwzMiAr
NjMxLDgwIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzdWJyb2xlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgYXV0byByb2xlRGVzY3Jp
cHRpb24gPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5nZXQoInJvbGVkZXNjcmlwdGlvbiIpOwor
ICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG1ha2VTdHJpbmcoIkFYUm9sZURl
c2NyaXB0aW9uOiAiLCByb2xlRGVzY3JpcHRpb24pKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJp
bmcoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
ICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKKworICAgIGF1dG8gY29tcHV0ZWRSb2xlID0gbV9lbGVtZW50LT5hdHRy
aWJ1dGVzKCkuZ2V0KCJjb21wdXRlZC1yb2xlIik7CisgICAgaWYgKGNvbXB1dGVkUm9sZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoY29tcHV0ZWRSb2xlKS5s
ZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgU3RyaW5nIG5hbWU7CisgICAgc19jb250
cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZuYW1lXSB7CisgICAgICAg
IG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIG5hbWUgPSBTdHJpbmc6
OmZyb21VVEY4KG1fZWxlbWVudC0+bmFtZSgpLmRhdGEoKSk7CisgICAgfSk7CisKKyAgICBhdXRv
IHRpdGxlVmFsdWUgPSBtYWtlU3RyaW5nKCJBWFRpdGxlOiAiLCBuYW1lKTsKKyAgICByZXR1cm4g
T3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0aXRsZVZhbHVlKS5sZWFrUmVmKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlv
bigpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cisg
ICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCisgICAgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIHNfY29udHJvbGxl
ci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmZGVzY3JpcHRpb25dIHsKKyAgICAg
ICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgZGVzY3JpcHRpb24g
PSBTdHJpbmc6OmZyb21VVEY4KG1fZWxlbWVudC0+ZGVzY3JpcHRpb24oKS5kYXRhKCkpOworICAg
IH0pOworCisgICAgYXV0byBkZXNjcmlwdGlvblZhbHVlID0gbWFrZVN0cmluZygiQVhEZXNjcmlw
dGlvbjogIiwgZGVzY3JpcHRpb24pOworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3Jl
YXRlKGRlc2NyaXB0aW9uVmFsdWUpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1f
ZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CisKKyAgICBjb25zdCBjaGFyKiBvcmllbnRhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKGNo
ZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpI
b3Jpem9udGFsKSkKKyAgICAgICAgb3JpZW50YXRpb24gPSAiQVhIb3Jpem9udGFsT3JpZW50YXRp
b24iOworICAgIGVsc2UgaWYgKGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2Vi
Q29yZTo6QXRzcGk6OlN0YXRlOjpWZXJ0aWNhbCkpCisgICAgICAgIG9yaWVudGF0aW9uID0gIkFY
VmVydGljYWxPcmllbnRhdGlvbiI7CisgICAgZWxzZQorICAgICAgICBvcmllbnRhdGlvbiA9ICJB
WFVua25vd25PcmllbnRhdGlvbiI7CisKKyAgICBhdXRvIG9yaWVudGF0aW9uVmFsdWUgPSBtYWtl
U3RyaW5nKCJBWE9yaWVudGF0aW9uOiAiLCBvcmllbnRhdGlvbik7CisgICAgcmV0dXJuIE9wYXF1
ZUpTU3RyaW5nOjp0cnlDcmVhdGUob3JpZW50YXRpb25WYWx1ZSkubGVha1JlZigpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWUoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
ICAgIGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCisgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgbV9l
bGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBhdXRvIHZhbHVlID0gbWFrZVN0cmlu
ZygiQVhWYWx1ZTogIiwgbV9lbGVtZW50LT50ZXh0KCkucmVwbGFjZSgiXG4iLCAiPFxcbj4iKS5y
ZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAiPG9iaj4iKSk7CisgICAgcmV0dXJu
IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUodmFsdWUpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKQEAg
LTI3MSwzNyArNzE0LDc3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsYW5ndWFnZSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgYXV0byBy
ZWxhdGlvbk1hcCA9IG1fZWxlbWVudC0+cmVsYXRpb25NYXAoKTsKKyAgICBhdXRvIHRhcmdldHMg
PSByZWxhdGlvbk1hcC5nZXQoV2ViQ29yZTo6QXRzcGk6OlJlbGF0aW9uOjpEZXNjcmliZWRCeSk7
CisgICAgaWYgKHRhcmdldHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiQVhIZWxwOiAiKTsKKworICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7
CisgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAgICAgIGlmICgh
aXNGaXJzdCkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgIGlzRmly
c3QgPSBmYWxzZTsKKyAgICAgICAgdGFyZ2V0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQodGFyZ2V0LT50ZXh0KCkpOworICAgIH0KKworICAgIHJldHVybiBP
cGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGJ1aWxkZXIudG9TdHJpbmcoKSkubGVha1JlZigpOwog
fQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCiB7Ci0gICAgcmV0dXJuIDA7
CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1f
ZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3Jl
ZW5Db29yZGluYXRlcykueCgpOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
eSgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6
OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlcykueSgpOwogfQogCiBkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQogewotICAgIHJldHVybiAwOworICAgIGlmICgh
bV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2VsZW1lbnQtPmVs
ZW1lbnRSZWN0KFdlYkNvcmU6OkF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0
ZXMpLndpZHRoKCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQo
KQogewotICAgIHJldHVybiAwOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX2VsZW1lbnQtPmVsZW1lbnRSZWN0KFdlYkNvcmU6OkF0c3BpOjpD
b29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpLmhlaWdodCgpOwogfQogCiBkb3VibGUg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFgoKQogewotICAgIHJldHVybiAwOwor
ICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gcmVjdCA9
IG1fZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpX
aW5kb3dDb29yZGluYXRlcyk7CisgICAgcmV0dXJuIHJlY3QuY2VudGVyKCkueCgpOwogfQogCiBk
b3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQogewotICAgIHJldHVy
biAwOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8g
cmVjdCA9IG1fZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVU
eXBlOjpXaW5kb3dDb29yZGluYXRlcyk7CisgICAgcmV0dXJuIHJlY3QuY2VudGVyKCkueSgpOwog
fQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdApAQCAt
MzQ2LDQ3ICs4MjksNTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVu
dEFjdGlvblN1cHBvcnRlZCgpCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRl
KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpFbmFibGVkKTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQo
KSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpSZXF1aXJlZCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRz
cGk6OlN0YXRlOjpGb2N1c2VkKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1NlbGVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNr
RWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpTZWxl
Y3RlZCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlv
bkFjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6QWN0aXZl
KTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxl
bWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpFeHBhbmRlZCk7CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2Vi
Q29yZTo6QXRzcGk6OlN0YXRlOjpDaGVja2VkKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNw
aTo6U3RhdGU6OkluZGV0ZXJtaW5hdGUpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvIGxldmVsID0gbV9l
bGVtZW50LT5hdHRyaWJ1dGVzKCkuZ2V0KCJsZXZlbCIpOworICAgIGlmIChsZXZlbC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHBhcnNlSW50ZWdlckFsbG93aW5n
VHJhaWxpbmdKdW5rPGludD4obGV2ZWwpLnZhbHVlX29yKDApOwogfQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3BlYWtBcygpCkBAIC0zOTYsMjIg
Kzg4Niw1MyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3BlYWtBcygpCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJl
ZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9lbGVtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCku
Z2V0KCJncmFiYmVkIikgPT0gInRydWUiOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CisKKyAgICBhdXRvIGRyb3BFZmZlY3RzID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCkuZ2V0KCJk
cm9wZWZmZWN0Iik7CisgICAgaWYgKGRyb3BFZmZlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgcmV0dXJuIE9wYXF1
ZUpTU3RyaW5nOjp0cnlDcmVhdGUoZHJvcEVmZmVjdHMpLmxlYWtSZWYoKTsKIH0KIAogaW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQgaW5kZXgpCiB7Ci0gICAgcmV0
dXJuIC0xOworICAgIGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5j
b250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4
dCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7CisgICAgYXV0byB0ZXh0ID0gbV9lbGVtZW50LT50ZXh0KCk7CisgICAgaWYgKGluZGV4
IDwgMCB8fCBpbmRleCA+IHN0YXRpY19jYXN0PGludD4odGV4dC5sZW5ndGgoKSkpCisgICAgICAg
IHJldHVybiAtMTsKKworICAgIGludCBsaW5lTnVtYmVyID0gMDsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykKKyAgICAg
ICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICB9CisKKyAgICByZXR1cm4gbGluZU51bWJlcjsKIH0K
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdl
Rm9yTGluZShpbnQgbGluZSkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9lbGVtZW50LT5pbnRlcmZhY2Vz
KCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6
OlRleHQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8PSBsaW5lOyArK2kpCisgICAgICAgIG9mZnNldCA9IG1fZWxlbWVudC0+Ym91bmRhcnlPZmZz
ZXQob2Zmc2V0LnkoKSwgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0R3Jh
bnVsYXJpdHk6OkxpbmVTdGFydCk7CisKKyAgICBhdXRvIHJhbmdlID0gbWFrZVN0cmluZygneycs
IG9mZnNldC54KCksICIsICIsIG9mZnNldC55KCkgLSBvZmZzZXQueCgpLCAnfScpOworICAgIHJl
dHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHJhbmdlKS5sZWFrUmVmKCk7CiB9CiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBv
c2l0aW9uKGludCB4LCBpbnQgeSkKQEAgLTQyMSwxNyArOTQyLDUyIEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCB4
LCBpbnQgeSkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYg
KCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBhdXRvIHJlY3Qg
PSBtX2VsZW1lbnQtPmJvdW5kc0ZvclJhbmdlKGxvY2F0aW9uLCBsZW5ndGgsIFdlYkNvcmU6OkF0
c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXMpOworICAgIGF1dG8gYm91bmRz
ID0gbWFrZVN0cmluZygneycsIHJlY3QueCgpLCAiLCAiLCByZWN0LnkoKSwgIiwgIiwgcmVjdC53
aWR0aCgpLCAiLCAiLCByZWN0LmhlaWdodCgpLCAnfScpOworICAgIHJldHVybiBPcGFxdWVKU1N0
cmluZzo6dHJ5Q3JlYXRlKGJvdW5kcykubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQg
bG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9lbGVtZW50LT5p
bnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJ
bnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAg
cmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUobV9lbGVtZW50LT50ZXh0KCkuc3Vic3Ry
aW5nKGxvY2F0aW9uLCBsZW5ndGgpKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2Uo
dW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9l
bGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAg
IGF1dG8gYnVpbGRBdHRyaWJ1dGVzID0gWyZdKGNvbnN0IFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMuYXR0cmlidXRlcykgeworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIlxuXHRcdCIpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoaXQua2V5
LCAnOicsIGl0LnZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBidWlsZGVyLmFwcGVu
ZCgiXG5cdERlZmF1bHQgdGV4dCBhdHRyaWJ1dGVzOiIpOworICAgIGJ1aWxkQXR0cmlidXRlcyht
X2VsZW1lbnQtPnRleHRBdHRyaWJ1dGVzKCkpOworCisgICAgYXV0byB0ZXh0ID0gbV9lbGVtZW50
LT50ZXh0KCk7CisgICAgaW50IGVuZE9mZnNldCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bG9jYXRpb247IGkgPCBsb2NhdGlvbiArIGxlbmd0aDsgaSA9IGVuZE9mZnNldCkgeworICAgICAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBtX2VsZW1lbnQtPnRleHRBdHRyaWJ1dGVzKGkpOworICAgICAg
ICBhdXRvIHJhbmdlU3RhcnQgPSBzdGQ6Om1heDxpbnQ+KGxvY2F0aW9uLCBhdHRyaWJ1dGVzLnN0
YXJ0T2Zmc2V0KTsKKyAgICAgICAgYXV0byByYW5nZUVuZCA9IHN0ZDo6bWluPGludD4obG9jYXRp
b24gKyBsZW5ndGgsIGF0dHJpYnV0ZXMuZW5kT2Zmc2V0KTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoIlxuXHRSYW5nZSBhdHRyaWJ1dGVzIGZvciAnIiwgdGV4dC5zdWJzdHJpbmcocmFuZ2VTdGFy
dCwgcmFuZ2VFbmQgLSByYW5nZVN0YXJ0KS5yZXBsYWNlKCJcbiIsICI8XFxuPiIpLnJlcGxhY2Uo
b2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsICI8b2JqPiIpLCAiJzoiKTsKKyAgICAgICAgYnVp
bGRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgICAgICBlbmRPZmZzZXQgPSBhdHRyaWJ1dGVz
LmVuZE9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0
ZShidWlsZGVyLnRvU3RyaW5nKCkpLmxlYWtSZWYoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTUyNiwxMiArMTA4MiwyMyBAQCBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQt
PmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OkludGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCisgICAgYXV0byBvZmZzZXQgPSBtX2VsZW1lbnQtPnNlbGVjdGVkUmFu
Z2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVN0cmluZygneycsIG9mZnNldC54KCksICIsICIs
IG9mZnNldC55KCkgLSBvZmZzZXQueCgpLCAnfScpOworICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6dHJ5Q3JlYXRlKHJhbmdlKS5sZWFrUmVmKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2VsZW1lbnQgfHwgIW1f
ZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBhdXRvIHRleHRMZW5ndGggPSBt
X2VsZW1lbnQtPnRleHQoKS5sZW5ndGgoKTsKKyAgICBtX2VsZW1lbnQtPnNldFNlbGVjdGVkUmFu
Z2Uoc3RkOjptaW4obG9jYXRpb24sIHRleHRMZW5ndGgpLCBzdGQ6Om1pbihsZW5ndGgsIHRleHRM
ZW5ndGgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbmNyZW1lbnQoKQpAQCAtNTk4LDMyICsxMTY1LDMyIEBAIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6
QXRzcGk6OlN0YXRlOjpGb2N1c2FibGUpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0
ZTo6U2VsZWN0YWJsZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0
aVNlbGVjdGFibGUoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hl
Y2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6Ok11
bHRpc2VsZWN0YWJsZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNp
YmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVu
dFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpWaXNpYmxlKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhY2hlY2tFbGVtZW50U3RhdGUobV9lbGVt
ZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OlNob3dpbmcpOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2Vi
Q29yZTo6QXRzcGk6OlN0YXRlOjpDb2xsYXBzZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CkBAIC02MzMsMTcgKzEyMDAsMTcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6
OkF0c3BpOjpTdGF0ZTo6U2luZ2xlTGluZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNNdWx0aUxpbmUoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3Rh
dGU6Ok11bHRpTGluZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9w
dXAoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50
U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6Okhhc1BvcHVwKTsK
IH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQpAQCAtNzgwLDEw
ICsxMzQ3LDE4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSCiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCiB7CisgICAgaWYgKCFtX2VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fZWxlbWVudC0+c2Nyb2xsVG9NYWtlVmlzaWJsZShX
ZWJDb3JlOjpBdHNwaTo6U2Nyb2xsVHlwZTo6QW55d2hlcmUpOwogfQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KQogeworICAg
IGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VsZW1lbnQtPnNjcm9s
bFRvUG9pbnQoeyB4LCB5IH0sIFdlYkNvcmU6OkF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93
Q29vcmRpbmF0ZXMpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRv
TWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCkBAIC04MTUsMjQgKzEzOTAsNDkgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNsYXNzTGlzdCgpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKK3N0YXRpYyBTdHJpbmcgc3RyaW5nQXRPZmZzZXQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpKiBlbGVtZW50LCBpbnQgb2Zmc2V0LCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBpZiAoIWVs
ZW1lbnQgfHwgIWVsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBlbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBhdXRvIHRleHQgPSBl
bGVtZW50LT50ZXh0KCk7CisgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gc3RhdGljX2Nh
c3Q8aW50Pih0ZXh0Lmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8g
Ym91bmRzID0gZWxlbWVudC0+Ym91bmRhcnlPZmZzZXQob2Zmc2V0LCBncmFudWxhcml0eSk7Cisg
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzdGQ6Om1heDxpbnQ+KGJvdW5kcy54KCksIDApOwor
ICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHN0ZDo6bWluPGludD4oYm91bmRzLnkoKSwgdGV4dC5s
ZW5ndGgoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcodGV4dC5zdWJzdHJpbmcoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSwgIiwgIiwgc3RhcnRPZmZzZXQsICIsICIsIGVu
ZE9mZnNldCk7Cit9CisKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjaGFyYWN0ZXJBdE9mZnNldChpbnQgb2Zmc2V0KQogewotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50IHx8ICFt
X2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKKyAgICBhdXRvIHRleHQgPSBtX2VsZW1lbnQtPnRleHQoKTsKKyAgICBpZiAob2Zmc2V0
IDwgMCB8fCBvZmZzZXQgPiBzdGF0aWNfY2FzdDxpbnQ+KHRleHQubGVuZ3RoKCkpKQorICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGF1dG8g
c3RyaW5nID0gbWFrZVN0cmluZyh0ZXh0LnN1YnN0cmluZyhvZmZzZXQsIDEpLCAiLCAiLCBvZmZz
ZXQsICIsICIsIG9mZnNldCArIDEpOworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3Jl
YXRlKHN0cmluZykubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6d29yZEF0T2Zmc2V0KGludCBvZmZzZXQpCiB7Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgcmV0dXJuIE9wYXF1
ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc3RyaW5nQXRPZmZzZXQobV9lbGVtZW50LmdldCgpLCBvZmZz
ZXQsIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEdyYW51bGFyaXR5OjpX
b3JkU3RhcnQpKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lQXRPZmZzZXQoaW50IG9mZnNldCkKIHsKLSAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICByZXR1cm4gT3BhcXVl
SlNTdHJpbmc6OnRyeUNyZWF0ZShzdHJpbmdBdE9mZnNldChtX2VsZW1lbnQuZ2V0KCksIG9mZnNl
dCwgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0R3JhbnVsYXJpdHk6Okxp
bmVTdGFydCkpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbnRlbmNlQXRPZmZzZXQoaW50IG9mZnNldCkKIHsKLSAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICByZXR1cm4gT3Bh
cXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShzdHJpbmdBdE9mZnNldChtX2VsZW1lbnQuZ2V0KCksIG9m
ZnNldCwgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0R3JhbnVsYXJpdHk6
OlNlbnRlbmNlU3RhcnQpKS5sZWFrUmVmKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cmVwbGFjZVRleHRJblJhbmdlKEpTU3RyaW5nUmVmLCBpbnQsIGludCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9ndGsvbWFpbi5jcHAKaW5kZXggYjVhOTIyYTQ0OGZlLi44OTQ5MTA0NWJlMWUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZ3RrL21haW4uY3BwCkBAIC0zMyw2ICszMyw3IEBACiBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZ19zZXRlbnYoIldFQktJVF9ESVNBQkxF
X01FTU9SWV9QUkVTU1VSRV9NT05JVE9SIiwgIjEiLCBGQUxTRSk7CisgICAgZ19zZXRlbnYoIldF
QktJVF9BMTFZX0JVU19BRERSRVNTIiwgIiIsIEZBTFNFKTsKIAogICAgIGd0a19pbml0KCZhcmdj
LCAmYXJndik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443386</attachid>
            <date>2021-11-05 03:36:27 -0700</date>
            <delta_ts>2021-11-15 02:03:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wtr-atspi.diff</filename>
            <type>text/plain</type>
            <size>58142</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0YWIzMTI0NzBjMTcuLjlhZTRmYmM0NjE1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDIxLTEwLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBXVFIgYWNjZXNz
aWJpbGl0eSBzdXBwb3J0IHdoZW4gYnVpbGRpbmcgd2l0aCBBVFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMjU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHN5bWJvbHMgcmVxdWlyZWQg
YnkgV1RSLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpydW5Mb29wIGNv
bnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmZvY3VzZWRP
YmplY3QgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eVJvb3RBdHNwaS5oOgorCiAyMDIxLTExLTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBBWDogcmVuYW1lIGFjdGlvblZlcmIoKSBhcyBsb2Nh
bGl6ZWRBY3Rpb25WZXJiKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmNwcAppbmRleCAzMzJiZDAyZThhZTIuLjhm
ZmNkNjI3NjQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNw
aS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmNwcApAQCAtNDgsNiArNDgsMTEgQEAgQWNjZXNz
aWJpbGl0eUF0c3BpOjpBY2Nlc3NpYmlsaXR5QXRzcGkoY29uc3QgU3RyaW5nJiBidXNBZGRyZXNz
KQogICAgIH0pOwogfQogCitSdW5Mb29wJiBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJ1bkxvb3AoKSBj
b25zdAoreworICAgIHJldHVybiBtX3F1ZXVlLT5ydW5Mb29wKCk7Cit9CisKIGNvbnN0IGNoYXIq
IEFjY2Vzc2liaWxpdHlBdHNwaTo6dW5pcXVlTmFtZSgpIGNvbnN0CiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5oCmluZGV4IDgyNmZkNDQ1ZjhiZS4u
NTNkYjViZjgzMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmgKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgog
ICAgIEFjY2Vzc2liaWxpdHlBdHNwaShjb25zdCBTdHJpbmcmKTsKICAgICB+QWNjZXNzaWJpbGl0
eUF0c3BpKCkgPSBkZWZhdWx0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgUnVuTG9vcCYgcnVuTG9v
cCgpIGNvbnN0OworCiAgICAgY29uc3QgY2hhciogdW5pcXVlTmFtZSgpIGNvbnN0OwogICAgIEdW
YXJpYW50KiBudWxsUmVmZXJlbmNlKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5o
CmluZGV4IDk2OTc3Y2IzYjBmZS4uM2FjNmEzODE1MzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpLmgKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgT3B0aW9uU2V0PElu
dGVyZmFjZT4mIGludGVyZmFjZXMoKSBjb25zdCB7IHJldHVybiBtX2ludGVyZmFjZXM7IH0KIAog
ICAgIHZvaWQgc2V0Um9vdChBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKik7Ci0gICAgQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaSogcm9vdCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2li
aWxpdHlSb290QXRzcGkqIHJvb3QoKSBjb25zdDsKICAgICB2b2lkIHNldFBhcmVudChzdGQ6Om9w
dGlvbmFsPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+IHBhcmVudCgpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRl
QmFja2luZ1N0b3JlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqPiBwYXJlbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCiAgICAgdm9pZCBhdHRhY2goQVhDb3JlT2JqZWN0
Kik7CiAgICAgdm9pZCBkZXRhY2goKTsKQEAgLTY2LDI0ICs2NiwyNCBAQCBwdWJsaWM6CiAgICAg
R1ZhcmlhbnQqIHJlZmVyZW5jZSgpOwogICAgIHZvaWQgc2VyaWFsaXplKEdWYXJpYW50QnVpbGRl
ciopIGNvbnN0OwogCi0gICAgU3RyaW5nIGlkKCkgY29uc3Q7Ci0gICAgQ1N0cmluZyBuYW1lKCkg
Y29uc3Q7Ci0gICAgQ1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotICAgIHVuc2lnbmVkIHJv
bGUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBjaGlsZENvdW50KCkgY29uc3Q7Ci0gICAgVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBjaGlsZHJlbigpIGNvbnN0OwotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogY2hpbGRBdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAg
dWludDY0X3Qgc3RhdGUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWQoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdW5zaWduZWQgcm9sZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGNo
aWxkQ291bnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaT4+IGNoaWxkcmVuKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCBzdGF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhdGVD
aGFuZ2VkKGNvbnN0IGNoYXIqLCBib29sKTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBh
dHRyaWJ1dGVzKCkgY29uc3Q7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk+Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKIAotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSogaGl0VGVzdChjb25zdCBJbnRQb2ludCYsIHVpbnQzMl90KSBjb25z
dDsKLSAgICBJbnRSZWN0IGVsZW1lbnRSZWN0KHVpbnQzMl90KSBjb25zdDsKLSAgICB2b2lkIHNj
cm9sbFRvTWFrZVZpc2libGUodWludDMyX3QpIGNvbnN0OwotICAgIHZvaWQgc2Nyb2xsVG9Qb2lu
dChjb25zdCBJbnRQb2ludCYsIHVpbnQzMl90KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIGhpdFRlc3QoY29uc3QgSW50UG9pbnQmLCB1aW50MzJf
dCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBlbGVtZW50UmVjdCh1aW50MzJf
dCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKHVp
bnQzMl90KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvUG9pbnQoY29u
c3QgSW50UG9pbnQmLCB1aW50MzJfdCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICAgZW51bSBjbGFz
cyBUZXh0R3JhbnVsYXJpdHkgewogICAgICAgICBDaGFyYWN0ZXIsCiAgICAgICAgIFdvcmRTdGFy
dCwKQEAgLTk0LDE2ICs5NCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIExpbmVFbmQsCiAgICAgICAg
IFBhcmFncmFwaAogICAgIH07Ci0gICAgSW50UG9pbnQgYm91bmRhcnlPZmZzZXQodW5zaWduZWQs
IFRleHRHcmFudWxhcml0eSkgY29uc3Q7Ci0gICAgSW50UmVjdCBib3VuZHNGb3JSYW5nZSh1bnNp
Z25lZCwgdW5zaWduZWQsIHVpbnQzMl90KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbnRQ
b2ludCBib3VuZGFyeU9mZnNldCh1bnNpZ25lZCwgVGV4dEdyYW51bGFyaXR5KSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25l
ZCwgdWludDMyX3QpIGNvbnN0OwogICAgIHN0cnVjdCBUZXh0QXR0cmlidXRlcyB7CiAgICAgICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7CiAgICAgICAgIGludCBzdGFydE9m
ZnNldDsKICAgICAgICAgaW50IGVuZE9mZnNldDsKICAgICB9OwotICAgIFRleHRBdHRyaWJ1dGVz
IHRleHRBdHRyaWJ1dGVzKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0LCBi
b29sID0gZmFsc2UpIGNvbnN0OwotICAgIEludFBvaW50IHNlbGVjdGVkUmFuZ2UoKSBjb25zdDsK
LSAgICB2b2lkIHNldFNlbGVjdGVkUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBUZXh0QXR0cmlidXRlcyB0ZXh0QXR0cmlidXRlcyhzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCwgYm9vbCA9IGZhbHNlKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBJbnRQb2ludCBzZWxlY3RlZFJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTZWxlY3RlZFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgdm9pZCB0
ZXh0SW5zZXJ0ZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAg
dm9pZCB0ZXh0RGVsZXRlZChjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
ICAgICB2b2lkIHRleHRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5j
cHAKaW5kZXggNmQ2MWY2MjZmMmJjLi5jZTg1NjRiNzcxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0
c3BpLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNwaUVu
dW1zLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3BpSW50ZXJmYWNlcy5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4K
QEAgLTIyNCw2ICsyMjUsMzggQEAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nlc3NpYmls
aXR5Um9vdEF0c3BpOjpjaGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKK0Fj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6Zm9jdXNlZE9i
amVjdCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAgICAgICAgQVhP
YmplY3RDYWNoZTo6ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOworCisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogZm9jdXNlZERvY3VtZW50ID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5kb2N1bWVudCgpOwor
ICAgIGlmICghZm9jdXNlZERvY3VtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8qIGNhY2hlID0gZm9jdXNlZERvY3VtZW50LT5heE9iamVjdENhY2hlKCk7CisgICAgaWYg
KCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBmb2N1c2VkT2Jq
ZWN0ID0gY2FjaGUtPmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKG1fcGFnZS5nZXQoKSk7CisgICAg
aWYgKCFmb2N1c2VkT2JqZWN0KQorICAgICAgICBmb2N1c2VkT2JqZWN0ID0gY2FjaGUtPmZvY3Vz
ZWRPYmplY3RGb3JQYWdlKG1fcGFnZS5nZXQoKSk7CisgICAgaWYgKCFmb2N1c2VkT2JqZWN0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIHdyYXBwZXIgPSBmb2N1c2VkT2Jq
ZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHdyYXBwZXItPnNldFJvb3QoY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5Um9vdEF0
c3BpKj4odGhpcykpOworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIHZvaWQgQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaTo6c2VyaWFsaXplKEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRz
cGkuaAppbmRleCBhMjc1ZjNmZGU0NmQuLmJkMTUyN2RkZTg5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0
c3BpLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIEdWYXJpYW50KiBhcHBsaWNhdGlv
blJlZmVyZW5jZSgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlBdHNwaSYgYXRzcGkoKSBjb25z
dCB7IHJldHVybiBtX2F0c3BpOyB9CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjaGls
ZCgpIGNvbnN0OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogZm9jdXNlZE9iamVjdCgp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKikgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMWEyOWU1NjQ4ZTc3Li4xNmMzMGNjNTgyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMjEtMTAtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW2ExMXldIEFkZCBpbml0aWFsIFdUUiBhY2Nlc3NpYmls
aXR5IHN1cHBvcnQgd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIEFUU1BJIHdlIG5lZWQgdGhl
IHdlYiBwYWdlIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIGdldCB0aGUgcm9vdCBhbmQgZm9jdXNl
ZCBvYmplY3Qgd3JhcHBlcnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0FjY2Vzc2liaWxpdHlSb290T2Jq
ZWN0KToKKyAgICAgICAgKFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3QpOgorCiAyMDIxLTEx
LTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBS
ZW1vdGVNZWRpYVJlc291cmNlIHVzZSBTaGFyZWRNZW1vcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFn
ZS5jcHAKaW5kZXggODRlYTU5MWI5NzhmLi43YzY4YWM2YjFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZVBhZ2UuY3BwCkBAIC0yNDYsNyArMjQ2LDExIEBAIHZvaWQqIFdLQWNjZXNzaWJpbGl0eVJv
b3RPYmplY3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFkpCiAgICAgaWYgKCFwYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKworI2lmIFVT
RShBVFNQSSkKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmFjY2Vzc2liaWxp
dHlSb290T2JqZWN0KCkuY2hpbGQoKTsKKyNlbmRpZgorCiAgICAgV2ViQ29yZTo6UGFnZSogcGFn
ZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzMsNyArMjc3LDExIEBAIHZvaWQqIFdLQWNjZXNzaWJp
bGl0eUZvY3VzZWRPYmplY3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiAjaWYgRU5BQkxFKEFD
Q0VTU0lCSUxJVFkpCiAgICAgaWYgKCFwYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsKLSAgICAK
KworI2lmIFVTRShBVFNQSSkKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmFj
Y2Vzc2liaWxpdHlSb290T2JqZWN0KCkuZm9jdXNlZE9iamVjdCgpOworI2VuZGlmCisKICAgICBX
ZWJDb3JlOjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NjhkMDMyYjYyYWEuLjg3YWU0MGNhN2Zl
NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDkzIEBACisyMDIxLTEwLTI1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBXVFIgYWNjZXNz
aWJpbGl0eSBzdXBwb3J0IHdoZW4gYnVpbGRpbmcgd2l0aCBBVFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMjU5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlckF0c3BpLmNwcDoKKyAgICAgICAgKFdUUjo6ZmluZEFjY2Vzc2libGVPYmplY3RCeUlk
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVt
ZW50QnlJZCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9y
bU5hbWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YXhSdW5Mb29w
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbkFYVGhy
ZWFkQW5kV2FpdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpleGVj
dXRlT25BWFRocmVhZCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpl
eGVjdXRlT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHA6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQpOgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsKToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdUUjo6ZWxl
bWVudEZvclJlbGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhQ29udHJvbHNFbGVtZW50QXRJbmRleCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
IChXVFI6OmF0dHJpYnV0ZXNPZkVsZW1lbnQpOgorICAgICAgICAoV1RSOjphdHRyaWJ1dGVzT2ZF
bGVtZW50cyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxs
QXR0cmlidXRlcyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bnVtYmVyQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV1RSOjpjaGVja0VsZW1lbnRTdGF0ZSk6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3Vw
cG9ydGVkKToKKyAgICAgICAgKFdUUjo6cm9sZVZhbHVlVG9TdHJpbmcpOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y29tcHV0ZWRSb2xlU3RyaW5nKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om9yaWVudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWxwVGV4dCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OngpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KToKKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgpOgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjbGlja1BvaW50WCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNsaWNrUG9pbnRZKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNS
ZXF1aXJlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
U2VsZWN0ZWQgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1NlbGVjdGVkT3B0aW9uQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNFeHBhbmRlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVsIGNvbnN0KToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCBjb25zdCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yTGluZSk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSk6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJh
bmdlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUg
Y29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFi
bGUgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRp
U2VsZWN0YWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzT2ZmU2NyZWVuIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc1NpbmdsZUxpbmUgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc011bHRpTGluZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omhhc1BvcHVwIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAoV1RSOjpzdHJpbmdB
dE9mZnNldCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoYXJhY3Rl
ckF0T2Zmc2V0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d29yZEF0
T2Zmc2V0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUF0T2Zm
c2V0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VudGVuY2VBdE9m
ZnNldCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHA6CisgICAgICAg
IChtYWluKToKKwogMjAyMS0xMS0wNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bYTExeV0gRW1iZWRkZWQgb2JqZWN0cyBhcmUgbm90
IGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRleHQgaW50ZXJmYWNlIHdpdGggQVRTUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCBlOWQwZjU1Y2IwZDcuLjkwYjQ1NGM2NDg5YSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2lmIFBMQVRG
T1JNKENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0
Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCkBAIC02OSw3ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gZWxlbWVudEF0UG9pbnQoaW50IHgs
IGludCB5KTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKTsKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQorI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCiAgICAgdm9pZCBleGVjdXRlT25B
WFRocmVhZEFuZFdhaXQoRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGV4ZWN1dGVPbkFY
VGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBleGVjdXRlT25NYWluVGhyZWFk
KEZ1bmN0aW9uPHZvaWQoKT4mJik7CkBAIC0xMDQsNiArMTA1LDEwIEBAIHByaXZhdGU6CiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICB2b2lkIHVwZGF0ZUlzb2xh
dGVkVHJlZU1vZGUoKTsKIAorI2lmIFVTRShBVFNQSSkKKyAgICBSdW5Mb29wJiBheFJ1bkxvb3Ao
KTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gX0FYVUlFbGVtZW50VXNl
U2Vjb25kYXJ5QVhUaHJlYWQgYW5kIF9BWFVJRWxlbWVudFJlcXVlc3RTZXJ2aWNlZEJ5U2Vjb25k
YXJ5QVhUaHJlYWQKICAgICAvLyBkbyBub3Qgd29yayBmb3IgV2ViS2l0VGVzdFJ1bm5lciBzaW5j
ZSB0aGlzIGlzIGNhbGxpbmcgZGlyZWN0bHkgaW50bwpAQCAtMTEzLDYgKzExOCw5IEBAIHByaXZh
dGU6CiAjZW5kaWYKICAgICBib29sIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgeyBm
YWxzZSB9OwogICAgIEJpbmFyeVNlbWFwaG9yZSBtX3NlbWFwaG9yZTsKKyNpZiBVU0UoQVRTUEkp
CisgICAgUnVuTG9vcCogbV9heFJ1bkxvb3AgeyBudWxscHRyIH07CisjZW5kaWYKICNlbmRpZgog
fTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCA1ZGNlNzQ0Njk2MTEuLmUwMjMz
N2UzYTViMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTQyNyw2ICs0MjcsNyBA
QCBwcml2YXRlOgogI2lmIFVTRShBVEspCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyPiBtX25vdGlmaWNhdGlvbkhhbmRsZXI7CiAjZWxpZiBVU0UoQVRTUEkpCisg
ICAgc3RhdGljIFJlZlB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gc19jb250cm9sbGVyOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IG1fZWxlbWVudDsK
ICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0c3BpLmNwcAppbmRleCA0MGQ3NGYzMjMwNzcuLmI3NzIyZDllOGU4OSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckF0c3BpLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwCkBAIC0zMiw3
ICszMiw5IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlLmgiCisjaW5j
bHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlSb290QXRzcGku
aD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgogCiBuYW1lc3BhY2Ug
V1RSIHsKQEAgLTQxLDE0ICs0Myw0NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKIHsKIH0KIAotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNT
dHJpbmdSZWYgaWQpCitzdGF0aWMgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBm
aW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
JiBheE9iamVjdCwgY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpCiB7CisgICAgYXhPYmplY3QudXBk
YXRlQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKGF4T2JqZWN0LmlkKCkgPT0gZWxlbWVudElEKQor
ICAgICAgICByZXR1cm4gJmF4T2JqZWN0OworCisgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBjaGlsZHJlbjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+ZXhlY3V0ZU9uQVhUaHJlYWRB
bmRXYWl0KFtheE9iamVjdCA9IFJlZiB7IGF4T2JqZWN0IH0sICZjaGlsZHJlbl0geworICAgICAg
ICBheE9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIGNoaWxkcmVuID0gYXhP
YmplY3QtPmNoaWxkcmVuKCk7CisgICAgfSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6
IGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZmluZEFjY2Vzc2libGVP
YmplY3RCeUlkKCpjaGlsZCwgZWxlbWVudElEKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OworICAgIH0KKwogICAgIHJldHVybiBudWxscHRyOwogfQogCitSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJ
ZChKU1N0cmluZ1JlZiBpZCkKK3sKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBhdXRvKiByb290T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4oV0tBY2Nl
c3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFN0cmluZyBlbGVtZW50SUQgPSB0b1dURlN0cmluZyhp
ZCk7CisgICAgYXV0byogZWxlbWVudCA9IGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZCgqcm9vdE9i
amVjdCwgZWxlbWVudElEKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50
KTsKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpwbGF0Zm9ybU5hbWUoKQogewotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9y
bU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhdHNwaSIpKTsKKyAg
ICAvLyBGSVhNRTogVXNlIGF0ayBhcyBwbGF0Zm9ybSBuYW1lIGZvciBub3csIGJlY2F1c2UgdGhl
IGV4cGVjdGVkIGJlaGF2aW9yIGlzIHRoZSBzYW1lLgorICAgIC8vIE9uY2Ugd2UgcmVwbGFjZSB0
aGUgYXRrIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGF0c3BpIG9uZSB3ZSBjYW4gdXNlIGF0c3Bp
IGFuZAorICAgIC8vIHVwZGF0ZSB0aGUgdGVzdHMgaGVscGVyIHNjcmlwdHMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIyMjcuCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHBsYXRmb3JtTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImF0ayIpKTsKICAgICByZXR1cm4gcGxhdGZvcm1OYW1lOwogfQogCkBAIC04Niw2ICsxMjAs
NDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6dXBkYXRlSXNvbGF0ZWRUcmVlTW9k
ZSgpCiB7CiB9CiAKK1J1bkxvb3AmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpheFJ1bkxvb3Ao
KQoreworICAgIGlmICghbV9heFJ1bkxvb3ApIHsKKyAgICAgICAgV0tCdW5kbGVQYWdlUmVmIHBh
Z2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CisgICAgICAg
IGF1dG8qIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkqPihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZWxlbWVudCk7CisgICAgICAgIG1fYXhSdW5Mb29wID0gJmVsZW1lbnQtPnJvb3Qo
KS0+YXRzcGkoKS5ydW5Mb29wKCk7CisgICAgfQorCisgICAgcmV0dXJuICptX2F4UnVuTG9vcDsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZXhlY3V0ZU9uQVhUaHJlYWRBbmRX
YWl0KEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBheFJ1bkxvb3AoKS5kaXNw
YXRjaChbdGhpcywgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAgICAgICBmdW5j
dGlvbigpOworICAgICAgICBtX3NlbWFwaG9yZS5zaWduYWwoKTsKKyAgICB9KTsKKyAgICBtX3Nl
bWFwaG9yZS53YWl0KCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1
dGVPbkFYVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBheFJ1bkxv
b3AoKS5kaXNwYXRjaChbdGhpcywgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0geworICAg
ICAgICBmdW5jdGlvbigpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpleGVjdXRlT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sK
KyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF4UnVuTG9vcCgpLmRpc3BhdGNoKFt0aGlzLCBmdW5jdGlv
biA9IFdURk1vdmUoZnVuY3Rpb24pXSgpIG11dGFibGUgeworICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RS
CiAKICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0c3BpLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcAppbmRleCAzYmNmODlk
ZGM5M2EuLmFiOTlkOTQyOWE1OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudEF0c3BpLmNwcApAQCAtMzEsMTQgKzMxLDIzIEBACiAjaW5jbHVkZSAiSW5qZWN0
ZWRCdW5kbGVQYWdlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZUZyYW1lLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9u
Lmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNl
IFdUUiB7CiAKK1JlZlB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c19jb250cm9sbGVyOworCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCiAgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKIHsKKyAgICBpZiAoIXNfY29udHJvbGxlcikKKyAgICAgICAgc19jb250cm9s
bGVyID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
KCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
Y29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCkBAIC01Myw3ICs2Miw3IEBAIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkKIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIG90
aGVyRWxlbWVudCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LmdldCgpID09IG90aGVyRWxlbWVu
dC0+cGxhdGZvcm1VSUVsZW1lbnQoKTsKKyAgICByZXR1cm4gb3RoZXJFbGVtZW50ICYmIG1fZWxl
bWVudC5nZXQoKSA9PSBvdGhlckVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCk7CiB9CiAKIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJc29sYXRlZE9iamVjdCgpIGNvbnN0CkBAIC03
MSwxMiArODAsMjQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldp
dGhSYW5nZShWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUUKIAogaW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQogewotICAgIHJldHVybiAwOworICAgIGlmICgh
bV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGNoaWxkQ291bnQ7
CisgICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZjaGls
ZENvdW50XSB7CisgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAg
ICAgIGNoaWxkQ291bnQgPSBtX2VsZW1lbnQtPmNoaWxkQ291bnQoKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gY2hpbGRDb3VudDsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKIHsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9lbGVtZW50LT5oaXRUZXN0KHsgeCwgeSB9
LCBXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnQgPyBlbGVtZW50
IDogbV9lbGVtZW50LmdldCgpKTsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCkBAIC04Niw3
ICsxMDcsMzcgQEAgdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxk
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUo
KTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IGNoaWxk
OworICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmY2hp
bGQsIGluZGV4XSB7CisgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Cisg
ICAgICAgIGNoaWxkID0gbV9lbGVtZW50LT5jaGlsZEF0KGluZGV4KTsKKyAgICB9KTsKKyAgICBp
ZiAoIWNoaWxkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoY2hpbGQuZ2V0KCkpOworfQorCitzdGF0aWMgUmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGVsZW1lbnRGb3JSZWxhdGlvbkF0SW5kZXgoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBlbGVtZW50LCBXZWJDb3JlOjpBdHNwaTo6UmVs
YXRpb24gcmVsYXRpb24sIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmICghZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlbGF0aW9uTWFwID0gZWxlbWVudC0+
cmVsYXRpb25NYXAoKTsKKyAgICBhdXRvIHRhcmdldHMgPSByZWxhdGlvbk1hcC5nZXQocmVsYXRp
b24pOworICAgIGlmICh0YXJnZXRzLmlzRW1wdHkoKSB8fCBpbmRleCA+PSB0YXJnZXRzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHRhcmdldCA9IHRhcmdldHNb
aW5kZXhdOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUodGFyZ2V0LmdldCgpKTsKIH0K
IAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCkBAIC05NiwxNyArMTQ3LDE3
IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuCiAKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2ln
bmVkIGluZGV4KQogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBlbGVtZW50Rm9y
UmVsYXRpb25BdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlJlbGF0aW9u
OjpOb2RlUGFyZW50T2YsIGluZGV4KTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCh1bnNp
Z25lZCBpbmRleCkKIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZWxlbWVudEZv
clJlbGF0aW9uQXRJbmRleChtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpSZWxhdGlv
bjo6Rmxvd3NUbywgaW5kZXgpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUNvbnRyb2xzRWxlbWVudEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGVsZW1lbnRGb3JS
ZWxhdGlvbkF0SW5kZXgobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6UmVsYXRpb246
OkNvbnRyb2xsZXJGb3IsIGluZGV4KTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQg
aW5kZXgpCkBAIC0xMzYsMTIgKzE4NywyNyBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KHVuc2lnbgogCiBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0
bGVVSUVsZW1lbnQoKQogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBlbGVtZW50
Rm9yUmVsYXRpb25BdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlJlbGF0
aW9uOjpMYWJlbGxlZEJ5LCAwKTsKIH0KIAogUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQogewotICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPiBwYXJlbnQ7CisgICAgc19jb250cm9sbGVyLT5l
eGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZwYXJlbnRdIHsKKyAgICAgICAgbV9lbGVt
ZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgYXV0byBwYXJlbnRXcmFwcGVyID0g
bV9lbGVtZW50LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudFdyYXBwZXIpCisgICAgICAg
ICAgICBwYXJlbnQgPSBwYXJlbnRXcmFwcGVyLnZhbHVlKCk7CisgICAgfSk7CisgICAgaWYgKCFw
YXJlbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNyZWF0ZShwYXJlbnQuZ2V0KCkpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQpA
QCAtMTU5LDE0ICsyMjUsMTEwIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIH0KIAorc3RhdGljIFN0cmluZyBhdHRy
aWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgYnVpbGRlci5hcHBlbmQoZWxlbWVudC5yb2xl
KCktPnN0cmluZygpLCAnXG4nKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFBhcmVudDogIik7
CisgICAgaWYgKGF1dG8gcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQocGFyZW50LT5yb2xlKCktPnN0cmluZygpLnN1YnN0cmluZyg4KSk7
CisgICAgICAgIGF1dG8gcGFyZW50TmFtZSA9IHBhcmVudC0+dGl0bGUoKS0+c3RyaW5nKCkuc3Vi
c3RyaW5nKDkpOworICAgICAgICBpZiAoIXBhcmVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIjogIiwgcGFyZW50TmFtZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIobnVsbCkiKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKwor
ICAgIGJ1aWxkZXIuYXBwZW5kKCJBWENoaWxkcmVuOiAiLCBlbGVtZW50LmNoaWxkcmVuQ291bnQo
KSwgJ1xuJyk7CisKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhQb3NpdGlvbjogIHsgIiwgRm9ybWF0
dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbihlbGVtZW50LngoKSwgNiwgS2VlcFRyYWlsaW5nWmVy
b3MpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiLCAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkUHJl
Y2lzaW9uKGVsZW1lbnQueSgpLCA2LCBLZWVwVHJhaWxpbmdaZXJvcykpOworICAgIGJ1aWxkZXIu
YXBwZW5kKCIgfVxuIik7CisKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhTaXplOiB7ICIsIEZvcm1h
dHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oZWxlbWVudC53aWR0aCgpLCA2LCBLZWVwVHJhaWxp
bmdaZXJvcykpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4
ZWRQcmVjaXNpb24oZWxlbWVudC5oZWlnaHQoKSwgNiwgS2VlcFRyYWlsaW5nWmVyb3MpKTsKKyAg
ICBidWlsZGVyLmFwcGVuZCgiIH1cbiIpOworCisgICAgU3RyaW5nIHRpdGxlID0gZWxlbWVudC50
aXRsZSgpLT5zdHJpbmcoKTsKKyAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkgeworICAgICAgICBi
dWlsZGVyLmFwcGVuZCh0aXRsZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAg
IH0KKworICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGVsZW1lbnQuZGVzY3JpcHRpb24oKS0+c3Ry
aW5nKCk7CisgICAgaWYgKCFkZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGRlc2NyaXB0aW9uLnV0ZjgoKS5kYXRhKCksICdcbicpOworCisgICAgU3RyaW5nIHZh
bHVlID0gZWxlbWVudC5zdHJpbmdWYWx1ZSgpLT5zdHJpbmcoKTsKKyAgICBpZiAoIXZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWUsICdcbicpOworCisgICAgYnVp
bGRlci5hcHBlbmQoIkFYRm9jdXNhYmxlOiAiLCBlbGVtZW50LmlzRm9jdXNhYmxlKCksICdcbicp
OworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEZvY3VzZWQ6ICIsIGVsZW1lbnQuaXNGb2N1c2VkKCks
ICdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFNlbGVjdGFibGU6ICIsIGVsZW1lbnQuaXNT
ZWxlY3RhYmxlKCksICdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFNlbGVjdGVkOiAiLCBl
bGVtZW50LmlzU2VsZWN0ZWQoKSwgJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYTXVsdGlT
ZWxlY3RhYmxlOiAiLCBlbGVtZW50LmlzTXVsdGlTZWxlY3RhYmxlKCksICdcbicpOworICAgIGJ1
aWxkZXIuYXBwZW5kKCJBWEVuYWJsZWQ6ICIsIGVsZW1lbnQuaXNFbmFibGVkKCksICdcbicpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEV4cGFuZGVkOiAiLCBlbGVtZW50LmlzRXhwYW5kZWQoKSwg
J1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIkFYUmVxdWlyZWQ6ICIsIGVsZW1lbnQuaXNSZXF1
aXJlZCgpLCAnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiQVhDaGVja2VkOiAiLCBlbGVtZW50
LmlzQ2hlY2tlZCgpLCAnXG4nKTsKKworICAgIFN0cmluZyB1cmwgPSBlbGVtZW50LnVybCgpLT5z
dHJpbmcoKTsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHVybCwgJ1xuJyk7CisKKyAgICAvLyBXZSBhcHBlbmQgdGhlIHBsYXRmb3JtIGF0dHJpYnV0ZXMg
YXMgYSBzaW5nbGUgbGluZSBhdCB0aGUgZW5kLgorICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFBsYXRm
b3JtQXR0cmlidXRlczogIik7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gZWxlbWVudC5wbGF0Zm9y
bVVJRWxlbWVudCgpLT5hdHRyaWJ1dGVzKCk7CisgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRlcykgeworICAgICAgICBpZiAoIWlzRmly
c3QpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgaXNGaXJzdCA9
IGZhbHNlOworICAgICAgICBidWlsZGVyLmFwcGVuZChpdC5rZXksICc6JywgaXQudmFsdWUpOwor
ICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKworICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudHMoVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4mIGVsZW1lbnRzKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRlc09mRWxlbWVudCgqZWxlbWVudCksICJcbi0t
LS0tLS0tLS0tLVxuIik7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwogSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkNoaWxkcmVuKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOworCisgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk+PiBjaGlsZHJlbjsKKyAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2Fp
dChbdGhpcywgJmNoaWxkcmVuXSB7CisgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7CisgICAgICAgIGNoaWxkcmVuID0gbV9lbGVtZW50LT5jaGlsZHJlbigpOworICAgIH0p
OworCisgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4gZWxlbWVudHM7
CisgICAgZWxlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGlsZHJlbi5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgZWxlbWVudHMudW5jaGVj
a2VkQXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShjaGlsZC5nZXQoKSkpOwor
CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoYXR0cmlidXRlc09mRWxlbWVu
dHMoZWxlbWVudHMpKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKIHsKLSAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBy
ZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShhdHRyaWJ1dGVzT2ZFbGVtZW50KCp0aGlz
KSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c3RyaW5nRGVzY3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVm
IGF0dHJpYnV0ZSkKQEAgLTE3NiwxMSArMzM4LDM5IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFs
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJp
bmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiB7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0b1dURlN0cmluZyhhdHRyaWJ1dGUpOwor
ICAgIGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWFNlbGVjdGVkVGV4dCIpIHsKKyAgICAgICAgaWYg
KCFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCisgICAgICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgICAgICBtX2VsZW1lbnQtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBhdXRvIHRleHQgPSBtX2VsZW1lbnQtPnRleHQoKTsK
KyAgICAgICAgYXV0byBvZmZzZXQgPSBtX2VsZW1lbnQtPnNlbGVjdGVkUmFuZ2UoKTsKKyAgICAg
ICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUodGV4dC5zdWJzdHJpbmcob2Zmc2V0
LngoKSwgb2Zmc2V0LnkoKSAtIG9mZnNldC54KCkpKS5sZWFrUmVmKCk7CisgICAgfQorCisgICAg
YXV0byBhdHRyaWJ1dGVzID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgaWYgKGF0dHJp
YnV0ZU5hbWUgPT0gIkFYUGxhY2Vob2xkZXJWYWx1ZSIpCisgICAgICAgIHJldHVybiBPcGFxdWVK
U1N0cmluZzo6dHJ5Q3JlYXRlKGF0dHJpYnV0ZXMuZ2V0KCJwbGFjZWhvbGRlci10ZXh0IikpLmxl
YWtSZWYoKTsKKwogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFs
dWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogeworICAgIGlmICghbV9lbGVtZW50KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdG9XVEZTdHJpbmcoYXR0
cmlidXRlKTsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKTsK
KyAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhBUklBU2V0U2l6ZSIpCisgICAgICAgIHJldHVy
biBhdHRyaWJ1dGVzLmdldCgic2V0c2l6ZSIpLnRvRG91YmxlKCk7CisgICAgaWYgKGF0dHJpYnV0
ZU5hbWUgPT0gIkFYQVJJQVBvc0luU2V0IikKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0
KCJwb3NpbnNldCIpLnRvRG91YmxlKCk7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjA0LDgg
KzM5NCwyMCBAQCBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dWlFbGVtZW50QXR0cmlidXRlVmFsdWUoSgogICAgIHJldHVybiBudWxscHRyOwog
fQogCitzdGF0aWMgYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkqIGVsZW1lbnQsIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBlbGVt
ZW50LT5zdGF0ZSgpICYgKEdfR1VJTlQ2NF9DT05TVEFOVCgxKSA8PCBzdGF0ZSk7Cit9CisKIGJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVm
IGF0dHJpYnV0ZSkKIHsKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRvV1RGU3RyaW5nKGF0
dHJpYnV0ZSk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYRWxlbWVudEJ1c3kiKQorICAg
ICAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpB
dHNwaTo6U3RhdGU6OkJ1c3kpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0yMTYsNiAr
NDE4LDE2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJs
ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogeworICAgIGlmICgh
bV9lbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgYXR0cmlidXRl
TmFtZSA9IHRvV1RGU3RyaW5nKGF0dHJpYnV0ZSk7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gbV9l
bGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gIkFYQVJJQVNl
dFNpemUiKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5jb250YWlucygic2V0c2l6ZSIpOwor
ICAgIGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWEFSSUFQb3NJblNldCIpCisgICAgICAgIHJldHVy
biBhdHRyaWJ1dGVzLmNvbnRhaW5zKCJwb3NpbnNldCIpOworCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0yMjQsOSArNDM2LDE5MiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIH0KIAorc3RhdGljIFN0cmlu
ZyByb2xlVmFsdWVUb1N0cmluZyh1bnNpZ25lZCByb2xlVmFsdWUpCit7CisgICAgc3dpdGNoIChy
b2xlVmFsdWUpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpBbGVydDoKKyAgICAg
ICAgcmV0dXJuICJBWEFsZXJ0Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkFy
dGljbGU6CisgICAgICAgIHJldHVybiAiQVhBcnRpY2xlIl9zOworICAgIGNhc2UgV2ViQ29yZTo6
QXRzcGk6OlJvbGU6OkF1ZGlvOgorICAgICAgICByZXR1cm4gIkFYQXVkaW8iX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6QmxvY2tRdW90ZToKKyAgICAgICAgcmV0dXJuICJBWEJs
b2NrcXVvdGUiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Q2FudmFzOgorICAg
ICAgICByZXR1cm4gIkFYQ2FudmFzIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6
OkNhcHRpb246CisgICAgICAgIHJldHVybiAiQVhDYXB0aW9uIl9zOworICAgIGNhc2UgV2ViQ29y
ZTo6QXRzcGk6OlJvbGU6OkNoZWNrQm94OgorICAgICAgICByZXR1cm4gIkFYQ2hlY2tCb3giX3M7
CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6Q2hlY2tNZW51SXRlbToKKyAgICAgICAg
cmV0dXJuICJBWENoZWNrTWVudUl0ZW0iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9s
ZTo6Q29sb3JDaG9vc2VyOgorICAgICAgICByZXR1cm4gIkFYQ29sb3JXZWxsIl9zOworICAgIGNh
c2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkNvbHVtbkhlYWRlcjoKKyAgICBjYXNlIFdlYkNvcmU6
OkF0c3BpOjpSb2xlOjpUYWJsZUNvbHVtbkhlYWRlcjoKKyAgICAgICAgcmV0dXJuICJBWENvbHVt
bkhlYWRlciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpDb21ib0JveDoKKyAg
ICAgICAgcmV0dXJuICJBWENvbWJvQm94Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJv
bGU6OkNvbW1lbnQ6CisgICAgICAgIHJldHVybiAiQVhDb21tZW50Il9zOworICAgIGNhc2UgV2Vi
Q29yZTo6QXRzcGk6OlJvbGU6OkNvbnRlbnREZWxldGlvbjoKKyAgICAgICAgcmV0dXJuICJBWERl
bGV0aW9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkNvbnRlbnRJbnNlcnRp
b246CisgICAgICAgIHJldHVybiAiQVhJbnNlcnRpb24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpB
dHNwaTo6Um9sZTo6RGVmaW5pdGlvbjoKKyAgICAgICAgcmV0dXJuICJBWERlZmluaXRpb24iX3M7
CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6RGVzY3JpcHRpb25MaXN0OgorICAgICAg
ICByZXR1cm4gIkFYRGVzY3JpcHRpb25MaXN0Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6
OlJvbGU6OkRlc2NyaXB0aW9uVGVybToKKyAgICAgICAgcmV0dXJuICJBWERlc2NyaXB0aW9uVGVy
bSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpEZXNjcmlwdGlvblZhbHVlOgor
ICAgICAgICByZXR1cm4gIkFYRGVzY3JpcHRpb25WYWx1ZSJfczsKKyAgICBjYXNlIFdlYkNvcmU6
OkF0c3BpOjpSb2xlOjpEaWFsb2c6CisgICAgICAgIHJldHVybiAiQVhEaWFsb2ciX3M7CisgICAg
Y2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6RG9jdW1lbnRGcmFtZToKKyAgICAgICAgcmV0dXJu
ICJBWERvY3VtZW50Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkRvY3VtZW50
V2ViOgorICAgICAgICByZXR1cm4gIkFYV2ViQXJlYSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0
c3BpOjpSb2xlOjpFbWJlZGRlZDoKKyAgICAgICAgcmV0dXJuICJBWEVtYmVkZGVkIl9zOworICAg
IGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkVudHJ5OgorICAgICAgICByZXR1cm4gIkFYVGV4
dEZpZWxkIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkZvb3RlcjoKKyAgICAg
ICAgcmV0dXJuICJBWEZvb3RlciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpG
b290bm90ZToKKyAgICAgICAgcmV0dXJuICJBWEZvb3Rub3RlIl9zOworICAgIGNhc2UgV2ViQ29y
ZTo6QXRzcGk6OlJvbGU6OkZvcm06CisgICAgICAgIHJldHVybiAiQVhGb3JtIl9zOworICAgIGNh
c2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Okdyb3VwaW5nOgorICAgIGNhc2UgV2ViQ29yZTo6QXRz
cGk6OlJvbGU6OlBhbmVsOgorICAgICAgICByZXR1cm4gIkFYR3JvdXAiX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6SGVhZGluZzoKKyAgICAgICAgcmV0dXJuICJBWEhlYWRpbmci
X3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6SW1hZ2U6CisgICAgICAgIHJldHVy
biAiQVhJbWFnZSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpJbWFnZU1hcDoK
KyAgICAgICAgcmV0dXJuICJBWEltYWdlTWFwIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6
OlJvbGU6OkludmFsaWRSb2xlOgorICAgICAgICByZXR1cm4gIkFYSW52YWxpZCJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpMYWJlbDoKKyAgICAgICAgcmV0dXJuICJBWExhYmVs
Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkxldmVsQmFyOgorICAgICAgICBy
ZXR1cm4gIkFYTGV2ZWxJbmRpY2F0b3IiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9s
ZTo6TGluazoKKyAgICAgICAgcmV0dXJuICJBWExpbmsiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpB
dHNwaTo6Um9sZTo6TGlzdEJveDoKKyAgICAgICAgcmV0dXJuICJBWExpc3RCb3giX3M7CisgICAg
Y2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TGlzdDoKKyAgICAgICAgcmV0dXJuICJBWExpc3Qi
X3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TGlzdEl0ZW06CisgICAgICAgIHJl
dHVybiAiQVhMaXN0SXRlbSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpMb2c6
CisgICAgICAgIHJldHVybiAiQVhMb2ciX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9s
ZTo6TWFycXVlZToKKyAgICAgICAgcmV0dXJuICJBWE1hcnF1ZWUiX3M7CisgICAgY2FzZSBXZWJD
b3JlOjpBdHNwaTo6Um9sZTo6TWF0aDoKKyAgICAgICAgcmV0dXJuICJBWE1hdGgiX3M7CisgICAg
Y2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TWF0aEZyYWN0aW9uOgorICAgICAgICByZXR1cm4g
IkFYTWF0aEZyYWN0aW9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6Ok1hdGhS
b290OgorICAgICAgICByZXR1cm4gIkFYTWF0aFJvb3QiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpB
dHNwaTo6Um9sZTo6TWVudToKKyAgICAgICAgcmV0dXJuICJBWE1lbnUiX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6TWVudUJhcjoKKyAgICAgICAgcmV0dXJuICJBWE1lbnVCYXIi
X3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TWVudUl0ZW06CisgICAgICAgIHJl
dHVybiAiQVhNZW51SXRlbSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpOb3Rp
ZmljYXRpb246CisgICAgICAgIHJldHVybiAiQVhOb3RpZmljYXRpb24iX3M7CisgICAgY2FzZSBX
ZWJDb3JlOjpBdHNwaTo6Um9sZTo6UGFnZVRhYjoKKyAgICAgICAgcmV0dXJuICJBWFRhYiJfczsK
KyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpQYWdlVGFiTGlzdDoKKyAgICAgICAgcmV0
dXJuICJBWFRhYkdyb3VwIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlBhcmFn
cmFwaDoKKyAgICAgICAgcmV0dXJuICJBWFBhcmFncmFwaCJfczsKKyAgICBjYXNlIFdlYkNvcmU6
OkF0c3BpOjpSb2xlOjpQYXNzd29yZFRleHQ6CisgICAgICAgIHJldHVybiAiQVhQYXNzd29yZEZp
ZWxkIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlByb2dyZXNzQmFyOgorICAg
ICAgICByZXR1cm4gIkFYUHJvZ3Jlc3NJbmRpY2F0b3IiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpB
dHNwaTo6Um9sZTo6UHVzaEJ1dHRvbjoKKyAgICAgICAgcmV0dXJuICJBWEJ1dHRvbiJfczsKKyAg
ICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpSYWRpb0J1dHRvbjoKKyAgICAgICAgcmV0dXJu
ICJBWFJhZGlvQnV0dG9uIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlJhZGlv
TWVudUl0ZW06CisgICAgICAgIHJldHVybiAiQVhSYWRpb01lbnVJdGVtIl9zOworICAgIGNhc2Ug
V2ViQ29yZTo6QXRzcGk6OlJvbGU6OlJvd0hlYWRlcjoKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3Bp
OjpSb2xlOjpUYWJsZVJvd0hlYWRlcjoKKyAgICAgICAgcmV0dXJuICJBWFJvd0hlYWRlciJfczsK
KyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpSdWxlcjoKKyAgICAgICAgcmV0dXJuICJB
WFJ1bGVyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlNjcm9sbEJhcjoKKyAg
ICAgICAgcmV0dXJuICJBWFNjcm9sbEJhciJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpS
b2xlOjpTY3JvbGxQYW5lOgorICAgICAgICByZXR1cm4gIkFYU2Nyb2xsQXJlYSI7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U2VjdGlvbjoKKyAgICAgICAgcmV0dXJuICJBWFNlY3Rp
b24iX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U2VwYXJhdG9yOgorICAgICAg
ICByZXR1cm4gIkFYU2VwYXJhdG9yIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6
OlNsaWRlcjoKKyAgICAgICAgcmV0dXJuICJBWFNsaWRlciJfczsKKyAgICBjYXNlIFdlYkNvcmU6
OkF0c3BpOjpSb2xlOjpTcGluQnV0dG9uOgorICAgICAgICByZXR1cm4gIkFYU3BpbkJ1dHRvbiJf
czsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpTdGF0aWM6CisgICAgICAgIHJldHVy
biAiQVhTdGF0aWMiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6U3RhdHVzQmFy
OgorICAgICAgICByZXR1cm4gIkFYU3RhdHVzQmFyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRz
cGk6OlJvbGU6OlN1YnNjcmlwdDoKKyAgICAgICAgcmV0dXJuICJBWFN1YnNjcmlwdCJfczsKKyAg
ICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpTdXBlcnNjcmlwdDoKKyAgICAgICAgcmV0dXJu
ICJBWFN1cGVyc2NyaXB0Il9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRhYmxl
OgorICAgICAgICByZXR1cm4gIkFYVGFibGUiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6
Um9sZTo6VGFibGVDZWxsOgorICAgICAgICByZXR1cm4gIkFYQ2VsbCJfczsKKyAgICBjYXNlIFdl
YkNvcmU6OkF0c3BpOjpSb2xlOjpUYWJsZVJvdzoKKyAgICAgICAgcmV0dXJuICJBWFJvdyJfczsK
KyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpUaW1lcjoKKyAgICAgICAgcmV0dXJuICJB
WFRpbWVyIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRzcGk6OlJvbGU6OlRvZ2dsZUJ1dHRvbjoK
KyAgICAgICAgcmV0dXJuICJBWFRvZ2dsZUJ1dHRvbiJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0
c3BpOjpSb2xlOjpUb29sQmFyOgorICAgICAgICByZXR1cm4gIkFYVG9vbGJhciJfczsKKyAgICBj
YXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpUb29sVGlwOgorICAgICAgICByZXR1cm4gIkFYVXNl
ckludGVyZmFjZVRvb2x0aXAiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VHJl
ZToKKyAgICAgICAgcmV0dXJuICJBWFRyZWUiX3M7CisgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6
Um9sZTo6VHJlZVRhYmxlOgorICAgICAgICByZXR1cm4gIkFYVHJlZUdyaWQiX3M7CisgICAgY2Fz
ZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6VHJlZUl0ZW06CisgICAgICAgIHJldHVybiAiQVhUcmVl
SXRlbSJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpVbmtub3duOgorICAgICAg
ICByZXR1cm4gIkFYVW5rbm93biJfczsKKyAgICBjYXNlIFdlYkNvcmU6OkF0c3BpOjpSb2xlOjpW
aWRlbzoKKyAgICAgICAgcmV0dXJuICJBWFZpZGVvIl9zOworICAgIGNhc2UgV2ViQ29yZTo6QXRz
cGk6OlJvbGU6OldpbmRvdzoKKyAgICAgICAgcmV0dXJuICJBWFdpbmRvdyJfczsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4geyB9OworfQorCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCiB7Ci0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworCisgICAgdW5zaWduZWQgcm9sZVZhbHVlOworICAgIHNfY29udHJvbGxlci0+ZXhlY3V0
ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmcm9sZVZhbHVlXSB7CisgICAgICAgIG1fZWxlbWVu
dC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIHJvbGVWYWx1ZSA9IG1fZWxlbWVudC0+
cm9sZSgpOworICAgIH0pOworICAgIGF1dG8gcm9sZVZhbHVlU3RyaW5nID0gcm9sZVZhbHVlVG9T
dHJpbmcocm9sZVZhbHVlKTsKKyAgICBpZiAocm9sZVZhbHVlU3RyaW5nLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBy
ZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShtYWtlU3RyaW5nKCJBWFJvbGU6ICIsIHJv
bGVWYWx1ZVN0cmluZykpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUoKQpAQCAtMjM2LDMyICs2MzEsODAgQEAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUo
KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9s
ZURlc2NyaXB0aW9uKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBhdXRvIHJvbGVEZXNjcmlwdGlvbiA9IG1f
ZWxlbWVudC0+YXR0cmlidXRlcygpLmdldCgicm9sZWRlc2NyaXB0aW9uIik7CisgICAgcmV0dXJu
IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUobWFrZVN0cmluZygiQVhSb2xlRGVzY3JpcHRpb246
ICIsIHJvbGVEZXNjcmlwdGlvbikpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiB7Ci0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworCisgICAgYXV0byBjb21wdXRlZFJvbGUgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5n
ZXQoImNvbXB1dGVkLXJvbGUiKTsKKyAgICBpZiAoY29tcHV0ZWRSb2xlLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBy
ZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShjb21wdXRlZFJvbGUpLmxlYWtSZWYoKTsK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRp
dGxlKCkKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
KyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7CisKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBzX2NvbnRyb2xsZXItPmV4
ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJm5hbWVdIHsKKyAgICAgICAgbV9lbGVtZW50
LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgbmFtZSA9IFN0cmluZzo6ZnJvbVVURjgo
bV9lbGVtZW50LT5uYW1lKCkuZGF0YSgpKTsKKyAgICB9KTsKKworICAgIGF1dG8gdGl0bGVWYWx1
ZSA9IG1ha2VTdHJpbmcoIkFYVGl0bGU6ICIsIG5hbWUpOworICAgIHJldHVybiBPcGFxdWVKU1N0
cmluZzo6dHJ5Q3JlYXRlKHRpdGxlVmFsdWUpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKIHsKLSAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1f
ZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CisKKyAgICBTdHJpbmcgZGVzY3JpcHRpb247CisgICAgc19jb250cm9sbGVyLT5leGVjdXRl
T25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZkZXNjcmlwdGlvbl0geworICAgICAgICBtX2VsZW1l
bnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBkZXNjcmlwdGlvbiA9IFN0cmluZzo6
ZnJvbVVURjgobV9lbGVtZW50LT5kZXNjcmlwdGlvbigpLmRhdGEoKSk7CisgICAgfSk7CisKKyAg
ICBhdXRvIGRlc2NyaXB0aW9uVmFsdWUgPSBtYWtlU3RyaW5nKCJBWERlc2NyaXB0aW9uOiAiLCBk
ZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoZGVzY3Jp
cHRpb25WYWx1ZSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50KQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IGNvbnN0IGNoYXIqIG9yaWVudGF0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAoY2hlY2tFbGVtZW50
U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6Okhvcml6b250YWwp
KQorICAgICAgICBvcmllbnRhdGlvbiA9ICJBWEhvcml6b250YWxPcmllbnRhdGlvbiI7CisgICAg
ZWxzZSBpZiAoY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNw
aTo6U3RhdGU6OlZlcnRpY2FsKSkKKyAgICAgICAgb3JpZW50YXRpb24gPSAiQVhWZXJ0aWNhbE9y
aWVudGF0aW9uIjsKKyAgICBlbHNlCisgICAgICAgIG9yaWVudGF0aW9uID0gIkFYVW5rbm93bk9y
aWVudGF0aW9uIjsKKworICAgIGF1dG8gb3JpZW50YXRpb25WYWx1ZSA9IG1ha2VTdHJpbmcoIkFY
T3JpZW50YXRpb246ICIsIG9yaWVudGF0aW9uKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6
OnRyeUNyZWF0ZShvcmllbnRhdGlvblZhbHVlKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiB7Ci0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFt
X2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBtX2VsZW1lbnQtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGF1dG8gdmFsdWUgPSBtYWtlU3RyaW5nKCJBWFZhbHVl
OiAiLCBtX2VsZW1lbnQtPnRleHQoKS5yZXBsYWNlKCJcbiIsICI8XFxuPiIpLnJlcGxhY2Uob2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsICI8b2JqPiIpKTsKKyAgICByZXR1cm4gT3BhcXVlSlNT
dHJpbmc6OnRyeUNyZWF0ZSh2YWx1ZSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQpAQCAtMjcxLDM3ICs3
MTQsNzcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omxhbmd1YWdlKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBhdXRvIHJlbGF0aW9uTWFw
ID0gbV9lbGVtZW50LT5yZWxhdGlvbk1hcCgpOworICAgIGF1dG8gdGFyZ2V0cyA9IHJlbGF0aW9u
TWFwLmdldChXZWJDb3JlOjpBdHNwaTo6UmVsYXRpb246OkRlc2NyaWJlZEJ5KTsKKyAgICBpZiAo
dGFyZ2V0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIu
YXBwZW5kKCJBWEhlbHA6ICIpOworCisgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICAgICAgaWYgKCFpc0ZpcnN0KQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgaXNGaXJzdCA9IGZhbHNl
OworICAgICAgICB0YXJnZXQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBidWlsZGVy
LmFwcGVuZCh0YXJnZXQtPnRleHQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIE9wYXF1ZUpTU3Ry
aW5nOjp0cnlDcmVhdGUoYnVpbGRlci50b1N0cmluZygpKS5sZWFrUmVmKCk7CiB9CiAKIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAo
IW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9lbGVtZW50LT5l
bGVtZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5h
dGVzKS54KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIHsKLSAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gbV9lbGVtZW50LT5lbGVtZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0
ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzKS55KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp3aWR0aCgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2VsZW1lbnQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudFJlY3Qo
V2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlcykud2lkdGgo
KTsKIH0KIAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgpCiB7Ci0gICAg
cmV0dXJuIDA7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVU
eXBlOjpTY3JlZW5Db29yZGluYXRlcykuaGVpZ2h0KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjbGlja1BvaW50WCgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZWN0ID0gbV9lbGVtZW50
LT5lbGVtZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3Jk
aW5hdGVzKTsKKyAgICByZXR1cm4gcmVjdC5jZW50ZXIoKS54KCk7CiB9CiAKIGRvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WSgpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAg
aWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZWN0ID0gbV9l
bGVtZW50LT5lbGVtZW50UmVjdChXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRv
d0Nvb3JkaW5hdGVzKTsKKyAgICByZXR1cm4gcmVjdC5jZW50ZXIoKS55KCk7CiB9CiAKIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CkBAIC0zNDYsNDcgKzgy
OSw1NCBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3Vw
cG9ydGVkKCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQogewot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50
LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkVuYWJsZWQpOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3Jl
OjpBdHNwaTo6U3RhdGU6OlJlcXVpcmVkKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0ZvY3VzZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Y2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6
OkZvY3VzZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQo
KSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3Rh
dGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OlNlbGVjdGVkKTsKIH0K
IAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRl
KG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpBY3RpdmUpOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAogewotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgp
LCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkV4cGFuZGVkKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNw
aTo6U3RhdGU6OkNoZWNrZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
SW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBj
aGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6
SW5kZXRlcm1pbmF0ZSk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoaWVyYXJj
aGljYWxMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9lbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gbGV2ZWwgPSBtX2VsZW1lbnQtPmF0
dHJpYnV0ZXMoKS5nZXQoImxldmVsIik7CisgICAgaWYgKGxldmVsLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1
bms8aW50PihsZXZlbCkudmFsdWVfb3IoMCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzcGVha0FzKCkKQEAgLTM5NiwyMiArODg2LDUzIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzcGVha0Fz
KCkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5nZXQoImdyYWJi
ZWQiKSA9PSAidHJ1ZSI7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAogewotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50KQorICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGF1
dG8gZHJvcEVmZmVjdHMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5nZXQoImRyb3BlZmZlY3Qi
KTsKKyAgICBpZiAoZHJvcEVmZmVjdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6
OnRyeUNyZWF0ZShkcm9wRWZmZWN0cykubGVha1JlZigpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCBpbmRleCkKIHsKLSAgICByZXR1cm4gLTE7Cisg
ICAgaWYgKCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAg
ICBhdXRvIHRleHQgPSBtX2VsZW1lbnQtPnRleHQoKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGlu
ZGV4ID4gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Lmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgaW50IGxpbmVOdW1iZXIgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5k
ZXg7ICsraSkgeworICAgICAgICBpZiAodGV4dFtpXSA9PSAnXG4nKQorICAgICAgICAgICAgbGlu
ZU51bWJlcisrOworICAgIH0KKworICAgIHJldHVybiBsaW5lTnVtYmVyOwogfQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmFuZ2VGb3JMaW5lKGlu
dCBsaW5lKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworICAgIGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlu
cyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCisg
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAg
V2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGxpbmU7
ICsraSkKKyAgICAgICAgb2Zmc2V0ID0gbV9lbGVtZW50LT5ib3VuZGFyeU9mZnNldChvZmZzZXQu
eSgpLCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OlRleHRHcmFudWxhcml0eTo6
TGluZVN0YXJ0KTsKKworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU3RyaW5nKCd7Jywgb2Zmc2V0Lngo
KSwgIiwgIiwgb2Zmc2V0LnkoKSAtIG9mZnNldC54KCksICd9Jyk7CisgICAgcmV0dXJuIE9wYXF1
ZUpTU3RyaW5nOjp0cnlDcmVhdGUocmFuZ2UpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50
IHgsIGludCB5KQpAQCAtNDIxLDE3ICs5NDIsNTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yUG9zaXRpb24oaW50IHgsIGludCB5KQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRz
Rm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIW1fZWxlbWVu
dCB8fCAhbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGF1dG8gcmVjdCA9IG1fZWxlbWVu
dC0+Ym91bmRzRm9yUmFuZ2UobG9jYXRpb24sIGxlbmd0aCwgV2ViQ29yZTo6QXRzcGk6OkNvb3Jk
aW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlcyk7CisgICAgYXV0byBib3VuZHMgPSBtYWtlU3Ry
aW5nKCd7JywgcmVjdC54KCksICIsICIsIHJlY3QueSgpLCAiLCAiLCByZWN0LndpZHRoKCksICIs
ICIsIHJlY3QuaGVpZ2h0KCksICd9Jyk7CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlD
cmVhdGUoYm91bmRzKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQtPmludGVyZmFjZXMo
KS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6
VGV4dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICByZXR1cm4gT3Bh
cXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShtX2VsZW1lbnQtPnRleHQoKS5zdWJzdHJpbmcobG9jYXRp
b24sIGxlbmd0aCkpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghbV9lbGVtZW50IHx8ICFtX2VsZW1lbnQtPmlu
dGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Oklu
dGVyZmFjZTo6VGV4dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworCisgICAgYXV0byBidWls
ZEF0dHJpYnV0ZXMgPSBbJl0oY29uc3QgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
OjpUZXh0QXR0cmlidXRlcyYgYXR0cmlidXRlcykgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0IDogYXR0cmlidXRlcy5hdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5cdFx0Iik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChpdC5rZXksICc6JywgaXQu
dmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCJcblx0RGVm
YXVsdCB0ZXh0IGF0dHJpYnV0ZXM6Iik7CisgICAgYnVpbGRBdHRyaWJ1dGVzKG1fZWxlbWVudC0+
dGV4dEF0dHJpYnV0ZXMoKSk7CisKKyAgICBhdXRvIHRleHQgPSBtX2VsZW1lbnQtPnRleHQoKTsK
KyAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsb2NhdGlvbjsg
aSA8IGxvY2F0aW9uICsgbGVuZ3RoOyBpID0gZW5kT2Zmc2V0KSB7CisgICAgICAgIGF1dG8gYXR0
cmlidXRlcyA9IG1fZWxlbWVudC0+dGV4dEF0dHJpYnV0ZXMoaSk7CisgICAgICAgIGF1dG8gcmFu
Z2VTdGFydCA9IHN0ZDo6bWF4PGludD4obG9jYXRpb24sIGF0dHJpYnV0ZXMuc3RhcnRPZmZzZXQp
OworICAgICAgICBhdXRvIHJhbmdlRW5kID0gc3RkOjptaW48aW50Pihsb2NhdGlvbiArIGxlbmd0
aCwgYXR0cmlidXRlcy5lbmRPZmZzZXQpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG5cdFJh
bmdlIGF0dHJpYnV0ZXMgZm9yICciLCB0ZXh0LnN1YnN0cmluZyhyYW5nZVN0YXJ0LCByYW5nZUVu
ZCAtIHJhbmdlU3RhcnQpLnJlcGxhY2UoIlxuIiwgIjxcXG4+IikucmVwbGFjZShvYmplY3RSZXBs
YWNlbWVudENoYXJhY3RlciwgIjxvYmo+IiksICInOiIpOworICAgICAgICBidWlsZEF0dHJpYnV0
ZXMoYXR0cmlidXRlcyk7CisgICAgICAgIGVuZE9mZnNldCA9IGF0dHJpYnV0ZXMuZW5kT2Zmc2V0
OworICAgIH0KKworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKGJ1aWxkZXIu
dG9TdHJpbmcoKSkubGVha1JlZigpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQpAQCAtNTI2LDEyICsxMDgyLDIzIEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2ZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
ZWxlY3RlZFRleHRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+aW50ZXJmYWNl
cygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNl
OjpUZXh0KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CisKKyAgICBhdXRvIG9mZnNldCA9IG1fZWxlbWVudC0+c2VsZWN0ZWRSYW5nZSgpOworICAg
IGF1dG8gcmFuZ2UgPSBtYWtlU3RyaW5nKCd7Jywgb2Zmc2V0LngoKSwgIiwgIiwgb2Zmc2V0Lnko
KSAtIG9mZnNldC54KCksICd9Jyk7CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVh
dGUocmFuZ2UpLmxlYWtSZWYoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQog
ewotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhbV9lbGVtZW50LT5p
bnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJ
bnRlcmZhY2U6OlRleHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2VsZW1lbnQt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGF1dG8gdGV4dExlbmd0aCA9IG1fZWxlbWVudC0+
dGV4dCgpLmxlbmd0aCgpOworICAgIG1fZWxlbWVudC0+c2V0U2VsZWN0ZWRSYW5nZShzdGQ6Om1p
bihsb2NhdGlvbiwgdGV4dExlbmd0aCksIHN0ZDo6bWluKGxlbmd0aCwgdGV4dExlbmd0aCkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3Jl
bWVudCgpCkBAIC01OTgsMzIgKzExNjUsMzIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3Rh
dGU6OkZvY3VzYWJsZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxl
Y3RhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrRWxl
bWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpTZWxlY3Rh
YmxlKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJs
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0VsZW1lbnRT
dGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6TXVsdGlzZWxlY3Rh
YmxlKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25z
dAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9l
bGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OlZpc2libGUpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCks
IFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6U2hvd2luZyk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNw
aTo6U3RhdGU6OkNvbGxhcHNlZCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNJZ25vcmVkKCkgY29uc3QKQEAgLTYzMywxNyArMTIwMCwxNyBAQCBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTaW5nbGVMaW5lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0
YXRlOjpTaW5nbGVMaW5lKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011
bHRpTGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6TXVsdGlM
aW5lKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2Vs
ZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6SGFzUG9wdXApOwogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCkBAIC03ODAsMTAgKzEzNDcsMTgg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5n
ZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclIKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKIHsKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9lbGVtZW50LT5zY3JvbGxUb01ha2VWaXNpYmxlKFdlYkNvcmU6OkF0
c3BpOjpTY3JvbGxUeXBlOjpBbnl3aGVyZSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCiB7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZWxlbWVudC0+c2Nyb2xsVG9Qb2ludCh7
IHgsIHkgfSwgV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRl
cyk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJs
ZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKQEAgLTgx
NSwyNCArMTM5MCw0OSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2xhc3NMaXN0KCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorc3Rh
dGljIFN0cmluZyBzdHJpbmdBdE9mZnNldChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkqIGVsZW1lbnQsIGludCBvZmZzZXQsIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlmICghZWxlbWVudCB8fCAh
ZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGVs
ZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGF1dG8gdGV4dCA9IGVsZW1lbnQtPnRl
eHQoKTsKKyAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzdGF0aWNfY2FzdDxpbnQ+KHRl
eHQubGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBib3VuZHMgPSBl
bGVtZW50LT5ib3VuZGFyeU9mZnNldChvZmZzZXQsIGdyYW51bGFyaXR5KTsKKyAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHN0ZDo6bWF4PGludD4oYm91bmRzLngoKSwgMCk7CisgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0ID0gc3RkOjptaW48aW50Pihib3VuZHMueSgpLCB0ZXh0Lmxlbmd0aCgpKTsK
KyAgICByZXR1cm4gbWFrZVN0cmluZyh0ZXh0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zm
c2V0IC0gc3RhcnRPZmZzZXQpLCAiLCAiLCBzdGFydE9mZnNldCwgIiwgIiwgZW5kT2Zmc2V0KTsK
K30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNo
YXJhY3RlckF0T2Zmc2V0KGludCBvZmZzZXQpCiB7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFtX2VsZW1lbnQgfHwgIW1fZWxlbWVudC0+
aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
SW50ZXJmYWNlOjpUZXh0KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7CisKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IGF1dG8gdGV4dCA9IG1fZWxlbWVudC0+dGV4dCgpOworICAgIGlmIChvZmZzZXQgPCAwIHx8IG9m
ZnNldCA+IHN0YXRpY19jYXN0PGludD4odGV4dC5sZW5ndGgoKSkpCisgICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgYXV0byBzdHJpbmcgPSBt
YWtlU3RyaW5nKHRleHQuc3Vic3RyaW5nKG9mZnNldCwgMSksICIsICIsIG9mZnNldCwgIiwgIiwg
b2Zmc2V0ICsgMSk7CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoc3RyaW5n
KS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp3b3JkQXRPZmZzZXQoaW50IG9mZnNldCkKIHsKLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6
OnRyeUNyZWF0ZShzdHJpbmdBdE9mZnNldChtX2VsZW1lbnQuZ2V0KCksIG9mZnNldCwgV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0R3JhbnVsYXJpdHk6OldvcmRTdGFydCkp
LmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmxpbmVBdE9mZnNldChpbnQgb2Zmc2V0KQogewotICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6
dHJ5Q3JlYXRlKHN0cmluZ0F0T2Zmc2V0KG1fZWxlbWVudC5nZXQoKSwgb2Zmc2V0LCBXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OlRleHRHcmFudWxhcml0eTo6TGluZVN0YXJ0KSku
bGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2VudGVuY2VBdE9mZnNldChpbnQgb2Zmc2V0KQogewotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6dHJ5Q3JlYXRlKHN0cmluZ0F0T2Zmc2V0KG1fZWxlbWVudC5nZXQoKSwgb2Zmc2V0LCBXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OlRleHRHcmFudWxhcml0eTo6U2VudGVuY2VT
dGFydCkpLmxlYWtSZWYoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZXBs
YWNlVGV4dEluUmFuZ2UoSlNTdHJpbmdSZWYsIGludCwgaW50KQpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2d0
ay9tYWluLmNwcAppbmRleCBiNWE5MjJhNDQ4ZmUuLjg5NDkxMDQ1YmUxZSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvbWFpbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9ndGsvbWFpbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKIHsKICAgICBnX3NldGVudigiV0VCS0lUX0RJU0FCTEVfTUVNT1JZX1BS
RVNTVVJFX01PTklUT1IiLCAiMSIsIEZBTFNFKTsKKyAgICBnX3NldGVudigiV0VCS0lUX0ExMVlf
QlVTX0FERFJFU1MiLCAiIiwgRkFMU0UpOwogCiAgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsK
IAo=
</data>
<flag name="review"
          id="468118"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>