<?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>160926</bug_id>
          
          <creation_ts>2016-08-16 17:32:09 -0700</creation_ts>
          <short_desc>Merge toNativeArray and toRefPtrNativeArray</short_desc>
          <delta_ts>2020-08-07 12:39:33 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>163247</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>161030</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1220684</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-16 17:32:09 -0700</bug_when>
    <thetext>Merge these two functions to reduce the code duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220798</commentid>
    <comment_count>1</comment_count>
      <attachid>286282</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-16 23:46:07 -0700</bug_when>
    <thetext>Created attachment 286282
Merges the functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220964</commentid>
    <comment_count>2</comment_count>
      <attachid>286330</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-17 14:36:45 -0700</bug_when>
    <thetext>Created attachment 286330
Rebaselined binding tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220979</commentid>
    <comment_count>3</comment_count>
      <attachid>286334</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-17 15:48:06 -0700</bug_when>
    <thetext>Created attachment 286334
Updated for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221047</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-17 20:45:37 -0700</bug_when>
    <thetext>I wonder if we can do this without adding separate toWrapped overload for each wrapper type. Instead, maybe do something like:

template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;Element&gt; {
    typedef JSElement WrapperType;
};

And then, you could have a single toWrapped in JSDOMBindings.h that looks something like:

template&lt;typename NativeType&gt;
NativeType* toWrapped(JSC::ExecState&amp; state, JSC::JSValue jsValue)
{
    typedef typename JSDOMWrapperConverterTraits&lt;NativeType&gt;::WrapperType WrapperType;
    return WrapperType::toWrapped(value)
}

(As usual, C++ typed into a comment is not guaranteed to work).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221164</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 13:03:20 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I wonder if we can do this without adding separate toWrapped overload for
&gt; each wrapper type. Instead, maybe do something like:
&gt; 
&gt; template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;Element&gt; {
&gt;     typedef JSElement WrapperType;
&gt; };
&gt; 
&gt; And then, you could have a single toWrapped in JSDOMBindings.h that looks
&gt; something like:
&gt; 
&gt; template&lt;typename NativeType&gt;
&gt; NativeType* toWrapped(JSC::ExecState&amp; state, JSC::JSValue jsValue)
&gt; {
&gt;     typedef typename JSDOMWrapperConverterTraits&lt;NativeType&gt;::WrapperType
&gt; WrapperType;
&gt;     return WrapperType::toWrapped(value)
&gt; }
&gt; 
&gt; (As usual, C++ typed into a comment is not guaranteed to work).

We’d have to define both WrapperType and NativeType (because some wrappers use RefPtr instead of raw pointer) but sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221166</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 13:07:44 -0700</bug_when>
    <thetext>Actually, no quite because toWrapped takes ExecState in addition to JSValue when JSCustomToNativeObject is set :(

We could change it so that it always takes two arguments, or add yet another trait which tells us whether the function takes one or two arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221214</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-18 15:26:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; We’d have to define both WrapperType and NativeType (because some wrappers
&gt; use RefPtr instead of raw pointer) but sure.

Really? Which ones?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221217</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-18 15:28:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Actually, no quite because toWrapped takes ExecState in addition to JSValue
&gt; when JSCustomToNativeObject is set :(
&gt; 
&gt; We could change it so that it always takes two arguments, or add yet another
&gt; trait which tells us whether the function takes one or two arguments.


I think changing toWrapped to always take both makes sense. Having different signatures is really weird here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221328</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 22:44:08 -0700</bug_when>
    <thetext>Ugh... a bunch of inspector code relies on the fact JSNode::toWrapped doesn’t require ExecState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221329</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 22:52:26 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Ugh... a bunch of inspector code relies on the fact JSNode::toWrapped
&gt; doesn’t require ExecState.

Oh, I can just call jsNodeCast for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221335</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-18 23:36:06 -0700</bug_when>
    <thetext>Nope :(. SerializedScriptValue also assumes you can call toWrapped without ExecState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221337</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-19 00:01:16 -0700</bug_when>
    <thetext>Actually, getting rid of ExecState is easier. Only two toWrapped functions use ExecState, and they’re probably just written by someone who didn’t understand how toWrapped function is used:

RefPtr&lt;DOMStringList&gt; JSDOMStringList::toWrapped(ExecState&amp; state, JSValue value)
{
    if (value.inherits(JSDOMStringList::info()))
        return &amp;jsCast&lt;JSDOMStringList*&gt;(asObject(value))-&gt;wrapped();

    if (!isJSArray(value))
        return nullptr;

    JSArray* array = asArray(value);
    RefPtr&lt;DOMStringList&gt; stringList = DOMStringList::create();
    for (unsigned i = 0; i &lt; array-&gt;length(); ++i)
        stringList-&gt;append(array-&gt;getIndex(&amp;state, i).toString(&amp;state)-&gt;value(&amp;state));

    return stringList;
}

RefPtr&lt;XPathNSResolver&gt; JSXPathNSResolver::toWrapped(ExecState&amp; state, JSValue value)
{
    if (value.inherits(JSXPathNSResolver::info()))
        return &amp;jsCast&lt;JSXPathNSResolver*&gt;(asObject(value))-&gt;wrapped();

    return JSCustomXPathNSResolver::create(&amp;state, value);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221338</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-19 00:08:35 -0700</bug_when>
    <thetext>Hm... actually, the one for XPathNSResolver was added recently in https://trac.webkit.org/changeset/200550.

Chris, why does toWrapped need to call XPathNSResolver::create when the wrapped JSValue isn’t XPathNSResolver?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224993</commentid>
    <comment_count>14</comment_count>
      <attachid>286334</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-31 10:39:36 -0700</bug_when>
    <thetext>Comment on attachment 286334
Updated for ToT

I&apos;m gonna also give up on this patch after bug 161030.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225931</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-09-02 13:48:09 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 286334 [details]
&gt; Updated for ToT
&gt; 
&gt; I&apos;m gonna also give up on this patch after bug 161030.

:(.  Re-opening as we really should do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678692</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-07 12:39:33 -0700</bug_when>
    <thetext>to[RefPtr]NativeArray() were merged to Converter&lt;IDLSequence&lt;T&gt;&gt; in r207150.

*** This bug has been marked as a duplicate of bug 163247 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286282</attachid>
            <date>2016-08-16 23:46:07 -0700</date>
            <delta_ts>2016-08-17 14:36:41 -0700</delta_ts>
            <desc>Merges the functions</desc>
            <filename>bug-160926-20160816234419.patch</filename>
            <type>text/plain</type>
            <size>11068</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDU1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA4LTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHRvTmF0aXZlQXJyYXkg
YW5kIHRvUmVmUHRyTmF0aXZlQXJyYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDkyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1lcmdlZCB0b05hdGl2ZUFycmF5IGFuZCB0b1JlZlB0ck5hdGl2ZUFy
cmF5IGludG8gdG9OYXRpdmVBcnJheS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3RhbmRh
bG9uZSB0ZW1wbGF0ZSAidG9XcmFwcGVkIiBmdW5jdGlvbiB3aGljaCBjYW4gY29udmVydCBKU1Zh
bHVlIHRvIHRoZSB3cmFwcGVkIHR5cGUKKyAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lm
eSB0aGUgY29ycmVzcG9uZGluZyB0aGUgSlMgdHlwZSAoc3RpbGwgcmVxdWlyZXMgdGhlIGFwcHJv
cHJpYXRlIGhlYWRlciBmaWxlKQorICAgICAgICBhbG9uZyB3aXRoIGl0cyBoZWxwZXIgdHJhaXRz
IGNsYXNzIFdyYXBwZXJDb252ZXJ0VHJhaXRzIGJlY2F1c2Ugc29tZSB0b1dyYXBwZWQgZnVuY3Rp
b24gc3VjaCBhcyB0aGUgb25lCisgICAgICAgIGZvciBFdmVudExpc3RlbmVyIHVzZXMgUmVmUHRy
IGFzIHRoZSByZXR1cm4gdHlwZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0eXBlLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOYXRpdmVWYWx1ZVRyYWl0c0Jhc2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2
ZVZhbHVlVHJhaXRzPFN0cmluZz46Om5hdGl2ZVZhbHVlKTogUmVwbGFjZWQgdGhlIHRoaXJkIGFy
Z3VtZW50IGJ5IHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVWYWx1
ZVRyYWl0czx1bnNpZ25lZD46Om5hdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpOYXRpdmVWYWx1ZVRyYWl0czxmbG9hdD46Om5hdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOYXRpdmVWYWx1ZVRyYWl0czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVUcmFpdHM8UmVmUHRyPFQ+Pjo6bmF0aXZl
VmFsdWUpOiBEaXR0by4gVXNlIHRoZSBuZXdseSBhZGRlZCB0b1dyYXBwZWQgZnVuY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlOjp0b1JlZlB0ck5hdGl2ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOiBNb3ZlZCB0aGUgY2hlY2sgZm9yIGV4Y2VwdGlvbnMg
aGVyZSBpbnN0ZWFkIG9mIGNoZWNraW5nIGl0IGluIG5hdGl2ZVZhbHVlIGFuZAorICAgICAgICBh
c3NlcnRpbmcgaXQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJndW1lbnRzKTog
VXBkYXRlZCBwZXIgTmF0aXZlVmFsdWVUcmFpdHMgY2hhbmdlLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzKTogQWRkZWQuIFRoaXMgdHJhaXRzIGNsYXNzIGRlZmluZXMgdGhlIHJldHVybiB0
eXBlIGZvciB0b1dyYXBwZWQKKyAgICAgICAgZnVuY3Rpb24gYmVjYXVzZSBzb21lIHRvV3JhcHBl
ZCBmdW5jdGlvbiB1c2VzIFJlZlB0ciBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0eXBlLgorICAgICAg
ICAoV2ViQ29yZTo6dG9XcmFwcGVkKTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IEdlbmVyYXRl
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0cyBhbmQgYSBzdGFuZGFsb25lIHRvV3JhcHBlZCBm
dW5jdGlvbi4gCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBVc2UgdGhlIHVuaWZpZWQgdG9O
YXRpdmVBcnJheSBmdW5jdGlvbi4KKwogMjAxNi0wOC0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUgc2hvdWxkIHJldHJp
ZXZlIGxpZmVjeWNsZSBjYWxsYmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDggKzI4NSw4IEBA
IFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1VpbnQzMkFycmF5KEoKIFJlZlB0cjxKU0M6OkZs
b2F0MzJBcnJheT4gdG9GbG9hdDMyQXJyYXkoSlNDOjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkZs
b2F0NjRBcnJheT4gdG9GbG9hdDY0QXJyYXkoSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmUHRyPFQ+PiB0b1JlZlB0ck5hdGl2
ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIE5hdGl2ZVZhbHVlVHJhaXRzPFQ+OjpSZXN1bHRUeXBl
IHRvTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gVmVjdG9yPFQ+IHRvTmF0aXZlQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwg
c2l6ZV90IHN0YXJ0SW5kZXggPSAwKTsKIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCkBAIC02NjIsNzEgKzY2Miw2NiBAQCBpbmxpbmUgUmVm
UHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyCiBpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQz
MkFycmF5PiB0b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odmFsdWUpOyB9CiBpbmxpbmUg
UmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zsb2F0NjRBcnJheShKU0M6OkpTVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4o
dmFsdWUpOyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0
czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHNCYXNlIHsK
KyAgICB1c2luZyBSZXN1bHRUeXBlID0gV1RGOjpWZWN0b3I8VD47Cit9OwogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxTdHJpbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGJv
b2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVl
LCBTdHJpbmcmIGluZGV4ZWRWYWx1ZSkKK3RlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJh
aXRzPFN0cmluZz4gOiBOYXRpdmVWYWx1ZVRyYWl0c0Jhc2U8U3RyaW5nPiB7CisgICAgc3RhdGlj
IGlubGluZSBTdHJpbmcgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNW
YWx1ZSBqc1ZhbHVlKQogICAgIHsKLSAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b1dU
RlN0cmluZygmZXhlYyk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4ganNW
YWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3Qg
TmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0
aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCB1bnNp
Z25lZCYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8
dW5zaWduZWQ+IDogTmF0aXZlVmFsdWVUcmFpdHNCYXNlPHVuc2lnbmVkPiB7CisgICAgc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpK
U1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRv
VUludDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAg
ICAgICByZXR1cm4ganNWYWx1ZS50b1VJbnQzMigmZXhlYyk7CiAgICAgfQogfTsKIAotdGVtcGxh
dGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5l
IGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1Zh
bHVlLCBmbG9hdCYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVU
cmFpdHM8ZmxvYXQ+IDogTmF0aXZlVmFsdWVUcmFpdHNCYXNlPGZsb2F0PiB7CisgICAgc3RhdGlj
IGlubGluZSBmbG9hdCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvRmxv
YXQoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAg
IHJldHVybiBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4g
c3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgYm9v
bCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUs
IGRvdWJsZSYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFp
dHM8ZG91YmxlPiA6IE5hdGl2ZVZhbHVlVHJhaXRzQmFzZTxkb3VibGU+IHsKKyAgICBzdGF0aWMg
aW5saW5lIGRvdWJsZSBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvTnVt
YmVyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAg
ICByZXR1cm4ganNWYWx1ZS50b051bWJlcigmZXhlYyk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBWZWN0b3I8UmVmUHRyPFQ+PiB0b1JlZlB0ck5hdGl2
ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
ZXhlYyk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFQ+PigpOwotICAgIH0KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxSZWZQdHI8VD4+IHsKKyAg
ICB1c2luZyBSZXN1bHRUeXBlID0gVmVjdG9yPFJlZlB0cjxUPj47CiAKLSAgICBWZWN0b3I8UmVm
UHRyPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJmV4ZWMsIHZhbHVlLCBbJnJl
c3VsdF0oSlNDOjpWTSYsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUpIHsKLSAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHMoSlNUOjppbmZvKCkpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChKU1Q6OnRvV3JhcHBlZChqc1ZhbHVlKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKCpzdGF0ZSk7Ci0gICAg
fSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxUPiBu
YXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQor
ICAgIHsKKyAgICAgICAgUmVmUHRyPFQ+IHZhbHVlID0gdG9XcmFwcGVkPFQ+KHN0YXRlLCBqc1Zh
bHVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1l
bnRUeXBlRXJyb3Ioc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KK307CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBOYXRpdmVWYWx1ZVRy
YWl0czxUPjo6UmVzdWx0VHlwZSB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgdHlwZWRlZiBOYXRpdmVWYWx1ZVRyYWl0czxUPiBU
cmFpdHNUeXBlOworCisgICAgdHlwZW5hbWUgVHJhaXRzVHlwZTo6UmVzdWx0VHlwZSByZXN1bHQ7
CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8VD4oKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKLSAgICBWZWN0b3I8VD4gcmVzdWx0OwotICAgIGZvckVhY2hJbkl0
ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgIFQgY29udmVydGVkVmFsdWU7
Ci0gICAgICAgIGlmICghTmF0aXZlVmFsdWVUcmFpdHM8VD46Om5hdGl2ZVZhbHVlKCpzdGF0ZSwg
anNWYWx1ZSwgY29udmVydGVkVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBB
U1NFUlQoIXN0YXRlLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1
bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1Zh
bHVlKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBUcmFpdHNUeXBlOjpuYXRpdmVWYWx1ZSgqc3Rh
dGUsIGpzVmFsdWUpOworICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTc0MSwxMCArNzM2LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxU
PiB0b05hdGl2ZUEKICAgICB0eXBlZGVmIE5hdGl2ZVZhbHVlVHJhaXRzPFQ+IFRyYWl0c1R5cGU7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIFQgaW5kZXhWYWx1ZTsKLSAgICAgICAgaWYgKCFUcmFpdHNUeXBlOjpuYXRpdmVWYWx1
ZShleGVjLCBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KGkpLCBpbmRleFZhbHVlKSkKKyAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gVHJhaXRzVHlwZTo6bmF0aXZlVmFsdWUoZXhlYywgZXhlYy51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIFZlY3RvcjxUPigpOwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGluZGV4VmFsdWUpOworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
aW5kZXhWYWx1ZSkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgJKHJldmlzaW9uIDIwNDUwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgUmVmPEltcGxlbWVudGF0aW9uQ2xhc3M+
IG1fd3JhcHBlZDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEltcGxlbWVudGF0aW9uQ2xhc3M+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bXBsZW1lbnRhdGlvbkNsYXNzPiB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
SW1wbGVtZW50YXRpb25DbGFzcz46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcywgdHlwZW5hbWUg
RW5hYmxlID0gdm9pZD4KIHN0cnVjdCBKU0RPTU9iamVjdEluc3BlY3RvciB7CiBwdWJsaWM6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE1NDAsNiArMTU0MCwy
MyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImJv
b2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNlTmFtZX1Jbml0JiwgSlNEaWN0
aW9uYXJ5Jik7XG5cbiIpOwogICAgIH0KIAorICAgIGlmIChTaG91bGRHZW5lcmF0ZVRvV3JhcHBl
ZCgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSkgeworICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdl
dE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGltcGxUeXBlKTsKKyAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgInRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czwk
aW1wbFR5cGU+IHtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHR5cGVk
ZWYgJG5hdGl2ZVR5cGUgTmF0aXZlVHlwZTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAifTtcbiIpOworCisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ0ZW1wbGF0ZTw+
IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8JGltcGxUeXBlPjo6
TmF0aXZlVHlwZSB0b1dyYXBwZWQ8JGltcGxUeXBlPiIpOworICAgICAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tVG9OYXRpdmVPYmplY3QifSkgeworICAg
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gJHtjbGFzc05hbWV9Ojp0b1dyYXBwZWQoc3RhdGUs
IHZhbHVlKTsgfVxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuICR7Y2xhc3NOYW1lfTo6dG9XcmFwcGVkKHZhbHVlKTsgfVxuXG4iKTsKKyAgICAgICAgfQor
CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01XcmFwcGVyLmgifSA9IDE7CisgICAgfQor
CisKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVD
b25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG59IC8vIG5hbWVzcGFjZSBXZWJDb3JlXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
XG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKQEAgLTQ2NjMsMTEgKzQ2ODAsOSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAgICBteSAk
c2VxdWVuY2VUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNlVHlwZSgkdHlwZSk7CiAg
ICAgaWYgKCRzZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1Jl
ZlB0clR5cGUoJHNlcXVlbmNlVHlwZSkpIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJKUyR7c2VxdWVuY2VUeXBlfS5oIik7Ci0gICAgICAgICAgICByZXR1cm4gKCJ0b1JlZlB0ck5h
dGl2ZUFycmF5PCR7c2VxdWVuY2VUeXBlfSwgSlMke3NlcXVlbmNlVHlwZX0+KCpzdGF0ZSwgJHZh
bHVlKSIsIDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoInRvTmF0aXZlQXJyYXk8IiAu
IEdldE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkc2VxdWVuY2VUeXBlKSAuICI+KCpzdGF0ZSwgJHZh
bHVlKSIsIDEpOworICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVZlY3RvcklubmVy
VHlwZSgkc2VxdWVuY2VUeXBlKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHtzZXF1
ZW5jZVR5cGV9LmgiKSBpZiAkY29kZUdlbmVyYXRvci0+SXNSZWZQdHJUeXBlKCRzZXF1ZW5jZVR5
cGUpOworICAgICAgICByZXR1cm4gKCJ0b05hdGl2ZUFycmF5PCRuYXRpdmVUeXBlPigqc3RhdGUs
ICR2YWx1ZSkiLCAxKTsKICAgICB9CiAKICAgICByZXR1cm4gKCR2YWx1ZSwgMCkgaWYgJHR5cGUg
ZXEgImFueSI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286330</attachid>
            <date>2016-08-17 14:36:45 -0700</date>
            <delta_ts>2016-08-17 15:48:03 -0700</delta_ts>
            <desc>Rebaselined binding tests</desc>
            <filename>bug-160926-20160817143457.patch</filename>
            <type>text/plain</type>
            <size>39366</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA4LTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHRvTmF0aXZlQXJyYXkg
YW5kIHRvUmVmUHRyTmF0aXZlQXJyYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDkyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1lcmdlZCB0b05hdGl2ZUFycmF5IGFuZCB0b1JlZlB0ck5hdGl2ZUFy
cmF5IGludG8gdG9OYXRpdmVBcnJheS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3RhbmRh
bG9uZSB0ZW1wbGF0ZSAidG9XcmFwcGVkIiBmdW5jdGlvbiB3aGljaCBjYW4gY29udmVydCBKU1Zh
bHVlIHRvIHRoZSB3cmFwcGVkIHR5cGUKKyAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lm
eSB0aGUgY29ycmVzcG9uZGluZyB0aGUgSlMgdHlwZSAoc3RpbGwgcmVxdWlyZXMgdGhlIGFwcHJv
cHJpYXRlIGhlYWRlciBmaWxlKQorICAgICAgICBhbG9uZyB3aXRoIGl0cyBoZWxwZXIgdHJhaXRz
IGNsYXNzIFdyYXBwZXJDb252ZXJ0VHJhaXRzIGJlY2F1c2Ugc29tZSB0b1dyYXBwZWQgZnVuY3Rp
b24gc3VjaCBhcyB0aGUgb25lCisgICAgICAgIGZvciBFdmVudExpc3RlbmVyIHVzZXMgUmVmUHRy
IGFzIHRoZSByZXR1cm4gdHlwZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0eXBlLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOYXRpdmVWYWx1ZVRyYWl0c0Jhc2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2
ZVZhbHVlVHJhaXRzPFN0cmluZz46Om5hdGl2ZVZhbHVlKTogUmVwbGFjZWQgdGhlIHRoaXJkIGFy
Z3VtZW50IGJ5IHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVWYWx1
ZVRyYWl0czx1bnNpZ25lZD46Om5hdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpOYXRpdmVWYWx1ZVRyYWl0czxmbG9hdD46Om5hdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOYXRpdmVWYWx1ZVRyYWl0czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVUcmFpdHM8UmVmUHRyPFQ+Pjo6bmF0aXZl
VmFsdWUpOiBEaXR0by4gVXNlIHRoZSBuZXdseSBhZGRlZCB0b1dyYXBwZWQgZnVuY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlOjp0b1JlZlB0ck5hdGl2ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOiBNb3ZlZCB0aGUgY2hlY2sgZm9yIGV4Y2VwdGlvbnMg
aGVyZSBpbnN0ZWFkIG9mIGNoZWNraW5nIGl0IGluIG5hdGl2ZVZhbHVlIGFuZAorICAgICAgICBh
c3NlcnRpbmcgaXQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJndW1lbnRzKTog
VXBkYXRlZCBwZXIgTmF0aXZlVmFsdWVUcmFpdHMgY2hhbmdlLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzKTogQWRkZWQuIFRoaXMgdHJhaXRzIGNsYXNzIGRlZmluZXMgdGhlIHJldHVybiB0
eXBlIGZvciB0b1dyYXBwZWQKKyAgICAgICAgZnVuY3Rpb24gYmVjYXVzZSBzb21lIHRvV3JhcHBl
ZCBmdW5jdGlvbiB1c2VzIFJlZlB0ciBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0eXBlLgorICAgICAg
ICAoV2ViQ29yZTo6dG9XcmFwcGVkKTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IEdlbmVyYXRl
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0cyBhbmQgYSBzdGFuZGFsb25lIHRvV3JhcHBlZCBm
dW5jdGlvbi4gCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBVc2UgdGhlIHVuaWZpZWQgdG9O
YXRpdmVBcnJheSBmdW5jdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNJbnRlcmZhY2VOYW1lLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0
b21OYW1lZEdldHRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SXRlcmFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKIDIwMTYtMDgt
MTcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgYSBjb3VwbGUgb2YgdW51c2VkIFdLU0kgZnVuY3Rpb24gcG9pbnRlcnMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMDQ1MDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg1LDggKzI4NSw4IEBAIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1VpbnQzMkFy
cmF5KEoKIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9GbG9hdDMyQXJyYXkoSlNDOjpKU1Zh
bHVlKTsKIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9hdDY0QXJyYXkoSlNDOjpKU1Zh
bHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVm
UHRyPFQ+PiB0b1JlZlB0ck5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRp
dmVWYWx1ZVRyYWl0czsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIE5hdGl2ZVZhbHVl
VHJhaXRzPFQ+OjpSZXN1bHRUeXBlIHRvTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPFQ+IHRvTmF0aXZlQXJndW1l
bnRzKEpTQzo6RXhlY1N0YXRlJiwgc2l6ZV90IHN0YXJ0SW5kZXggPSAwKTsKIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCkBAIC02NjIsNzEg
KzY2Miw2NiBAQCBpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyCiBpbmxp
bmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRv
cj4odmFsdWUpOyB9CiBpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zsb2F0NjRB
cnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDY0QWRhcHRvcj4odmFsdWUpOyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgTmF0
aXZlVmFsdWVUcmFpdHNCYXNlIHsKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gV1RGOjpWZWN0b3I8
VD47Cit9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxTdHJpbmc+IHsK
LSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBTdHJpbmcmIGluZGV4ZWRWYWx1ZSkKK3RlbXBsYXRlPD4g
c3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz4gOiBOYXRpdmVWYWx1ZVRyYWl0c0Jhc2U8
U3RyaW5nPiB7CisgICAgc3RhdGljIGlubGluZSBTdHJpbmcgbmF0aXZlVmFsdWUoSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogICAgIHsKLSAgICAgICAgaW5kZXhl
ZFZhbHVlID0ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgfQogfTsK
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+IHsKLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlLCB1bnNpZ25lZCYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBzdHJ1
Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+IDogTmF0aXZlVmFsdWVUcmFpdHNCYXNlPHVu
c2lnbmVkPiB7CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBuYXRpdmVWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRl
eGVkVmFsdWUgPSBqc1ZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVj
LmhhZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4ganNWYWx1ZS50b1VJbnQzMigmZXhlYyk7
CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+
IHsKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9hdCYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8
PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+IDogTmF0aXZlVmFsdWVUcmFpdHNCYXNl
PGZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVk
VmFsdWUgPSBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFk
RXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwogICAg
IH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewot
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNDOjpKU1ZhbHVlIGpzVmFsdWUsIGRvdWJsZSYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBz
dHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZG91YmxlPiA6IE5hdGl2ZVZhbHVlVHJhaXRzQmFzZTxk
b3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVk
VmFsdWUgPSBqc1ZhbHVlLnRvTnVtYmVyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhh
ZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4ganNWYWx1ZS50b051bWJlcigmZXhlYyk7CiAg
ICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBWZWN0b3I8UmVm
UHRyPFQ+PiB0b1JlZlB0ck5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRy
PFQ+PigpOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRy
YWl0czxSZWZQdHI8VD4+IHsKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gVmVjdG9yPFJlZlB0cjxU
Pj47CiAKLSAgICBWZWN0b3I8UmVmUHRyPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFi
bGUoJmV4ZWMsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYsIEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHMo
SlNUOjppbmZvKCkpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChKU1Q6OnRvV3JhcHBlZChq
c1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlw
ZUVycm9yKCpzdGF0ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAgICBzdGF0
aWMgaW5saW5lIFJlZlB0cjxUPiBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFQ+IHZhbHVlID0gdG9X
cmFwcGVkPFQ+KHN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAg
ICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3Ioc3RhdGUpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KK307
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBOYXRpdmVWYWx1ZVRyYWl0czxUPjo6UmVzdWx0VHlwZSB0b05hdGl2ZUFycmF5KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgdHlwZWRlZiBO
YXRpdmVWYWx1ZVRyYWl0czxUPiBUcmFpdHNUeXBlOworCisgICAgdHlwZW5hbWUgVHJhaXRzVHlw
ZTo6UmVzdWx0VHlwZSByZXN1bHQ7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8
VD4oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBWZWN0b3I8VD4gcmVz
dWx0OwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6
Vk0mLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAg
ICAgIFQgY29udmVydGVkVmFsdWU7Ci0gICAgICAgIGlmICghTmF0aXZlVmFsdWVUcmFpdHM8VD46
Om5hdGl2ZVZhbHVlKCpzdGF0ZSwganNWYWx1ZSwgY29udmVydGVkVmFsdWUpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIXN0YXRlLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgIGZvckVhY2hJbkl0ZXJhYmxl
KCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBUcmFpdHNU
eXBlOjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICBpZiAoIXZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0MSwxMCArNzM2LDEwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUEKICAgICB0eXBlZGVmIE5hdGl2ZVZhbHVl
VHJhaXRzPFQ+IFRyYWl0c1R5cGU7CiAKICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFQgaW5kZXhWYWx1ZTsKLSAgICAgICAgaWYgKCFU
cmFpdHNUeXBlOjpuYXRpdmVWYWx1ZShleGVjLCBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KGkpLCBp
bmRleFZhbHVlKSkKKyAgICAgICAgYXV0byBpbmRleFZhbHVlID0gVHJhaXRzVHlwZTo6bmF0aXZl
VmFsdWUoZXhlYywgZXhlYy51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxUPigpOwotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUpOworICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoaW5kZXhWYWx1ZSkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgJ
KHJldmlzaW9uIDIwNDUwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3Jh
cHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgUmVm
PEltcGxlbWVudGF0aW9uQ2xhc3M+IG1fd3JhcHBlZDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEltcGxlbWVudGF0aW9uQ2xhc3M+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SW1wbGVtZW50YXRpb25DbGFzcz46Ok5hdGl2ZVR5cGUgdG9X
cmFwcGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwogdGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcywgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KIHN0cnVjdCBKU0RPTU9iamVjdElu
c3BlY3RvciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTE1NDAsNiArMTU0MCwyMyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJm
YWNlTmFtZX1Jbml0JiwgSlNEaWN0aW9uYXJ5Jik7XG5cbiIpOwogICAgIH0KIAorICAgIGlmIChT
aG91bGRHZW5lcmF0ZVRvV3JhcHBlZCgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSkgeworICAgICAg
ICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGltcGxUeXBlKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czwkaW1wbFR5cGU+IHtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHR5cGVkZWYgJG5hdGl2ZVR5cGUgTmF0aXZlVHlwZTtcbiIpOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOworCisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8JGltcGxUeXBlPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8JGltcGxUeXBlPiIpOwor
ICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tVG9O
YXRpdmVPYmplY3QifSkgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gJHtjbGFzc05h
bWV9Ojp0b1dyYXBwZWQoc3RhdGUsIHZhbHVlKTsgfVxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuICR7Y2xhc3NOYW1lfTo6dG9XcmFwcGVkKHZhbHVlKTsg
fVxuXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01XcmFw
cGVyLmgifSA9IDE7CisgICAgfQorCisKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29k
ZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiXG59IC8vIG5hbWVzcGFjZSBXZWJDb3JlXG4iKTsKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKQEAgLTQ2NjMsMTEgKzQ2ODAsOSBAQCBzdWIgSlNWYWx1
ZVRvTmF0aXZlCiAKICAgICBteSAkc2VxdWVuY2VUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNl
cXVlbmNlVHlwZSgkdHlwZSk7CiAgICAgaWYgKCRzZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1JlZlB0clR5cGUoJHNlcXVlbmNlVHlwZSkpIHsKLSAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7c2VxdWVuY2VUeXBlfS5oIik7Ci0gICAgICAgICAg
ICByZXR1cm4gKCJ0b1JlZlB0ck5hdGl2ZUFycmF5PCR7c2VxdWVuY2VUeXBlfSwgSlMke3NlcXVl
bmNlVHlwZX0+KCpzdGF0ZSwgJHZhbHVlKSIsIDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAoInRvTmF0aXZlQXJyYXk8IiAuIEdldE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkc2VxdWVuY2VU
eXBlKSAuICI+KCpzdGF0ZSwgJHZhbHVlKSIsIDEpOworICAgICAgICBteSAkbmF0aXZlVHlwZSA9
IEdldE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkc2VxdWVuY2VUeXBlKTsKKyAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIkpTJHtzZXF1ZW5jZVR5cGV9LmgiKSBpZiAkY29kZUdlbmVyYXRvci0+SXNS
ZWZQdHJUeXBlKCRzZXF1ZW5jZVR5cGUpOworICAgICAgICByZXR1cm4gKCJ0b05hdGl2ZUFycmF5
PCRuYXRpdmVUeXBlPigqc3RhdGUsICR2YWx1ZSkiLCAxKTsKICAgICB9CiAKICAgICByZXR1cm4g
KCR2YWx1ZSwgMCkgaWYgJHR5cGUgZXEgImFueSI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5oCShy
ZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNJbnRlcmZhY2VOYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDUgKzg1LDEwIEBAIGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8SW50
ZXJmYWNlTmFtZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQ
dHI8SW50ZXJmYWNlTmFtZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051
bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
SW50ZXJmYWNlTmFtZT4geworICAgIHR5cGVkZWYgSW50ZXJmYWNlTmFtZSogTmF0aXZlVHlwZTsK
K307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SW50ZXJmYWNlTmFtZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPEludGVyZmFjZU5hbWU+KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0ludGVyZmFjZU5h
bWU6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDUgKzg0LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEFjdGl2ZURPTU9iamVjdD4m
Jik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEFjdGl2
ZURPTU9iamVjdD4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEFj
dGl2ZURPTU9iamVjdD4geworICAgIHR5cGVkZWYgVGVzdEFjdGl2ZURPTU9iamVjdCogTmF0aXZl
VHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VGVzdEFjdGl2ZURPTU9iamVjdD46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RB
Y3RpdmVET01PYmplY3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDUgKzg0LDEwIEBAIGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYgaW1wbCkg
eyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1w
bC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcj4geworICAgIHR5cGVkZWYgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+OjpOYXRp
dmVUeXBlIHRvV3JhcHBlZDxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dG9XcmFwcGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oCShyZXZpc2lvbiAyMDQ1MDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNSAr
ODQsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQwogLy8gQ3Vz
dG9tIGNvbnN0cnVjdG9yCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoSlNDOjpFeGVj
U3RhdGUmKTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD4geworICAgIHR5cGVk
ZWYgVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KiBOYXRpdmVUeXBl
OworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+OjpOYXRpdmVU
eXBlIHRvV3JhcHBlZDxUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdDo6dG9XcmFwcGVkKHZhbHVlKTsgfQor
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtODgsNSArODgsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjxUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+JiYpOwogaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RDdXN0b21OYW1lZEdldHRlcj4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEN1c3RvbU5hbWVkR2V0dGVy
PiB7CisgICAgdHlwZWRlZiBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIE5hdGl2ZVR5cGU7Cit9Owor
dGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRl
c3RDdXN0b21OYW1lZEdldHRlcj46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RDdXN0b21OYW1l
ZEdldHRlcj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw1ICs4NiwxMCBA
QCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDCiAKIGJvb2wgZmlsbFRl
c3RFdmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmLCBKU0RpY3Rp
b25hcnkmKTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3RFdmVudENvbnN0cnVjdG9yPiB7CisgICAgdHlwZWRlZiBUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEV2ZW50Q29uc3RydWN0b3I+OjpOYXRpdmVUeXBlIHRvV3Jh
cHBlZDxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnRvV3JhcHBlZCh2YWx1ZSk7
IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQu
aAkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRl
ICJKU0V2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCiAKQEAgLTc4
LDUgKzc5LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBSZWY8VGVzdEV2ZW50VGFyZ2V0PiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RFdmVudFRhcmdldD4geworICAgIHR5cGVkZWYgVGVzdEV2
ZW50VGFyZ2V0KiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RXZlbnRUYXJnZXQ+OjpOYXRpdmVUeXBlIHRv
V3JhcHBlZDxUZXN0RXZlbnRUYXJnZXQ+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU1Rlc3RFdmVudFRhcmdldDo6dG9XcmFwcGVkKHZhbHVlKTsgfQorCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9u
IDIwNDUwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODUsNSArODUsMTAgQEAgaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0RXhjZXB0
aW9uPiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0
RXhjZXB0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9
CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RXhj
ZXB0aW9uPiB7CisgICAgdHlwZWRlZiBUZXN0RXhjZXB0aW9uKiBOYXRpdmVUeXBlOworfTsKK3Rl
bXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0
RXhjZXB0aW9uPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8VGVzdEV4Y2VwdGlvbj4oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6dG9X
cmFwcGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkocmV2aXNpb24gMjA0NTAxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNSArODIsMTAgQEAgaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXds
eUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpT
Qzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPiB7CisgICAgdHlwZWRlZiBUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+OjpO
YXRpdmVUeXBlIHRvV3JhcHBlZDxUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw1ICsxMTIsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3RHbG9iYWxPYmplY3Q+IHsKKyAgICB0eXBlZGVmIFRlc3RHbG9i
YWxPYmplY3QqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RHbG9iYWxPYmplY3Q+OjpOYXRpdmVUeXBlIHRv
V3JhcHBlZDxUZXN0R2xvYmFsT2JqZWN0PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNUZXN0R2xvYmFsT2JqZWN0Ojp0b1dyYXBwZWQodmFsdWUpOyB9CisK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNp
b24gMjA0NTAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDExIEBAIGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdElu
dGVyZmFjZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdEludGVyZmFjZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwo
KTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVz
dEludGVyZmFjZT4geworICAgIHR5cGVkZWYgVGVzdEludGVyZmFjZSogTmF0aXZlVHlwZTsKK307
Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VGVzdEludGVyZmFjZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RJbnRlcmZhY2U+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RJbnRlcmZhY2U6
OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJdGVyYWJsZS5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNSArODIsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgog
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0SXRlcmFibGU+JiYpOwogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmUHRyPFRlc3RJdGVyYWJsZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxs
KCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VGVzdEl0ZXJhYmxlPiB7CisgICAgdHlwZWRlZiBUZXN0SXRlcmFibGUq
IE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3RJdGVyYWJsZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RJ
dGVyYWJsZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
VGVzdEl0ZXJhYmxlOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCShy
ZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw1
ICs4MiwxMCBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqCiBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmKTsKIGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI+IHsKKyAgICB0eXBlZGVmIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBOYXRp
dmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46Ok5hdGl2ZVR5cGUgdG9XcmFw
cGVkPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6dG9XcmFw
cGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtODMsNSArODMsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4mJik7CiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkQ29uc3Ry
dWN0b3I+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGds
b2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZENv
bnN0cnVjdG9yPiB7CisgICAgdHlwZWRlZiBUZXN0TmFtZWRDb25zdHJ1Y3RvciogTmF0aXZlVHlw
ZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VGVzdE5hbWVkQ29uc3RydWN0b3I+OjpOYXRpdmVUeXBlIHRvV3JhcHBlZDxUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmgJ
KHJldmlzaW9uIDIwNDUwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDUgKzgy
LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBSZWY8VGVzdE5vbmRldGVybWluaXN0aWM+JiYpOwogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROb25kZXRlcm1pbmlzdGljPiYmIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFz
ZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0Tm9uZGV0ZXJtaW5pc3RpYz4geworICAgIHR5cGVk
ZWYgVGVzdE5vbmRldGVybWluaXN0aWMqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxp
bmUgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROb25kZXRlcm1pbmlz
dGljPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8VGVzdE5vbmRldGVybWluaXN0aWM+KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNSArMTAwLDEw
IEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdE9iaj4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQ
dHI8VGVzdE9iaj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE9i
aj4geworICAgIHR5cGVkZWYgVGVzdE9iaiogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlu
bGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE9iaj46Ok5hdGl2
ZVR5cGUgdG9XcmFwcGVkPFRlc3RPYmo+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmgJKHJldmlzaW9uIDIwNDUwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDUgKzgyLDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYpOwogaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9
CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycz4geworICAgIHR5cGVkZWYgVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPjo6TmF0aXZl
VHlwZSB0b1dyYXBwZWQ8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjA0NTAxKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBhdXRvIHNlcXVlbmNlT2ZTdHJpbmdzID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9O
YXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIG9iamVjdCA9IFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpjcmVhdGUoc2VxdWVuY2VPZlN0cmlu
Z3MpOworICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSkpOwogfQogCkBAIC04Miw3ICs4Miw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBhdXRvIHN0
cmluZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKHN0cmluZyk7CisgICAgYXV0byBvYmplY3Qg
PSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUo
c3RyaW5nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTTmV3bHlD
cmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3Qp
KSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgJKHJldmlzaW9uIDIwNDUwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDUgKzgyLDEwIEBAIGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+JiYpOwogaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4geworICAgIHR5cGVkZWYgVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBp
bmxpbmUgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRl
QnVpbHRpbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWls
dGlucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw1ICs4OSwxMCBAQCBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RPdmVycmlkZUJ1aWx0
aW5zPiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0
T3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051
bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VGVzdE92ZXJyaWRlQnVpbHRpbnM+IHsKKyAgICB0eXBlZGVmIFRlc3RPdmVycmlkZUJ1aWx0aW5z
KiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0T3ZlcnJpZGVCdWlsdGlucz46Ok5hdGl2ZVR5cGUgdG9XcmFw
cGVkPFRlc3RPdmVycmlkZUJ1aWx0aW5zPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6dG9XcmFwcGVkKHZhbHVlKTsg
fQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJldmlzaW9uIDIwNDUwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTEg
QEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiYmKTsKIGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiB7CisgICAgdHlwZWRlZiBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dG9XcmFwcGVkKHZhbHVl
KTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksNyArNDk5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHNlcXVlbmNl
QXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFs
aXplZFNjcmlwdFZhbHVlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBz
ZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubWV0aG9kV2l0aFNlcXVl
bmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CkBAIC02MDUsNyArNjA1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQ
dHJOYXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpTVGVzdEV2ZW50VGFyZ2V0Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJy
YXk8UmVmUHRyPFRlc3RFdmVudFRhcmdldD4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
Qm9vbGVhbihpbXBsLmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUo
c2VxdWVuY2VBcmcpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaAkocmV2aXNpb24gMjA0NTAxKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDUgKzg0LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFR5cGVkZWZzPiYmKTsKIGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0VHlwZWRlZnM+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RUeXBlZGVmcz4geworICAg
IHR5cGVkZWYgVGVzdFR5cGVkZWZzKiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5l
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0VHlwZWRlZnM+OjpOYXRp
dmVUeXBlIHRvV3JhcHBlZDxUZXN0VHlwZWRlZnM+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RUeXBlZGVmczo6dG9XcmFwcGVkKHZhbHVlKTsgfQor
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oCShyZXZpc2lvbiAyMDQ1
MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNSArODUsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxhdHRyaWJ1dGU+JiYpOwogaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPGF0dHJpYnV0ZT4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8YXR0cmlidXRlPiB7CisgICAgdHlwZWRl
ZiBhdHRyaWJ1dGUqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPGF0dHJpYnV0ZT46Ok5hdGl2ZVR5cGUgdG9XcmFw
cGVkPGF0dHJpYnV0ZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTYXR0cmlidXRlOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
cmVhZG9ubHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNyZWFkb25seS5oCShyZXZpc2lvbiAyMDQ1MDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw1ICs4MiwxMCBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
CiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUmVmPHJlYWRvbmx5PiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxyZWFkb25seT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05l
d2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDog
SlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8cmVhZG9ubHk+IHsKKyAgICB0eXBlZGVmIHJlYWRvbmx5KiBOYXRpdmVUeXBlOwor
fTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxyZWFkb25seT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPHJlYWRvbmx5PihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNyZWFkb25seTo6dG9XcmFwcGVkKHZh
bHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286334</attachid>
            <date>2016-08-17 15:48:06 -0700</date>
            <delta_ts>2016-08-31 10:39:36 -0700</delta_ts>
            <desc>Updated for ToT</desc>
            <filename>bug-160926-20160817154618.patch</filename>
            <type>text/plain</type>
            <size>37927</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA4LTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHRvTmF0aXZlQXJyYXkg
YW5kIHRvUmVmUHRyTmF0aXZlQXJyYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDkyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1lcmdlZCB0b05hdGl2ZUFycmF5IGFuZCB0b1JlZlB0ck5hdGl2ZUFy
cmF5IGludG8gdG9OYXRpdmVBcnJheS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3RhbmRh
bG9uZSB0ZW1wbGF0ZSAidG9XcmFwcGVkIiBmdW5jdGlvbiB3aGljaCBjYW4gY29udmVydCBKU1Zh
bHVlIHRvIHRoZSB3cmFwcGVkIHR5cGUKKyAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lm
eSB0aGUgY29ycmVzcG9uZGluZyB0aGUgSlMgdHlwZSAoc3RpbGwgcmVxdWlyZXMgdGhlIGFwcHJv
cHJpYXRlIGhlYWRlciBmaWxlKQorICAgICAgICBhbG9uZyB3aXRoIGl0cyBoZWxwZXIgdHJhaXRz
IGNsYXNzIFdyYXBwZXJDb252ZXJ0VHJhaXRzIGJlY2F1c2Ugc29tZSB0b1dyYXBwZWQgZnVuY3Rp
b24gc3VjaCBhcyB0aGUgb25lCisgICAgICAgIGZvciBFdmVudExpc3RlbmVyIHVzZXMgUmVmUHRy
IGFzIHRoZSByZXR1cm4gdHlwZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0eXBlLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOYXRpdmVWYWx1ZVRyYWl0c0Jhc2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2
ZVZhbHVlVHJhaXRzPFN0cmluZz46Om5hdGl2ZVZhbHVlKTogUmVwbGFjZWQgdGhlIHRoaXJkIGFy
Z3VtZW50IGJ5IHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVWYWx1
ZVRyYWl0czx1bnNpZ25lZD46Om5hdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpOYXRpdmVWYWx1ZVRyYWl0czxmbG9hdD46Om5hdGl2ZVZhbHVlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOYXRpdmVWYWx1ZVRyYWl0czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVUcmFpdHM8UmVmUHRyPFQ+Pjo6bmF0aXZl
VmFsdWUpOiBEaXR0by4gVXNlIHRoZSBuZXdseSBhZGRlZCB0b1dyYXBwZWQgZnVuY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlOjp0b1JlZlB0ck5hdGl2ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOiBNb3ZlZCB0aGUgY2hlY2sgZm9yIGV4Y2VwdGlvbnMg
aGVyZSBpbnN0ZWFkIG9mIGNoZWNraW5nIGl0IGluIG5hdGl2ZVZhbHVlIGFuZAorICAgICAgICBh
c3NlcnRpbmcgaXQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJndW1lbnRzKTog
VXBkYXRlZCBwZXIgTmF0aXZlVmFsdWVUcmFpdHMgY2hhbmdlLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzKTogQWRkZWQuIFRoaXMgdHJhaXRzIGNsYXNzIGRlZmluZXMgdGhlIHJldHVybiB0
eXBlIGZvciB0b1dyYXBwZWQKKyAgICAgICAgZnVuY3Rpb24gYmVjYXVzZSBzb21lIHRvV3JhcHBl
ZCBmdW5jdGlvbiB1c2VzIFJlZlB0ciBpbnN0ZWFkIG9mIGEgcG9pbnRlciB0eXBlLgorICAgICAg
ICAoV2ViQ29yZTo6dG9XcmFwcGVkKTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IEdlbmVyYXRl
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0cyBhbmQgYSBzdGFuZGFsb25lIHRvV3JhcHBlZCBm
dW5jdGlvbi4gCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBVc2UgdGhlIHVuaWZpZWQgdG9O
YXRpdmVBcnJheSBmdW5jdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNJbnRlcmZhY2VOYW1lLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEFjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0
b21OYW1lZEdldHRlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SXRlcmFibGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5Lmg6CisKIDIwMTYtMDgt
MTcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgYSBjb3VwbGUgb2YgdW51c2VkIFdLU0kgZnVuY3Rpb24gcG9pbnRlcnMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMDQ1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg1LDggKzI4NSw4IEBAIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1VpbnQzMkFy
cmF5KEoKIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9GbG9hdDMyQXJyYXkoSlNDOjpKU1Zh
bHVlKTsKIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9hdDY0QXJyYXkoSlNDOjpKU1Zh
bHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVm
UHRyPFQ+PiB0b1JlZlB0ck5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRp
dmVWYWx1ZVRyYWl0czsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIE5hdGl2ZVZhbHVl
VHJhaXRzPFQ+OjpSZXN1bHRUeXBlIHRvTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPFQ+IHRvTmF0aXZlQXJndW1l
bnRzKEpTQzo6RXhlY1N0YXRlJiwgc2l6ZV90IHN0YXJ0SW5kZXggPSAwKTsKIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCkBAIC02NjIsNzEg
KzY2Miw2NiBAQCBpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyCiBpbmxp
bmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRv
cj4odmFsdWUpOyB9CiBpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zsb2F0NjRB
cnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDY0QWRhcHRvcj4odmFsdWUpOyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgTmF0
aXZlVmFsdWVUcmFpdHNCYXNlIHsKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gV1RGOjpWZWN0b3I8
VD47Cit9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxTdHJpbmc+IHsK
LSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBTdHJpbmcmIGluZGV4ZWRWYWx1ZSkKK3RlbXBsYXRlPD4g
c3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz4gOiBOYXRpdmVWYWx1ZVRyYWl0c0Jhc2U8
U3RyaW5nPiB7CisgICAgc3RhdGljIGlubGluZSBTdHJpbmcgbmF0aXZlVmFsdWUoSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogICAgIHsKLSAgICAgICAgaW5kZXhl
ZFZhbHVlID0ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgfQogfTsK
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+IHsKLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlLCB1bnNpZ25lZCYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBzdHJ1
Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+IDogTmF0aXZlVmFsdWVUcmFpdHNCYXNlPHVu
c2lnbmVkPiB7CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBuYXRpdmVWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRl
eGVkVmFsdWUgPSBqc1ZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVj
LmhhZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4ganNWYWx1ZS50b1VJbnQzMigmZXhlYyk7
CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+
IHsKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9hdCYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8
PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+IDogTmF0aXZlVmFsdWVUcmFpdHNCYXNl
PGZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVk
VmFsdWUgPSBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFk
RXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwogICAg
IH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewot
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNDOjpKU1ZhbHVlIGpzVmFsdWUsIGRvdWJsZSYgaW5kZXhlZFZhbHVlKQordGVtcGxhdGU8PiBz
dHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZG91YmxlPiA6IE5hdGl2ZVZhbHVlVHJhaXRzQmFzZTxk
b3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewotICAgICAgICBpbmRleGVk
VmFsdWUgPSBqc1ZhbHVlLnRvTnVtYmVyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhh
ZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4ganNWYWx1ZS50b051bWJlcigmZXhlYyk7CiAg
ICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBWZWN0b3I8UmVm
UHRyPFQ+PiB0b1JlZlB0ck5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRy
PFQ+PigpOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRy
YWl0czxSZWZQdHI8VD4+IHsKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gVmVjdG9yPFJlZlB0cjxU
Pj47CiAKLSAgICBWZWN0b3I8UmVmUHRyPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFi
bGUoJmV4ZWMsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYsIEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHMo
SlNUOjppbmZvKCkpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChKU1Q6OnRvV3JhcHBlZChq
c1ZhbHVlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlw
ZUVycm9yKCpzdGF0ZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAgICBzdGF0
aWMgaW5saW5lIFJlZlB0cjxUPiBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFQ+IHZhbHVlID0gdG9X
cmFwcGVkPFQ+KHN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAg
ICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3Ioc3RhdGUpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KK307
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBOYXRpdmVWYWx1ZVRyYWl0czxUPjo6UmVzdWx0VHlwZSB0b05hdGl2ZUFycmF5KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgdHlwZWRlZiBO
YXRpdmVWYWx1ZVRyYWl0czxUPiBUcmFpdHNUeXBlOworCisgICAgdHlwZW5hbWUgVHJhaXRzVHlw
ZTo6UmVzdWx0VHlwZSByZXN1bHQ7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8
VD4oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBWZWN0b3I8VD4gcmVz
dWx0OwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6
Vk0mLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAg
ICAgIFQgY29udmVydGVkVmFsdWU7Ci0gICAgICAgIGlmICghTmF0aXZlVmFsdWVUcmFpdHM8VD46
Om5hdGl2ZVZhbHVlKCpzdGF0ZSwganNWYWx1ZSwgY29udmVydGVkVmFsdWUpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIXN0YXRlLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgIGZvckVhY2hJbkl0ZXJhYmxl
KCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBUcmFpdHNU
eXBlOjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICBpZiAoIXZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0MSwxMCArNzM2LDEwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUEKICAgICB0eXBlZGVmIE5hdGl2ZVZhbHVl
VHJhaXRzPFQ+IFRyYWl0c1R5cGU7CiAKICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFQgaW5kZXhWYWx1ZTsKLSAgICAgICAgaWYgKCFU
cmFpdHNUeXBlOjpuYXRpdmVWYWx1ZShleGVjLCBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KGkpLCBp
bmRleFZhbHVlKSkKKyAgICAgICAgYXV0byBpbmRleFZhbHVlID0gVHJhaXRzVHlwZTo6bmF0aXZl
VmFsdWUoZXhlYywgZXhlYy51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxUPigpOwotICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUpOworICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoaW5kZXhWYWx1ZSkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgJ
KHJldmlzaW9uIDIwNDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3Jh
cHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHByaXZhdGU6CiAgICAgUmVm
PEltcGxlbWVudGF0aW9uQ2xhc3M+IG1fd3JhcHBlZDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IEltcGxlbWVudGF0aW9uQ2xhc3M+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SW1wbGVtZW50YXRpb25DbGFzcz46Ok5hdGl2ZVR5cGUgdG9X
cmFwcGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwogdGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcywgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KIHN0cnVjdCBKU0RPTU9iamVjdElu
c3BlY3RvciB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTE1NDAsNiArMTU0MCwyMyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgImJvb2wgZmlsbCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJm
YWNlTmFtZX1Jbml0JiwgSlNEaWN0aW9uYXJ5Jik7XG5cbiIpOwogICAgIH0KIAorICAgIGlmIChT
aG91bGRHZW5lcmF0ZVRvV3JhcHBlZCgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSkgeworICAgICAg
ICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGUoJGludGVyZmFjZSwgJGltcGxUeXBlKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czwkaW1wbFR5cGU+IHtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHR5cGVkZWYgJG5hdGl2ZVR5cGUgTmF0aXZlVHlwZTtcbiIpOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOworCisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJ0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8JGltcGxUeXBlPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8JGltcGxUeXBlPiIpOwor
ICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tVG9O
YXRpdmVPYmplY3QifSkgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gJHtjbGFzc05h
bWV9Ojp0b1dyYXBwZWQoc3RhdGUsIHZhbHVlKTsgfVxuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuICR7Y2xhc3NOYW1lfTo6dG9XcmFwcGVkKHZhbHVlKTsg
fVxuXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01XcmFw
cGVyLmgifSA9IDE7CisgICAgfQorCisKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29k
ZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiXG59IC8vIG5hbWVzcGFjZSBXZWJDb3JlXG4iKTsKICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKQEAgLTQ2NjMsMTEgKzQ2ODAsOSBAQCBzdWIgSlNWYWx1
ZVRvTmF0aXZlCiAKICAgICBteSAkc2VxdWVuY2VUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNl
cXVlbmNlVHlwZSgkdHlwZSk7CiAgICAgaWYgKCRzZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1JlZlB0clR5cGUoJHNlcXVlbmNlVHlwZSkpIHsKLSAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR7c2VxdWVuY2VUeXBlfS5oIik7Ci0gICAgICAgICAg
ICByZXR1cm4gKCJ0b1JlZlB0ck5hdGl2ZUFycmF5PCR7c2VxdWVuY2VUeXBlfSwgSlMke3NlcXVl
bmNlVHlwZX0+KCpzdGF0ZSwgJHZhbHVlKSIsIDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAoInRvTmF0aXZlQXJyYXk8IiAuIEdldE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkc2VxdWVuY2VU
eXBlKSAuICI+KCpzdGF0ZSwgJHZhbHVlKSIsIDEpOworICAgICAgICBteSAkbmF0aXZlVHlwZSA9
IEdldE5hdGl2ZVZlY3RvcklubmVyVHlwZSgkc2VxdWVuY2VUeXBlKTsKKyAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIkpTJHtzZXF1ZW5jZVR5cGV9LmgiKSBpZiAkY29kZUdlbmVyYXRvci0+SXNS
ZWZQdHJUeXBlKCRzZXF1ZW5jZVR5cGUpOworICAgICAgICByZXR1cm4gKCJ0b05hdGl2ZUFycmF5
PCRuYXRpdmVUeXBlPigqc3RhdGUsICR2YWx1ZSkiLCAxKTsKICAgICB9CiAKICAgICByZXR1cm4g
KCR2YWx1ZSwgMCkgaWYgJHR5cGUgZXEgImFueSI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5oCShy
ZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNJbnRlcmZhY2VOYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDUgKzg1LDEwIEBAIGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8SW50
ZXJmYWNlTmFtZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQ
dHI8SW50ZXJmYWNlTmFtZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051
bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
SW50ZXJmYWNlTmFtZT4geworICAgIHR5cGVkZWYgSW50ZXJmYWNlTmFtZSogTmF0aXZlVHlwZTsK
K307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SW50ZXJmYWNlTmFtZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPEludGVyZmFjZU5hbWU+KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0ludGVyZmFjZU5h
bWU6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCShyZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDUgKzg0LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEFjdGl2ZURPTU9iamVjdD4m
Jik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEFjdGl2
ZURPTU9iamVjdD4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEFj
dGl2ZURPTU9iamVjdD4geworICAgIHR5cGVkZWYgVGVzdEFjdGl2ZURPTU9iamVjdCogTmF0aXZl
VHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VGVzdEFjdGl2ZURPTU9iamVjdD46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RB
Y3RpdmVET01PYmplY3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDUgKzg0LDEwIEBAIGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYgaW1wbCkg
eyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1w
bC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcj4geworICAgIHR5cGVkZWYgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+OjpOYXRp
dmVUeXBlIHRvV3JhcHBlZDxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dG9XcmFwcGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oCShyZXZpc2lvbiAyMDQ1NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNSAr
ODQsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQwogLy8gQ3Vz
dG9tIGNvbnN0cnVjdG9yCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoSlNDOjpFeGVj
U3RhdGUmKTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD4geworICAgIHR5cGVk
ZWYgVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KiBOYXRpdmVUeXBl
OworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+OjpOYXRpdmVU
eXBlIHRvV3JhcHBlZDxUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdDo6dG9XcmFwcGVkKHZhbHVlKTsgfQor
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1l
ZEdldHRlci5oCShyZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtODgsNSArODgsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjxUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+JiYpOwogaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RDdXN0b21OYW1lZEdldHRlcj4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEN1c3RvbU5hbWVkR2V0dGVy
PiB7CisgICAgdHlwZWRlZiBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIE5hdGl2ZVR5cGU7Cit9Owor
dGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRl
c3RDdXN0b21OYW1lZEdldHRlcj46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RDdXN0b21OYW1l
ZEdldHRlcj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw1ICs4NiwxMCBA
QCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDCiAKIGJvb2wgZmlsbFRl
c3RFdmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmLCBKU0RpY3Rp
b25hcnkmKTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3RFdmVudENvbnN0cnVjdG9yPiB7CisgICAgdHlwZWRlZiBUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEV2ZW50Q29uc3RydWN0b3I+OjpOYXRpdmVUeXBlIHRvV3Jh
cHBlZDxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnRvV3JhcHBlZCh2YWx1ZSk7
IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQu
aAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRl
ICJKU0V2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCiAKQEAgLTc4
LDUgKzc5LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBSZWY8VGVzdEV2ZW50VGFyZ2V0PiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RFdmVudFRhcmdldD4geworICAgIHR5cGVkZWYgVGVzdEV2
ZW50VGFyZ2V0KiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RXZlbnRUYXJnZXQ+OjpOYXRpdmVUeXBlIHRv
V3JhcHBlZDxUZXN0RXZlbnRUYXJnZXQ+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU1Rlc3RFdmVudFRhcmdldDo6dG9XcmFwcGVkKHZhbHVlKTsgfQorCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgJKHJldmlzaW9u
IDIwNDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODUsNSArODUsMTAgQEAgaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0RXhjZXB0
aW9uPiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0
RXhjZXB0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9
CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RXhj
ZXB0aW9uPiB7CisgICAgdHlwZWRlZiBUZXN0RXhjZXB0aW9uKiBOYXRpdmVUeXBlOworfTsKK3Rl
bXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0
RXhjZXB0aW9uPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8VGVzdEV4Y2VwdGlvbj4oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6dG9X
cmFwcGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNSArODIsMTAgQEAgaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXds
eUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpT
Qzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPiB7CisgICAgdHlwZWRlZiBUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+OjpO
YXRpdmVUeXBlIHRvV3JhcHBlZDxUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw1ICsxMTIsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3RHbG9iYWxPYmplY3Q+IHsKKyAgICB0eXBlZGVmIFRlc3RHbG9i
YWxPYmplY3QqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RHbG9iYWxPYmplY3Q+OjpOYXRpdmVUeXBlIHRv
V3JhcHBlZDxUZXN0R2xvYmFsT2JqZWN0PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNUZXN0R2xvYmFsT2JqZWN0Ojp0b1dyYXBwZWQodmFsdWUpOyB9CisK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaAkocmV2aXNp
b24gMjA0NTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDExIEBAIGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdElu
dGVyZmFjZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdEludGVyZmFjZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwo
KTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVz
dEludGVyZmFjZT4geworICAgIHR5cGVkZWYgVGVzdEludGVyZmFjZSogTmF0aXZlVHlwZTsKK307
Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VGVzdEludGVyZmFjZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RJbnRlcmZhY2U+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RJbnRlcmZhY2U6
OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJdGVyYWJsZS5oCShyZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNSArODIsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgog
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0SXRlcmFibGU+JiYpOwogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmUHRyPFRlc3RJdGVyYWJsZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxs
KCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VGVzdEl0ZXJhYmxlPiB7CisgICAgdHlwZWRlZiBUZXN0SXRlcmFibGUq
IE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3RJdGVyYWJsZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RJ
dGVyYWJsZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
VGVzdEl0ZXJhYmxlOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCShy
ZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw1
ICs4MiwxMCBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqCiBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmKTsKIGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI+IHsKKyAgICB0eXBlZGVmIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBOYXRp
dmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46Ok5hdGl2ZVR5cGUgdG9XcmFw
cGVkPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6dG9XcmFw
cGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtODMsNSArODMsMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4mJik7CiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkQ29uc3Ry
dWN0b3I+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGds
b2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZENv
bnN0cnVjdG9yPiB7CisgICAgdHlwZWRlZiBUZXN0TmFtZWRDb25zdHJ1Y3RvciogTmF0aXZlVHlw
ZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VGVzdE5hbWVkQ29uc3RydWN0b3I+OjpOYXRpdmVUeXBlIHRvV3JhcHBlZDxUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmgJ
KHJldmlzaW9uIDIwNDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDUgKzgy
LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBSZWY8VGVzdE5vbmRldGVybWluaXN0aWM+JiYpOwogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROb25kZXRlcm1pbmlzdGljPiYmIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFz
ZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0Tm9uZGV0ZXJtaW5pc3RpYz4geworICAgIHR5cGVk
ZWYgVGVzdE5vbmRldGVybWluaXN0aWMqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxp
bmUgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROb25kZXRlcm1pbmlz
dGljPjo6TmF0aXZlVHlwZSB0b1dyYXBwZWQ8VGVzdE5vbmRldGVybWluaXN0aWM+KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNSArMTAwLDEw
IEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdE9iaj4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQ
dHI8VGVzdE9iaj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE9i
aj4geworICAgIHR5cGVkZWYgVGVzdE9iaiogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlu
bGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE9iaj46Ok5hdGl2
ZVR5cGUgdG9XcmFwcGVkPFRlc3RPYmo+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmgJKHJldmlzaW9uIDIwNDU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDUgKzgyLDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYpOwogaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9
CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycz4geworICAgIHR5cGVkZWYgVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMqIE5hdGl2ZVR5cGU7Cit9OwordGVtcGxhdGU8PiBpbmxpbmUgdHlwZW5hbWUgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPjo6TmF0aXZl
VHlwZSB0b1dyYXBwZWQ8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjp0b1dyYXBwZWQodmFsdWUpOyB9CisKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5oCShyZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw1ICs4MiwxMCBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlPiYmKTsKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2U+IHsKKyAgICB0eXBlZGVmIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlKiBOYXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1l
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZT46Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6dG9XcmFwcGVk
KHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJyaWRlQnVpbHRpbnMuaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODksNSArODksMTAgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0T3ZlcnJpZGVCdWlsdGlucz4mJik7CiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE92ZXJyaWRlQnVpbHRp
bnM+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVycmlkZUJ1
aWx0aW5zPiB7CisgICAgdHlwZWRlZiBUZXN0T3ZlcnJpZGVCdWlsdGlucyogTmF0aXZlVHlwZTsK
K307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VGVzdE92ZXJyaWRlQnVpbHRpbnM+OjpOYXRpdmVUeXBlIHRvV3JhcHBlZDxUZXN0T3ZlcnJp
ZGVCdWlsdGlucz4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCShyZXZpc2lvbiAyMDQ1NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDExIEBAIGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZT4geworICAgIHR5cGVkZWYgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46
Ok5hdGl2ZVR5cGUgdG9XcmFwcGVkPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24g
MjA0NTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDcgKzQ5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvUmVmUHRy
TmF0aXZlQXJyYXk8U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0
b05hdGl2ZUFycmF5PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhXVEZNb3Zl
KHNlcXVlbmNlQXJnKSkpOwpAQCAtNjA1LDcgKzYwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvUmVmUHRyTmF0aXZlQXJyYXk8
VGVzdEV2ZW50VGFyZ2V0LCBKU1Rlc3RFdmVudFRhcmdldD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0b05hdGl2ZUFycmF5PFJlZlB0cjxUZXN0
RXZlbnRUYXJnZXQ+Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5j
YWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShXVEZNb3ZlKHNlcXVlbmNlQXJnKSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmgJKHJldmlzaW9uIDIwNDU3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw1ICs4NCwxMCBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqCiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RUeXBlZGVmcz4mJik7CiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdFR5cGVkZWZzPiYmIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFz
ZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0VHlwZWRlZnM+IHsKKyAgICB0eXBlZGVmIFRlc3RU
eXBlZGVmcyogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+IGlubGluZSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFR5cGVkZWZzPjo6TmF0aXZlVHlwZSB0b1dyYXBw
ZWQ8VGVzdFR5cGVkZWZzPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNUZXN0VHlwZWRlZnM6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNhdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDUgKzg1LDEwIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSoKIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8YXR0cmlidXRlPiYmKTsKIGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxhdHRyaWJ1dGU+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPGF0dHJpYnV0ZT4geworICAgIHR5cGVkZWYgYXR0cmlidXRlKiBO
YXRpdmVUeXBlOworfTsKK3RlbXBsYXRlPD4gaW5saW5lIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxhdHRyaWJ1dGU+OjpOYXRpdmVUeXBlIHRvV3JhcHBlZDxhdHRyaWJ1dGU+
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU2F0dHJpYnV0
ZTo6dG9XcmFwcGVkKHZhbHVlKTsgfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVh
ZG9ubHkuaAkocmV2aXNpb24gMjA0NTc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNSArODIsMTAg
QEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgogSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZjxyZWFkb25seT4mJik7CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQ
dHI8cmVhZG9ubHk+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7
IH0KIAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPHJlYWRv
bmx5PiB7CisgICAgdHlwZWRlZiByZWFkb25seSogTmF0aXZlVHlwZTsKK307Cit0ZW1wbGF0ZTw+
IGlubGluZSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8cmVhZG9ubHk+OjpO
YXRpdmVUeXBlIHRvV3JhcHBlZDxyZWFkb25seT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTcmVhZG9ubHk6OnRvV3JhcHBlZCh2YWx1ZSk7IH0KKwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>