<?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>172310</bug_id>
          
          <creation_ts>2017-05-18 14:12:14 -0700</creation_ts>
          <short_desc>[WebIDL] Remove the need for the generator to know about native type mapping</short_desc>
          <delta_ts>2017-05-19 11:07:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1310252</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-18 14:12:14 -0700</bug_when>
    <thetext>[WebIDL] Remove the need for the generator to know about native type mapping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310329</commentid>
    <comment_count>1</comment_count>
      <attachid>310572</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-18 16:20:08 -0700</bug_when>
    <thetext>Created attachment 310572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310348</commentid>
    <comment_count>2</comment_count>
      <attachid>310572</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-18 16:57:03 -0700</bug_when>
    <thetext>Comment on attachment 310572
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=310572&amp;action=review

&gt; Source/WebCore/Modules/geolocation/GeoNotifier.cpp:124
&gt;          RefPtr&lt;PositionError&gt; error = PositionError::create(PositionError::TIMEOUT, ASCIILiteral(&quot;Timeout expired&quot;));

Auto. Does this make a ref?

&gt; Source/WebCore/bindings/js/JSNodeFilterCustom.cpp:41
&gt; +unsigned short JSNodeFilter::acceptNode(Node&amp; node)

Why is unsigned short preferable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310353</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-18 17:16:10 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; Comment on attachment 310572 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=310572&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/geolocation/GeoNotifier.cpp:124
&gt; &gt;          RefPtr&lt;PositionError&gt; error = PositionError::create(PositionError::TIMEOUT, ASCIILiteral(&quot;Timeout expired&quot;));
&gt; 
&gt; Auto. Does this make a ref?

Yes. Will update.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSNodeFilterCustom.cpp:41
&gt; &gt; +unsigned short JSNodeFilter::acceptNode(Node&amp; node)
&gt; 
&gt; Why is unsigned short preferable?

It&apos;s just more inline with what the IDL says. But it really doesn&apos;t matter. I can change it back if you would prefer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310400</commentid>
    <comment_count>4</comment_count>
      <attachid>310572</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-18 19:27:27 -0700</bug_when>
    <thetext>Comment on attachment 310572
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=310572&amp;action=review

&gt; Source/WebCore/Modules/geolocation/Geolocation.cpp:511
&gt;          RefPtr&lt;PositionError&gt; error = PositionError::create(PositionError::PERMISSION_DENIED,  ASCIILiteral(permissionDeniedErrorMessage));

auto/Ref

&gt; Source/WebCore/Modules/geolocation/Geolocation.cpp:525
&gt; +    RefPtr&lt;Geoposition&gt; position = lastPosition();
&gt; +    if (position)

Would be nice to define inside the if. Does this need to go into a RefPtr rather than a raw pointer?

&gt; Source/WebCore/Modules/geolocation/Geolocation.cpp:690
&gt; +    RefPtr&lt;Geoposition&gt; position = lastPosition();
&gt; +    ASSERT(position);

Does this need to go into a RefPtr rather than a raw pointer?

&gt; Source/WebCore/Modules/geolocation/Geolocation.cpp:701
&gt;      RefPtr&lt;PositionError&gt; positionError = createPositionError(error);

auto/Ref

&gt; Source/WebCore/Modules/webaudio/AudioBufferCallback.idl:27
&gt; +// DecodeErrorCallback, which takes DOMException. Currently, we pass and AudioBuffer

&quot;and&quot; -&gt; &quot;an&quot;

&gt; Source/WebKit/mac/DOM/DOM.mm:861
&gt; -    return core(self)-&gt;acceptNode(core(node));
&gt; +    return core(self)-&gt;acceptNode(*core(node));

Would be more elegant to throw an exception if someone passes nil rather than crashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310666</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-19 11:07:52 -0700</bug_when>
    <thetext>Committed r217134: &lt;http://trac.webkit.org/changeset/217134&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310572</attachid>
            <date>2017-05-18 16:20:08 -0700</date>
            <delta_ts>2017-05-18 19:27:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172310-20170518161943.patch</filename>
            <type>text/plain</type>
            <size>84161</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNy0wNS0xOCAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtXZWJJRExdIFJlbW92ZSB0aGUgbmVl
ZCBmb3IgdGhlIGdlbmVyYXRvciB0byBrbm93IGFib3V0IG5hdGl2ZSB0eXBlIG1hcHBpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjMxMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgdGhl
IHVzZSBvZiBleHBsaWNpdCB0eXBlbmFtZSB0byBuYXRpdmUgdHlwZSBtYXBwaW5ncyBpbiBDb2Rl
R2VuZXJhdG9ySlMucG0KKyAgICAgICAgd2l0aCB1c2Ugb2YgSURMVHlwZXMgYW5kIENvbnZlcnRl
ciwgd2hpY2ggYWxyZWFkeSBuZWVkIHRoZSBtYXBwaW5nLiBUaGlzIGFsbG93cyB1cworICAgICAg
ICB0byBoYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiBvbmx5IG9uZSBzcG90LgorCisgICAgICAgIEFs
c28sIGNhbGxiYWNrIGdlbmVyYXRpb24gdG8gYWNjb3VudCBmb3IgbnVsbGFiaWxpdHkgYW5kIHVw
ZGF0ZSB0aGUgSURMcyB0byBjb3JyZWN0bHkKKyAgICAgICAgYW5ub3RhdGUgb25seSB0aGUgdHlw
ZXMgdGhhdCBuZWVkIHRvIGJlIG51bGxhYmxlLiAKKworICAgICAgICAqIE1vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvTm90aWZpZXIuY3BwOgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
Tm90aWZpZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cDoKKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmg6CisgICAgICAg
ICogTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICBVc2Ug
cmVmZXJlbmNlcyB3aGVyZSBwb3NzaWJsZSBpbiB0aGUgR2VvbG9jYXRpb24gY29kZS4gSXQgd2Fz
IGFsbW9zdCBwb3NzaWJsZQorICAgICAgICB0byBtYWtlIFBvc2l0aW9uQ2FsbGJhY2sgdGFrZSBh
IG5vbi1udWxsYWJsZSBwb3NpdGlvbiwgYnV0IHNvbWUgb2RkIGxvZ2ljIGluCisgICAgICAgIEdl
b2xvY2F0aW9uOjptYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKSBpbXBsaWVzIHRoYXQgdGhl
cmUgaXMgYSBwYXRoIHdoZXJlCisgICAgICAgIHBhc3NpbmcgbnVsbCBpcyBwb3NzaWJsZSwgdGhv
dWdoIGl0IHdvdWxkIGFzc2VydC4gQWRkZWQgRklYTUUncyB0byByZXR1cm4gdG8KKyAgICAgICAg
dGhpcyBpbiBhIGZvbGxvdyB1cC4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXJDYWxsYmFjay5pZGw6CisgICAgICAgIEFkZCBudWxsYWJsZSBhbm5vdGF0aW9uIGFuZCBG
SVhNRSBleHBsYWluaW5nIHRoYXQgdGhlIGxhdGVzdCBzcGVjIHNwbGl0cyB0aGUgY2FsbGJhY2sK
KyAgICAgICAgaW50byB0d28gc2VwYXJhdGUgb25lcy4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnJ1blRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJh
Y2suaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQp
OgorICAgICAgICBVcGRhdGUgdG8gcGFzcyBjYWxsYmFjayBwYXJhbWV0ZXJzIGFzIHJlZmVyZW5j
ZXMsIHNpbmNlIHRoZXkgYXJlIG5ldmVyIG51bGwuCisKKyAgICAgICAgKiBiaW5kaW5ncy9JRExU
eXBlcy5oOgorICAgICAgICBBZGQgTnVsbGFibGVQYXJhbWV0ZXJUeXBlIHRvIGFsbG93IGN1c3Rv
bWl6YXRpb24gb2YgbnVsbGFibGUgcGFyYW1ldGVycyAoaW4gbXVjaAorICAgICAgICB0aGUgc2Ft
ZSB3YXkgd2UgYWxsb3cgY3VzdG9taXphdGlvbiBvZiB0aGUgbnVsbGFibGUgaW1wbGVtZW50YXRp
b24gdHlwZSkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlRGVmYXVsdFZhbHVlKToKKyAgICAgICAgVXNlIENvbnZlcnRl
cjw+OjpSZXR1cm5UeXBleyB9IGZvciBkZWZhdWx0IHZhbHVlcyByYXRoZXIgdGhhbiAke0dldE5h
dGl2ZVR5cGUuLn0oKS4KKworICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICBSZW1v
dmUgdXNlIG9mIEdldE5hdGl2ZVR5cGUgZm9yIHRvV3JhcHBlZCBieSB1c2luZyB0aGUgaW1wbCB0
eXBlLCBzaW5jZSB0aGlzIHdpbGwgbmV2ZXIKKyAgICAgICAgYmUgYSBjb21wbGV4IHR5cGUuCisK
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICBTaW1wbGlmeSBET01K
SVQgVW5zYWZlVG9OYXRpdmUgYnkgbWVyZ2luZyB0d28gaWRlbnRpY2FsIHBhdGhzIGFuZCB1c2lu
ZyBhdXRvLgorCisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIFJl
d29yayBwYXJhbWV0ZXIgY2hlY2tzIHRvIHVzZSBtb3JlIHNwZWNpZmljIHZhcmlhYmxlIG5hbWVz
LCBtYWtlIGJyYW5jaGVzIG1vcmUgY2xlYXIsCisgICAgICAgIGFuZCB1c2UgQ29udmVydGVyPD46
OlJldHVyblR5cGUgcmF0aGVyIHRoYW4gR2V0TmF0aXZlVHlwZS4KKworICAgICAgICAoR2VuZXJh
dGVDYWxsYmFja0hlYWRlckNvbnRlbnQpOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxl
bWVudGF0aW9uQ29udGVudCk6CisgICAgICAgIFN3aXRjaCB0byB1c2luZyB0eXBlbmFtZSAke0lE
TFR5cGV9OjpQYXJhbWV0ZXJUeXBlIGFzIHRoZSBwYXJhbWV0ZXJzIGZvciBjYWxsYmFjayBmdW5j
dGlvbnMuIEFsc28KKyAgICAgICAgYWRkIGZpbmFsIGFuZCBvdmVycmlkZSB0byBtYWtlIHN1cmUg
dGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBtYXRjaGVzIHRoZSB1c2VyIHByb3ZpZGVkIGJhc2UgY2xh
c3MuCisgICAgICAgIChHZXROYXRpdmVUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEdldE5hdGl2
ZUlubmVyVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tz
KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIG5hdGl2ZSB0eXBlIG1hcHBpbmdzLgorCisgICAg
ICAgICogY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaDoKKyAgICAgICAgKiBjc3MvTWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5pZGw6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNw
cDoKKyAgICAgICAgVXBkYXRlIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgdG8gdGFrZSBhIG5vbi1u
dWxsYWJsZSBNZWRpYVF1ZXJ5TGlzdC4KKyAgICAgICAgCisgICAgICAgICogZG9tL05hdGl2ZU5v
ZGVGaWx0ZXIuY3BwOgorICAgICAgICAqIGRvbS9OYXRpdmVOb2RlRmlsdGVyLmg6CisgICAgICAg
ICogZG9tL05vZGVGaWx0ZXIuaDoKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlci5pZGw6CisgICAg
ICAgICogZG9tL05vZGVJdGVyYXRvci5jcHA6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5jcHA6
CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5oOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAg
ICBVcGRhdGUgYWNjZXB0Tm9kZSB0byBiZSBub24tbnVsbGFibGUgYW5kIHBhc3MgdGhlIE5vZGUg
YnkgcmVmZXJlbmNlLgorCisgICAgICAgICogZG9tL1N0cmluZ0NhbGxiYWNrLmNwcDoKKyAgICAg
ICAgKiBkb20vU3RyaW5nQ2FsbGJhY2suaDoKKyAgICAgICAgUGFzcyB0aGUgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCBieSByZWZlcmVuY2UuCisKKyAgICAgICAgKiBwYWdlL0ludGVyc2VjdGlvbk9i
c2VydmVyQ2FsbGJhY2suaDoKKyAgICAgICAgVXBkYXRlIHRvIG1hdGNoIG5ldyBwYXJhbWV0ZXIg
dHlwZXMgYW5kIHBhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgYnkgcmVmZXJlbmNlLgorCisgICAg
ICAgICogcGFnZS9QZXJmb3JtYW5jZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKiBwYWdlL1BlcmZv
cm1hbmNlT2JzZXJ2ZXJDYWxsYmFjay5oOgorICAgICAgICBVcGRhdGUgdG8gcGFzcyBQZXJmb3Jt
YW5jZU9ic2VydmVyRW50cnlMaXN0IGFuZCBQZXJmb3JtYW5jZU9ic2VydmVyIGJ5IHJlZmVyZW5j
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVmcy5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50
ZXJmYWNlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cDoKKyAgICAgICAgVXBkYXRlIHRlc3QgcmVzdWx0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaWRsOgorICAgICAgICBVcGRhdGUgdGVz
dCB0byByZWZlciB0byBhY3R1YWwgaW50ZXJmYWNlcyBhcyB3ZSBub3cgZG8gbG9va3VwIG9uIHRo
ZXNlIHBhcmFtZXRlciAKKyAgICAgICAgdHlwZXMgcmF0aGVyIHRoYW4gYmxpbmRseSBhc3N1bWlu
ZyB0aGV5IGFyZSBpbnRlcmZhY2VzLgorCiAyMDE3LTA1LTE4ICBEYW5pZWwgQmF0ZXMgIDxkYWJh
dGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbnVwOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9u
cyBmcm9tIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vR2VvTm90aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvTm90aWZpZXIuY3BwCShyZXZpc2lvbiAyMTcwNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb05vdGlmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEdlb05vdGlmaWVyOjpydW5TdWNj
ZXNzQ2FsbGJhY2soR2VvCiAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHBvc2l0
aW9uKTsKIH0KIAotdm9pZCBHZW9Ob3RpZmllcjo6cnVuRXJyb3JDYWxsYmFjayhQb3NpdGlvbkVy
cm9yKiBlcnJvcikKK3ZvaWQgR2VvTm90aWZpZXI6OnJ1bkVycm9yQ2FsbGJhY2soUG9zaXRpb25F
cnJvciYgZXJyb3IpCiB7CiAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykKICAgICAgICAgbV9lcnJv
ckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvcik7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBH
ZW9Ob3RpZmllcjo6dGltZXJGaXJlZCgpCiAgICAgLy8gVGVzdCBmb3IgZmF0YWwgZXJyb3IgZmly
c3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBGcmFtZSBpcwogICAg
IC8vIGRpc2Nvbm5lY3RlZCBhbmQgcmVxdWVzdHMgYXJlIGNhbmNlbGxlZC4KICAgICBpZiAobV9m
YXRhbEVycm9yKSB7Ci0gICAgICAgIHJ1bkVycm9yQ2FsbGJhY2sobV9mYXRhbEVycm9yLmdldCgp
KTsKKyAgICAgICAgcnVuRXJyb3JDYWxsYmFjaygqbV9mYXRhbEVycm9yKTsKICAgICAgICAgLy8g
VGhpcyB3aWxsIGNhdXNlIHRoaXMgbm90aWZpZXIgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgbV9n
ZW9sb2NhdGlvbi0+ZmF0YWxFcnJvck9jY3VycmVkKHRoaXMpOwogICAgICAgICByZXR1cm47CkBA
IC0xMjIsNyArMTIyLDcgQEAgdm9pZCBHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCgpCiAgICAgCiAg
ICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgewogICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4g
ZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6VElNRU9VVCwgQVND
SUlMaXRlcmFsKCJUaW1lb3V0IGV4cGlyZWQiKSk7Ci0gICAgICAgIG1fZXJyb3JDYWxsYmFjay0+
aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOworICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KCplcnJvcik7CiAgICAgfQogICAgIG1fZ2VvbG9jYXRpb24tPnJlcXVlc3RUaW1lZE91
dCh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
Tm90aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb05vdGlmaWVyLmgJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvTm90aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCAr
NTUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VDYWNoZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlQ2FjaGVkUG9zaXRpb247IH0KICAgICB2b2lkIHNldFVzZUNhY2hlZFBvc2l0aW9u
KCk7CiAKLSAgICB2b2lkIHJ1blN1Y2Nlc3NDYWxsYmFjayhHZW9wb3NpdGlvbiopOwotICAgIHZv
aWQgcnVuRXJyb3JDYWxsYmFjayhQb3NpdGlvbkVycm9yKik7CisgICAgdm9pZCBydW5TdWNjZXNz
Q2FsbGJhY2soR2VvcG9zaXRpb24qKTsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHRha2UgYSByZWZl
cmVuY2UuCisgICAgdm9pZCBydW5FcnJvckNhbGxiYWNrKFBvc2l0aW9uRXJyb3ImKTsKIAogICAg
IHZvaWQgc3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzdG9wVGltZXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24u
Y3BwCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZv
aWQgR2VvbG9jYXRpb246OnJlc3VtZVRpbWVyRmlyZWQoKQogICAgIH0KIAogICAgIGlmIChtX2Vy
cm9yV2FpdGluZ0ZvclJlc3VtZSkgewotICAgICAgICBoYW5kbGVFcnJvcihtX2Vycm9yV2FpdGlu
Z0ZvclJlc3VtZS5nZXQoKSk7CisgICAgICAgIGhhbmRsZUVycm9yKCptX2Vycm9yV2FpdGluZ0Zv
clJlc3VtZSk7CiAgICAgICAgIG1fZXJyb3JXYWl0aW5nRm9yUmVzdW1lID0gbnVsbHB0cjsKICAg
ICB9CiB9CkBAIC00MzUsNiArNDM1LDggQEAgdm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBv
c2l0aW9uQ2FsbAogICAgIC8vIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdv
cnJ5IGFib3V0IGl0IGJlaW5nIG1vZGlmaWVkIGZyb20KICAgICAvLyB0aGUgY2FsbGJhY2tzLgog
ICAgIGZvciAoYXV0byYgbm90aWZpZXIgOiBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlv
bikgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZywgc2luY2UgbWFrZUNhY2hl
ZFBvc2l0aW9uQ2FsbGJhY2tzKCkgaXMgY2FsbGVkIGluIGEgYnJhbmNoIHdoZXJlCisgICAgICAg
IC8vIGxhc3RQb3NpdGlvbigpIGlzIGtub3duIHRvIGJlIG51bGwgaW4gR2VvbG9jYXRpb246OnNl
dElzQWxsb3dlZCgpLgogICAgICAgICBub3RpZmllci0+cnVuU3VjY2Vzc0NhbGxiYWNrKGxhc3RQ
b3NpdGlvbigpKTsKIAogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwg
c3RvcCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKQEAgLTUwOCw3ICs1MTAsNyBA
QCB2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvCiAgICAgaWYgKCFpc0Fs
bG93ZWQoKSkgewogICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3NpdGlv
bkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsICBBU0NJSUxp
dGVyYWwocGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSkpOwogICAgICAgICBlcnJvci0+c2V0
SXNGYXRhbCh0cnVlKTsKLSAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IuZ2V0KCkpOworICAgICAg
ICBoYW5kbGVFcnJvcigqZXJyb3IpOwogICAgICAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQ
b3NpdGlvbi5jbGVhcigpOwogICAgICAgICBtX2hhc0NoYW5nZWRQb3NpdGlvbiA9IGZhbHNlOwog
ICAgICAgICBtX2Vycm9yV2FpdGluZ0ZvclJlc3VtZSA9IG51bGxwdHI7CkBAIC01MTksMjIgKzUy
MSwyMyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvCiAgICAgLy8g
SWYgdGhlIHNlcnZpY2UgaGFzIGEgbGFzdCBwb3NpdGlvbiwgdXNlIGl0IHRvIGNhbGwgYmFjayBm
b3IgYWxsIHJlcXVlc3RzLgogICAgIC8vIElmIGFueSBvZiB0aGUgcmVxdWVzdHMgYXJlIHdhaXRp
bmcgZm9yIHBlcm1pc3Npb24gZm9yIGEgY2FjaGVkIHBvc2l0aW9uLAogICAgIC8vIHRoZSBwb3Np
dGlvbiBmcm9tIHRoZSBzZXJ2aWNlIHdpbGwgYmUgYXQgbGVhc3QgYXMgZnJlc2guCi0gICAgaWYg
KGxhc3RQb3NpdGlvbigpKQotICAgICAgICBtYWtlU3VjY2Vzc0NhbGxiYWNrcygpOworICAgIFJl
ZlB0cjxHZW9wb3NpdGlvbj4gcG9zaXRpb24gPSBsYXN0UG9zaXRpb24oKTsKKyAgICBpZiAocG9z
aXRpb24pCisgICAgICAgIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCpwb3NpdGlvbik7CiAgICAgZWxz
ZQogICAgICAgICBtYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKTsKIH0KIAotdm9pZCBHZW9s
b2NhdGlvbjo6c2VuZEVycm9yKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMsIFBvc2l0aW9u
RXJyb3IqIGVycm9yKQordm9pZCBHZW9sb2NhdGlvbjo6c2VuZEVycm9yKEdlb05vdGlmaWVyVmVj
dG9yJiBub3RpZmllcnMsIFBvc2l0aW9uRXJyb3ImIGVycm9yKQogewogICAgIGZvciAoYXV0byYg
bm90aWZpZXIgOiBub3RpZmllcnMpCiAgICAgICAgIG5vdGlmaWVyLT5ydW5FcnJvckNhbGxiYWNr
KGVycm9yKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvbjo6c2VuZFBvc2l0aW9uKEdlb05vdGlmaWVy
VmVjdG9yJiBub3RpZmllcnMsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbikKK3ZvaWQgR2VvbG9jYXRp
b246OnNlbmRQb3NpdGlvbihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZpZXJzLCBHZW9wb3NpdGlv
biYgcG9zaXRpb24pCiB7CiAgICAgZm9yIChhdXRvJiBub3RpZmllciA6IG5vdGlmaWVycykKLSAg
ICAgICAgbm90aWZpZXItPnJ1blN1Y2Nlc3NDYWxsYmFjayhwb3NpdGlvbik7CisgICAgICAgIG5v
dGlmaWVyLT5ydW5TdWNjZXNzQ2FsbGJhY2soJnBvc2l0aW9uKTsKIH0KIAogdm9pZCBHZW9sb2Nh
dGlvbjo6c3RvcFRpbWVyKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMpCkBAIC01OTksMTAg
KzYwMiw4IEBAIHZvaWQgR2VvbG9jYXRpb246OmNvcHlUb1NldChjb25zdCBHZW9Ob3QKICAgICAg
ICAgZGVzdC5hZGQobm90aWZpZXIuZ2V0KCkpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uOjpoYW5k
bGVFcnJvcihQb3NpdGlvbkVycm9yKiBlcnJvcikKK3ZvaWQgR2VvbG9jYXRpb246OmhhbmRsZUVy
cm9yKFBvc2l0aW9uRXJyb3ImIGVycm9yKQogewotICAgIEFTU0VSVChlcnJvcik7Ci0gICAgCiAg
ICAgR2VvTm90aWZpZXJWZWN0b3Igb25lU2hvdHNDb3B5OwogICAgIGNvcHlUb1ZlY3RvcihtX29u
ZVNob3RzLCBvbmVTaG90c0NvcHkpOwogCkBAIC02MTQsNyArNjE1LDcgQEAgdm9pZCBHZW9sb2Nh
dGlvbjo6aGFuZGxlRXJyb3IoUG9zaXRpb25FcgogICAgIC8vIGZ1cnRoZXIgY2FsbGJhY2tzIHRv
IHRoZXNlIG5vdGlmaWVycy4KICAgICBHZW9Ob3RpZmllclZlY3RvciBvbmVTaG90c1dpdGhDYWNo
ZWRQb3NpdGlvbjsKICAgICBtX29uZVNob3RzLmNsZWFyKCk7Ci0gICAgaWYgKGVycm9yLT5pc0Zh
dGFsKCkpCisgICAgaWYgKGVycm9yLmlzRmF0YWwoKSkKICAgICAgICAgbV93YXRjaGVycy5jbGVh
cigpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBzZW5kIG5vbi1mYXRhbCBlcnJvcnMg
dG8gbm90aWZpZXJzIGR1ZSB0byByZWNlaXZlIGEgY2FjaGVkIHBvc2l0aW9uLgpAQCAtNjUwLDcg
KzY1MSw3IEBAIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RQZXJtaXNzaW9uKCkKICAgICBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSktPnJlcXVlc3RQZXJtaXNzaW9uKHRoaXMpOwog
fQogCi12b2lkIEdlb2xvY2F0aW9uOjptYWtlU3VjY2Vzc0NhbGxiYWNrcygpCit2b2lkIEdlb2xv
Y2F0aW9uOjptYWtlU3VjY2Vzc0NhbGxiYWNrcyhHZW9wb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAg
ICAgQVNTRVJUKGxhc3RQb3NpdGlvbigpKTsKICAgICBBU1NFUlQoaXNBbGxvd2VkKCkpOwpAQCAt
NjY2LDggKzY2Nyw4IEBAIHZvaWQgR2VvbG9jYXRpb246Om1ha2VTdWNjZXNzQ2FsbGJhY2tzKCkK
ICAgICAvLyBmdXJ0aGVyIGNhbGxiYWNrcyB0byB0aGVzZSBub3RpZmllcnMuCiAgICAgbV9vbmVT
aG90cy5jbGVhcigpOwogCi0gICAgc2VuZFBvc2l0aW9uKG9uZVNob3RzQ29weSwgbGFzdFBvc2l0
aW9uKCkpOwotICAgIHNlbmRQb3NpdGlvbih3YXRjaGVyc0NvcHksIGxhc3RQb3NpdGlvbigpKTsK
KyAgICBzZW5kUG9zaXRpb24ob25lU2hvdHNDb3B5LCBwb3NpdGlvbik7CisgICAgc2VuZFBvc2l0
aW9uKHdhdGNoZXJzQ29weSwgcG9zaXRpb24pOwogCiAgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkK
ICAgICAgICAgc3RvcFVwZGF0aW5nKCk7CkBAIC02ODUsNyArNjg2LDEwIEBAIHZvaWQgR2VvbG9j
YXRpb246OnBvc2l0aW9uQ2hhbmdlZCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
YWtlU3VjY2Vzc0NhbGxiYWNrcygpOworICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gcG9zaXRpb24g
PSBsYXN0UG9zaXRpb24oKTsKKyAgICBBU1NFUlQocG9zaXRpb24pOworCisgICAgbWFrZVN1Y2Nl
c3NDYWxsYmFja3MoKnBvc2l0aW9uKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6c2V0RXJyb3Io
R2VvbG9jYXRpb25FcnJvciogZXJyb3IpCkBAIC02OTUsNyArNjk5LDcgQEAgdm9pZCBHZW9sb2Nh
dGlvbjo6c2V0RXJyb3IoR2VvbG9jYXRpb25FcgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IFJlZlB0cjxQb3NpdGlvbkVycm9yPiBwb3NpdGlvbkVycm9yID0gY3JlYXRlUG9zaXRpb25FcnJv
cihlcnJvcik7Ci0gICAgaGFuZGxlRXJyb3IocG9zaXRpb25FcnJvci5nZXQoKSk7CisgICAgaGFu
ZGxlRXJyb3IoKnBvc2l0aW9uRXJyb3IpOwogfQogCiBib29sIEdlb2xvY2F0aW9uOjpzdGFydFVw
ZGF0aW5nKEdlb05vdGlmaWVyKiBub3RpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmgJKHJldmlzaW9uIDIxNzA3MykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDggKzExMSw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0xpc3Rl
bmVycygpIGNvbnN0IHsgcmV0dXJuICFtX29uZVNob3RzLmlzRW1wdHkoKSB8fCAhbV93YXRjaGVy
cy5pc0VtcHR5KCk7IH0KIAotICAgIHZvaWQgc2VuZEVycm9yKEdlb05vdGlmaWVyVmVjdG9yJiwg
UG9zaXRpb25FcnJvciopOwotICAgIHZvaWQgc2VuZFBvc2l0aW9uKEdlb05vdGlmaWVyVmVjdG9y
JiwgR2VvcG9zaXRpb24qKTsKKyAgICB2b2lkIHNlbmRFcnJvcihHZW9Ob3RpZmllclZlY3RvciYs
IFBvc2l0aW9uRXJyb3ImKTsKKyAgICB2b2lkIHNlbmRQb3NpdGlvbihHZW9Ob3RpZmllclZlY3Rv
ciYsIEdlb3Bvc2l0aW9uJik7CiAKICAgICBzdGF0aWMgdm9pZCBleHRyYWN0Tm90aWZpZXJzV2l0
aENhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMsIEdlb05vdGlmaWVy
VmVjdG9yKiBjYWNoZWQpOwogICAgIHN0YXRpYyB2b2lkIGNvcHlUb1NldChjb25zdCBHZW9Ob3Rp
ZmllclZlY3RvciYsIEdlb05vdGlmaWVyU2V0Jik7CkBAIC0xMjUsOCArMTI1LDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNhbmNlbFJlcXVlc3RzKEdlb05vdGlmaWVyVmVjdG9yJik7CiAgICAgdm9p
ZCBjYW5jZWxBbGxSZXF1ZXN0cygpOwogCi0gICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNrcygp
OwotICAgIHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOworICAgIHZvaWQgbWFrZVN1
Y2Nlc3NDYWxsYmFja3MoR2VvcG9zaXRpb24mKTsKKyAgICB2b2lkIGhhbmRsZUVycm9yKFBvc2l0
aW9uRXJyb3ImKTsKIAogICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2Fs
bGJhY2suaWRsCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw0ICsy
NCw0IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1HRU9MT0NBVElPTiwKLV0gY2FsbGJhY2sgUG9z
aXRpb25DYWxsYmFjayA9IHZvaWQgKEdlb3Bvc2l0aW9uIHBvc2l0aW9uKTsKK10gY2FsbGJhY2sg
UG9zaXRpb25DYWxsYmFjayA9IHZvaWQgKEdlb3Bvc2l0aW9uPyBwb3NpdGlvbik7IC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJ
KHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24v
UG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBvc2l0aW9uRXJyb3JDYWxsYmFjayA6IHB1
YmxpYyBSZWZDb3VudGVkPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gewogICAgIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB+UG9zaXRpb25FcnJvckNhbGxiYWNrKCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVFdmVudChQb3NpdGlvbkVycm9yKikgPSAwOworICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlRXZlbnQoUG9zaXRpb25FcnJvciYpID0gMDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJKHJldmlzaW9uIDIxNzA3MykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDEyIEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisvLyBGSVhN
RTogQWNjb3JkaW5nIHRvIHRoZSBsYXRlc3QgV2ViQXVkaW8gc3BlYywgdGhpcyBzaG91bGQgYmUg
c3BsaXQgaW50byB0d28KKy8vIGNhbGxiYWNrcywgRGVjb2RlU3VjY2Vzc0NhbGxiYWNrIHdoaWNo
IHRha2VzIGEgbm9uLW51bGxhYmxlIEF1ZGlvQnVmZmVyLCBhbmQKKy8vIERlY29kZUVycm9yQ2Fs
bGJhY2ssIHdoaWNoIHRha2VzIERPTUV4Y2VwdGlvbi4gQ3VycmVudGx5LCB3ZSBwYXNzIGFuZCBB
dWRpb0J1ZmZlcgorLy8gb24gc3VjY2VzcyBhbmQgbnVsbCBvbiBmYWlsdXJlLgorCiBbCiAgICAg
Q29uZGl0aW9uYWw9V0VCX0FVRElPLAogICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAotXSBjYWxs
YmFjayBBdWRpb0J1ZmZlckNhbGxiYWNrID0gdm9pZCAoQXVkaW9CdWZmZXIgYXVkaW9CdWZmZXIp
OworXSBjYWxsYmFjayBBdWRpb0J1ZmZlckNhbGxiYWNrID0gdm9pZCAoQXVkaW9CdWZmZXI/IGF1
ZGlvQnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4
Miw3IEBAIHZvaWQgRGF0YWJhc2U6OnJ1blRyYW5zYWN0aW9uKFJlZlB0cjxTUUwKICAgICAgICAg
aWYgKGVycm9yQ2FsbGJhY2spIHsKICAgICAgICAgICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2tQcm90ZWN0b3IgPSBXVEZNb3ZlKGVycm9yQ2FsbGJh
Y2spOwogICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbZXJy
b3JDYWxsYmFja1Byb3RlY3Rvcl0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKLSAgICAgICAg
ICAgICAgICBlcnJvckNhbGxiYWNrUHJvdGVjdG9yLT5oYW5kbGVFdmVudChTUUxFcnJvcjo6Y3Jl
YXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgImRhdGFiYXNlIGhhcyBiZWVuIGNsb3NlZCIpLnB0
cigpKTsKKyAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrUHJvdGVjdG9yLT5oYW5kbGVFdmVu
dChTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgImRhdGFiYXNlIGhhcyBi
ZWVuIGNsb3NlZCIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VDYWxsYmFjay5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2sgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGF0YWJhc2VDYWxsYmFjaz4gewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkRhdGFiYXNlQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlRXZlbnQoRGF0YWJhc2UqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KERh
dGFiYXNlJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPERhdGFiYXNlPj4gRGF0YWJhc2VNYW5hZwogICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3Ig
ZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgZGF0YWJhc2UtPnNldEhh
c1BlbmRpbmdDcmVhdGlvbkV2ZW50KHRydWUpOwogICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbY3JlYXRpb25DYWxsYmFjaywgZGF0YWJhc2VdIChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikgewotICAgICAgICAgICAgY3JlYXRpb25DYWxsYmFjay0+
aGFuZGxlRXZlbnQoZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICAgICAgY3JlYXRpb25DYWxsYmFj
ay0+aGFuZGxlRXZlbnQoKmRhdGFiYXNlKTsKICAgICAgICAgICAgIGRhdGFiYXNlLT5zZXRIYXNQ
ZW5kaW5nQ3JlYXRpb25FdmVudChmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5j
cHAJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDEwICsyMTMsMTAgQEAg
Ym9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcgogICAgIC8vIGJlY2F1c2Ug
dGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgog
ICAgIGlmIChlcnJvcikgewogICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykKLSAgICAgICAgICAg
IGNhbGxiYWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwg
ZXJyb3IuZ2V0KCkpOworICAgICAgICAgICAgY2FsbGJhY2tFcnJvciA9IGVycm9yQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KCp0cmFuc2FjdGlvbiwgKmVycm9yKTsKICAgICB9IGVsc2UgaWYgKGNhbGxi
YWNrKSB7CiAgICAgICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldCA9IHNxbFJlc3Vs
dFNldCgpOwotICAgICAgICBjYWxsYmFja0Vycm9yID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0
cmFuc2FjdGlvbiwgcmVzdWx0U2V0LmdldCgpKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9ICFj
YWxsYmFjay0+aGFuZGxlRXZlbnQoKnRyYW5zYWN0aW9uLCAqcmVzdWx0U2V0KTsKICAgICB9CiAK
ICAgICByZXR1cm4gY2FsbGJhY2tFcnJvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgJKHJldmlz
aW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3Rh
dGVtZW50Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBT
UUxSZXN1bHRTZXQ7CiBjbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFjayA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1
YWwgflNRTFN0YXRlbWVudENhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2
ZW50KFNRTFRyYW5zYWN0aW9uKiwgU1FMUmVzdWx0U2V0KikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiYsIFNRTFJlc3VsdFNldCYpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5o
CShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBjbGFzcyBTUUxFcnJvcjsKIGNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gewog
cHVibGljOgogICAgIHZpcnR1YWwgflNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2soKSB7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJvciopID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24mLCBTUUxFcnJv
ciYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCShy
ZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQg
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkMKICAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKICAg
ICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0g
ICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVu
dCh0aGlzKTsKKyAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhY2FsbGJhY2st
PmhhbmRsZUV2ZW50KCp0aGlzKTsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNl
OwogICAgIH0KIApAQCAtMzkyLDcgKzM5Miw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2
ZXJUcmFuc2FjdGlvbkUKICAgICAvLyBlcnJvciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJh
bnNhY3Rpb24uCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjayA9IG1fZXJyb3JDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CiAgICAgaWYgKGVycm9y
Q2FsbGJhY2spCi0gICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rp
b25FcnJvci5nZXQoKSk7CisgICAgICAgIGVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCptX3Ry
YW5zYWN0aW9uRXJyb3IpOwogCiAgICAgY2xlYXJDYWxsYmFja1dyYXBwZXJzKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24q
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uJikgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjay5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFNRTEVycm9yOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4gewogcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTUUxFcnJvciop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3ImKSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9J
RExUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5cGVz
LmgJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDkgQEAgY2xhc3MgRE9NUHJvbWlzZTsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgSURMVHlwZSB7CiAgICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gVDsKKwogICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSBUOworICAgIHVzaW5n
IE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IHN0ZDo6b3B0aW9uYWw8SW1wbGVtZW50YXRpb25UeXBl
PjsKIAogICAgIHVzaW5nIE51bGxhYmxlVHlwZSA9IHN0ZDo6b3B0aW9uYWw8SW1wbGVtZW50YXRp
b25UeXBlPjsKICAgICBzdGF0aWMgTnVsbGFibGVUeXBlIG51bGxWYWx1ZSgpIHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQpAQCAtNjksNiArNzEsNyBAQCBzdHJ1Y3QgSURMTnVsbCA6IElETFR5cGU8
c3RkOjpudWxscHRyX3Q+CiAKIHN0cnVjdCBJRExBbnkgOiBJRExUeXBlPEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4+IHsKICAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gSlNDOjpKU1ZhbHVlOwor
ICAgIHVzaW5nIE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IEpTQzo6SlNWYWx1ZTsKIAogICAgIHVz
aW5nIE51bGxhYmxlVHlwZSA9IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj47CiAgICAgc3RhdGlj
IGlubGluZSBzdGQ6Om51bGxwdHJfdCBudWxsVmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9CkBA
IC0xMDYsNiArMTA5LDcgQEAgc3RydWN0IElETFVucmVzdHJpY3RlZERvdWJsZSA6IElETEZsb2F0
aQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPiBzdHJ1Y3QgSURMU3RyaW5nIDogSURM
VHlwZTxTdHJpbmdUeXBlPiB7CiAgICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFN0cmlu
Z1R5cGUmOworICAgIHVzaW5nIE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFN0cmluZ1R5
cGUmOwogCiAgICAgdXNpbmcgTnVsbGFibGVUeXBlID0gU3RyaW5nVHlwZTsKICAgICBzdGF0aWMg
U3RyaW5nVHlwZSBudWxsVmFsdWUoKSB7IHJldHVybiBTdHJpbmdUeXBlKCk7IH0KQEAgLTE0MCw2
ICsxNDQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMV3JhcHBlciA6CiAgICAg
dXNpbmcgUmF3VHlwZSA9IFQ7CiAKICAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gVCY7CisgICAg
dXNpbmcgTnVsbGFibGVQYXJhbWV0ZXJUeXBlID0gVCo7CiAKICAgICB1c2luZyBOdWxsYWJsZVR5
cGUgPSBSZWZQdHI8VD47CiAgICAgc3RhdGljIGlubGluZSBzdGQ6Om51bGxwdHJfdCBudWxsVmFs
dWUoKSB7IHJldHVybiBudWxscHRyOyB9CkBAIC0xNTMsNiArMTU4LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IElETENhbGxiYWNrRgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSURMRGljdGlvbmFyeSA6IElETFR5cGU8VD4gewogICAgIHVzaW5nIFBhcmFtZXRlclR5cGUg
PSBjb25zdCBUJjsKKyAgICB1c2luZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUgPSBjb25zdCBUJjsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBJRExFbnVtZXJhdGlvbiA6IElETFR5
cGU8VD4geyB9OwpAQCAtMTYwLDYgKzE2Niw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBJRExFbnVtZXJhdGkKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBJRExOdWxsYWJsZSA6
IElETFR5cGU8dHlwZW5hbWUgVDo6TnVsbGFibGVUeXBlPiB7CiAgICAgdXNpbmcgSW5uZXJUeXBl
ID0gVDsKIAorICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSB0eXBlbmFtZSBUOjpOdWxsYWJsZVBh
cmFtZXRlclR5cGU7CisgICAgdXNpbmcgTnVsbGFibGVQYXJhbWV0ZXJUeXBlID0gdHlwZW5hbWUg
VDo6TnVsbGFibGVQYXJhbWV0ZXJUeXBlOworCiAgICAgdXNpbmcgTnVsbGFibGVUeXBlID0gdHlw
ZW5hbWUgVDo6TnVsbGFibGVUeXBlOwogICAgIHN0YXRpYyBpbmxpbmUgYXV0byBudWxsVmFsdWUo
KSAtPiBkZWNsdHlwZShUOjpudWxsVmFsdWUoKSkgeyByZXR1cm4gVDo6bnVsbFZhbHVlKCk7IH0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgaW5saW5lIGJvb2wgaXNOdWxsVmFsdWUo
VSYmIHZhbHVlKSB7IHJldHVybiBUOjppc051bGxWYWx1ZShzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsgfQpAQCAtMTcwLDEyICsxNzksMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IElE
TFNlcXVlbmNlIAogICAgIHVzaW5nIElubmVyVHlwZSA9IFQ7CiAKICAgICB1c2luZyBQYXJhbWV0
ZXJUeXBlID0gY29uc3QgVmVjdG9yPHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZT4mOwor
ICAgIHVzaW5nIE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZT4+JjsKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBJRExGcm96ZW5BcnJheSA6IElETFR5cGU8VmVjdG9yPHR5cGVuYW1l
IFQ6OkltcGxlbWVudGF0aW9uVHlwZT4+IHsKICAgICB1c2luZyBJbm5lclR5cGUgPSBUOwogCiAg
ICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFZlY3Rvcjx0eXBlbmFtZSBUOjpJbXBsZW1l
bnRhdGlvblR5cGU+JjsKKyAgICB1c2luZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUgPSBjb25zdCBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU+PiY7CiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSURMUmVjb3JkIDog
SURMVHlwZTxWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8dHlwZW5hbWUgSzo6SW1wbGVtZW50YXRp
b25UeXBlLCB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU+Pj4gewpAQCAtMTgzLDYgKzE5
NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCAKICAgICB1c2lu
ZyBWYWx1ZVR5cGUgPSBWOwogCiAgICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjx0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGUsIHR5cGVu
YW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZT4+JjsKKyAgICB1c2luZyBOdWxsYWJsZVBhcmFtZXRl
clR5cGUgPSBjb25zdCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjx0eXBl
bmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGUsIHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlw
ZT4+PiY7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMUHJvbWlzZSA6IElE
TFR5cGU8RE9NUHJvbWlzZT4gewpAQCAtMTk3LDYgKzIwOSw3IEBAIHN0cnVjdCBJRExVbmlvbiA6
IElETFR5cGU8VmFyaWFudDx0eXBlbmEKICAgICB1c2luZyBUeXBlTGlzdCA9IGJyaWdhbmQ6Omxp
c3Q8VHMuLi4+OwogCiAgICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFZhcmlhbnQ8dHlw
ZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOworICAgIHVzaW5nIE51bGxhYmxlUGFy
YW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDx0eXBlbmFtZSBUczo6SW1w
bGVtZW50YXRpb25UeXBlLi4uPj4mOwogfTsKIAogLy8gTm9uLVdlYklETCBleHRlbnNpb25zCkBA
IC0yMTAsNiArMjIzLDcgQEAgc3RydWN0IElETERhdGUgOiBJRExUeXBlPGRvdWJsZT4geyAKIAog
c3RydWN0IElETEpTT04gOiBJRExUeXBlPFN0cmluZz4geyAKICAgICB1c2luZyBQYXJhbWV0ZXJU
eXBlID0gY29uc3QgU3RyaW5nJjsKKyAgICB1c2luZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUgPSBj
b25zdCBTdHJpbmcmOwogCiAgICAgdXNpbmcgTnVsbGFibGVUeXBlID0gU3RyaW5nOwogICAgIHN0
YXRpYyBTdHJpbmcgbnVsbFZhbHVlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogLy8gRklYTUU6IFRoZSBiaW5kaW5ncyBnZW5lcmF0b3IgaXMgY3VycmVudGx5IG5v
dCBhYmxlIHRvIGdlbmVyYXRlCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBjYWxscyBpZiB0aGV5IHJl
dHVybiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhCiAvLyBib29sZWFuLgotdWludDE2X3QgSlNOb2Rl
RmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIG5vZGUpCit1bnNpZ25lZCBzaG9ydCBKU05vZGVGaWx0
ZXI6OmFjY2VwdE5vZGUoTm9kZSYgbm9kZSkKIHsKICAgICBSZWY8SlNOb2RlRmlsdGVyPiBwcm90
ZWN0ZWRUaGlzKCp0aGlzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tDdXN0b20uY3Bw
CShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNTUUxFcnJvci5oIgog
I2luY2x1ZGUgIkpTU1FMVHJhbnNhY3Rpb24uaCIKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1ib29sIEpTU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBT
UUxFcnJvciogZXJyb3IpCitib29sIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxl
RXZlbnQoU1FMVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBTUUxFcnJvciYgZXJyb3IpCiB7CiAg
ICAgaWYgKCFtX2RhdGEgfHwgIW1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkgfHwgIWNhbkludm9rZUNh
bGxiYWNrKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTIsOCArNTMsOCBAQCBib29sIEpT
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCksIHRyYW5zYWN0aW9uKSk7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLCBlcnJvcikpOworICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMSW50
ZXJmYWNlPFNRTFRyYW5zYWN0aW9uPj4oKmV4ZWMsICptX2RhdGEtPmdsb2JhbE9iamVjdCgpLCB0
cmFuc2FjdGlvbikpOworICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMSW50ZXJmYWNlPFNRTEVycm9y
Pj4oKmV4ZWMsICptX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBlcnJvcikpOwogCiAgICAgTmFrZWRQ
dHI8SlNDOjpFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tU
eXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1cm5lZEV4Y2VwdGlvbik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE0OTIsMTAgKzE0OTIsNyBAQCBz
dWIgR2VuZXJhdGVEZWZhdWx0VmFsdWUKIAogICAgIGlmICgkZGVmYXVsdFZhbHVlIGVxICJbXSIp
IHsKICAgICAgICAgbXkgJElETFR5cGUgPSBHZXRJRExUeXBlKCR0eXBlU2NvcGUsICR0eXBlKTsK
LSAgICAgICAgcmV0dXJuICJDb252ZXJ0ZXI8JHtJRExUeXBlfT46OlJldHVyblR5cGV7IH0iIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHR5cGUpOwotCi0g
ICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkdHlwZVNjb3BlLCAkdHlwZSk7
Ci0gICAgICAgIHJldHVybiAiJG5hdGl2ZVR5cGUoKSIKKyAgICAgICAgcmV0dXJuICJDb252ZXJ0
ZXI8JHtJRExUeXBlfT46OlJldHVyblR5cGV7IH0iOwogICAgIH0KIAogICAgIHJldHVybiAianNV
bmRlZmluZWQoKSIgaWYgJGRlZmF1bHRWYWx1ZSBlcSAidW5kZWZpbmVkIjsKQEAgLTE4NDIsMTcg
KzE4MzksMTcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIEpTVmFsdWUgdG8gaW1wbGVt
ZW50YXRpb24gdHlwZQogICAgIGlmIChTaG91bGRHZW5lcmF0ZVRvV3JhcHBlZCgkaGFzUGFyZW50
LCAkaW50ZXJmYWNlKSkgewotICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUo
JGludGVyZmFjZSwgJGludGVyZmFjZS0+dHlwZSk7Ci0KICAgICAgICAgIyBGSVhNRTogQWRkIGV4
dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcy4KICAgICAgICAgbXkgQHRvV3JhcHBlZEFyZ3VtZW50
cyA9ICgpOwogICAgICAgICBwdXNoKEB0b1dyYXBwZWRBcmd1bWVudHMsICJKU0M6OlZNJiIpOwog
ICAgICAgICBwdXNoKEB0b1dyYXBwZWRBcmd1bWVudHMsICJKU0M6OkV4ZWNTdGF0ZSYiKSBpZiAk
aW50ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJYUGF0aE5TUmVzb2x2ZXIiOwogICAgICAgICBwdXNo
KEB0b1dyYXBwZWRBcmd1bWVudHMsICJKU0M6OkpTVmFsdWUiKTsKIAorICAgICAgICBteSAkdG9X
cmFwcGVkVHlwZSA9ICRpbnRlcmZhY2UtPnR5cGUtPm5hbWUgZXEgIlhQYXRoTlNSZXNvbHZlciIg
PyAiUmVmUHRyPCR7aW1wbFR5cGV9PiIgOiAiJHtpbXBsVHlwZX0qIjsKKwogICAgICAgICBteSAk
ZXhwb3J0ID0gIiI7CiAgICAgICAgICRleHBvcnQgPSAiV0VCQ09SRV9FWFBPUlQgIiBpZiAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFeHBvcnRUb1dyYXBwZWRGdW5jdGlvbn07Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRleHBvcnQkbmF0aXZlVHlw
ZSB0b1dyYXBwZWQoIiAuIGpvaW4oIiwgIiwgQHRvV3JhcHBlZEFyZ3VtZW50cykgLiAiKTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyAke2V4cG9ydH0ke3Rv
V3JhcHBlZFR5cGV9IHRvV3JhcHBlZCgiIC4gam9pbigiLCAiLCBAdG9XcmFwcGVkQXJndW1lbnRz
KSAuICIpO1xuIik7CiAgICAgfQogCiAgICAgJGhlYWRlclRyYWlsaW5nSW5jbHVkZXN7IiR7Y2xh
c3NOYW1lfUN1c3RvbS5oIn0gPSAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0pTQ3VzdG9tSGVhZGVyfTsKQEAgLTIyNjQsOSArMjI2MSwxMSBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICB9CiAKICAgICBpZiAoTmVlZHNJbXBsZW1lbnRhdGlvbkNsYXNzKCRpbnRlcmZhY2Up
KSB7CisgICAgICAgIG15ICR0b1dyYXBwZWRUeXBlID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZSBl
cSAiWFBhdGhOU1Jlc29sdmVyIiA/ICJSZWZQdHI8JHtpbXBsVHlwZX0+IiA6ICIke2ltcGxUeXBl
fSoiOworICAgIAogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAidGVtcGxhdGU8PiBzdHJ1
Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPCR7aW1wbFR5cGV9PiB7XG4iKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSAke2NsYXNz
TmFtZX07XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gIiAuIEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGludGVyZmFj
ZS0+dHlwZSkgLiAiO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdXNp
bmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9ICR7dG9XcmFwcGVkVHlwZX07XG4iKTsKICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIn07XG4iKTsKICAgICB9CiAKQEAgLTQyNDUsMjIgKzQyNDQs
MTIgQEAgRU5ECiAgICAgICAgICAgICAgICAgICAgIG15ICR0eXBlID0gJGFyZ3VtZW50LT50eXBl
OwogICAgICAgICAgICAgICAgICAgICBteSAkbmFtZSA9ICRhcmd1bWVudC0+bmFtZTsKICAgICAg
ICAgICAgICAgICAgICAgbXkgJGVuY29kZWROYW1lID0gImVuY29kZWQiIC4gJGNvZGVHZW5lcmF0
b3ItPldLX3VjZmlyc3QoJG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVHlw
ZSA9IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGFyZ3VtZW50LT50eXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgbXkgJHNob3VsZFBhc3NCeVJlZmVyZW5jZSA9IFNob3VsZFBhc3NBcmd1bWVu
dEJ5UmVmZXJlbmNlKCRhcmd1bWVudCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEkc2hv
dWxkUGFzc0J5UmVmZXJlbmNlICYmICgkY29kZUdlbmVyYXRvci0+SXNXcmFwcGVyVHlwZSgkdHlw
ZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9IDE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAoJG5hdGl2ZVZhbHVlLCAkbWF5VGhyb3dFeGNl
cHRpb24pID0gVW5zYWZlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkZW5jb2RlZE5h
bWUsICRmdW5jdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRuYXRpdmVUeXBlICRu
YW1lID0gbnVsbHB0cjtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgJG5hbWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7XG4iKSBpZiAkbWF5VGhyb3dFeGNlcHRpb247Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgkbmFtZSkiOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCRuYXRpdmVW
YWx1ZSwgJG1heVRocm93RXhjZXB0aW9uKSA9IFVuc2FmZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRh
cmd1bWVudCwgJGVuY29kZWROYW1lLCAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Nv
bmRpdGlvbmFsfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvICRuYW1lID0gJHtuYXRpdmVWYWx1ZX07XG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpO1xuIikgaWYgJG1heVRocm93RXhjZXB0aW9uOwotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRtYXlU
aHJvd0V4Y2VwdGlvbikgPSBVbnNhZmVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXJndW1lbnQsICRl
bmNvZGVkTmFtZSwgJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0p
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICRuYW1l
ID0gJHtuYXRpdmVWYWx1ZX07XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTtcbiIpIGlmICRtYXlUaHJvd0V4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgJHZh
bHVlID0gIldURk1vdmUoJG5hbWUpIjsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoJHNob3Vs
ZFBhc3NCeVJlZmVyZW5jZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gIiok
bmFtZSI7CkBAIC00OTM1LDQxICs0OTI0LDQwIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVj
awogCiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIikgaWYgJGluZGVu
dCBuZSAiIjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG15ICRvdXRlcjsKLSAgICAg
ICAgICAgIG15ICRpbm5lcjsKLSAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZl
VHlwZSgkaW50ZXJmYWNlLCAkYXJndW1lbnQtPnR5cGUpOwotCi0gICAgICAgICAgICBkaWUgIlZh
cmlhZGljIGFyZ3VtZW50IGlzIGFscmVhZHkgaGFuZGxlZCBoZXJlIiBpZiAkYXJndW1lbnQtPmlz
VmFyaWFkaWM7Ci0gICAgICAgICAgICBteSAkYXJndW1lbnRMb29rdXBNZXRob2QgPSAkYXJndW1l
bnQtPmlzT3B0aW9uYWwgPyAiYXJndW1lbnQiIDogInVuY2hlY2tlZEFyZ3VtZW50IjsKKyAgICAg
ICAgICAgIG15ICRhcmd1bWVudExvb2t1cEZvckNvbnZlcnNpb247CisgICAgICAgICAgICBteSAk
b3B0aW9uYWxDaGVjazsKICAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZUNhc3RGdW5jdGlvbjsK
IAotICAgICAgICAgICAgaWYgKCRhcmd1bWVudC0+aXNPcHRpb25hbCAmJiBkZWZpbmVkKCRhcmd1
bWVudC0+ZGVmYXVsdCkgJiYgIVdpbGxDb252ZXJ0VW5kZWZpbmVkVG9EZWZhdWx0UGFyYW1ldGVy
VmFsdWUoJHR5cGUsICRhcmd1bWVudC0+ZGVmYXVsdCkpIHsKLSAgICAgICAgICAgICAgICBteSAk
ZGVmYXVsdFZhbHVlID0gJGFyZ3VtZW50LT5kZWZhdWx0OwotCi0gICAgICAgICAgICAgICAgJGRl
ZmF1bHRWYWx1ZSA9IEdlbmVyYXRlRGVmYXVsdFZhbHVlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwg
JGFyZ3VtZW50LT50eXBlLCAkYXJndW1lbnQtPmRlZmF1bHQpOworICAgICAgICAgICAgaWYgKCRh
cmd1bWVudC0+aXNPcHRpb25hbCkgeworICAgICAgICAgICAgICAgIGlmIChkZWZpbmVkKCRhcmd1
bWVudC0+ZGVmYXVsdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFdpbGxDb252ZXJ0VW5k
ZWZpbmVkVG9EZWZhdWx0UGFyYW1ldGVyVmFsdWUoJHR5cGUsICRhcmd1bWVudC0+ZGVmYXVsdCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRhcmd1bWVudExvb2t1cEZvckNvbnZlcnNpb24g
PSAic3RhdGUtPmFyZ3VtZW50KCRhcmd1bWVudEluZGV4KSI7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBteSAkZGVmYXVsdFZhbHVlID0gR2Vu
ZXJhdGVEZWZhdWx0VmFsdWUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkYXJndW1lbnQtPnR5cGUs
ICRhcmd1bWVudC0+ZGVmYXVsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9uYWxD
aGVjayA9ICJzdGF0ZS0+YXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpLmlzVW5kZWZpbmVkKCkgPyAk
ZGVmYXVsdFZhbHVlIDogIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICRhcmd1bWVudExvb2t1
cEZvckNvbnZlcnNpb24gPSAic3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4
KSIKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG15ICRhcmd1bWVudElETFR5cGUgPSBHZXRJRExUeXBlKCRpbnRlcmZh
Y2UsICRhcmd1bWVudC0+dHlwZSk7CisgICAgICAgICAgICAgICAgICAgIG15ICRkZWZhdWx0VmFs
dWUgPSAic3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8JGFyZ3VtZW50SURMVHlwZT46OlJldHVyblR5
cGU+KCkiOwogCi0gICAgICAgICAgICAgICAgJG91dGVyID0gInN0YXRlLT4kYXJndW1lbnRMb29r
dXBNZXRob2QoJGFyZ3VtZW50SW5kZXgpLmlzVW5kZWZpbmVkKCkgPyAkZGVmYXVsdFZhbHVlIDog
IjsKLSAgICAgICAgICAgICAgICAkaW5uZXIgPSAic3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRh
cmd1bWVudEluZGV4KSI7Ci0gICAgICAgICAgICB9IGVsc2lmICgkYXJndW1lbnQtPmlzT3B0aW9u
YWwgJiYgIWRlZmluZWQoJGFyZ3VtZW50LT5kZWZhdWx0KSkgewotICAgICAgICAgICAgICAgICMg
VXNlIHN0ZDo6b3B0aW9uYWw8PigpIGZvciBvcHRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgbWlz
c2luZyBvciB1bmRlZmluZWQgYW5kIHRoYXQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGlu
IHRoZSBJREwuCi0gICAgICAgICAgICAgICAgJG91dGVyID0gInN0YXRlLT4kYXJndW1lbnRMb29r
dXBNZXRob2QoJGFyZ3VtZW50SW5kZXgpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPCRu
YXRpdmVUeXBlPigpIDogIjsKLSAgICAgICAgICAgICAgICAkbmF0aXZlVmFsdWVDYXN0RnVuY3Rp
b24gPSAic3RkOjpvcHRpb25hbDwkbmF0aXZlVHlwZT4iOwotICAgICAgICAgICAgICAgICRpbm5l
ciA9ICJzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpIjsKKyAgICAgICAg
ICAgICAgICAgICAgJG9wdGlvbmFsQ2hlY2sgPSAic3RhdGUtPmFyZ3VtZW50KCRhcmd1bWVudElu
ZGV4KS5pc1VuZGVmaW5lZCgpID8gJGRlZmF1bHRWYWx1ZSA6ICI7CisgICAgICAgICAgICAgICAg
ICAgICRhcmd1bWVudExvb2t1cEZvckNvbnZlcnNpb24gPSAic3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KCRhcmd1bWVudEluZGV4KSI7CisgICAgICAgICAgICAgICAgICAgICRuYXRpdmVWYWx1ZUNh
c3RGdW5jdGlvbiA9ICJzdGQ6Om9wdGlvbmFsPENvbnZlcnRlcjwkYXJndW1lbnRJRExUeXBlPjo6
UmV0dXJuVHlwZT4iOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgJG91dGVyID0gIiI7Ci0gICAgICAgICAgICAgICAgJGlubmVyID0gInN0
YXRlLT4kYXJndW1lbnRMb29rdXBNZXRob2QoJGFyZ3VtZW50SW5kZXgpIjsKKyAgICAgICAgICAg
ICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0gInN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgkYXJndW1lbnRJbmRleCkiOwogICAgICAgICAgICAgfQotCisgICAgCiAgICAgICAgICAg
ICBteSAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlID0gJGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICIqanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkiIDog
IipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSI7CiAgICAgICAgICAgICBteSAkYXJndW1lbnRF
eGNlcHRpb25UaHJvd2VyID0gR2V0QXJndW1lbnRFeGNlcHRpb25UaHJvd2VyKCRpbnRlcmZhY2Us
ICRhcmd1bWVudCwgJGFyZ3VtZW50SW5kZXgsICRxdW90ZWRGdW5jdGlvbk5hbWUpOwogCi0gICAg
ICAgICAgICBteSAoJG5hdGl2ZVZhbHVlLCAkbWF5VGhyb3dFeGNlcHRpb24pID0gSlNWYWx1ZVRv
TmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJGlubmVyLCAkY29uZGl0aW9uYWwsICJzdGF0
ZSIsICIqc3RhdGUiLCAiKmNhc3RlZFRoaXMiLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlLCAkYXJn
dW1lbnRFeGNlcHRpb25UaHJvd2VyKTsKKyAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUsICRt
YXlUaHJvd0V4Y2VwdGlvbikgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50
LCAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uLCAkY29uZGl0aW9uYWwsICJzdGF0ZSIsICIq
c3RhdGUiLCAiKmNhc3RlZFRoaXMiLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlLCAkYXJndW1lbnRF
eGNlcHRpb25UaHJvd2VyKTsKIAotICAgICAgICAgICAgaWYgKGRlZmluZWQgJG5hdGl2ZVZhbHVl
Q2FzdEZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGF1dG8gJG5hbWUgPSAke291dGVyfSRuYXRpdmVWYWx1ZUNhc3RGdW5jdGlvbigke25hdGl2ZVZh
bHVlfSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5hbWUgPSAke291dGVyfSR7bmF0aXZlVmFsdWV9O1xu
Iik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAkbmF0aXZlVmFsdWUgPSAiJHtuYXRpdmVW
YWx1ZUNhc3RGdW5jdGlvbn0oIiAuICRuYXRpdmVWYWx1ZSAuICIpIiBpZiBkZWZpbmVkICRuYXRp
dmVWYWx1ZUNhc3RGdW5jdGlvbjsKKyAgICAgICAgICAgICRuYXRpdmVWYWx1ZSA9ICRvcHRpb25h
bENoZWNrIC4gJG5hdGl2ZVZhbHVlIGlmIGRlZmluZWQgJG9wdGlvbmFsQ2hlY2s7CisKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtuYXRpdmVWYWx1
ZX07XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpO1xuIikgaWYgJG1heVRocm93
RXhjZXB0aW9uOwogCiAgICAgICAgICAgICAkdmFsdWUgPSBQYXNzQXJndW1lbnRFeHByZXNzaW9u
KCRuYW1lLCAkYXJndW1lbnQpOwpAQCAtNTEzNCwxMSArNTEyMiwxMiBAQCBzdWIgR2VuZXJhdGVD
YWxsYmFja0hlYWRlckNvbnRlbnQKICAgICBteSAkY2xhc3NOYW1lID0gIkpTJHtuYW1lfSI7CiAK
ICAgICAkaW5jbHVkZXNSZWYtPnsiQWN0aXZlRE9NQ2FsbGJhY2suaCJ9ID0gMTsKKyAgICAkaW5j
bHVkZXNSZWYtPnsiSURMVHlwZXMuaCJ9ID0gMTsKICAgICAkaW5jbHVkZXNSZWYtPnsiSlNDYWxs
YmFja0RhdGEuaCJ9ID0gMTsKICAgICAkaW5jbHVkZXNSZWYtPnsiPHd0Zi9Gb3J3YXJkLmg+In0g
PSAxOwogICAgICRpbmNsdWRlc1JlZi0+eyIke25hbWV9LmgifSA9IDE7CiAKLSAgICBwdXNoKEAk
Y29udGVudFJlZiwgImNsYXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJHtuYW1lfSwgcHVibGljIEFj
dGl2ZURPTUNhbGxiYWNrIHtcbiIpOworICAgIHB1c2goQCRjb250ZW50UmVmLCAiY2xhc3MgJGNs
YXNzTmFtZSBmaW5hbCA6IHB1YmxpYyAke25hbWV9LCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sg
e1xuIik7CiAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJwdWJsaWM6XG4iKTsKIAogICAgICMgVGhl
IHN0YXRpYyBjcmVhdGUoKSBtZXRob2QuCkBAIC01MTU1LDcgKzUxNDQsNyBAQCBzdWIgR2VuZXJh
dGVDYWxsYmFja0hlYWRlckNvbnRlbnQKIAogICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTtcbiIpIGlmIEB7JGNvbnN0YW50c307CiAKLSAgICBwdXNoKEAkY29udGVu
dFJlZiwgIiAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCAke25hbWV9JikgY29uc3Q7
XG5cbiIpIGlmICRpbnRlcmZhY2VPckNhbGxiYWNrLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxs
YmFja05lZWRzT3BlcmF0b3JFcXVhbH07CisgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdmly
dHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgJHtuYW1lfSYpIGNvbnN0IG92ZXJyaWRlO1xuXG4i
KSBpZiAkaW50ZXJmYWNlT3JDYWxsYmFjay0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbGJhY2tO
ZWVkc09wZXJhdG9yRXF1YWx9OwogCiAgICAgIyBGdW5jdGlvbnMKICAgICBteSAkbnVtRnVuY3Rp
b25zID0gQHskZnVuY3Rpb25zfTsKQEAgLTUxNjQsMTYgKzUxNTMsMTcgQEAgc3ViIEdlbmVyYXRl
Q2FsbGJhY2tIZWFkZXJDb250ZW50CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRm
dW5jdGlvbnN9KSB7CiAgICAgICAgICAgICBteSBAYXJndW1lbnRzID0gKCk7CiAgICAgICAgICAg
ICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskZnVuY3Rpb24tPmFyZ3VtZW50c30pIHsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJGFy
Z3VtZW50LT50eXBlLCAkaW50ZXJmYWNlT3JDYWxsYmFjaykgLiAiICIgLiAkYXJndW1lbnQtPm5h
bWUpOworICAgICAgICAgICAgICAgIG15ICRJRExUeXBlID0gR2V0SURMVHlwZSgkaW50ZXJmYWNl
T3JDYWxsYmFjaywgJGFyZ3VtZW50LT50eXBlKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhcmd1
bWVudHMsICJ0eXBlbmFtZSAke0lETFR5cGV9OjpQYXJhbWV0ZXJUeXBlICIgLiAkYXJndW1lbnQt
Pm5hbWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3Igbm9uLXZvaWQgcmV0dXJuIHR5cGVzICh0aGUgYm9vbCBhY3R1YWxseSBpcyByZXR1cm5p
bmcgZXhjZXB0aW9uIHN0YXRlKSwgZm9yIG5vbi1jdXN0b20gZnVuY3Rpb25zLgotICAgICAgICAg
ICAgbXkgJG5hdGl2ZVJldHVyblR5cGUgPSAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0N1c3RvbX0gPyBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+dHlwZSwgJGlu
dGVyZmFjZU9yQ2FsbGJhY2spIDogImJvb2wiOworICAgICAgICAgICAgbXkgJG5hdGl2ZVJldHVy
blR5cGUgPSAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbX0gPyAidHlwZW5h
bWUgIiAuIEdldElETFR5cGUoJGludGVyZmFjZU9yQ2FsbGJhY2ssICRmdW5jdGlvbi0+dHlwZSkg
LiAiOjpJbXBsZW1lbnRhdGlvblR5cGUiIDogImJvb2wiOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAjIEZJWE1FOiBDaGFuZ2UgdGhlIGRlZmF1bHQgbmFtZSAodXNlZCBmb3IgY2FsbGJhY2sg
ZnVuY3Rpb25zKSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBoYW5kbGVFdmVudC4gSXQgbWFrZXMg
bGl0dGxlIHNlbnNlLgogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+
bmFtZSA/ICRmdW5jdGlvbi0+bmFtZSA6ICJoYW5kbGVFdmVudCI7CiAKLSAgICAgICAgICAgIHB1
c2goQCRjb250ZW50UmVmLCAiICAgIHZpcnR1YWwgJHtuYXRpdmVSZXR1cm5UeXBlfSAke2Z1bmN0
aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgdmlydHVhbCAke25hdGl2ZVJldHVyblR5cGV9ICR7
ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIG92ZXJyaWRlO1xu
Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUyOTMsMTIgKzUyODMsMTggQEAgc3ViIEdlbmVy
YXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbgogICAgICAgICAgICAgIyBGSVhNRTogQ2hh
bmdlIHRoZSBkZWZhdWx0IG5hbWUgKHVzZWQgZm9yIGNhbGxiYWNrIGZ1bmN0aW9ucykgdG8gc29t
ZXRoaW5nIG90aGVyIHRoYW4gaGFuZGxlRXZlbnQuIEl0IG1ha2VzIGxpdHRsZSBzZW5zZS4KICAg
ICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPm5hbWUgPyAkZnVuY3Rpb24t
Pm5hbWUgOiAiaGFuZGxlRXZlbnQiOwogCisgICAgICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3Igbm9uLXZvaWQgcmV0dXJuIHR5cGVzICh0aGUgYm9vbCBhY3R1YWxseSBpcyByZXR1cm5p
bmcgZXhjZXB0aW9uIHN0YXRlKSwgZm9yIG5vbi1jdXN0b20gZnVuY3Rpb25zLgorICAgICAgICAg
ICAgbXkgJG5hdGl2ZVJldHVyblR5cGUgPSAiYm9vbCI7CisKICAgICAgICAgICAgIG15IEBhcmdz
ID0gKCk7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskZnVuY3Rpb24tPmFy
Z3VtZW50c30pIHsKICAgICAgICAgICAgICAgICBBZGRUb0luY2x1ZGVzRm9ySURMVHlwZSgkYXJn
dW1lbnQtPnR5cGUsICRpbmNsdWRlc1JlZiwgMSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJn
cywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkYXJndW1lbnQtPnR5cGUsICRpbnRlcmZhY2VP
ckNhbGxiYWNrKSAuICIgIiAuICRhcmd1bWVudC0+bmFtZSk7CisKKyAgICAgICAgICAgICAgICBt
eSAkSURMVHlwZSA9IEdldElETFR5cGUoJGludGVyZmFjZU9yQ2FsbGJhY2ssICRhcmd1bWVudC0+
dHlwZSk7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgInR5cGVuYW1lICR7SURMVHlwZX06
OlBhcmFtZXRlclR5cGUgIiAuICRhcmd1bWVudC0+bmFtZSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgImJvb2wgJHtjbGFzc05hbWV9Ojoke2Z1bmN0aW9u
TmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3MpIC4gIilcbiIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiR7bmF0aXZlUmV0dXJuVHlwZX0gJHtjbGFzc05h
bWV9Ojoke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3MpIC4gIilcbiIpOwogICAg
ICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSlcbiIpOwogICAgICAgICAg
ICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKQEAgLTU0
NDUsMzEgKzU0NDEsNiBAQCBFTkQKICAgICB9CiB9CiAKLW15ICVuYXRpdmVUeXBlID0gKAotICAg
ICJCeXRlU3RyaW5nIiA9PiAiU3RyaW5nIiwKLSAgICAiRE9NU3RyaW5nIiA9PiAiU3RyaW5nIiwK
LSAgICAiVVNWU3RyaW5nIiA9PiAiU3RyaW5nIiwKLSAgICAiRGF0ZSIgPT4gImRvdWJsZSIsCi0g
ICAgIkV2ZW50TGlzdGVuZXIiID0+ICJSZWZQdHI8RXZlbnRMaXN0ZW5lcj4iLAotICAgICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUiID0+ICJSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiIsCi0g
ICAgIlhQYXRoTlNSZXNvbHZlciIgPT4gIlJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IiwKLSAgICAi
YW55IiA9PiAiSlNDOjpKU1ZhbHVlIiwKLSAgICAib2JqZWN0IiA9PiAiSlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4iLAotICAgICJib29sZWFuIiA9PiAiYm9vbCIsCi0gICAgImJ5dGUiID0+ICJp
bnQ4X3QiLAotICAgICJkb3VibGUiID0+ICJkb3VibGUiLAotICAgICJmbG9hdCIgPT4gImZsb2F0
IiwKLSAgICAibG9uZyBsb25nIiA9PiAiaW50NjRfdCIsCi0gICAgImxvbmciID0+ICJpbnQzMl90
IiwKLSAgICAib2N0ZXQiID0+ICJ1aW50OF90IiwKLSAgICAic2hvcnQiID0+ICJpbnQxNl90IiwK
LSAgICAidW5yZXN0cmljdGVkIGRvdWJsZSIgPT4gImRvdWJsZSIsCi0gICAgInVucmVzdHJpY3Rl
ZCBmbG9hdCIgPT4gImZsb2F0IiwKLSAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAidWludDY0
X3QiLAotICAgICJ1bnNpZ25lZCBsb25nIiA9PiAidWludDMyX3QiLAotICAgICJ1bnNpZ25lZCBz
aG9ydCIgPT4gInVpbnQxNl90IiwKLSk7Ci0KICMgaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2Vi
aWRsLyNkZm4tZmxhdHRlbmVkLXVuaW9uLW1lbWJlci10eXBlcwogc3ViIEdldEZsYXR0ZW5lZE1l
bWJlclR5cGVzCiB7CkBAIC01NjE1LDU0ICs1NTg2LDYgQEAgc3ViIEdldElETFR5cGUKICAgICBy
ZXR1cm4gJGJhc2VJRExUeXBlOwogfQogCi1zdWIgR2V0TmF0aXZlVHlwZQotewotICAgIG15ICgk
aW50ZXJmYWNlLCAkdHlwZSkgPSBAXzsKLQotICAgIGFzc2VydCgiTm90IGEgdHlwZSIpIGlmIHJl
ZigkdHlwZSkgbmUgIklETFR5cGUiOwotCi0gICAgbXkgJHR5cGVOYW1lID0gJHR5cGUtPm5hbWU7
Ci0KLSAgICByZXR1cm4gJG5hdGl2ZVR5cGV7JHR5cGVOYW1lfSBpZiBleGlzdHMgJG5hdGl2ZVR5
cGV7JHR5cGVOYW1lfTsKLQotICAgIHJldHVybiBHZXRFbnVtZXJhdGlvbkNsYXNzTmFtZSgkdHlw
ZSwgJGludGVyZmFjZSkgaWYgJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpOwotICAg
IHJldHVybiBHZXREaWN0aW9uYXJ5Q2xhc3NOYW1lKCR0eXBlLCAkaW50ZXJmYWNlKSBpZiAkY29k
ZUdlbmVyYXRvci0+SXNEaWN0aW9uYXJ5VHlwZSgkdHlwZSk7Ci0gICAgcmV0dXJuICJWZWN0b3I8
IiAuIEdldE5hdGl2ZUlubmVyVHlwZShAeyR0eXBlLT5zdWJ0eXBlc31bMF0sICRpbnRlcmZhY2Up
IC4gIj4iIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHR5
cGUpOwotICAgIHJldHVybiAiVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPCIgLiBHZXROYXRpdmVJ
bm5lclR5cGUoQHskdHlwZS0+c3VidHlwZXN9WzBdLCAkaW50ZXJmYWNlKSAuICIsICIgLiBHZXRO
YXRpdmVJbm5lclR5cGUoQHskdHlwZS0+c3VidHlwZXN9WzFdLCAkaW50ZXJmYWNlKSAuICI+PiIg
aWYgJGNvZGVHZW5lcmF0b3ItPklzUmVjb3JkVHlwZSgkdHlwZSk7Ci0KLSAgICBpZiAoJHR5cGUt
PmlzVW5pb24pIHsKLSAgICAgICAgbXkgJElETFR5cGUgPSBHZXRJRExUeXBlKCRpbnRlcmZhY2Us
ICR0eXBlKTsKLSAgICAgICAgcmV0dXJuICJDb252ZXJ0ZXI8JElETFR5cGU+OjpSZXR1cm5UeXBl
IjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlTmFtZX0+IiBpZiAkY29k
ZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkgYW5kICR0eXBlTmFtZSBuZSAiQXJy
YXlCdWZmZXIiOwotICAgIHJldHVybiAiJHt0eXBlTmFtZX0qIjsKLX0KLQotc3ViIEdldE5hdGl2
ZUlubmVyVHlwZQotewotICAgIG15ICgkaW5uZXJUeXBlLCAkaW50ZXJmYWNlKSA9IEBfOwotCi0g
ICAgbXkgJGlubmVyVHlwZU5hbWUgPSAkaW5uZXJUeXBlLT5uYW1lOwotCi0gICAgcmV0dXJuICRu
YXRpdmVUeXBleyRpbm5lclR5cGVOYW1lfSBpZiBleGlzdHMgJG5hdGl2ZVR5cGV7JGlubmVyVHlw
ZU5hbWV9OwotCi0gICAgcmV0dXJuIEdldEVudW1lcmF0aW9uQ2xhc3NOYW1lKCRpbm5lclR5cGUs
ICRpbnRlcmZhY2UpIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCRpbm5lclR5cGUpOwot
ICAgIHJldHVybiBHZXREaWN0aW9uYXJ5Q2xhc3NOYW1lKCRpbm5lclR5cGUsICRpbnRlcmZhY2Up
IGlmICRjb2RlR2VuZXJhdG9yLT5Jc0RpY3Rpb25hcnlUeXBlKCRpbm5lclR5cGUpOwotICAgIHJl
dHVybiAiVmVjdG9yPCIgLiBHZXROYXRpdmVJbm5lclR5cGUoQHskaW5uZXJUeXBlLT5zdWJ0eXBl
c31bMF0sICRpbnRlcmZhY2UpIC4gIj4iIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlT3JG
cm96ZW5BcnJheVR5cGUoJGlubmVyVHlwZSk7Ci0gICAgcmV0dXJuICJWZWN0b3I8V1RGOjpLZXlW
YWx1ZVBhaXI8IiAuIEdldE5hdGl2ZUlubmVyVHlwZShAeyRpbm5lclR5cGUtPnN1YnR5cGVzfVsw
XSwgJGludGVyZmFjZSkgLiAiLCAiIC4gR2V0TmF0aXZlSW5uZXJUeXBlKEB7JGlubmVyVHlwZS0+
c3VidHlwZXN9WzFdLCAkaW50ZXJmYWNlKSAuICI+PiIgaWYgJGNvZGVHZW5lcmF0b3ItPklzUmVj
b3JkVHlwZSgkaW5uZXJUeXBlKTsKLSAgICByZXR1cm4gIlJlZlB0cjwkaW5uZXJUeXBlTmFtZT4i
OwotfQotCi1zdWIgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcwotewotICAgIG15ICgkdHlwZSwg
JGludGVyZmFjZSkgPSBAXzsKLQotICAgIHJldHVybiAiUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4mJiIgaWYgJHR5cGUtPm5hbWUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7Ci0gICAg
cmV0dXJuICJjb25zdCBTdHJpbmcmIiBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0
eXBlKTsKLSAgICByZXR1cm4gR2V0TmF0aXZlVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7Ci19Ci0K
IHN1YiBTaG91bGRQYXNzQXJndW1lbnRCeVJlZmVyZW5jZQogewogICAgIG15ICgkYXJndW1lbnQp
ID0gQF87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENh
bGxiYWNrSW50ZXJmYWNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrSW50ZXJmYWNlLmlkbAkocmV2aXNpb24gMjE3MDcz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFja0lu
dGVyZmFjZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICB2b2lkIGNh
bGxiYWNrV2l0aE5vUGFyYW0oKTsKICAgICB2b2lkIGNhbGxiYWNrV2l0aEFycmF5UGFyYW0oRmxv
YXQzMkFycmF5IGFycmF5UGFyYW0pOwogICAgIHZvaWQgY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNj
cmlwdFZhbHVlUGFyYW0oU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNyelBhcmFtLCBET01TdHJpbmcg
c3RyUGFyYW0pOwotICAgIFtDdXN0b21dIGxvbmcgY3VzdG9tQ2FsbGJhY2soQ2xhc3M1IGNsYXNz
NVBhcmFtLCBDbGFzczYgY2xhc3M2UGFyYW0pOworICAgIFtDdXN0b21dIGxvbmcgY3VzdG9tQ2Fs
bGJhY2soVGVzdE9iaiB0ZXN0T2JqUGFyYW0sIFRlc3ROb2RlIHRlc3ROb2RlUGFyYW0pOwogICAg
IHZvaWQgY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChET01TdHJpbmdMaXN0IGxpc3RQYXJhbSk7CiAg
ICAgdm9pZCBjYWxsYmFja1dpdGhCb29sZWFuKGJvb2xlYW4gYm9vbFBhcmFtKTsKICAgICB2b2lk
IGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGxvbmcgbG9uZ1BhcmFtLCBUZXN0Tm9kZSB0ZXN0
Tm9kZVBhcmFtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjp+SlNUZXN0Q2FsbGJhY2tGCiAjZW5kaWYKIH0K
IAotYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uOjpoYW5kbGVFdmVudChSZWZQdHI8RmxvYXQz
MkFycmF5PiBhcnJheVBhcmFtLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHNyelBh
cmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZywgYm9vbCBib29sUGFyYW0sIGludDMyX3QgbG9uZ1Bh
cmFtLCBUZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlv
bjo6aGFuZGxlRXZlbnQodHlwZW5hbWUgSURMSW50ZXJmYWNlPEZsb2F0MzJBcnJheT46OlBhcmFt
ZXRlclR5cGUgYXJyYXlQYXJhbSwgdHlwZW5hbWUgSURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT46OlBhcmFtZXRlclR5cGUgc3J6UGFyYW0sIHR5cGVuYW1lIElE
TERPTVN0cmluZzo6UGFyYW1ldGVyVHlwZSBzdHJBcmcsIHR5cGVuYW1lIElETEJvb2xlYW46OlBh
cmFtZXRlclR5cGUgYm9vbFBhcmFtLCB0eXBlbmFtZSBJRExMb25nOjpQYXJhbWV0ZXJUeXBlIGxv
bmdQYXJhbSwgdHlwZW5hbWUgSURMSW50ZXJmYWNlPFRlc3ROb2RlPjo6UGFyYW1ldGVyVHlwZSB0
ZXN0Tm9kZVBhcmFtKQogewogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlz
aW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEzICsyMywxNCBA
QAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCiAjaW5jbHVkZSAiQWN0aXZlRE9NQ2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tEYXRh
LmgiCiAjaW5jbHVkZSAiVGVzdENhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTVGVzdENhbGxiYWNrRnVu
Y3Rpb24gOiBwdWJsaWMgVGVzdENhbGxiYWNrRnVuY3Rpb24sIHB1YmxpYyBBY3RpdmVET01DYWxs
YmFjayB7CitjbGFzcyBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uIGZpbmFsIDogcHVibGljIFRlc3RD
YWxsYmFja0Z1bmN0aW9uLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4gY3JlYXRlKEpTQzo6SlNPYmplY3Qq
IGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHsKQEAgLTQy
LDcgKzQzLDcgQEAgcHVibGljOgogICAgIEpTQ2FsbGJhY2tEYXRhU3Ryb25nKiBjYWxsYmFja0Rh
dGEoKSB7IHJldHVybiBtX2RhdGE7IH0KIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFdmVudChSZWZQdHI8RmxvYXQzMkFycmF5PiBhcnJheVBhcmFtLCBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHNyelBhcmFtLCBjb25zdCBTdHJpbmcmIHN0ckFyZywg
Ym9vbCBib29sUGFyYW0sIGludDMyX3QgbG9uZ1BhcmFtLCBUZXN0Tm9kZSogdGVzdE5vZGVQYXJh
bSk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KHR5cGVuYW1lIElETEludGVyZmFjZTxG
bG9hdDMyQXJyYXk+OjpQYXJhbWV0ZXJUeXBlIGFycmF5UGFyYW0sIHR5cGVuYW1lIElETFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+OjpQYXJhbWV0ZXJUeXBlIHNy
elBhcmFtLCB0eXBlbmFtZSBJRExET01TdHJpbmc6OlBhcmFtZXRlclR5cGUgc3RyQXJnLCB0eXBl
bmFtZSBJRExCb29sZWFuOjpQYXJhbWV0ZXJUeXBlIGJvb2xQYXJhbSwgdHlwZW5hbWUgSURMTG9u
Zzo6UGFyYW1ldGVyVHlwZSBsb25nUGFyYW0sIHR5cGVuYW1lIElETEludGVyZmFjZTxUZXN0Tm9k
ZT46OlBhcmFtZXRlclR5cGUgdGVzdE5vZGVQYXJhbSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAg
ICAgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbihKU0M6OkpTT2JqZWN0KiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldp
dGhUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9u
V2l0aFR5cGVkZWZzOjp+SlNUCiAjZW5kaWYKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0
aW9uV2l0aFR5cGVkZWZzOjpoYW5kbGVFdmVudChWZWN0b3I8aW50MzJfdD4gc2VxdWVuY2VBcmcs
IGludDMyX3QgbG9uZ0FyZykKK2Jvb2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVm
czo6aGFuZGxlRXZlbnQodHlwZW5hbWUgSURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMTG9uZz4+
OjpQYXJhbWV0ZXJUeXBlIHNlcXVlbmNlQXJnLCB0eXBlbmFtZSBJRExMb25nOjpQYXJhbWV0ZXJU
eXBlIGxvbmdBcmcpCiB7CiAgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rp
b25XaXRoVHlwZWRlZnMuaAkocmV2aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTMgKzIxLDE0IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNs
dWRlICJKU0NhbGxiYWNrRGF0YS5oIgogI2luY2x1ZGUgIlRlc3RDYWxsYmFja0Z1bmN0aW9uV2l0
aFR5cGVkZWZzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzIDogcHVibGlj
IFRlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJh
Y2sgeworY2xhc3MgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVmcyBmaW5hbCA6IHB1
YmxpYyBUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVmcywgcHVibGljIEFjdGl2ZURPTUNh
bGxiYWNrIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEpTVGVzdENhbGxiYWNrRnVuY3Rpb25X
aXRoVHlwZWRlZnM+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB7CkBAIC00MCw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICBKU0NhbGxiYWNrRGF0YVN0cm9uZyogY2FsbGJhY2tEYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9
CiAKICAgICAvLyBGdW5jdGlvbnMKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoVmVjdG9y
PGludDMyX3Q+IHNlcXVlbmNlQXJnLCBpbnQzMl90IGxvbmdBcmcpOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudCh0eXBlbmFtZSBJRExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExMb25nPj46
OlBhcmFtZXRlclR5cGUgc2VxdWVuY2VBcmcsIHR5cGVuYW1lIElETExvbmc6OlBhcmFtZXRlclR5
cGUgbG9uZ0FyZykgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlNUZXN0Q2FsbGJhY2tGdW5j
dGlvbldpdGhUeXBlZGVmcyhKU0M6OkpTT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjE3MDcz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wg
SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrV2kKICAgICByZXR1cm4gIXJldHVybmVk
RXhjZXB0aW9uOwogfQogCi1ib29sIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dp
dGhBcnJheVBhcmFtKFJlZlB0cjxGbG9hdDMyQXJyYXk+IGFycmF5UGFyYW0pCitib29sIEpTVGVz
dENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpdGhBcnJheVBhcmFtKHR5cGVuYW1lIElETElu
dGVyZmFjZTxGbG9hdDMyQXJyYXk+OjpQYXJhbWV0ZXJUeXBlIGFycmF5UGFyYW0pCiB7CiAgICAg
aWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzMiw3
ICsxMzIsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpCiAgICAg
cmV0dXJuICFyZXR1cm5lZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZTo6Y2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4mJiBzcnpQYXJhbSwgY29uc3QgU3RyaW5nJiBzdHJQYXJhbSkKK2Jv
b2wgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVBhcmFtKHR5cGVuYW1lIElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+OjpQYXJhbWV0ZXJUeXBlIHNyelBhcmFtLCB0eXBlbmFtZSBJRExET01TdHJpbmc6
OlBhcmFtZXRlclR5cGUgc3RyUGFyYW0pCiB7CiAgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBib29sIEpTVGVzdENh
bGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpCiAgICAgcmV0dXJuICFyZXR1cm5lZEV4Y2VwdGlv
bjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tXaXRoU3RyaW5n
TGlzdChET01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pCitib29sIEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlOjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KHR5cGVuYW1lIElETEludGVyZmFjZTxET01TdHJp
bmdMaXN0Pjo6UGFyYW1ldGVyVHlwZSBsaXN0UGFyYW0pCiB7CiAgICAgaWYgKCFjYW5JbnZva2VD
YWxsYmFjaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3Myw3ICsxNzMsNyBAQCBib29s
IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpjYWxsYmFja1dpCiAgICAgcmV0dXJuICFyZXR1cm5l
ZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tX
aXRoQm9vbGVhbihib29sIGJvb2xQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6
OmNhbGxiYWNrV2l0aEJvb2xlYW4odHlwZW5hbWUgSURMQm9vbGVhbjo6UGFyYW1ldGVyVHlwZSBi
b29sUGFyYW0pCiB7CiAgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTE5Myw3ICsxOTMsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpjYWxsYmFja1dpCiAgICAgcmV0dXJuICFyZXR1cm5lZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBK
U1Rlc3RDYWxsYmFja0ludGVyZmFjZTo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW50MzJf
dCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQorYm9vbCBKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZTo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3ModHlwZW5hbWUgSURMTG9uZzo6
UGFyYW1ldGVyVHlwZSBsb25nUGFyYW0sIHR5cGVuYW1lIElETEludGVyZmFjZTxUZXN0Tm9kZT46
OlBhcmFtZXRlclR5cGUgdGVzdE5vZGVQYXJhbSkKIHsKICAgICBpZiAoIWNhbkludm9rZUNhbGxi
YWNrKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
SW50ZXJmYWNlLmgJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMyArMjMsMTQgQEAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNs
dWRlICJKU0NhbGxiYWNrRGF0YS5oIgogI2luY2x1ZGUgIlRlc3RDYWxsYmFja0ludGVyZmFjZS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UgOiBwdWJsaWMgVGVzdENhbGxiYWNrSW50ZXJmYWNl
LCBwdWJsaWMgQWN0aXZlRE9NQ2FsbGJhY2sgeworY2xhc3MgSlNUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2UgZmluYWwgOiBwdWJsaWMgVGVzdENhbGxiYWNrSW50ZXJmYWNlLCBwdWJsaWMgQWN0aXZlRE9N
Q2FsbGJhY2sgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SlNUZXN0Q2FsbGJhY2tJbnRlcmZh
Y2U+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICB7CkBAIC00MywxMyArNDQsMTMgQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKIAogICAgIC8vIEZ1bmN0aW9ucwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFj
a1dpdGhOb1BhcmFtKCk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aEFycmF5UGFyYW0o
UmVmUHRyPEZsb2F0MzJBcnJheT4gYXJyYXlQYXJhbSk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxi
YWNrV2l0aFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBhcmFtKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+JiYgc3J6UGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyUGFyYW0pOwotICAgIHZpcnR1YWwg
aW50MzJfdCBjdXN0b21DYWxsYmFjayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNz
NlBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChET01TdHJp
bmdMaXN0KiBsaXN0UGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhCb29sZWFu
KGJvb2wgYm9vbFBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tSZXF1aXJlc1RoaXNU
b1Bhc3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoTm9QYXJhbSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBjYWxsYmFja1dpdGhBcnJheVBhcmFtKHR5cGVuYW1lIElETEludGVyZmFjZTxGbG9hdDMy
QXJyYXk+OjpQYXJhbWV0ZXJUeXBlIGFycmF5UGFyYW0pIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQYXJhbSh0eXBlbmFtZSBJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPjo6UGFyYW1ldGVyVHlw
ZSBzcnpQYXJhbSwgdHlwZW5hbWUgSURMRE9NU3RyaW5nOjpQYXJhbWV0ZXJUeXBlIHN0clBhcmFt
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9u
VHlwZSBjdXN0b21DYWxsYmFjayh0eXBlbmFtZSBJRExJbnRlcmZhY2U8VGVzdE9iaj46OlBhcmFt
ZXRlclR5cGUgdGVzdE9ialBhcmFtLCB0eXBlbmFtZSBJRExJbnRlcmZhY2U8VGVzdE5vZGU+OjpQ
YXJhbWV0ZXJUeXBlIHRlc3ROb2RlUGFyYW0pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFja1dpdGhTdHJpbmdMaXN0KHR5cGVuYW1lIElETEludGVyZmFjZTxET01TdHJpbmdMaXN0
Pjo6UGFyYW1ldGVyVHlwZSBsaXN0UGFyYW0pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFja1dpdGhCb29sZWFuKHR5cGVuYW1lIElETEJvb2xlYW46OlBhcmFtZXRlclR5cGUgYm9v
bFBhcmFtKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tSZXF1aXJlc1RoaXNU
b1Bhc3ModHlwZW5hbWUgSURMTG9uZzo6UGFyYW1ldGVyVHlwZSBsb25nUGFyYW0sIHR5cGVuYW1l
IElETEludGVyZmFjZTxUZXN0Tm9kZT46OlBhcmFtZXRlclR5cGUgdGVzdE5vZGVQYXJhbSkgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UoSlNDOjpKU09i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjE3
MDczKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNjgsNyArNjM2OCw3IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KGNv
bnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAg
ICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRp
b25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBzdGQ6Om9wdGlvbmFsPENv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxB
cmcoV1RGTW92ZShvcHQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNjQwOCw3ICs2NDA4LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uT3B0
ID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
LSAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpv
cHRpb25hbDxpbnQzMl90PigpIDogc3RkOjpvcHRpb25hbDxpbnQzMl90Pihjb252ZXJ0PElETExv
bmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CisgICAgYXV0byBvcHQg
PSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8Q29udmVy
dGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURM
TG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0
aW9uYWxBcmcoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDMwLDkgKzY0MzAsOSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb3B0MSA9IHN0YXRlLT5hcmd1bWVudCgx
KS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogc3RkOjpvcHRpb25h
bDxpbnQzMl90Pihjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpKSk7CisgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBzdGQ6Om9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IHN0
ZDo6b3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExv
bmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9wdDIg
PSBzdGF0ZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8aW50MzJf
dD4oKSA6IHN0ZDo6b3B0aW9uYWw8aW50MzJfdD4oY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSkpOworICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1
bWVudCgyKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU+KCkgOiBzdGQ6Om9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJu
VHlwZT4oY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgy
KSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mo
V1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdDEpLCBXVEZNb3ZlKG9wdDIpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjY4NCw3ICs2Njg0LDcgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8aW50NjRfdD4oKSA6IHN0ZDo6b3B0
aW9uYWw8aW50NjRfdD4oY29udmVydDxJRExMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1
cm5UeXBlPigpIDogc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5U
eXBlPihjb252ZXJ0PElETExvbmdMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyhXVEZNb3ZlKG51bWJl
cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NzIw
LDcgKzY3MjAsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9
IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4oKSA6IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+KGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9u
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIG51bWJl
ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBzdGQ6Om9wdGlvbmFs
PENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExV
bnNpZ25lZExvbmdMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKFdURk1vdmUobnVtYmVy
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3OTIs
NyArNjc5Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYiA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxib29sPigpIDogc3Rk
OjpvcHRpb25hbDxib29sPihjb252ZXJ0PElETEJvb2xlYW4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKSk7CisgICAgYXV0byBiID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPENvbnZlcnRlcjxJRExCb29sZWFuPjo6UmV0dXJuVHlw
ZT4oKSA6IHN0ZDo6b3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+OjpSZXR1cm5UeXBlPihj
b252ZXJ0PElETEJvb2xlYW4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4oV1RGTW92ZShiKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY4NDYsNyArNjg0Niw3IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
Pj4oKSA6IHN0ZDo6b3B0aW9uYWw8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+KGNvbnZlcnQ8
SURMT2JqZWN0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIGF1
dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gc3RkOjpvcHRpb25hbDxD
b252ZXJ0ZXI8SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oKSA6IHN0ZDo6b3B0aW9uYWw8Q29udmVy
dGVyPElETE9iamVjdD46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMT2JqZWN0Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxP
YmplY3QoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTcxNjIsNyArNzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFy
ZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9i
aiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogc3RkOjpvcHRpb25hbDxpbnQzMl90Pihj
b252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7Cisg
ICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6
Om9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IHN0ZDo6b3B0aW9u
YWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzQ3MCw3ICs3NDcwLDcgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3Zlcmxv
YWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0
byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlv
bmFsPGludDMyX3Q+KCkgOiBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KGNvbnZlcnQ8SURMTG9uZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpKTsKKyAgICBhdXRvIGxvbmdBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8Q29udmVy
dGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURM
TG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBh
cmFtZXRlcihXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9uZ0FyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03ODc3LDcgKzc4NzcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8gYXJnID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPGludDMyX3Q+KCkgOiBzdGQ6Om9w
dGlvbmFsPGludDMyX3Q+KGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIGFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkg
OiBzdGQ6Om9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJ
RExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9w
dGlvbmFsKFdURk1vdmUoYXJnKSkpKTsKIH0KQEAgLTg0NzEsNyArODQ3MSw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gc3RkOjpvcHRpb25hbDxpbnQzMl90PigpIDogc3RkOjpvcHRpb25hbDxpbnQzMl90
Pihjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7
CisgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9w
dGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IHN0ZDo6b3B0aW9uYWw8
Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudChXVEZNb3ZlKGEpLCBXVEZNb3ZlKHByb21pc2UpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDcsNyArNjA3LDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgYXV0byBjb2xvciA9IHN0YXRlLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5n
KCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMykpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgp
ID8gc3RkOjpvcHRpb25hbDxmbG9hdD4oKSA6IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+KGNvbnZlcnQ8
SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDQp
KSk7CisgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8g
c3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBl
PigpIDogc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1
cm5UeXBlPihjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCg0KSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5zZXRTaGFkb3coV1RGTW92ZSh3aWR0aCksIFdU
Rk1vdmUoaGVpZ2h0KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUoYWxw
aGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzQ4
LDcgKzc0OCw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFyZzEgPSBjb252ZXJ0PElETENs
YW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhcmcyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkKCkgPyBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PigpIDogc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4oY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CisgICAgYXV0byBhcmcyID0gc3RhdGUtPmFy
Z3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlvbmFsPENvbnZlcnRlcjxJRExDbGFt
cEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+OjpSZXR1cm5UeXBlPigpIDogc3RkOjpvcHRp
b25hbDxDb252ZXJ0ZXI8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+Pjo6UmV0
dXJuVHlwZT4oY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xh
bXAoV1RGTW92ZShhcmcxKSwgV1RGTW92ZShhcmcyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lclR5cGUKICAgICB9Owog
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KE1lZGlhUXVlcnlMaXN0KikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChNZWRpYVF1ZXJ5TGlzdCYpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJikgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgfk1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoKSB7IH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmlkbAkocmV2aXNp
b24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw1ICsxOSw1IEBACiAKIFsKICAgICBDYWxsYmFja05l
ZWRzT3BlcmF0b3JFcXVhbAotXSBjYWxsYmFjayBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyID0gdm9p
ZCAob3B0aW9uYWwgTWVkaWFRdWVyeUxpc3Q/IGxpc3QgPSBudWxsKTsKK10gY2FsbGJhY2sgTWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciA9IHZvaWQgKE1lZGlhUXVlcnlMaXN0IGxpc3QpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAJKHJldmlzaW9uIDIxNzA3
MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpzdHlsZVJl
c29sdmVyQ2hhCiAgICAgICAgIGJvb2wgbm90aWZ5OwogICAgICAgICBsaXN0ZW5lci5xdWVyeS0+
ZXZhbHVhdGUoZXZhbHVhdG9yLCBub3RpZnkpOwogICAgICAgICBpZiAobm90aWZ5KQotICAgICAg
ICAgICAgbGlzdGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGxpc3RlbmVyLnF1ZXJ5LnB0cigp
KTsKKyAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChsaXN0ZW5lci5x
dWVyeSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmF0aXZlTm9kZUZp
bHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05hdGl2ZU5vZGVGaWx0
ZXIuY3BwCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmF0aXZlTm9k
ZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIE5hdGl2ZU5vZGVGaWx0ZXI6Ok5hdGl2ZU5vZGVGaWx0ZXIoUmVmUHRyPE5v
ZGVGaWx0ZXJDb25kaXRpb24+JiYgY29uZGl0aW9uKQogICAgIDogbV9jb25kaXRpb24oY29uZGl0
aW9uKQoteyB9Cit7Cit9CiAKLXVpbnQxNl90IE5hdGl2ZU5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUo
Tm9kZSogbm9kZSkKK3Vuc2lnbmVkIHNob3J0IE5hdGl2ZU5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUo
Tm9kZSYgbm9kZSkKIHsKICAgICAvLyBjYXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBh
bmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2FybmluZwotICAgIHJldHVybiBtX2Nv
bmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKG5vZGUpIDogc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KEZJTFRFUl9BQ0NFUFQpOworICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0
aW9uLT5hY2NlcHROb2RlKCZub2RlKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihGSUxU
RVJfQUNDRVBUKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05hdGl2ZU5vZGVGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTmF0aXZlTm9kZUZpbHRlci5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTmF0aXZlTm9kZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF0aXZlTm9kZUZpbHRl
cigpKTsKICAgICB9CiAKLSAgICB1aW50MTZfdCBhY2NlcHROb2RlKE5vZGUqKSBvdmVycmlkZTsK
KyAgICB1bnNpZ25lZCBzaG9ydCBhY2NlcHROb2RlKE5vZGUmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgc2V0Q29uZGl0aW9uKFJlZlB0cjxOb2RlRmlsdGVyQ29uZGl0aW9uPiYmIGNvbmRpdGlvbikg
eyBBU1NFUlQoIW1fY29uZGl0aW9uKTsgbV9jb25kaXRpb24gPSBjb25kaXRpb247IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIGNs
YXNzIE5vZGU7CiBjbGFzcyBOb2RlRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUZpbHRl
cj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHVpbnQxNl90IGFjY2VwdE5vZGUoTm9kZSopID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNo
b3J0IGFjY2VwdE5vZGUoTm9kZSYpID0gMDsKIAogICAgIC8qCiAgICAgICogVGhlIGZvbGxvd2lu
ZyBjb25zdGFudHMgYXJlIHJldHVybmVkIGJ5IHRoZSBhY2NlcHROb2RlKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZUZpbHRlci5pZGwJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlRmlsdGVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNSArNDEsNSBAQAogICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgU0hPV19ET0NVTUVOVF9GUkFHTUVOVCA9IDB4MDAwMDA0MDA7
CiAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBTSE9XX05PVEFUSU9OID0gMHgwMDAwMDgwMDsgLy8g
SGlzdG9yaWNhbC4KIAotICAgIFtDdXN0b21dIHVuc2lnbmVkIHNob3J0IGFjY2VwdE5vZGUob3B0
aW9uYWwgTm9kZSBub2RlKTsKKyAgICBbQ3VzdG9tXSB1bnNpZ25lZCBzaG9ydCBhY2NlcHROb2Rl
KE5vZGUgbm9kZSk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIFJlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6
Om5leHROb2RlKCkKICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9l
cyBub3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBu
b2RlLiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KICAg
ICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVOb2RlLm5v
ZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShwcm92aXNpb25h
bFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKKyAgICAgICAgYm9v
bCBub2RlV2FzQWNjZXB0ZWQgPSBhY2NlcHROb2RlKCpwcm92aXNpb25hbFJlc3VsdCkgPT0gTm9k
ZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKICAgICAgICAgaWYgKG5vZGVXYXNBY2NlcHRlZCkgewog
ICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRhdGVOb2RlOwogICAgICAgICAg
ICAgcmVzdWx0ID0gV1RGTW92ZShwcm92aXNpb25hbFJlc3VsdCk7CkBAIC0xMTksNyArMTE5LDcg
QEAgUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKAogICAgICAgICAvLyBJ
biBvdGhlciB3b3JkcywgRklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNzIG92ZXIgZGVzY2VuZGFu
dHMKICAgICAgICAgLy8gb2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNlLCBGSUxURVJfUkVKRUNU
IGlzIHRoZSBzYW1lIGFzIEZJTFRFUl9TS0lQLgogICAgICAgICBSZWZQdHI8Tm9kZT4gcHJvdmlz
aW9uYWxSZXN1bHQgPSBtX2NhbmRpZGF0ZU5vZGUubm9kZTsKLSAgICAgICAgYm9vbCBub2RlV2Fz
QWNjZXB0ZWQgPSBhY2NlcHROb2RlKHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUOworICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2Vw
dE5vZGUoKnByb3Zpc2lvbmFsUmVzdWx0KSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwog
ICAgICAgICBpZiAobm9kZVdhc0FjY2VwdGVkKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZU5v
ZGUgPSBtX2NhbmRpZGF0ZU5vZGU7CiAgICAgICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHByb3Zp
c2lvbmFsUmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHJpbmdDYWxsYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0cmluZ0NhbGxiYWNrLmNwcAko
cmV2aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0cmluZ0NhbGxiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBTdHJpbmdDYWxsYmFjazo6c2NoZWR1bGVDYWxsYmFjayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGRhdGEpCit2b2lkIFN0cmluZ0NhbGxi
YWNrOjpzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgZGF0YSkKIHsKICAgICBSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soW3Byb3RlY3RlZFRoaXMsIGRhdGFd
IChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgIGNvbnRleHQucG9zdFRhc2soW3Byb3Rl
Y3RlZFRoaXMsIGRhdGFdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewogICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5oYW5kbGVFdmVudChkYXRhKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdHJpbmdDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TdHJpbmdDYWxsYmFjay5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU3RyaW5nQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSkg
PSAwOwogCiAgICAgLy8gSGVscGVyIHRvIHBvc3QgY2FsbGJhY2sgdGFzay4KLSAgICB2b2lkIHNj
aGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0
YSk7CisgICAgdm9pZCBzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmF2ZXJzYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTEgQEAg
Tm9kZUl0ZXJhdG9yQmFzZTo6Tm9kZUl0ZXJhdG9yQmFzZShOb2RlJgogewogfQogCi1zaG9ydCBO
b2RlSXRlcmF0b3JCYXNlOjphY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2Rl
SXRlcmF0b3JCYXNlOjphY2NlcHROb2RlKE5vZGUmIG5vZGUpIGNvbnN0CiB7CiAgICAgLy8gVGhl
IGJpdCB0d2lkZGxpbmcgaGVyZSBpcyBkb25lIHRvIG1hcCBET00gbm9kZSB0eXBlcywgd2hpY2gg
YXJlIGdpdmVuIGFzIGludGVnZXJzIGZyb20KICAgICAvLyAxIHRocm91Z2ggMTQsIHRvIHdoYXRU
b1Nob3cgYml0IG1hc2tzLgotICAgIGlmICghKCgoMSA8PCAobm9kZS0+bm9kZVR5cGUoKSAtIDEp
KSAmIG1fd2hhdFRvU2hvdykpKQorICAgIGlmICghKCgoMSA8PCAobm9kZS5ub2RlVHlwZSgpIC0g
MSkpICYgbV93aGF0VG9TaG93KSkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJf
U0tJUDsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgJKHJldmlzaW9uIDIxNzA3MykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBOb2RlSXRlcmF0b3JCYXNlKE5v
ZGUmLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQdHI8Tm9kZUZpbHRlcj4mJik7Ci0gICAgc2hv
cnQgYWNjZXB0Tm9kZShOb2RlKikgY29uc3Q7CisgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlJikg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUmVmPE5vZGU+IG1fcm9vdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVdhbGtlci5jcHAJKHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlV2Fsa2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBOb2RlKiBU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKCkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCkpOworICAg
ICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZSgqbm9kZSk7CiAgICAgICAg
IGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAg
ICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0K
QEAgLTY1LDcgKzY1LDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZSgpCiBOb2RlKiBU
cmVlV2Fsa2VyOjpmaXJzdENoaWxkKCkKIHsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0g
bV9jdXJyZW50LT5maXJzdENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBzaG9ydCBhY2NlcHRO
b2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoKm5vZGUpOwogICAgICAgICBzd2l0Y2ggKGFjY2VwdE5v
ZGVSZXN1bHQpIHsKICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoK
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnQgPSBub2RlLnJlbGVhc2VOb25OdWxsKCk7CkBAIC05
Niw3ICs5Niw3IEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoKQogTm9kZSogVHJlZVdh
bGtlcjo6bGFzdENoaWxkKCkKIHsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJy
ZW50LT5sYXN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1
bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVz
dWx0ID0gYWNjZXB0Tm9kZSgqbm9kZSk7CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3Vs
dCkgewogICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgogICAgICAg
ICAgICAgICAgIG1fY3VycmVudCA9IG5vZGUucmVsZWFzZU5vbk51bGwoKTsKQEAgLTEzMyw3ICsx
MzMsNyBAQCB0ZW1wbGF0ZTxUcmVlV2Fsa2VyOjpTaWJsaW5nVHJhdmVyc2FsVHlwCiAgICAgYXV0
byBpc05leHQgPSB0eXBlID09IFNpYmxpbmdUcmF2ZXJzYWxUeXBlOjpOZXh0OwogICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBpc05leHQgPyBu
b2RlLT5uZXh0U2libGluZygpIDogbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7ICkg
ewotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc2libGlu
Zy5nZXQoKSk7CisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9k
ZSgqc2libGluZyk7CiAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUKSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50ID0gc2libGlu
Zy5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnQucHRy
KCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdGVtcGxhdGU8VHJlZVdhbGtlcjo6U2libGluZ1RyYXZl
cnNhbFR5cAogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAo
IW5vZGUgfHwgbm9kZSA9PSAmcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCkpOwor
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZSgqbm9kZSk7CiAgICAg
ICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0xNjgsMTIgKzE2OCwxMiBAQCBO
b2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoKQogICAgIHdoaWxlIChub2RlICE9ICZyb290
KCkpIHsKICAgICAgICAgd2hpbGUgKE5vZGUqIHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZp
b3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBub2RlID0gcHJldmlvdXNTaWJsaW5nOwotICAg
ICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSk7
CisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZSgqbm9kZSk7
CiAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJf
UkVKRUNUKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgd2hpbGUgKE5v
ZGUqIGxhc3RDaGlsZCA9IG5vZGUtPmxhc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgbm9k
ZSA9IGxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0
Tm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZSgqbm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0g
Tm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC0xODgsNyArMTg4LDcgQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlv
dXNOb2RlKCkKICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgbm9kZSA9IHBhcmVudDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3Vs
dCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1
bHQgPSBhY2NlcHROb2RlKCpub2RlKTsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJyZW50
KG5vZGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQpAQCAtMjAxLDcgKzIwMSw3IEBAIE5vZGUq
IFRyZWVXYWxrZXI6Om5leHROb2RlKCkKIENoaWxkcmVuOgogICAgIHdoaWxlIChOb2RlKiBmaXJz
dENoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxk
OwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgp
KTsKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoKm5vZGUpOwog
ICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBU
KQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVD
VCkKQEAgLTIwOSw3ICsyMDksNyBAQCBDaGlsZHJlbjoKICAgICB9CiAgICAgd2hpbGUgKE5vZGUq
IG5leHRTaWJsaW5nID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUs
ICZyb290KCkpKSB7CiAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZzsKLSAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgIHNob3J0
IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKCpub2RlKTsKICAgICAgICAgaWYgKGFjY2Vw
dE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJl
dHVybiBzZXRDdXJyZW50KG5vZGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChhY2Nl
cHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9TS0lQKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAkocmV2
aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUsMTEgQEAgdXNpbmcgRXhl
Y3V0ZVNRTENhbGxiYWNrID0gSW5zcGVjdG9yOjpEYQogCiBuYW1lc3BhY2UgewogCi12b2lkIHJl
cG9ydFRyYW5zYWN0aW9uRmFpbGVkKEV4ZWN1dGVTUUxDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNr
LCBTUUxFcnJvciogZXJyb3IpCit2b2lkIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKEV4ZWN1dGVT
UUxDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrLCBTUUxFcnJvciYgZXJyb3IpCiB7CiAgICAgYXV0
byBlcnJvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3Jl
YXRlKCkKLSAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3ItPm1lc3NhZ2UoKSkKLSAgICAgICAgLnNl
dENvZGUoZXJyb3ItPmNvZGUoKSkKKyAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3IubWVzc2FnZSgp
KQorICAgICAgICAuc2V0Q29kZShlcnJvci5jb2RlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAg
ICAgcmVxdWVzdENhbGxiYWNrLnNlbmRTdWNjZXNzKG51bGxwdHIsIG51bGxwdHIsIFdURk1vdmUo
ZXJyb3JPYmplY3QpKTsKIH0KQEAgLTc1LDkgKzc1LDkgQEAgcHJpdmF0ZToKICAgICBTdGF0ZW1l
bnRDYWxsYmFjayhSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAg
ICAgICAgOiBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQog
Ci0gICAgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiosIFNRTFJlc3VsdFNldCogcmVz
dWx0U2V0KSBmaW5hbAorICAgIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24mLCBTUUxS
ZXN1bHRTZXQmIHJlc3VsdFNldCkgZmluYWwKICAgICB7Ci0gICAgICAgIGF1dG8mIHJvd0xpc3Qg
PSByZXN1bHRTZXQtPnJvd3MoKTsKKyAgICAgICAgYXV0byYgcm93TGlzdCA9IHJlc3VsdFNldC5y
b3dzKCk7CiAKICAgICAgICAgYXV0byBjb2x1bW5OYW1lcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IHJv
d0xpc3QuY29sdW1uTmFtZXMoKSkKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIFN0
YXRlbWVudEVycm9yQ2FsbGJhY2soUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2spCiAgICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJh
Y2spKSB7IH0KIAotICAgIGJvb2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxFcnJv
ciogZXJyb3IpIGZpbmFsCisgICAgYm9vbCBoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiYsIFNR
TEVycm9yJiBlcnJvcikgZmluYWwKICAgICB7CiAgICAgICAgIHJlcG9ydFRyYW5zYWN0aW9uRmFp
bGVkKG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSwgZXJyb3IpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTEzMSwxNCArMTMxLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9zcWxTdGF0
ZW1lbnQoc3FsU3RhdGVtZW50KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkgeyB9CiAKLSAgICBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikgZmluYWwKKyAgICBib29sIGhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikgZmluYWwKICAgICB7CiAgICAgICAgIGlmICghbV9yZXF1ZXN0Q2Fs
bGJhY2stPmlzQWN0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBS
ZWY8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrKFN0YXRlbWVudENhbGxiYWNrOjpjcmVh
dGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSk7CiAgICAgICAgIFJlZjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmNy
ZWF0ZShtX3JlcXVlc3RDYWxsYmFjay5jb3B5UmVmKCkpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmV4ZWN1dGVTcWwobV9zcWxTdGF0ZW1lbnQsIHsgfSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1v
dmUoZXJyb3JDYWxsYmFjaykpOworICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKG1fc3Fs
U3RhdGVtZW50LCB7IH0sIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yQ2FsbGJhY2sp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgcHJp
dmF0ZToKICAgICBUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soUmVmPEV4ZWN1dGVTUUxDYWxsYmFj
az4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92
ZShyZXF1ZXN0Q2FsbGJhY2spKSB7IH0KIAotICAgIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3Iq
IGVycm9yKSBmaW5hbAorICAgIGJvb2wgaGFuZGxlRXZlbnQoU1FMRXJyb3ImIGVycm9yKSBmaW5h
bAogICAgIHsKICAgICAgICAgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQobV9yZXF1ZXN0Q2FsbGJh
Y2suZ2V0KCksIGVycm9yKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2suaAkocmV2aXNp
b24gMjE3MDczKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlckNh
bGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgSW50ZXJzZWN0
aW9uT2JzZXJ2ZXJFbnRyeTsKIGNsYXNzIEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2sgOiBw
dWJsaWMgUmVmQ291bnRlZDxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjaygpIHsgfQotICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVFdmVudChWZWN0b3I8UmVmUHRyPEludGVyc2VjdGlvbk9ic2VydmVy
RW50cnk+PiwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUV2ZW50KGNvbnN0IFZlY3RvcjxSZWZQdHI8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeT4+
JiwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXImKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlT2JzZXJ2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VPYnNlcnZlci5jcHAJ
KHJldmlzaW9uIDIxNzA3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VPYnNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBQZXJmb3JtYW5j
ZU9ic2VydmVyOjpkZWxpdmVyKCkKIAogICAgIFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRy
eT4+IGVudHJpZXMgPSBXVEZNb3ZlKG1fZW50cmllc1RvRGVsaXZlcik7CiAgICAgYXV0byBsaXN0
ID0gUGVyZm9ybWFuY2VPYnNlcnZlckVudHJ5TGlzdDo6Y3JlYXRlKFdURk1vdmUoZW50cmllcykp
OwotICAgIG1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KGxpc3QucHRyKCksIHRoaXMpOworICAgIG1f
Y2FsbGJhY2stPmhhbmRsZUV2ZW50KGxpc3QsICp0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU9ic2VydmVyQ2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlT2Jz
ZXJ2ZXJDYWxsYmFjay5oCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIGNsYXNzIFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3Q7CiBjbGFzcyBQZXJmb3Jt
YW5jZU9ic2VydmVyQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxQZXJmb3JtYW5jZU9ic2Vy
dmVyQ2FsbGJhY2s+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5QZXJmb3JtYW5jZU9ic2VydmVy
Q2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoUGVyZm9ybWFuY2VP
YnNlcnZlckVudHJ5TGlzdCosIFBlcmZvcm1hbmNlT2JzZXJ2ZXIqKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3QmLCBQZXJmb3Jt
YW5jZU9ic2VydmVyJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3MDczKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDUtMTggIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbV2ViSURMXSBSZW1vdmUgdGhlIG5l
ZWQgZm9yIHRoZSBnZW5lcmF0b3IgdG8ga25vdyBhYm91dCBuYXRpdmUgdHlwZSBtYXBwaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIzMTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET00u
bW06CisgICAgICAgICgtW0RPTU5vZGVGaWx0ZXIgYWNjZXB0Tm9kZTpdKToKKyAgICAgICAgVXBk
YXRlIHRvIHBhc3MgTm9kZSBieSByZWZlcmVuY2UuCisKIDIwMTctMDUtMTggIENvbW1pdCBRdWV1
ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIyMTcwMzEsIHIyMTcwMzIsIGFuZCByMjE3MDM3LgpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvRE9NL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9N
Lm1tCShyZXZpc2lvbiAyMTcwNzMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAgLSAodm9pZClmaW5hbGl6ZQogCiAtIChz
aG9ydClhY2NlcHROb2RlOihET01Ob2RlICopbm9kZQogewotICAgIHJldHVybiBjb3JlKHNlbGYp
LT5hY2NlcHROb2RlKGNvcmUobm9kZSkpOworICAgIHJldHVybiBjb3JlKHNlbGYpLT5hY2NlcHRO
b2RlKCpjb3JlKG5vZGUpKTsKIH0KIAogQGVuZAo=
</data>
<flag name="review"
          id="331637"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>