<?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>149975</bug_id>
          
          <creation_ts>2015-10-09 16:51:06 -0700</creation_ts>
          <short_desc>ES6 Fix TypedArray constructors.</short_desc>
          <delta_ts>2016-01-08 14:24:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1132044</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-09 16:51:06 -0700</bug_when>
    <thetext>ES6 Fix TypedArray constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132483</commentid>
    <comment_count>1</comment_count>
      <attachid>262922</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-12 14:16:59 -0700</bug_when>
    <thetext>Created attachment 262922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132516</commentid>
    <comment_count>2</comment_count>
      <attachid>262922</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-12 15:27:51 -0700</bug_when>
    <thetext>Comment on attachment 262922
Patch

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

Looks good overall. I think I found some bugs.

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:37
&gt; +        throw new @TypeError(&quot;TypedArray.from requires its this argument subclass a TypedArray constructor&quot;);

to subclass?

be a subclass of?

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:51
&gt; +    let mapFn = arguments.length &gt; 1 ? arguments[1] : undefined;

This is the same as arguments[1].

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:53
&gt; +    let thisArg;

It seems like this function will end up reading thisArg uninitialized (TDZ). You should fix this and add a test.

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:57
&gt; +    if (mapFn !== undefined) {
&gt; +        if (typeof mapFn !== &quot;function&quot;)
&gt; +            throw new @TypeError(&quot;TypedArray.from requires that the second argument, when provided, be a function&quot;);

You&apos;re supposed to throw when the second argument is provided and is undefined. But I don&apos;t think this code will do so because it translates missing into undefined. Please fix and add a test case.

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:71
&gt; +        let accumulator = [];

Why aren&apos;t we allowed to put to the result eagerly? We control the constructor function and the allocated object, so it should be fine.

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:83
&gt; +        // Since for-of loop once more looks up the @@iterator property of a given iterable,
&gt; +        // it could be observable if the user defines a getter for @@iterator.
&gt; +        // To avoid this situation, we define a wrapper object that @@iterator just returns a given iterator.
&gt; +        let wrapper = {
&gt; +            [@symbolIterator]() {
&gt; +                return iterator;
&gt; +            }
&gt; +        };

This is pretty sick :(.

&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:102
&gt; +        for (let i = 0; i &lt; k; i++) {
&gt; +            result[i] = accumulator[i];
&gt; +        }

No braces for one line loops.

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:129
&gt; +            // Here we make a slight optimization. If the iterator is a known iterator and length does not have a getter
&gt; +            // then we can just not use the iterator and loop on the length instead.

This comment would read more clearly if it said &quot;We only need to do this slow thing...&quot; instead of the other way around, since the code below it is the slow thing.

You should factor the slow thing into a helper function.

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:150
&gt; +                Vector&lt;JSValue, 16&gt; storage;

This is not GC-safe. JSValues in malloc memory are not scanned.

You need to use Vector&lt;Strong&lt;T&gt;&gt; or MarkedArgumentBuffer or something.

Same question here about why do we need a temporary copy.

&gt; Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.cpp:86
&gt; +    while (true) {

I think a for loop would read better here, and it&apos;s how we usually walk the prototype chain:

for ( ; !value.isNull(); value = jsCast&lt;JSObject*&gt;(value)-&gt;prototype())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132584</commentid>
    <comment_count>3</comment_count>
      <attachid>262922</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-12 17:07:41 -0700</bug_when>
    <thetext>Comment on attachment 262922
Patch

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

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:37
&gt;&gt; +        throw new @TypeError(&quot;TypedArray.from requires its this argument subclass a TypedArray constructor&quot;);
&gt; 
&gt; to subclass?
&gt; 
&gt; be a subclass of?

Fixed.

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:51
&gt;&gt; +    let mapFn = arguments.length &gt; 1 ? arguments[1] : undefined;
&gt; 
&gt; This is the same as arguments[1].

Fixed.

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:53
&gt;&gt; +    let thisArg;
&gt; 
&gt; It seems like this function will end up reading thisArg uninitialized (TDZ). You should fix this and add a test.

&quot;let thisArg&quot; is implicitly the same as &quot;let thisArg = undefined&quot;. The TDZ only kicks in if you use the variable before it&apos;s initialized. Perhaps I should be explicit and put the &quot;= undefined&quot; in there but I believe this is correct as is.

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:57
&gt;&gt; +            throw new @TypeError(&quot;TypedArray.from requires that the second argument, when provided, be a function&quot;);
&gt; 
&gt; You&apos;re supposed to throw when the second argument is provided and is undefined. But I don&apos;t think this code will do so because it translates missing into undefined. Please fix and add a test case.

From the spec (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%typedarray%.from):
If mapfn was supplied, let f be mapfn; otherwise let f be undefined.
If f is not undefined, then
If IsCallable(f) is false, throw a TypeError exception.

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:71
&gt;&gt; +        let accumulator = [];
&gt; 
&gt; Why aren&apos;t we allowed to put to the result eagerly? We control the constructor function and the allocated object, so it should be fine.

I suppose we could do that, I didn&apos;t do it because I&apos;d have to dig through the logic of how we decide where to put the backing buffer. It might not be that bad though. Is there any concern about wasting memory at the end of the buffer when the accumulation is done (i.e. should I trim my array buffer at the end)? I would imagine TypedArrays tend to be long lived but I&apos;m not sure if the memory waste is worse than the cost of an extra memcpy.

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:83
&gt;&gt; +        };
&gt; 
&gt; This is pretty sick :(.

D:

&gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:102
&gt;&gt; +        }
&gt; 
&gt; No braces for one line loops.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/JSTypedArrayViewConstructor.cpp:86
&gt;&gt; +    while (true) {
&gt; 
&gt; I think a for loop would read better here, and it&apos;s how we usually walk the prototype chain:
&gt; 
&gt; for ( ; !value.isNull(); value = jsCast&lt;JSObject*&gt;(value)-&gt;prototype())

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132804</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-13 11:01:47 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:53
&gt; &gt;&gt; +    let thisArg;
&gt; &gt; 
&gt; &gt; It seems like this function will end up reading thisArg uninitialized (TDZ). You should fix this and add a test.
&gt; 
&gt; &quot;let thisArg&quot; is implicitly the same as &quot;let thisArg = undefined&quot;. The TDZ
&gt; only kicks in if you use the variable before it&apos;s initialized. Perhaps I
&gt; should be explicit and put the &quot;= undefined&quot; in there but I believe this is
&gt; correct as is.

Oops! No, I think &quot;let thisArg&quot; is OK -- I just misunderstood the feature.

&gt; &gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:57
&gt; &gt;&gt; +            throw new @TypeError(&quot;TypedArray.from requires that the second argument, when provided, be a function&quot;);
&gt; &gt; 
&gt; &gt; You&apos;re supposed to throw when the second argument is provided and is undefined. But I don&apos;t think this code will do so because it translates missing into undefined. Please fix and add a test case.
&gt; 
&gt; From the spec
&gt; (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%typedarray%.
&gt; from):
&gt; If mapfn was supplied, let f be mapfn; otherwise let f be undefined.
&gt; If f is not undefined, then
&gt; If IsCallable(f) is false, throw a TypeError exception.

Wow. OK.

&gt; &gt;&gt; Source/JavaScriptCore/builtins/TypedArrayConstructor.js:71
&gt; &gt;&gt; +        let accumulator = [];
&gt; &gt; 
&gt; &gt; Why aren&apos;t we allowed to put to the result eagerly? We control the constructor function and the allocated object, so it should be fine.
&gt; 
&gt; I suppose we could do that, I didn&apos;t do it because I&apos;d have to dig through
&gt; the logic of how we decide where to put the backing buffer. It might not be
&gt; that bad though. Is there any concern about wasting memory at the end of the
&gt; buffer when the accumulation is done (i.e. should I trim my array buffer at
&gt; the end)? I would imagine TypedArrays tend to be long lived but I&apos;m not sure
&gt; if the memory waste is worse than the cost of an extra memcpy.

You explained this once before and I forgot: We need a temporary accumulator because we don&apos;t know how much the iterator will iterate, so we either need a temporary accumulator or an oversized typed array.

I prefer your approach: It&apos;s better to have a typed array of the right size since the result might be large.

So, all you need to do is to fix the C++ version to use a GC-safe accumulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132932</commentid>
    <comment_count>5</comment_count>
      <attachid>263026</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-13 15:09:46 -0700</bug_when>
    <thetext>Created attachment 263026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132933</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-13 15:12:07 -0700</bug_when>
    <thetext>Addressed Geoff&apos;s comments and added new tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132996</commentid>
    <comment_count>7</comment_count>
      <attachid>263026</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-13 17:50:26 -0700</bug_when>
    <thetext>Comment on attachment 263026
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133212</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-14 12:07:46 -0700</bug_when>
    <thetext>Committed r191059: &lt;http://trac.webkit.org/changeset/191059&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133253</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-10-14 13:46:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r191059: &lt;http://trac.webkit.org/changeset/191059&gt;

It broke the Apple Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133263</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2015-10-14 14:07:46 -0700</bug_when>
    <thetext>Try doing a clean build. There seems to be a recurring problem that the auto generated file containing the builtin JS functions doesn&apos;t get re-built when a new file is added. I&apos;m not sure why this happens (it only happens when a new file is added) since I added the .js file as a dependency of the generator CMake command.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133266</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-10-14 14:22:09 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Try doing a clean build. There seems to be a recurring problem that the auto
&gt; generated file containing the builtin JS functions doesn&apos;t get re-built when
&gt; a new file is added. I&apos;m not sure why this happens (it only happens when a
&gt; new file is added) since I added the .js file as a dependency of the
&gt; generator CMake command.

Yeah, I just confirmed this locally. I&apos;ll log onto those bots and see if I can clean them up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133421</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-10-15 02:03:31 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Try doing a clean build. There seems to be a recurring problem that the auto
&gt; &gt; generated file containing the builtin JS functions doesn&apos;t get re-built when
&gt; &gt; a new file is added. I&apos;m not sure why this happens (it only happens when a
&gt; &gt; new file is added) since I added the .js file as a dependency of the
&gt; &gt; generator CMake command.
&gt; 
&gt; Yeah, I just confirmed this locally. I&apos;ll log onto those bots and see if I
&gt; can clean them up.

In this case it is a build system bug, which should be fixed as soon 
as possible to avoid similar false positive failures in the future.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262922</attachid>
            <date>2015-10-12 14:16:59 -0700</date>
            <delta_ts>2015-10-13 15:09:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149975-20151012141625.patch</filename>
            <type>text/plain</type>
            <size>51131</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZmE2OTIwOGM2NzZlOGNlM2I2MWY4YmJmZDQ1OWE0N2JmNGNjODhiLi4wZGQyOTQ5MDdlM2E1NjA1
OTJmZmU2MDM2OWQxZjliOTU1ZTQwNmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OCBAQAorMjAxNS0xMC0xMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBFUzYgRml4IFR5cGVkQXJyYXkgY29uc3RydWN0b3JzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEVTNiBzcGVjIHJl
cXVpcmVzIHRoYXQgYW55IG9iamVjdCBhcmd1bWVudCBwYXNzZWQgdG8gYSBUeXBlZEFycmF5IGNv
bnN0cnVjdG9yIHRoYXQgaXMgbm90IGEgVHlwZWRBcnJheQorICAgICAgICBhbmQgaGFzIGFuIGl0
ZXJhdG9yIHNob3VsZCB1c2UgdGhlIGl0ZXJhdG9yIHRvIGNvbnN0cnVjdCB0aGUgVHlwZWRBcnJh
eS4gVG8gYXZvaWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgcmVsYXRlZAorICAgICAgICB0byBp
dGVyYXRpbmcgd2UgY2hlY2sgaWYgdGhlIGl0ZXJhdG9yIGF0dGFjaGVkIHRvIHRoZSBvYmplY3Qg
cG9pbnRzIHRvIHRoZSBnZW5lcmljIGFycmF5IGl0ZXJhdG9yIGFuZCBsZW5ndGggaXMgYSB2YWx1
ZS4KKyAgICAgICAgSWYgc28sIHdlIGRvIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIHNpbmNlIHRoZXJl
IHNob3VsZCBiZSBubyBvYnNlcnZhYmxlIGRpZmZlcmVuY2UuIEFub3RoZXIgb3RoZXIgaW50ZXJl
c3Rpbmcgbm90ZSBpcworICAgICAgICB0aGF0IHRoZSBFUzYgc3BlYyBoYXMgdGhlIG9mIGFuZCBm
cm9tIGZ1bmN0aW9ucyBvbiBhIHNoYXJlZCBjb25zdHJ1Y3RvciBiZXR3ZWVuIGFsbCB0aGUgVHlw
ZWRBcnJheSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIFdoZW4gdGhlIFR5cGVkQXJyYXkgaXMgY29u
c3RydWN0ZWQgdGhlIGV4cGVjdGF0aW9uIGlzIHRvIGNyYXdsIHRoZSBwcm90b3R5cGUgY2hhaW4g
b2YgdGhlIHRoaXMgdmFsdWUKKyAgICAgICAgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSWYgdGhl
IGZ1bmN0aW9uIGZpbmRzIGEga25vd24gVHlwZWRBcnJheSBjb25zdHJ1Y3RvciAoSW50MzJBcnJh
eSwgRmxvYXQ2NEFycmF5LC4uLikgdGhlbgorICAgICAgICBpdCBjcmVhdGVzIGEgVHlwZWRBcnJh
eSBvZiB0aGF0IHR5cGUuIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgYWRkaW5nIGEgcHJpdmF0ZSBm
dW5jdGlvbiAoQGFsbG9jYXRlVHlwZWRBcnJheSkgdG8gZWFjaAorICAgICAgICBvZiB0aGUgY29u
c3RydWN0b3JzIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIGFy
cmF5LiBCeSB1c2luZyB0aGUgcHJpdmF0ZSBmdW5jdGlvbnMgdGhlIEpJVCBzaG91bGQKKyAgICAg
ICAgaG9wZWZ1bGx5IGJlIGFibGUgdG8gb3B0aW1pemUgdGhpcyB0byBhIGRpcmVjdCBjYWxsLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9UeXBlZEFycmF5Q29u
c3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAob2YpOgorICAgICAgICAoZnJvbSk6CisgICAg
ICAgIChhbGxvY2F0ZUludDhBcnJheSk6CisgICAgICAgIChhbGxvY2F0ZUludDE2QXJyYXkpOgor
ICAgICAgICAoYWxsb2NhdGVJbnQzMkFycmF5KToKKyAgICAgICAgKGFsbG9jYXRlVWludDMyQXJy
YXkpOgorICAgICAgICAoYWxsb2NhdGVVaW50MTZBcnJheSk6CisgICAgICAgIChhbGxvY2F0ZVVp
bnQ4QXJyYXkpOgorICAgICAgICAoYWxsb2NhdGVVaW50OENsYW1wZWRBcnJheSk6CisgICAgICAg
IChhbGxvY2F0ZUZsb2F0MzJBcnJheSk6CisgICAgICAgIChhbGxvY2F0ZUZsb2F0NjRBcnJheSk6
CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNEYXRhVmlldy5jcHA6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OnNldEluZGV4KToK
KyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz46OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFy
cmF5Vmlldyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I6OkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0VHlwZWRBcnJheVZpZXcpOgorICAgICAgICAoSlNDOjpKU1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlND
OjpKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBy
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmguCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KiB0ZXN0cy9lczYueWFtbDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVzb3VyY2VzL3R5cGVk
YXJyYXktY29uc3RydWN0b3ItaGVscGVyLWZ1bmN0aW9ucy5qczogQWRkZWQuCisgICAgICAgIChm
b3JFYWNoVHlwZWRBcnJheSk6CisgICAgICAgIChoYXNTYW1lVmFsdWVzKToKKyAgICAgICAgKGZv
byk6CisgICAgICAgICh0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbik6CisgICAgICAgICogdGVzdHMv
c3RyZXNzL3R5cGVkYXJyYXktZnJvbS5qczogQWRkZWQuCisgICAgICAgIChldmVuKToKKyAgICAg
ICAgKGlzQmlnRW5vdWdoQW5kRXhjZXB0aW9uKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdHlw
ZWRhcnJheS1vZi5qczogQWRkZWQuCisKIDIwMTUtMTAtMDggIENvbW1pdCBRdWV1ZSAgPGNvbW1p
dC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
OTA3MTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDY3MWU1MDc2Yjgx
OTJjZGZjN2VhN2YyYjYyZTY5ZWU0Nzk1OTJiYi4uMzY0NjUxMTliNmJmOTM3YWFlNjNiYTQyMGQ1
YzMyMjgwM2I3MjU5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTc0
LDYgKzU3NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50
aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKICAgICBydW50aW1lL0pTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5jcHAKICAgICBydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCisg
ICAgcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9K
U1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5j
cHAKICAgICBydW50aW1lL0pTV2Vha01hcC5jcHAKQEAgLTEwOTAsNiArMTA5MSw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J1aWx0aW5zL1N0cmluZ0NvbnN0cnVjdG9yLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J1aWx0aW5zL1N0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENP
UkVfRElSfS9idWlsdGlucy9UeXBlZEFycmF5LnByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfS9idWlsdGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3IuanMKICkKIAogYWRkX2N1
c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZTBjNzE0MmYy
MTJmNGU5NDkwNjE3NTgwZTZjMGZjNDRlMDM4ZjlmLi4xMGEwN2JhMDAzY2E1YmYwNjMwZWVhYTY1
YjdjYWM5NzI4YTJiNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTcyLDYg
Kzk3Miw4IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1
MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1MkI5MTlBMjhBMUMwMDY5
QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5j
cHAgKi87IH07CisJCTUzNEM0NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzNEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaCAqLzsgfTsKKwkJNTM0QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmNwcCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJNUQ1Mzcy
NkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVENTM3MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5n
LmggKi87IH07CiAJCTVENUQ4QUQxMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0LmR5bGliIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAw
RTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgKi87IH07CkBAIC0yNzkyLDYgKzI3OTQs
OSBAQAogCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcgLyogVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gVHlwZWRBcnJheUNvbnN0
cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzRDNDU3QjFCQzcyNDEx
MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5LnByb3RvdHlwZS5qcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFR5cGVkQXJyYXkucHJvdG90eXBl
LmpzOyBwYXRoID0gYnVpbHRpbnMvVHlwZWRBcnJheS5wcm90b3R5cGUuanM7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTQ5MDksNiArNDkxNCw4IEBACiAJCQkJMEYyQjY2Q0YxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywKIAkJCQkwRjJCNjZE
MDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCiAJCQkJMEYyQjY2RDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywKKwkJCQk1MzRDNDU3RDFCQzcy
NTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQk1
MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgg
Ki8sCiAJCQkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuY3BwICovLAogCQkJCTUzOTE3RTdDMUI3OTExMDYwMDBFQkQzMyAvKiBKU1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIEpT
VHlwZUluZm8uaCAqLywKQEAgLTU5MDcsNiArNTkxNCw3IEBACiAJCQkJN0NGOUJDNjAxQjY1RDlC
MTAwOURCMUVGIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5
QjEwMDlEQjFFRiAvKiBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUuanMgKi8sCiAJCQkJNTM5MTdF
ODMxQjc5MUNCODAwMEVCRDMzIC8qIFR5cGVkQXJyYXkucHJvdG90eXBlLmpzICovLAorCQkJCTUz
NEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0b3IuanMgKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGJ1aWx0aW5zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTY1NzksNiArNjU4Nyw3IEBACiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQw
MDg2MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTM0QzQ1N0MxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1
OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU5NDU1OTMxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUExODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xvYmFsT2Jq
ZWN0RGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE1LDYgKzgwMjQsNyBAQAog
CQkJCTY1NDBDN0EwMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTY1NDBDN0ExMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zm
c2V0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxNTE4MTQ2RDcwMDAwMzMyMzIg
LyogUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM0QzQ1N0UxQkM3MjU0OTAw
NzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNFRDE4OTFCNTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3Bl
Y3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBS
ZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3IuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzQ5ZTdlZWY3NDIxY2I0Y2YyY2FlMmJlNzI3MGIyOTQyODRiNTdiYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5
Q29uc3RydWN0b3IuanMKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgd2UgYXJlIHN1
cHBvc2VkIHRvIGNyYXdsIHRoZSBwcm90b3R5cGUgY2hhaW4gbG9va2luZworLy8gZm9yIHRoZSBh
IFR5cGVkQXJyYXkgY29uc3RydWN0b3IuIFRoZSB3YXkgd2UgaW1wbGVtZW50IHRoaXMgaXMgd2l0
aCBhCisvLyBwcml2YXRlIGZ1bmN0aW9uLCBAYWxsb2N0YXRlVHlwZWRBcnJheSwgb24gZWFjaCBv
ZiB0aGUgcHJvdG90eXBlcy4KKy8vIFRoaXMgZW5hYmxlcyB1cyB0byBvcHRpbWl6ZSB0aGlzIGxv
b2t1cCBpbiB0aGUgaW5saW5lIGNhY2hlLgorCitmdW5jdGlvbiBvZigvKiBpdGVtcy4uLiAqLykK
K3sKKyAgICAidXNlIHN0cmljdCI7CisgICAgbGV0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7Cisg
ICAgbGV0IGNvbnN0cnVjdEZ1bmN0aW9uID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5OworICAg
IGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKQorICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVzIGl0cyB0aGlzIGFyZ3VtZW50IHN1
YmNsYXNzIGEgVHlwZWRBcnJheSBjb25zdHJ1Y3RvciIpOworCisgICAgbGV0IHJlc3VsdCA9IGNv
bnN0cnVjdEZ1bmN0aW9uKGxlbik7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsr
KQorICAgICAgICByZXN1bHRbaV0gPSBhcmd1bWVudHNbaV07CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitmdW5jdGlvbiBmcm9tKGl0ZW1zIC8qIFsgLCBtYXBmbiBbICwgdGhpc0FyZyBdIF0g
Ki8pCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgbGV0IG1hcEZuID0gYXJndW1lbnRzLmxl
bmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisKKyAgICBsZXQgdGhpc0FyZzsK
KworICAgIGlmIChtYXBGbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIGlmICh0eXBlb2YgbWFw
Rm4gIT09ICJmdW5jdGlvbiIpCisgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlw
ZWRBcnJheS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCwgd2hlbiBwcm92
aWRlZCwgYmUgYSBmdW5jdGlvbiIpOworCisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MikKKyAgICAgICAgICAgIHRoaXNBcmcgPSBhcmd1bWVudHNbMl07CisgICAgfQorCisgICAgaWYg
KGl0ZW1zID09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJUeXBlZEFycmF5
LmZyb20gcmVxdWlyZXMgYW4gYXJyYXktbGlrZSBvYmplY3QgLSBub3QgbnVsbCBvciB1bmRlZmlu
ZWQiKTsKKworICAgIGxldCBpdGVyYXRvck1ldGhvZCA9IGl0ZW1zW0BzeW1ib2xJdGVyYXRvcl07
CisgICAgaWYgKGl0ZXJhdG9yTWV0aG9kICE9IG51bGwpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBp
dGVyYXRvck1ldGhvZCAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHRocm93IG5ldyBAVHlw
ZUVycm9yKCJUeXBlZEFycmF5LmZyb20gcmVxdWlyZXMgdGhhdCB0aGUgcHJvcGVydHkgb2YgdGhl
IGZpcnN0IGFyZ3VtZW50LCBpdGVtc1tTeW1ib2wuaXRlcmF0b3JdLCB3aGVuIGV4aXN0cywgYmUg
YSBmdW5jdGlvbiIpOworCisgICAgICAgIGxldCBhY2N1bXVsYXRvciA9IFtdOworCisgICAgICAg
IGxldCBrID0gMDsKKyAgICAgICAgbGV0IGl0ZXJhdG9yID0gaXRlcmF0b3JNZXRob2QuQGNhbGwo
aXRlbXMpOworCisgICAgICAgIC8vIFNpbmNlIGZvci1vZiBsb29wIG9uY2UgbW9yZSBsb29rcyB1
cCB0aGUgQEBpdGVyYXRvciBwcm9wZXJ0eSBvZiBhIGdpdmVuIGl0ZXJhYmxlLAorICAgICAgICAv
LyBpdCBjb3VsZCBiZSBvYnNlcnZhYmxlIGlmIHRoZSB1c2VyIGRlZmluZXMgYSBnZXR0ZXIgZm9y
IEBAaXRlcmF0b3IuCisgICAgICAgIC8vIFRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCB3ZSBkZWZp
bmUgYSB3cmFwcGVyIG9iamVjdCB0aGF0IEBAaXRlcmF0b3IganVzdCByZXR1cm5zIGEgZ2l2ZW4g
aXRlcmF0b3IuCisgICAgICAgIGxldCB3cmFwcGVyID0geworICAgICAgICAgICAgW0BzeW1ib2xJ
dGVyYXRvcl0oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisKKyAgICAgICAgZm9yIChsZXQgdmFsdWUgb2Ygd3JhcHBlcikg
eworICAgICAgICAgICAgaWYgKG1hcEZuKQorICAgICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVj
dChhY2N1bXVsYXRvciwgaywgdGhpc0FyZyA9PT0gdW5kZWZpbmVkID8gbWFwRm4odmFsdWUsIGsp
IDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGspKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QoYWNjdW11bGF0b3IsIGssIHZhbHVlKTsKKyAg
ICAgICAgICAgIGsrKzsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBjb25zdHJ1Y3RGdW5jdGlv
biA9IHRoaXMuQGFsbG9jYXRlVHlwZWRBcnJheTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdEZ1bmN0
aW9uID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlw
ZWRBcnJheS5mcm9tIHJlcXVpcmVzIGl0cyB0aGlzIGFyZ3VtZW50IHN1YmNsYXNzIGEgVHlwZWRB
cnJheSBjb25zdHJ1Y3RvciIpOworCisgICAgICAgIGxldCByZXN1bHQgPSBjb25zdHJ1Y3RGdW5j
dGlvbihrKTsKKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGs7IGkrKykgeworICAgICAg
ICAgICAgcmVzdWx0W2ldID0gYWNjdW11bGF0b3JbaV07CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGxldCBhcnJheUxpa2UgPSBAT2JqZWN0KGl0ZW1z
KTsKKyAgICBsZXQgYXJyYXlMaWtlTGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgp
OworCisgICAgbGV0IGNvbnN0cnVjdEZ1bmN0aW9uID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5
OworICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKQorICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigidGhpcyBkb2VzIG5vdCBzdWJjbGFzcyBhIFR5cGVkQXJyYXkgY29u
c3RydWN0b3IiKTsKKworICAgIGxldCByZXN1bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihhcnJheUxp
a2VMZW5ndGgpOworCisgICAgbGV0IGsgPSAwOworICAgIHdoaWxlIChrIDwgYXJyYXlMaWtlTGVu
Z3RoKSB7CisgICAgICAgIGxldCB2YWx1ZSA9IGFycmF5TGlrZVtrXTsKKyAgICAgICAgaWYgKG1h
cEZuKQorICAgICAgICAgICAgcmVzdWx0W2tdID0gdGhpc0FyZyA9PT0gdW5kZWZpbmVkID8gbWFw
Rm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGspOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHRba10gPSB2YWx1ZTsKKyAgICAgICAgaysrOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGFsbG9jYXRlSW50OEFycmF5KGxl
bmd0aCkgeworCisgICAgcmV0dXJuIG5ldyBASW50OEFycmF5KGxlbmd0aCk7CisKK30KKworZnVu
Y3Rpb24gYWxsb2NhdGVJbnQxNkFycmF5KGxlbmd0aCkgeworCisgICAgcmV0dXJuIG5ldyBASW50
MTZBcnJheShsZW5ndGgpOworICAgIAorfQorCitmdW5jdGlvbiBhbGxvY2F0ZUludDMyQXJyYXko
bGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3IEBJbnQzMkFycmF5KGxlbmd0aCk7CisgICAgCit9
CisKK2Z1bmN0aW9uIGFsbG9jYXRlVWludDMyQXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4g
bmV3IEBVaW50MzJBcnJheShsZW5ndGgpOworCit9CisKK2Z1bmN0aW9uIGFsbG9jYXRlVWludDE2
QXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3IEBVaW50MTZBcnJheShsZW5ndGgpOwor
ICAgIAorfQorCitmdW5jdGlvbiBhbGxvY2F0ZVVpbnQ4QXJyYXkobGVuZ3RoKSB7CisKKyAgICBy
ZXR1cm4gbmV3IEBVaW50OEFycmF5KGxlbmd0aCk7CisgICAgCit9CisKK2Z1bmN0aW9uIGFsbG9j
YXRlVWludDhDbGFtcGVkQXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3IEBVaW50OENs
YW1wZWRBcnJheShsZW5ndGgpOworCit9CisKK2Z1bmN0aW9uIGFsbG9jYXRlRmxvYXQzMkFycmF5
KGxlbmd0aCkgeworCisgICAgcmV0dXJuIG5ldyBARmxvYXQzMkFycmF5KGxlbmd0aCk7CisKK30K
KworZnVuY3Rpb24gYWxsb2NhdGVGbG9hdDY0QXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4g
bmV3IEBGbG9hdDY0QXJyYXkobGVuZ3RoKTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggMzM1NTAwMmJiYWM5YzBiYjVk
MTdhZjYzNjNlNTQyMmY4NDBjNDYzNi4uOTJjOWJiMGYwOTgxNjdkN2M3MDZhMDA4NGNkMmU1YmFj
ZTM1ZDBiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oCkBAIC0zMTAsNiArMzEwLDE2IEBACiAgICAgbWFjcm8oSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uKSBcCiAgICAgbWFjcm8oZ2V0KSBcCiAgICAgbWFjcm8oc2V0KSBcCisgICAg
bWFjcm8oYWxsb2NhdGVUeXBlZEFycmF5KSBcCisgICAgbWFjcm8oSW50OEFycmF5KSBcCisgICAg
bWFjcm8oSW50MTZBcnJheSkgXAorICAgIG1hY3JvKEludDMyQXJyYXkpIFwKKyAgICBtYWNybyhV
aW50OEFycmF5KSBcCisgICAgbWFjcm8oVWludDhDbGFtcGVkQXJyYXkpIFwKKyAgICBtYWNybyhV
aW50MTZBcnJheSkgXAorICAgIG1hY3JvKFVpbnQzMkFycmF5KSBcCisgICAgbWFjcm8oRmxvYXQz
MkFycmF5KSBcCisgICAgbWFjcm8oRmxvYXQ2NEFycmF5KSBcCiAKIAogbmFtZXNwYWNlIEpTQyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCmluZGV4IDUx
M2Q0YzZiM2JkNWNiZjAwODQ2MDVlNTJjMGVmNWIzYTQxNDc0ZDMuLjhkNGNjMjVhZGE5ZjM4NTcx
YWY2ZWRkNDc0Njk4MzlkMDM1MmZhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDYgKzgzLDEyIEBAIGJvb2wgSlNEYXRhVmlldzo6c2V0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIHVuc2lnbmVkKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorYm9vbCBKU0RhdGFWaWV3OjpzZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCwg
SlNWYWx1ZSkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIFBhc3NSZWZQdHI8RGF0YVZpZXc+IEpTRGF0YVZpZXc6OnR5cGVkSW1wbCgp
CiB7CiAgICAgcmV0dXJuIERhdGFWaWV3OjpjcmVhdGUoYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwg
bGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRhVmlldy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCmlu
ZGV4IDk1MGQxZDY3OGQ0YmMxZTFlNDJjNGI3NDVhMTg3ZmI4MWFjOGE4MDcuLjc0NDc3YjAxMTQ4
ZjRmZmY1OWIyMjQ4ZWJkNjA0Y2JjMzFhMjEyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
RGF0YVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBz
ZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNWYWx1ZSk7CiAgICAgCiAgICAgQXJyYXlC
dWZmZXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgKaW5kZXggM2RmZmUzYzIzMTU5YzY0NzAxZjZmMDY3
NDE2NWYyMGZiM2M4NjRjYS4uNTU5MGRmNDJlYjBiY2Y0MTM3ZjFhZWNjMGVlYzkzMjgxMDE4MmRh
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMSArMzcsMTEgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcihWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09i
amVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBwcml2YXRlQWxsb2NhdG9yKTsKIAogcHVi
bGljOgogICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBjcmVh
dGUoCi0gICAgICAgIFZNJiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKyAgICAgICAgVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBwcml2YXRlQWxsb2NhdG9yKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3JJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCmluZGV4IDJkZGMyOWY3
MTg5N2JiNTFkMzkwYjA2YjI1YTczODMzODc0YmEwYzEuLjIzODIxYWVmZThjMTEyNjBhYTMwZDAz
NGMxNzQyN2U3MDU2ZjQzN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNyw5ICsyNywxMyBAQAogI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUg
Ikl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKICNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00MCwyNCArNDQsMjcgQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG8KIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIHByaXZhdGVBbGxvY2F0b3IpCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDMpLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPkJZVEVTX1BFUl9FTEVNRU5ULCBqc051bWJlcihWaWV3Q2xh
c3M6OmVsZW1lbnRTaXplKSwgRG9udEVudW0gfCBSZWFkT25seSB8IERvbnREZWxldGUpOworCisg
ICAgaWYgKHByaXZhdGVBbGxvY2F0b3IpCisgICAgICAgIHB1dERpcmVjdEJ1aWx0aW5GdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5hbGxvY2F0ZVR5cGVkQXJyYXlQ
cml2YXRlTmFtZSwgcHJpdmF0ZUFsbG9jYXRvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz4qCiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0ZSgKLSAgICBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSkK
KyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBwcml2YXRlQWxsb2NhdG9yKQogewogICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CiAgICAgICAgIG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQog
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUp
OwotICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSwgbmFtZSk7CisgICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIG5hbWUs
IHByaXZhdGVBbGxvY2F0b3IpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTc1LDcgKzgy
LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXgKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
CiAgICAgICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpLT50eXBlZEFycmF5U3RydWN0dXJlKAogICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwotICAgIAorCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKwogICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIGlmIChWaWV3Q2xhc3M6OlR5
cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRGF0YVZpZXcgY29uc3Ry
dWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKQEAgLTExMyw2ICsxMjIs
NjUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXgKICAgICAvLyAtIEFuIGludGVnZXIuIFRoaXMg
Y3JlYXRlcyBhIG5ldyB0eXBlZCBhcnJheSBvZiB0aGF0IGxlbmd0aCBhbmQgemVyby1pbml0aWFs
aXplcyBpdC4KICAgICAKICAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8
SlNPYmplY3QqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpIHsKKyAgICAgICAgaWYgKCFp
c1R5cGVkVmlldyhvYmplY3QtPmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuYyA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKKworICAgICAgICAgICAgLy8gSGVyZSB3
ZSBtYWtlIGEgc2xpZ2h0IG9wdGltaXphdGlvbi4gSWYgdGhlIGl0ZXJhdG9yIGlzIGEga25vd24g
aXRlcmF0b3IgYW5kIGxlbmd0aCBkb2VzIG5vdCBoYXZlIGEgZ2V0dGVyCisgICAgICAgICAgICAv
LyB0aGVuIHdlIGNhbiBqdXN0IG5vdCB1c2UgdGhlIGl0ZXJhdG9yIGFuZCBsb29wIG9uIHRoZSBs
ZW5ndGggaW5zdGVhZC4KKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aEF0dHJpYnV0ZXM7Cisg
ICAgICAgICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwgbGVuZ3RoQXR0cmlidXRlcyk7CisKKyAgICAgICAgICAgIGlmICghaXRlcmF0b3JG
dW5jLmlzVW5kZWZpbmVkKCkKKyAgICAgICAgICAgICAgICAmJiAoaXRlcmF0b3JGdW5jICE9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCkKKyAg
ICAgICAgICAgICAgICAgICAgfHwgKGxlbmd0aEF0dHJpYnV0ZXMgJiAoQWNjZXNzb3IgfCBDdXN0
b21BY2Nlc3NvcikpKSkgeworCisgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRvckZ1
bmMsIGNhbGxEYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGV4ZWMsICJTeW1ib2wuSXRlcmF0b3IgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCBjYW5u
b3QgYmUgY2FsbGVkLiIpKTsKKworICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJndW1lbnRzOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVu
YywgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgICAgICAgICAgICAgaWYgKCFp
dGVyYXRvci5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsICJTeW1ib2wuSXRlcmF0b3IgZm9yIHRoZSBmaXJz
dCBhcmd1bWVudCBkaWQgbm90IHJldHVybiBhbiBvYmplY3QuIikpOworCisgICAgICAgICAgICAg
ICAgVmVjdG9yPEpTVmFsdWUsIDE2PiBzdG9yYWdlOworICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChl
eGVjLCBpdGVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSBuZXh0SXRlbSA9IGl0ZXJhdG9yVmFsdWUoZXhlYywgbmV4dCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZS5hcHBlbmQobmV4dEl0ZW0pOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRp
YWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgc3RvcmFnZS5zaXplKCkpOworICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2Uuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFyZXN1bHQtPnNldEluZGV4KGV4ZWMsIGksIHN0b3JhZ2VbaV0pKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKworICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9CiAgICAg
ICAgICAgICBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCA1MjcyNjc4ZTFkOTc1YjYxYjlhZDc3ZjhmZGRlN2RkNzU3ZGI3MTBlLi4yY2E4ZDI5NTVlNGIz
MjRkYTBlOGQ1OTBlNjU5OTZhOTcxZTA3NDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVk
ZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmgiCiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIgorI2luY2x1ZGUg
IkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCiAjaW5jbHVkZSAiSlNX
QVNNTW9kdWxlLmgiCkBAIC00NjAsMjMgKzQ2MSwzNiBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+IGpzTmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVj
dAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5N
YXRoLCBNYXRoT2JqZWN0OjpjcmVhdGUodm0sIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5SZWZsZWN0
LCBSZWZsZWN0T2JqZWN0OjpjcmVhdGUodm0sIHRoaXMsIFJlZmxlY3RPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwog
CisgICAgSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiB0eXBlZEFycmF5U3VwZXJDb25zdHJ1
Y3RvciA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCB0aGlzLCBKU1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIHR5cGVkQXJyYXlQcm90byk7CisgICAgdHlwZWRBcnJheVBy
b3RvLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIHR5cGVkQXJyYXlTdXBlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisKICAgICBz
dGQ6OmFycmF5PEludGVybmFsRnVuY3Rpb24qLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7Ci0gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0lu
ZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIEpTSW50
OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlw
ZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJJbnQ4QXJyYXkiKSk7Ci0gICAgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZSh2bSwgSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
SW50MTYpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiSW50MTZBcnJheSIpKTsKLSAg
ICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDMyKV0gPSBKU0ludDMyQXJy
YXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJJ
bnQzMkFycmF5IikpOwotICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWlu
dDgpXSA9IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIEpTVWludDhBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgp
LCBBU0NJSUxpdGVyYWwoIlVpbnQ4QXJyYXkiKSk7Ci0gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9y
c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKHZtLCBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVy
YWwoIlVpbnQ4Q2xhbXBlZEFycmF5IikpOwotICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9J
bmRleChUeXBlVWludDE2KV0gPSBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwg
SlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNild
LnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJVaW50MTZBcnJheSIpKTsKLSAgICB0eXBl
ZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodm0sIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiVWlu
dDMyQXJyYXkiKSk7Ci0gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9h
dDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIEpTRmxvYXQzMkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlw
ZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJGbG9hdDMyQXJyYXkiKSk7Ci0gICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0KV0gPSBKU0Zsb2F0NjRBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGUodm0sIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJGbG9hdDY0
QXJyYXkiKSk7Ci0gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVEYXRhVmll
dyldID0gSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVhdGUodm0sIEpTRGF0YVZpZXdDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJEYXRhVmlldyIpKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3Rv
SW5kZXgoVHlwZUludDgpXSA9IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgdGhp
cywgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB0eXBl
ZEFycmF5U3VwZXJDb25zdHJ1Y3RvciksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCld
LnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJJbnQ4QXJyYXkiKSwgdHlwZWRBcnJheUNv
bnN0cnVjdG9yQWxsb2NhdGVJbnQ4QXJyYXlDb2RlR2VuZXJhdG9yKHZtKSk7CisgICAgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZSh2bSwgdGhpcywgSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgdHlwZWRBcnJheVN1cGVyQ29uc3RydWN0b3IpLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIklu
dDE2QXJyYXkiKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVJbnQxNkFycmF5Q29kZUdl
bmVyYXRvcih2bSkpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50
MzIpXSA9IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIEpTSW50MzJB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHR5cGVkQXJyYXlTdXBl
ckNvbnN0cnVjdG9yKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlw
ZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJJbnQzMkFycmF5IiksIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
ckFsbG9jYXRlSW50MzJBcnJheUNvZGVHZW5lcmF0b3Iodm0pKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHZtLCB0aGlzLCBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCB0eXBlZEFycmF5U3VwZXJDb25zdHJ1Y3RvciksIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiVWludDhBcnJh
eSIpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQ4QXJyYXlDb2RlR2VuZXJhdG9y
KHZtKSk7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OENsYW1w
ZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCB0aGlzLCBK
U1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywg
dHlwZWRBcnJheVN1cGVyQ29uc3RydWN0b3IpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVp
bnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJVaW50OENsYW1wZWRB
cnJheSIpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZVVpbnQ4Q2xhbXBlZEFycmF5Q29k
ZUdlbmVyYXRvcih2bSkpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
VWludDE2KV0gPSBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgdGhpcywgSlNV
aW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHR5cGVkQXJy
YXlTdXBlckNvbnN0cnVjdG9yKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5w
cm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiVWludDE2QXJyYXkiKSwgdHlwZWRBcnJheUNv
bnN0cnVjdG9yQWxsb2NhdGVVaW50MTZBcnJheUNvZGVHZW5lcmF0b3Iodm0pKTsKKyAgICB0eXBl
ZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzLCB0eXBlZEFycmF5U3VwZXJDb25zdHJ1Y3RvciksIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVy
YWwoIlVpbnQzMkFycmF5IiksIHR5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDMyQXJy
YXlDb2RlR2VuZXJhdG9yKHZtKSk7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4
KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRo
aXMsIEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywg
dHlwZWRBcnJheVN1cGVyQ29uc3RydWN0b3IpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiRmxvYXQzMkFycmF5IiksIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlRmxvYXQzMkFycmF5Q29kZUdlbmVyYXRvcih2bSkp
OworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQ2NCldID0gSlNG
bG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCB0aGlzLCBKU0Zsb2F0NjRBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHR5cGVkQXJyYXlTdXBlckNvbnN0
cnVjdG9yKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdl
dCgpLCBBU0NJSUxpdGVyYWwoIkZsb2F0NjRBcnJheSIpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JB
bGxvY2F0ZUZsb2F0NjRBcnJheUNvZGVHZW5lcmF0b3Iodm0pKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0gPSBKU0RhdGFWaWV3Q29uc3RydWN0b3I6
OmNyZWF0ZSh2bSwgdGhpcywgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIkRhdGFWaWV3
IiksIG51bGxwdHIpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgdHlwZWRBcnJheUluZGV4ID0g
TlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyB0eXBlZEFycmF5SW5kZXgtLTspIHsKICAgICAg
ICAgbV90eXBlZEFycmF5c1t0eXBlZEFycmF5SW5kZXhdLnByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCB0eXBlZEFy
cmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKICAgICAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
dHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5uYW1lKGV4ZWMpKSwgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CiAgICAgfQog
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPklu
dDhBcnJheVByaXZhdGVOYW1lLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUlu
dDgpXSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5JbnQxNkFycmF5UHJpdmF0ZU5hbWUsIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlSW50MTYpXSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5JbnQzMkFycmF5UHJpdmF0ZU5hbWUsIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5VaW50OEFy
cmF5UHJpdmF0ZU5hbWUsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgp
XSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5VaW50OENsYW1wZWRBcnJheVByaXZhdGVOYW1lLCB0eXBlZEFycmF5Q29uc3Ry
dWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlVpbnQxNkFycmF5UHJp
dmF0ZU5hbWUsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDE2KV0sIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+VWludDMyQXJyYXlQcml2YXRlTmFtZSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0lu
ZGV4KFR5cGVVaW50MzIpXSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5GbG9hdDMyQXJyYXlQcml2YXRlTmFtZSwgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0sIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+RmxvYXQ2NEFy
cmF5UHJpdmF0ZU5hbWUsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQ2
NCldLCBEb250RW51bSk7CisKICAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIE1vZHVs
ZUxvYWRlck9iamVjdDo6Y3JlYXRlKHZtLCB0aGlzLCBNb2R1bGVMb2FkZXJPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgaWYg
KE9wdGlvbnM6OmV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVyKCkpCiAgICAgICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5Mb2FkZXIsIG1fbW9kdWxl
TG9hZGVyLmdldCgpLCBEb250RW51bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MGZiNjU5ZDAxZGY4MDVmZjJmYjEzMThkZThhYWVmNzQyYzI2OGE0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2lu
Y2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cklubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6
SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Ip
IH07CisKK3ZvaWQgSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUp
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJUeXBlZEFycmF5Iik7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
cHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMyksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKworICAgIEpTQ19CVUlM
VElOX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm9mLCB0eXBlZEFycmF5Q29uc3RydWN0b3JP
ZkNvZGVHZW5lcmF0b3IsIERvbnRFbnVtKTsKKyAgICBKU0NfQlVJTFRJTl9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5mcm9tLCB0eXBlZEFycmF5Q29uc3RydWN0b3JGcm9tQ29kZUdlbmVyYXRv
ciwgRG9udEVudW0pOworfQorCitKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIEpTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSkKK3sKKyAgICBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcj4odm0uaGVh
cCkpIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKK30KKworCisvLyBUaGUgb25seSB3YXkgd2UgY2FuIGNhbGwgdGhp
cyBmdW5jdGlvbiBpcyB0aHJvdWdoIFJlZmxlY3QuY29uc3RydWN0IG9yIGlmIHRoZXkgbXVja2Vk
IHdpdGggdGhlIFR5cGVkQXJyYXkgcHJvdG90eXBlIGNoYWluLgorLy8gSW4gZWl0aGVyIGNhc2Ug
d2UgYXJlIG9rIHdpdGggdGhpcyBiZWluZyBzbG93Lgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0VHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5uZXdUYXJnZXQoKTsKKworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsICJu
ZXcudGFyZ2V0IHBhc3NlZCB0byBUeXBlZEFycmF5IGlzIG5vdCBhbiBvYmplY3QuIikpOworCisg
ICAgQ29uc3RydWN0RGF0YSBkYXRhOworICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dENvbnN0cnVjdERhdGEob2JqZWN0LCBkYXRhKSA9PSBDb25zdHJ1Y3RUeXBlTm9uZSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCAibmV3LnRhcmdl
dCBwYXNzZWQgdG8gVHlwZWRBcnJheSBpcyBub3QgYSB2YWxpZCBjb25zdHJ1Y3Rvci4iKSk7CisK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUg
dG8gZmluZCBUeXBlZEFycmF5IGNvbnN0cnVjdG9yIGluIHByb3RvdHlwZS1jaGFpbiwgaGl0IG51
bGwuIikpOworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IqPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZmluZCBUeXBlZEFycmF5IGNvbnN0cnVjdG9yIHRo
YXQgaW5oZXJpdHMgZnJvbSBUeXBlZEFycmF5LiIpKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4qPih2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpT
SW50OEFycmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDE2QXJyYXk+Kj4odmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxKU0ludDE2QXJyYXk+KGV4
ZWMpOworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTSW50MzJBcnJheT4qPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gY29u
c3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTSW50MzJBcnJheT4oZXhlYyk7CisgICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNV
aW50OEFycmF5Pio+KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmlj
VHlwZWRBcnJheVZpZXc8SlNVaW50OEFycmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5Pio+
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZp
ZXc8SlNVaW50MTZBcnJheT4oZXhlYyk7CisgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4qPih2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTVWludDMy
QXJyYXk+KGV4ZWMpOworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+Kj4odmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxKU1VpbnQ4Q2xhbXBl
ZEFycmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0MzJBcnJheT4qPih2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTRmxvYXQzMkFycmF5Pihl
eGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4qPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTRmxvYXQ2NEFycmF5PihleGVjKTsKKwor
ICAgICAgICB2YWx1ZSA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKS0+cHJvdG90eXBlKCk7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3RE
YXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
ID0gY29uc3RydWN0VHlwZWRBcnJheVZpZXc7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OworfQorCitDYWxsVHlwZSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmdldENhbGxEYXRh
KEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBudWxscHRyOworICAgIHJldHVybiBDYWxsVHlwZU5vbmU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGE2NzI5YWJlOTdl
NGM0MGQ0ZjJlMTgyYjhiYTEyZWE2NGVlMGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVu
Y3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpT
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRp
YyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworCisgICAg
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCmluZGV4IGE2MWYyMDRmNTc0NWUyYWVhNDc1
N2E4NzhmNzIxZTJmNGI3YzE1ZTguLmEzNDg0Y2EyNDNlYzdmNWM5YTNiYTFkYjA2OGI3ODEzZDFl
NTIxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCkBAIC0yNTEsOCArMjUxLDggQEAgSlNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZSogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTo6Y3JlYXRlKAog
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KLSAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPih2
bS5oZWFwKSkKLSAgICBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwor
ICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvZXM2LnlhbWwgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2Lnlh
bWwKaW5kZXggZDcyYmQyMWVhOTg5NTliNzEzNjQzNzM4MGE4NDQxZDg2MTUwMTM3ZC4uMjE1YmQ0
YThhNWM2NjBmMDljNDU4ZmU4ZTRiZjA3NDFkZjY1MTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9lczYueWFtbApAQCAtMTExNSw5ICsxMTE1LDkgQEAKIC0gcGF0aDogZXM2L1N0cmluZy5w
cm90b3R5cGVfbWV0aG9kc19TdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZS5qcwogICBjbWQ6IHJ1
bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvdHlwZWRfYXJyYXlzXyVUeXBlZEFycmF5JS5mcm9tLmpz
Ci0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2
L3R5cGVkX2FycmF5c18lVHlwZWRBcnJheSUub2YuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAg
Y21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvdHlwZWRfYXJyYXlzXyVUeXBlZEFycmF5
JS5wcm90b3R5cGUuY29weVdpdGhpbi5qcwogICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6
IGVzNi90eXBlZF9hcnJheXNfJVR5cGVkQXJyYXklLnByb3RvdHlwZS5lbnRyaWVzLmpzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jlc291cmNlcy90eXBl
ZGFycmF5LWNvbnN0cnVjdG9yLWhlbHBlci1mdW5jdGlvbnMuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3Jlc291cmNlcy90eXBlZGFycmF5LWNvbnN0cnVjdG9yLWhlbHBl
ci1mdW5jdGlvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUwNTkwYjYwZTM2YTJiNzQyMTg0MDc5ZjQ3YTg5
ZTEzZGQ3MjQ4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcmVzb3VyY2VzL3R5cGVkYXJyYXktY29uc3RydWN0b3ItaGVscGVyLWZ1bmN0aW9u
cy5qcwpAQCAtMCwwICsxLDQ2IEBACitsb2FkKCIuL3Jlc291cmNlcy9zdGFuZGFsb25lLXByZS5q
cyIpOworCisidXNlIHN0cmljdCI7CisKK3ZhciB0eXBlZEFycmF5cyA9IFsiSW50OEFycmF5Iiwg
IlVpbnQ4QXJyYXkiLCAiVWludDhDbGFtcGVkQXJyYXkiLCAiSW50MTZBcnJheSIsICJVaW50MTZB
cnJheSIsICJJbnQzMkFycmF5IiwgIlVpbnQzMkFycmF5IiwgIkZsb2F0MzJBcnJheSIsICJGbG9h
dDY0QXJyYXkiXTsKKworZnVuY3Rpb24gZm9yRWFjaFR5cGVkQXJyYXkoY29uc3RydWN0b3JzLCB0
ZXN0RnVuY3Rpb24sIG5hbWUsIGFyZ3MpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnN0
cnVjdG9ycy5sZW5ndGg7ICsraSkgeworICAgICAgICBsZXQgdHlwZWRBcnJheSA9IGNvbnN0cnVj
dG9yc1tpXTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gZXZhbCh0eXBlZEFycmF5ICsgIi4iICsg
bmFtZSArIGFyZ3MpCisKKyAgICAgICAgbGV0IHRlc3RSZXN1bHQgPSB0ZXN0RnVuY3Rpb24ocmVz
dWx0LCB0eXBlZEFycmF5KQorICAgICAgICBpZiAodGVzdFJlc3VsdCAhPT0gdHJ1ZSkKKyAgICAg
ICAgICAgIHJldHVybiB0ZXN0UmVzdWx0OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitmdW5jdGlvbiBoYXNTYW1lVmFsdWVzKG1zZywgYXJyYXkxLCBhcnJheTIpIHsKKyAgICBpZiAo
YXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkgeworICAgICAgICBkZWJ1Zyhtc2cgKyAg
IlRoZSBhcnJheXMgaGFkIGRpZmZlcmluZyBsZW5ndGhzLCBmaXJzdCBhcnJheTogIiArIGFycmF5
MSArICIgbGVuZ3RoOiAiICsgYXJyYXkxLmxlbmd0aCArICIgc2Vjb25kIGFycmF5OiAiICsgYXJy
YXkyICsgIiBsZW5ndGgiICsgYXJyYXkyLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBsZXQgYWxsU2FtZSA9IHRydWU7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBhcnJheTEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYWxsU2FtZSA9IGFsbFNhbWUgJiYgT2Jq
ZWN0LmlzKGFycmF5MVtpXSwgYXJyYXkyW2ldKTsKKyAgICB9CisKKyAgICBpZiAoIWFsbFNhbWUp
CisgICAgICAgIGRlYnVnKG1zZyArICAiVGhlIGFycmF5IGRpZCBub3QgaGF2ZSBhbGwgdGhlIGV4
cGVjdGVkIGVsZW1lbnRzLCBmaXJzdCBhcnJheTogIiArIGFycmF5MSArICIgc2Vjb25kIGFycmF5
OiAiICsgYXJyYXkyKTsKKyAgICByZXR1cm4gYWxsU2FtZTsKKworfQorCitmdW5jdGlvbiB0ZXN0
Q29uc3RydWN0b3JGdW5jdGlvbihuYW1lLCBhcmdzLCBleHBlY3RlZCkgeworICAgIGZ1bmN0aW9u
IGZvbyhhcnJheSwgY29uc3RydWN0b3IpIHsKKyAgICAgICAgaWYgKCFoYXNTYW1lVmFsdWVzKGNv
bnN0cnVjdG9yICsgIi4iICsgbmFtZSArICIgZGlkIG5vdCBwcm9kdWNlIHRoZSBjb3JyZWN0IHJl
c3VsdCBvbiAiICsgbmFtZSArIGFyZ3MsIGFycmF5LCBleHBlY3RlZCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2UKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZv
ckVhY2hUeXBlZEFycmF5KHR5cGVkQXJyYXlzLCBmb28sIG5hbWUsIGFyZ3MpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBlZGFycmF5LWZyb20u
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3R5cGVkYXJyYXktZnJvbS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYmJmYzhhMmVkZmJkYzg3NmRmNDM4OWYwN2U2OTYwYTBkYzFmN2ZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBl
ZGFycmF5LWZyb20uanMKQEAgLTAsMCArMSw0NyBAQAorbG9hZCgiLi9yZXNvdXJjZXMvdHlwZWRh
cnJheS1jb25zdHJ1Y3Rvci1oZWxwZXItZnVuY3Rpb25zLmpzIik7CitkZXNjcmlwdGlvbigKKyJU
aGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgVHlwZWRBcnJheS5mcm9tIGZ1bmN0
aW9uIgorKTsKKworc2hvdWxkQmUoIkludDMyQXJyYXkuZnJvbS5sZW5ndGgiLCAiMSIpOworc2hv
dWxkQmUoIkludDMyQXJyYXkuZnJvbS5uYW1lIiwgIidmcm9tJyIpOworZGVidWcoIiIpOworCitk
ZWJ1ZygidGVzdENvbnN0cnVjdG9yRnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgYXJnIGxpc3Qg
KG5hbWUsIGFyZ3MsIGluaXQsIHJlc3VsdCBbICwgZXhwZWN0ZWRBcnJheSBdKSIpOworZGVidWco
IiIpOworCitkZWJ1ZygiMS4wIFNpbmdsZSBBcmd1bWVudCBUZXN0aW5nIik7CitzaG91bGRCZVRy
dWUoInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uKCdmcm9tJywgJyhbXSknLCBbXSkiKTsKK3Nob3Vs
ZEJlVHJ1ZSgidGVzdENvbnN0cnVjdG9yRnVuY3Rpb24oJ2Zyb20nLCAnKFsyXSknLCBbMl0pIik7
CitzaG91bGRCZVRydWUoInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uKCdmcm9tJywgJyhbMiwzLDRd
KScsIFsyLDMsNF0pIik7CitkZWJ1ZygiIik7CisKK2RlYnVnKCIyLjAgVHdvIEFyZ3VtZW50IFRl
c3RpbmciKTsKK2Z1bmN0aW9uIGV2ZW4oZSwgaSkgeworICAgIHJldHVybiAhKGUgJiAxKSB8fCAo
dGhpcy5jaGFuZ2UgPyB0aGlzLmNoYW5nZS5pbmRleE9mKGkpID49IDAgOiBmYWxzZSk7Cit9Citz
aG91bGRCZVRydWUoInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uKCdmcm9tJywgJyhbMTIsIDUsIDgs
IDEzLCA0NF0sIGV2ZW4pJywgWzEsIDAsIDEsIDAsIDFdKSIpOworc2hvdWxkQmVUcnVlKCJ0ZXN0
Q29uc3RydWN0b3JGdW5jdGlvbignZnJvbScsICcoWzExLCA1NCwgMTgsIDEzLCAxXSwgZXZlbikn
LCBbMCwgMSwgMSwgMCwgMF0pIik7CitkZWJ1ZygiIik7CisKK2RlYnVnKCIzLjAgVGhyZWUgQXJn
dW1lbnQgVGVzdGluZyIpOwordmFyIHRoaXNWYWx1ZSA9IHsgY2hhbmdlOiBbMSwgM10gfTsKK3No
b3VsZEJlVHJ1ZSgidGVzdENvbnN0cnVjdG9yRnVuY3Rpb24oJ2Zyb20nLCAnKFsxMiwgMjMsIDEx
LCAxLCA0NV0sIGV2ZW4sIHRoaXNWYWx1ZSknLCBbMSwgMSwgMCwgMSwgMF0pIik7CitkZWJ1Zygi
Iik7CisKKworZGVidWcoIjQuMCBFeGNlcHRpb24gVGVzdCIpOworZnVuY3Rpb24gaXNCaWdFbm91
Z2hBbmRFeGNlcHRpb24oZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7CisgICAgaWYoaW5kZXg9PTEp
IHRocm93ICJleGNlcHRpb24gZnJvbSBmdW5jdGlvbiI7CisgICAgcmV0dXJuIChlbGVtZW50ID49
IDEwKTsKK30KK3Nob3VsZFRocm93KCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbignZnJvbScsICco
WzEyLCAxNSwgMTAsIDEzLCA0NF0sIGlzQmlnRW5vdWdoQW5kRXhjZXB0aW9uKScsIGZhbHNlKSIp
OworZGVidWcoIiIpOworCitkZWJ1ZygiNS4wIFdyb25nIFR5cGUgZm9yIENhbGxiYWNrIFRlc3Qi
KTsKK3Nob3VsZFRocm93KCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbignZnJvbScsICcoIFsxMiwg
MTUsIDEwLCAxMywgNDRdLCA4KScsIGZhbHNlKSIpOworc2hvdWxkVGhyb3coInRlc3RDb25zdHJ1
Y3RvckZ1bmN0aW9uKCdmcm9tJywgJyhbMTIsIDE1LCAxMCwgMTMsIDQ0XSwgXCJ3cm9uZ1wiKScs
IGZhbHNlKSIpOworc2hvdWxkVGhyb3coInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uKCdmcm9tJywg
JyhbMTIsIDE1LCAxMCwgMTMsIDQ0XSwgbmV3IE9iamVjdCgpKScsIGZhbHNlKSIpOworc2hvdWxk
VGhyb3coInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uKCdmcm9tJywgJyhbMTIsIDE1LCAxMCwgMTMs
IDQ0XSwgbnVsbCknLCBmYWxzZSkiKTsKK2RlYnVnKCIiKTsKK2ZpbmlzaEpTVGVzdCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBlZGFycmF5LW9m
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBlZGFycmF5LW9mLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIxOWMwODk3Y2JhZTYzMGMxMzlmYjNmMWU4NDBjNmQzMWU2Y2I3OGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3R5cGVk
YXJyYXktb2YuanMKQEAgLTAsMCArMSwxNiBAQAorbG9hZCgiLi9yZXNvdXJjZXMvdHlwZWRhcnJh
eS1jb25zdHJ1Y3Rvci1oZWxwZXItZnVuY3Rpb25zLmpzIik7CitkZXNjcmlwdGlvbigKKyJUaGlz
IHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgVHlwZWRBcnJheS5vZiBmdW5jdGlvbiIK
Kyk7CisKK3Nob3VsZEJlKCJJbnQzMkFycmF5Lm9mLmxlbmd0aCIsICIwIik7CitzaG91bGRCZSgi
SW50MzJBcnJheS5vZi5uYW1lIiwgIidvZiciKTsKK2RlYnVnKCIiKTsKKworZGVidWcoInRlc3RQ
cm90b3R5cGVGdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBhcmcgbGlzdCAobmFtZSwgYXJncywg
ZXhwZWN0ZWQpIik7CitkZWJ1ZygiIik7CisKK3Nob3VsZEJlVHJ1ZSgidGVzdENvbnN0cnVjdG9y
RnVuY3Rpb24oJ29mJywgJygpJywgW10pIik7CitzaG91bGRCZVRydWUoInRlc3RDb25zdHJ1Y3Rv
ckZ1bmN0aW9uKCdvZicsICcoMSknLCBbMV0pIik7CitzaG91bGRCZVRydWUoInRlc3RDb25zdHJ1
Y3RvckZ1bmN0aW9uKCdvZicsICcoMSwyLDMpJywgWzEsMiwzXSkiKTsKK2ZpbmlzaEpTVGVzdCgp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263026</attachid>
            <date>2015-10-13 15:09:46 -0700</date>
            <delta_ts>2015-10-13 17:50:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149975-20151013150909.patch</filename>
            <type>text/plain</type>
            <size>57198</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZmE2OTIwOGM2NzZlOGNlM2I2MWY4YmJmZDQ1OWE0N2JmNGNjODhiLi4zOGRhODI5MjRlOTFhZTRh
YzVmMTAyZDhiYjljNjRjZWFmNDRkZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MiBAQAorMjAxNS0xMC0xMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBFUzYgRml4IFR5cGVkQXJyYXkgY29uc3RydWN0b3JzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEVTNiBzcGVjIHJl
cXVpcmVzIHRoYXQgYW55IG9iamVjdCBhcmd1bWVudCBwYXNzZWQgdG8gYSBUeXBlZEFycmF5IGNv
bnN0cnVjdG9yIHRoYXQgaXMgbm90IGEgVHlwZWRBcnJheQorICAgICAgICBhbmQgaGFzIGFuIGl0
ZXJhdG9yIHNob3VsZCB1c2UgdGhlIGl0ZXJhdG9yIHRvIGNvbnN0cnVjdCB0aGUgVHlwZWRBcnJh
eS4gVG8gYXZvaWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgcmVsYXRlZAorICAgICAgICB0byBp
dGVyYXRpbmcgd2UgY2hlY2sgaWYgdGhlIGl0ZXJhdG9yIGF0dGFjaGVkIHRvIHRoZSBvYmplY3Qg
cG9pbnRzIHRvIHRoZSBnZW5lcmljIGFycmF5IGl0ZXJhdG9yIGFuZCBsZW5ndGggaXMgYSB2YWx1
ZS4KKyAgICAgICAgSWYgc28sIHdlIGRvIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIHNpbmNlIHRoZXJl
IHNob3VsZCBiZSBubyBvYnNlcnZhYmxlIGRpZmZlcmVuY2UuIEFub3RoZXIgb3RoZXIgaW50ZXJl
c3Rpbmcgbm90ZSBpcworICAgICAgICB0aGF0IHRoZSBFUzYgc3BlYyBoYXMgdGhlIG9mIGFuZCBm
cm9tIGZ1bmN0aW9ucyBvbiBhIHNoYXJlZCBjb25zdHJ1Y3RvciBiZXR3ZWVuIGFsbCB0aGUgVHlw
ZWRBcnJheSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIFdoZW4gdGhlIFR5cGVkQXJyYXkgaXMgY29u
c3RydWN0ZWQgdGhlIGV4cGVjdGF0aW9uIGlzIHRvIGNyYXdsIHRoZSBwcm90b3R5cGUgY2hhaW4g
b2YgdGhlIHRoaXMgdmFsdWUKKyAgICAgICAgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSWYgdGhl
IGZ1bmN0aW9uIGZpbmRzIGEga25vd24gVHlwZWRBcnJheSBjb25zdHJ1Y3RvciAoSW50MzJBcnJh
eSwgRmxvYXQ2NEFycmF5LC4uLikgdGhlbgorICAgICAgICBpdCBjcmVhdGVzIGEgVHlwZWRBcnJh
eSBvZiB0aGF0IHR5cGUuIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgYWRkaW5nIGEgcHJpdmF0ZSBm
dW5jdGlvbiAoQGFsbG9jYXRlVHlwZWRBcnJheSkgdG8gZWFjaAorICAgICAgICBvZiB0aGUgY29u
c3RydWN0b3JzIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIGFy
cmF5LiBCeSB1c2luZyB0aGUgcHJpdmF0ZSBmdW5jdGlvbnMgdGhlIEpJVCBzaG91bGQKKyAgICAg
ICAgaG9wZWZ1bGx5IGJlIGFibGUgdG8gb3B0aW1pemUgdGhpcyB0byBhIGRpcmVjdCBjYWxsLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9UeXBlZEFycmF5Q29u
c3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAob2YpOgorICAgICAgICAoZnJvbSk6CisgICAg
ICAgIChhbGxvY2F0ZUludDhBcnJheSk6CisgICAgICAgIChhbGxvY2F0ZUludDE2QXJyYXkpOgor
ICAgICAgICAoYWxsb2NhdGVJbnQzMkFycmF5KToKKyAgICAgICAgKGFsbG9jYXRlVWludDMyQXJy
YXkpOgorICAgICAgICAoYWxsb2NhdGVVaW50MTZBcnJheSk6CisgICAgICAgIChhbGxvY2F0ZVVp
bnQ4QXJyYXkpOgorICAgICAgICAoYWxsb2NhdGVVaW50OENsYW1wZWRBcnJheSk6CisgICAgICAg
IChhbGxvY2F0ZUZsb2F0MzJBcnJheSk6CisgICAgICAgIChhbGxvY2F0ZUZsb2F0NjRBcnJheSk6
CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNEYXRhVmlldy5jcHA6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OnNldEluZGV4KToK
KyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Ojp0b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmll
d0NsYXNzPjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3RnJvbUl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVk
QXJyYXlWaWV3KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpK
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChKU0M6OkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDOjpKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0VHlwZWRBcnJheVZpZXcpOgorICAgICAgICAo
SlNDOjpKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAg
ICAgICAoSlNDOjpKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmguCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTo6Y3JlYXRlKToK
KyAgICAgICAgKiB0ZXN0cy9lczYueWFtbDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVzb3Vy
Y2VzL3R5cGVkYXJyYXktY29uc3RydWN0b3ItaGVscGVyLWZ1bmN0aW9ucy5qczogQWRkZWQuCisg
ICAgICAgIChmb3JFYWNoVHlwZWRBcnJheSk6CisgICAgICAgIChoYXNTYW1lVmFsdWVzKToKKyAg
ICAgICAgKGZvbyk6CisgICAgICAgICh0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbik6CisgICAgICAg
ICh0ZXN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy90eXBlZGFycmF5LWNv
bnN0cnVjdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKEEpOgorICAgICAgICAoaXRlcmF0b3IucmV0
dXJuLm5leHQpOgorICAgICAgICAoaXRlcmF0b3IpOgorICAgICAgICAob2JqLnZhbHVlT2YpOgor
ICAgICAgICAoaXRlcmF0b3IyLnJldHVybi5uZXh0KToKKyAgICAgICAgKGl0ZXJhdG9yMik6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3R5cGVkYXJyYXktZnJvbS5qczogQWRkZWQuCisgICAgICAg
IChldmVuKToKKyAgICAgICAgKGlzQmlnRW5vdWdoQW5kRXhjZXB0aW9uKToKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1vZi5qczogQWRkZWQuCisKIDIwMTUtMTAtMDggIENvbW1p
dCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxOTA3MTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggZDY3MWU1MDc2YjgxOTJjZGZjN2VhN2YyYjYyZTY5ZWU0Nzk1OTJiYi4uMzY0NjUxMTliNmJm
OTM3YWFlNjNiYTQyMGQ1YzMyMjgwM2I3MjU5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtNTc0LDYgKzU3NCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NP
VVJDRVMKICAgICBydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKICAgICBydW50aW1l
L0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKICAgICBydW50aW1lL0pTVHlwZWRBcnJheVBy
b3RvdHlwZXMuY3BwCisgICAgcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3Bw
CiAgICAgcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5jcHAKICAgICBydW50aW1lL0pTV2Vha01hcC5jcHAKQEAgLTEwOTAsNiAr
MTA5MSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTCiAgICAgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1N0cmluZ0NvbnN0cnVjdG9yLmpzCiAgICAgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1N0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5qcwogICAg
ICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9UeXBlZEFycmF5LnByb3RvdHlwZS5qcwor
ICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3Iu
anMKICkKIAogYWRkX2N1c3RvbV9jb21tYW5kKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBkZTBjNzE0MmYyMTJmNGU5NDkwNjE3NTgwZTZjMGZjNDRlMDM4ZjlmLi4xMGEwN2JhMDAz
Y2E1YmYwNjMwZWVhYTY1YjdjYWM5NzI4YTJiNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtOTcyLDYgKzk3Miw4IEBACiAJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBS
dW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1
MkI5MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8q
IFR5cGVQcm9maWxlci5jcHAgKi87IH07CisJCTUzNEM0NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBK
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNTM0QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8q
IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVC
RDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0
MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAq
LzsgfTsKIAkJNUQ1MzcyNkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVENTM3MjZFMEUxQzU0ODgwMDIx
RTU0OSAvKiBUcmFjaW5nLmggKi87IH07CiAJCTVENUQ4QUQxMEUwRDBFQkUwMEY5QzY5MiAvKiBs
aWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgKi87IH07CkBA
IC0yNzkyLDYgKzI3OTQsOSBAQAogCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGlt
ZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8q
IFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9m
aWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcgLyogVHlwZWRBcnJh
eUNvbnN0cnVjdG9yLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
VHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzRDNDU3RDFCQzcyNTQ5MDA3
NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTdBMUI3OTA2RTQwMDBFQkQzMyAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzkxN0U3QzFCNzkxMTA2MDAw
RUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5LnBy
b3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFR5cGVk
QXJyYXkucHJvdG90eXBlLmpzOyBwYXRoID0gYnVpbHRpbnMvVHlwZWRBcnJheS5wcm90b3R5cGUu
anM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTQ5MDksNiArNDkxNCw4IEBACiAJ
CQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAq
LywKIAkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi8s
CiAJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywKKwkJ
CQk1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmNwcCAqLywKKwkJCQk1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovLAogCQkJCTUzOTE3RTdDMUI3OTExMDYwMDBFQkQz
MyAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJNjUwN0QyOTcwRTg3MUU0
QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLywKQEAgLTU5MDcsNiArNTkxNCw3IEBACiAJCQkJ
N0NGOUJDNjAxQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmpzICovLAogCQkJ
CTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUuanMg
Ki8sCiAJCQkJNTM5MTdFODMxQjc5MUNCODAwMEVCRDMzIC8qIFR5cGVkQXJyYXkucHJvdG90eXBl
LmpzICovLAorCQkJCTUzNEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3Ry
dWN0b3IuanMgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJ1aWx0aW5zOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTY1NzksNiArNjU4Nyw3IEBACiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyMTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1RkQwMDg2MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNv
bGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0QzQ1N0MxQkM3MjQxMTAwNzQ3NkE3IC8q
IEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVDM0Ex
QTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTU5NDU1OTMxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0
RGVidWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUExODkxQjA3NzAwMzFDN0ZB
IC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDE1
LDYgKzgwMjQsNyBAQAogCQkJCTY1NDBDN0EwMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0
T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0ExMUI4MkUxQzMwMDBGNkI3OSAv
KiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxNTE4
MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM0
QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFRDE4OTFCNTU0MDAzMUM3RkEgLyogUmVndWxhckV4
cHJlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVF
RkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlD
b25zdHJ1Y3Rvci5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5
Q29uc3RydWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY3YmNkOTE0M2RjNWNhMmQ3MDQ5YmYwOGNiYmRm
OGI3ZmIwM2VkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3IuanMKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBBY2NvcmRpbmcgdG8gdGhl
IHNwZWMgd2UgYXJlIHN1cHBvc2VkIHRvIGNyYXdsIHRoZSBwcm90b3R5cGUgY2hhaW4gbG9va2lu
ZworLy8gZm9yIHRoZSBhIFR5cGVkQXJyYXkgY29uc3RydWN0b3IuIFRoZSB3YXkgd2UgaW1wbGVt
ZW50IHRoaXMgaXMgd2l0aCBhCisvLyBwcml2YXRlIGZ1bmN0aW9uLCBAYWxsb2N0YXRlVHlwZWRB
cnJheSwgb24gZWFjaCBvZiB0aGUgcHJvdG90eXBlcy4KKy8vIFRoaXMgZW5hYmxlcyB1cyB0byBv
cHRpbWl6ZSB0aGlzIGxvb2t1cCBpbiB0aGUgaW5saW5lIGNhY2hlLgorCitmdW5jdGlvbiBvZigv
KiBpdGVtcy4uLiAqLykKK3sKKyAgICAidXNlIHN0cmljdCI7CisgICAgbGV0IGxlbiA9IGFyZ3Vt
ZW50cy5sZW5ndGg7CisgICAgbGV0IGNvbnN0cnVjdEZ1bmN0aW9uID0gdGhpcy5AYWxsb2NhdGVU
eXBlZEFycmF5OworICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKQorICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVzIGl0cyB0
aGlzIGFyZ3VtZW50IHRvIHN1YmNsYXNzIGEgVHlwZWRBcnJheSBjb25zdHJ1Y3RvciIpOworCisg
ICAgbGV0IHJlc3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGxlbik7CisKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSBhcmd1bWVudHNbaV07CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBmcm9tKGl0ZW1zIC8qIFsgLCBtYXBm
biBbICwgdGhpc0FyZyBdIF0gKi8pCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgbGV0IG1h
cEZuID0gYXJndW1lbnRzWzFdOworCisgICAgbGV0IHRoaXNBcmc7CisKKyAgICBpZiAobWFwRm4g
IT09IHVuZGVmaW5lZCkgeworICAgICAgICBpZiAodHlwZW9mIG1hcEZuICE9PSAiZnVuY3Rpb24i
KQorICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkuZnJvbSByZXF1
aXJlcyB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQsIHdoZW4gcHJvdmlkZWQsIGJlIGEgZnVuY3Rp
b24iKTsKKworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpCisgICAgICAgICAgICB0
aGlzQXJnID0gYXJndW1lbnRzWzJdOworICAgIH0KKworICAgIGlmIChpdGVtcyA9PSBudWxsKQor
ICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRBcnJheS5mcm9tIHJlcXVpcmVzIGFu
IGFycmF5LWxpa2Ugb2JqZWN0IC0gbm90IG51bGwgb3IgdW5kZWZpbmVkIik7CisKKyAgICBsZXQg
aXRlcmF0b3JNZXRob2QgPSBpdGVtc1tAc3ltYm9sSXRlcmF0b3JdOworICAgIGlmIChpdGVyYXRv
ck1ldGhvZCAhPSBudWxsKSB7CisgICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JNZXRob2QgIT09
ICJmdW5jdGlvbiIpCisgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRBcnJh
eS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHByb3BlcnR5IG9mIHRoZSBmaXJzdCBhcmd1bWVudCwg
aXRlbXNbU3ltYm9sLml0ZXJhdG9yXSwgd2hlbiBleGlzdHMsIGJlIGEgZnVuY3Rpb24iKTsKKwor
ICAgICAgICBsZXQgYWNjdW11bGF0b3IgPSBbXTsKKworICAgICAgICBsZXQgayA9IDA7CisgICAg
ICAgIGxldCBpdGVyYXRvciA9IGl0ZXJhdG9yTWV0aG9kLkBjYWxsKGl0ZW1zKTsKKworICAgICAg
ICAvLyBTaW5jZSBmb3Itb2YgbG9vcCBvbmNlIG1vcmUgbG9va3MgdXAgdGhlIEBAaXRlcmF0b3Ig
cHJvcGVydHkgb2YgYSBnaXZlbiBpdGVyYWJsZSwKKyAgICAgICAgLy8gaXQgY291bGQgYmUgb2Jz
ZXJ2YWJsZSBpZiB0aGUgdXNlciBkZWZpbmVzIGEgZ2V0dGVyIGZvciBAQGl0ZXJhdG9yLgorICAg
ICAgICAvLyBUbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgd2UgZGVmaW5lIGEgd3JhcHBlciBvYmpl
Y3QgdGhhdCBAQGl0ZXJhdG9yIGp1c3QgcmV0dXJucyBhIGdpdmVuIGl0ZXJhdG9yLgorICAgICAg
ICBsZXQgd3JhcHBlciA9IHsKKyAgICAgICAgICAgIFtAc3ltYm9sSXRlcmF0b3JdKCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworCisgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHdyYXBwZXIpIHsKKyAgICAgICAgICAgIGlm
IChtYXBGbikKKyAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QoYWNjdW11bGF0b3IsIGss
IHRoaXNBcmcgPT09IHVuZGVmaW5lZCA/IG1hcEZuKHZhbHVlLCBrKSA6IG1hcEZuLkBjYWxsKHRo
aXNBcmcsIHZhbHVlLCBrKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQHB1
dEJ5VmFsRGlyZWN0KGFjY3VtdWxhdG9yLCBrLCB2YWx1ZSk7CisgICAgICAgICAgICBrKys7Cisg
ICAgICAgIH0KKworICAgICAgICBsZXQgY29uc3RydWN0RnVuY3Rpb24gPSB0aGlzLkBhbGxvY2F0
ZVR5cGVkQXJyYXk7CisgICAgICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gdW5kZWZpbmVk
KQorICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkuZnJvbSByZXF1
aXJlcyBpdHMgdGhpcyBhcmd1bWVudCBzdWJjbGFzcyBhIFR5cGVkQXJyYXkgY29uc3RydWN0b3Ii
KTsKKworICAgICAgICBsZXQgcmVzdWx0ID0gY29uc3RydWN0RnVuY3Rpb24oayk7CisKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrOyBpKyspIAorICAgICAgICAgICAgcmVzdWx0W2ldID0g
YWNjdW11bGF0b3JbaV07CisKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IGxldCBhcnJheUxpa2UgPSBAT2JqZWN0KGl0ZW1zKTsKKyAgICBsZXQgYXJyYXlMaWtlTGVuZ3Ro
ID0gQHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpOworCisgICAgbGV0IGNvbnN0cnVjdEZ1bmN0
aW9uID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5OworICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlv
biA9PT0gdW5kZWZpbmVkKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigidGhpcyBkb2Vz
IG5vdCBzdWJjbGFzcyBhIFR5cGVkQXJyYXkgY29uc3RydWN0b3IiKTsKKworICAgIGxldCByZXN1
bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihhcnJheUxpa2VMZW5ndGgpOworCisgICAgbGV0IGsgPSAw
OworICAgIHdoaWxlIChrIDwgYXJyYXlMaWtlTGVuZ3RoKSB7CisgICAgICAgIGxldCB2YWx1ZSA9
IGFycmF5TGlrZVtrXTsKKyAgICAgICAgaWYgKG1hcEZuKQorICAgICAgICAgICAgcmVzdWx0W2td
ID0gdGhpc0FyZyA9PT0gdW5kZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwo
dGhpc0FyZywgdmFsdWUsIGspOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRba10g
PSB2YWx1ZTsKKyAgICAgICAgaysrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2Z1bmN0aW9uIGFsbG9jYXRlSW50OEFycmF5KGxlbmd0aCkgeworCisgICAgcmV0dXJuIG5ldyBA
SW50OEFycmF5KGxlbmd0aCk7CisKK30KKworZnVuY3Rpb24gYWxsb2NhdGVJbnQxNkFycmF5KGxl
bmd0aCkgeworCisgICAgcmV0dXJuIG5ldyBASW50MTZBcnJheShsZW5ndGgpOworICAgIAorfQor
CitmdW5jdGlvbiBhbGxvY2F0ZUludDMyQXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3
IEBJbnQzMkFycmF5KGxlbmd0aCk7CisgICAgCit9CisKK2Z1bmN0aW9uIGFsbG9jYXRlVWludDMy
QXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3IEBVaW50MzJBcnJheShsZW5ndGgpOwor
Cit9CisKK2Z1bmN0aW9uIGFsbG9jYXRlVWludDE2QXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1
cm4gbmV3IEBVaW50MTZBcnJheShsZW5ndGgpOworICAgIAorfQorCitmdW5jdGlvbiBhbGxvY2F0
ZVVpbnQ4QXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3IEBVaW50OEFycmF5KGxlbmd0
aCk7CisgICAgCit9CisKK2Z1bmN0aW9uIGFsbG9jYXRlVWludDhDbGFtcGVkQXJyYXkobGVuZ3Ro
KSB7CisKKyAgICByZXR1cm4gbmV3IEBVaW50OENsYW1wZWRBcnJheShsZW5ndGgpOworCit9CisK
K2Z1bmN0aW9uIGFsbG9jYXRlRmxvYXQzMkFycmF5KGxlbmd0aCkgeworCisgICAgcmV0dXJuIG5l
dyBARmxvYXQzMkFycmF5KGxlbmd0aCk7CisKK30KKworZnVuY3Rpb24gYWxsb2NhdGVGbG9hdDY0
QXJyYXkobGVuZ3RoKSB7CisKKyAgICByZXR1cm4gbmV3IEBGbG9hdDY0QXJyYXkobGVuZ3RoKTsK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRl
bnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKaW5kZXggMzM1NTAwMmJiYWM5YzBiYjVkMTdhZjYzNjNlNTQyMmY4NDBjNDYzNi4uOTJj
OWJiMGYwOTgxNjdkN2M3MDZhMDA4NGNkMmU1YmFjZTM1ZDBiZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0zMTAsNiArMzEw
LDE2IEBACiAgICAgbWFjcm8oSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uKSBcCiAgICAgbWFjcm8o
Z2V0KSBcCiAgICAgbWFjcm8oc2V0KSBcCisgICAgbWFjcm8oYWxsb2NhdGVUeXBlZEFycmF5KSBc
CisgICAgbWFjcm8oSW50OEFycmF5KSBcCisgICAgbWFjcm8oSW50MTZBcnJheSkgXAorICAgIG1h
Y3JvKEludDMyQXJyYXkpIFwKKyAgICBtYWNybyhVaW50OEFycmF5KSBcCisgICAgbWFjcm8oVWlu
dDhDbGFtcGVkQXJyYXkpIFwKKyAgICBtYWNybyhVaW50MTZBcnJheSkgXAorICAgIG1hY3JvKFVp
bnQzMkFycmF5KSBcCisgICAgbWFjcm8oRmxvYXQzMkFycmF5KSBcCisgICAgbWFjcm8oRmxvYXQ2
NEFycmF5KSBcCiAKIAogbmFtZXNwYWNlIEpTQyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXcuY3BwCmluZGV4IDUxM2Q0YzZiM2JkNWNiZjAwODQ2MDVlNTJjMGVm
NWIzYTQxNDc0ZDMuLjhkNGNjMjVhZGE5ZjM4NTcxYWY2ZWRkNDc0Njk4MzlkMDM1MmZhMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDYgKzgz
LDEyIEBAIGJvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQsIHVuc2lnbmVkKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBKU0RhdGFWaWV3Ojpz
ZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNWYWx1ZSkKK3sKKyAgICBVTlJFQUNIQUJM
RV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFBhc3NSZWZQdHI8RGF0
YVZpZXc+IEpTRGF0YVZpZXc6OnR5cGVkSW1wbCgpCiB7CiAgICAgcmV0dXJuIERhdGFWaWV3Ojpj
cmVhdGUoYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCmluZGV4IDk1MGQxZDY3OGQ0YmMxZTFlNDJjNGI3
NDVhMTg3ZmI4MWFjOGE4MDcuLjc0NDc3YjAxMTQ4ZjRmZmY1OWIyMjQ4ZWJkNjA0Y2JjMzFhMjEy
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNiAr
NDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMg
SlNEYXRhVmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0
aCk7CiAgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBzZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCwgSlNWYWx1ZSk7CiAgICAgCiAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAppbmRleCA2ZTU1YTMxNzkyOWFmYzlm
NzVhZGMyYzM1MDU0NTg1NzUzNDNlN2I4Li40ZWY3MDc1MWRlYjgyMjJlMjI5OTkwYjJhYTQyNDYy
ZTE2Y2JkNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKQEAgLTE3MSwxMyArMTcxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgT3B0aW9uYWw8dHlwZW5h
bWUgQWRhcHRvcjo6VHlwZT4gdG9BZGFwdG9yTmF0aXZlRnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBqc1ZhbHVlKQotICAgIHsKLSAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSB2YWx1ZSA9IHRvTmF0aXZlRnJvbVZhbHVlPEFkYXB0b3I+KGV4ZWMsIGpzVmFsdWUpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gTnVsbG9w
dDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KKyAgICBzdGF0aWMgRWxlbWVudFR5cGUg
dG9BZGFwdG9yTmF0aXZlRnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBqc1ZhbHVl
KSB7IHJldHVybiB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBqc1ZhbHVlKTsgfQog
CiAgICAgYm9vbCBzZXRSYW5nZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kLCBKU1ZhbHVlIGpzVmFsdWUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oCmluZGV4IDNkZmZlM2MyMzE1OWM2NDcwMWY2ZjA2NzQxNjVmMjBm
YjNjODY0Y2EuLjU1OTBkZjQyZWIwYmNmNDEzN2YxYWVjYzBlZWM5MzI4MTAxODJkYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTEgKzM3LDExIEBAIHB1YmxpYzoK
IAogcHJvdGVjdGVkOgogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0m
LCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogcHJpdmF0ZUFsbG9jYXRvcik7CiAKIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKAotICAg
ICAgICBWTSYsIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgICAgIFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVj
dCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogcHJp
dmF0ZUFsbG9jYXRvcik7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAppbmRleCAyZGRjMjlmNzE4OTdiYjUx
ZDM5MGIwNmIyNWE3MzgzMzg3NGJhMGMxLi5kNWU1YTAyMTIzYmZjMjY5YTM4NmRiMjBlYzRmNWQ2
M2U2ZmJlM2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsOSArMjcsMTMgQEAKICNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcklubGluZXNfaAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRv
ck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCiAjaW5jbHVkZSAiSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtNDAsMjQgKzQ0LDI3IEBAIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLXZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBwcm90
b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBwcml2YXRlQWxsb2NhdG9yKQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5CWVRFU19QRVJfRUxFTUVOVCwganNOdW1iZXIoVmlld0NsYXNzOjplbGVt
ZW50U2l6ZSksIERvbnRFbnVtIHwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKworICAgIGlmIChw
cml2YXRlQWxsb2NhdG9yKQorICAgICAgICBwdXREaXJlY3RCdWlsdGluRnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+YWxsb2NhdGVUeXBlZEFycmF5UHJpdmF0ZU5h
bWUsIHByaXZhdGVBbGxvY2F0b3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCi0gICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKLSAgICBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogcHJpdmF0ZUFsbG9jYXRvcikKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yKiByZXN1bHQgPQogICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKICAgICAgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIG5hbWUpOworICAgIHJlc3VsdC0+
ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBuYW1lLCBwcml2YXRl
QWxsb2NhdG9yKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MCwxMiArNzcsNTIgQEAg
U3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmNyZWF0ZVN0cnVjdHVyZSgKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld0Zyb21JdGVy
YXRvcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIGl0ZXJh
dG9yKQoreworICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCAiU3ltYm9sLkl0ZXJhdG9yIGZvciB0
aGUgZmlyc3QgYXJndW1lbnQgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0LiIpKTsKKworICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIHN0b3JhZ2U7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
SlNWYWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKKyAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBKU1ZhbHVlIG5leHRJdGVtID0gaXRlcmF0b3JWYWx1ZShl
eGVjLCBuZXh0KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICBzdG9y
YWdlLmFwcGVuZChuZXh0SXRlbSk7CisgICAgfQorCisgICAgVmlld0NsYXNzKiByZXN1bHQgPSBW
aWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBzdG9yYWdlLnNp
emUoKSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoIXJlc3VsdC0+c2V0SW5kZXgoZXhlYywgaSwgc3RvcmFnZS5hdChp
KSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0KICAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCiAgICAgICAg
ICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7Ci0gICAgCisKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAg
ICAgICAgaWYgKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IFR5cGVEYXRhVmll
dykKICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1l
bnQuIikpOwpAQCAtMTEzLDggKzE2MCw0MSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleAogICAg
IC8vIC0gQW4gaW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQg
bGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxpemVzIGl0LgogICAgIAogICAgIGlmIChKU09iamVjdCog
b2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQotICAgICAgICAgICAgb2JqZWN0LT5n
ZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMp
OworICAgICAgICBQcm9wZXJ0eVNsb3QgbGVuZ3RoU2xvdChvYmplY3QpOworICAgICAgICBvYmpl
Y3QtPmdldFByb3BlcnR5U2xvdChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGxlbmd0
aFNsb3QpOworCisgICAgICAgIGlmICghaXNUeXBlZFZpZXcob2JqZWN0LT5jbGFzc0luZm8oKS0+
dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1
bmMgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7
CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICAgICAgLy8g
V2Ugd291bGQgbGlrZSBub3QgdXNlIHRoZSBpdGVyYXRvciBhcyBpdCBpcyBwYWluZnVsbHkgc2xv
dy4gRm9ydHVuYXRlbHksIHVubGVzcworICAgICAgICAgICAgLy8gMSkgVGhlIGl0ZXJhdG9yIGlz
IG5vdCBhIGtub3duIGl0ZXJhdG9yLgorICAgICAgICAgICAgLy8gMikgVGhlIGJhc2Ugb2JqZWN0
IGRvZXMgbm90IGhhdmUgYSBsZW5ndGggZ2V0dGVyLgorICAgICAgICAgICAgLy8gMykgQmFkIHRp
bWVzIGFyZSBiZWluZyBoYWQuCisgICAgICAgICAgICAvLyBpdCBzaG91bGQgbm90IGJlIG9ic2Vy
dmFibGUgdGhhdCB3ZSBkbyBub3QgdXNlIHRoZSBpdGVyYXRvci4KKworICAgICAgICAgICAgaWYg
KCFpdGVyYXRvckZ1bmMuaXNVbmRlZmluZWQoKQorICAgICAgICAgICAgICAgICYmIChpdGVyYXRv
ckZ1bmMgIT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVByb3RvVmFsdWVzRnVu
Y3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB8fCBsZW5ndGhTbG90LmlzQWNjZXNzb3IoKSB8
fCBsZW5ndGhTbG90LmlzQ3VzdG9tKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkpKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgICAgICAgICAgICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoaXRlcmF0b3JGdW5jLCBjYWxsRGF0YSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsICJT
eW1ib2wuSXRlcmF0b3IgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCBjYW5ub3QgYmUgY2FsbGVkLiIp
KTsKKworICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3VtZW50czsKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGNhbGwoZXhlYywgaXRlcmF0b3JGdW5jLCBjYWxs
VHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yPFZpZXdDbGFz
cz4oZXhlYywgc3RydWN0dXJlLCBpdGVyYXRvcik7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFNsb3QuZ2V0VmFsdWUoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVGdW5jdGlvbnMuaAppbmRleCBlZTViZGVhODcwZTQ1YmQxMDcxZGY4YzBkYTYxM2FiNGQ5
NDQ2YjA3Li5hMDkwODY5OGIyNzE5Zjk5ZGNhMTEwMTI1OWMwMzFlMmQ2YmEwYTE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgKQEAgLTE2MCwxMiAr
MTYwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4CiAgICAgSlNWYWx1ZSB2YWx1ZVRvRmlu
ZCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwogCi0gICAgYXV0byB0YXJn
ZXRPcHQgPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZShleGVjLCB2YWx1ZVRv
RmluZCk7Ci0gICAgaWYgKCF0YXJnZXRPcHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBl
IHRhcmdldCA9IHRhcmdldE9wdC52YWx1ZSgpOwogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxl
bWVudFR5cGUqIGFycmF5ID0gdGhpc09iamVjdC0+dHlwZWRWZWN0b3IoKTsKKyAgICB0eXBlbmFt
ZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlIHRhcmdldCA9IFZpZXdDbGFzczo6dG9BZGFwdG9yTmF0
aXZlRnJvbVZhbHVlKGV4ZWMsIHZhbHVlVG9GaW5kKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKGFycmF5
W2luZGV4XSA9PSB0YXJnZXQpCkBAIC0yNDUsMTMgKzI0MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4
ZWNTdGF0ZQogICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURv
dWJsZSk7CiAgICAgfQogCi0gICAgYXV0byB0YXJnZXRPcHQgPSBWaWV3Q2xhc3M6OnRvQWRhcHRv
ck5hdGl2ZUZyb21WYWx1ZShleGVjLCB2YWx1ZVRvRmluZCk7Ci0gICAgaWYgKCF0YXJnZXRPcHQp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICB0
eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlIHRhcmdldCA9IHRhcmdldE9wdC52YWx1ZSgp
OwogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVudFR5cGUqIGFycmF5ID0gdGhpc09iamVj
dC0+dHlwZWRWZWN0b3IoKTsKLQorICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVudFR5cGUg
dGFyZ2V0ID0gVmlld0NsYXNzOjp0b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWUoZXhlYywgdmFsdWVU
b0ZpbmQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA+PSAwOyAt
LWluZGV4KSB7CiAgICAgICAgIGlmIChhcnJheVtpbmRleF0gPT0gdGFyZ2V0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDUyNzI2
NzhlMWQ5NzViNjFiOWFkNzdmOGZkZGU3ZGQ3NTdkYjcxMGUuLjJjYThkMjk1NWU0YjMyNGRhMGU4
ZDU5MGU2NTk5NmE5NzFlMDc0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTk5LDYgKzk5LDcgQEAKICNpbmNsdWRlICJKU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
aCIKICNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKICNpbmNsdWRlICJKU1dBU01Nb2R1
bGUuaCIKQEAgLTQ2MCwyMyArNDYxLDM2IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT4ganNOYW1lLCBsb3dlck5hbWUgIyMgQ29uc3RydWN0CiAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPk1hdGgsIE1h
dGhPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZt
LCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlJlZmxlY3QsIFJlZmxl
Y3RPYmplY3Q6OmNyZWF0ZSh2bSwgdGhpcywgUmVmbGVjdE9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAKKyAgICBK
U1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIHR5cGVkQXJyYXlTdXBlckNvbnN0cnVjdG9yID0g
SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIEpTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgdHlwZWRBcnJheVByb3RvKTsKKyAgICB0eXBlZEFycmF5UHJvdG8tPnB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rv
ciwgdHlwZWRBcnJheVN1cGVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKwogICAgIHN0ZDo6YXJy
YXk8SW50ZXJuYWxGdW5jdGlvbiosIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gdHlwZWRB
cnJheUNvbnN0cnVjdG9yczsKLSAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlw
ZUludDgpXSA9IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSlNJbnQ4QXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBl
LmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLmdldCgp
LCBBU0NJSUxpdGVyYWwoIkludDhBcnJheSIpKTsKLSAgICB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZt
LCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNild
LnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJJbnQxNkFycmF5IikpOwotICAgIHR5cGVk
QXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGUodm0sIEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIkludDMyQXJy
YXkiKSk7Ci0gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OCldID0g
SlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSlNVaW50OEFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgiVWludDhBcnJheSIpKTsKLSAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5k
ZXgoVHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGUodm0sIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiVWlu
dDhDbGFtcGVkQXJyYXkiKSk7Ci0gICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5
cGVVaW50MTYpXSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBKU1VpbnQx
NkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90
eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIlVpbnQxNkFycmF5IikpOwotICAgIHR5cGVkQXJyYXlD
b25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDMyKV0gPSBKU1VpbnQzMkFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZSh2bSwgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJVaW50MzJBcnJh
eSIpKTsKLSAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9
IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSlNGbG9hdDMyQXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLmdldCgp
LCBBU0NJSUxpdGVyYWwoIkZsb2F0MzJBcnJheSIpKTsKLSAgICB0eXBlZEFycmF5Q29uc3RydWN0
b3JzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXSA9IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZSh2bSwgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIkZsb2F0NjRBcnJheSIp
KTsKLSAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0gPSBK
U0RhdGFWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxp
dGVyYWwoIkRhdGFWaWV3IikpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChU
eXBlSW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCB0aGlzLCBKU0lu
dDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHR5cGVkQXJyYXlT
dXBlckNvbnN0cnVjdG9yKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90
eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIkludDhBcnJheSIpLCB0eXBlZEFycmF5Q29uc3RydWN0
b3JBbGxvY2F0ZUludDhBcnJheUNvZGVHZW5lcmF0b3Iodm0pKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHZtLCB0aGlzLCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCB0eXBlZEFycmF5U3VwZXJDb25zdHJ1Y3RvciksIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiSW50MTZBcnJh
eSIpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JBbGxvY2F0ZUludDE2QXJyYXlDb2RlR2VuZXJhdG9y
KHZtKSk7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0g
SlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgdGhpcywgSlNJbnQzMkFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgdHlwZWRBcnJheVN1cGVyQ29uc3Ry
dWN0b3IpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgp
LCBBU0NJSUxpdGVyYWwoIkludDMyQXJyYXkiKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2Nh
dGVJbnQzMkFycmF5Q29kZUdlbmVyYXRvcih2bSkpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlVWludDgpXSA9IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dm0sIHRoaXMsIEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRo
aXMsIHR5cGVkQXJyYXlTdXBlckNvbnN0cnVjdG9yKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJVaW50OEFycmF5IiksIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDhBcnJheUNvZGVHZW5lcmF0b3Iodm0pKTsK
KyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldID0g
SlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIEpTVWludDhD
bGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB0eXBlZEFy
cmF5U3VwZXJDb25zdHJ1Y3RvciksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFt
cGVkKV0ucHJvdG90eXBlLmdldCgpLCBBU0NJSUxpdGVyYWwoIlVpbnQ4Q2xhbXBlZEFycmF5Iiks
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRlVWludDhDbGFtcGVkQXJyYXlDb2RlR2VuZXJh
dG9yKHZtKSk7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYp
XSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCB0aGlzLCBKU1VpbnQxNkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgdHlwZWRBcnJheVN1cGVy
Q29uc3RydWN0b3IpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlw
ZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJVaW50MTZBcnJheSIpLCB0eXBlZEFycmF5Q29uc3RydWN0
b3JBbGxvY2F0ZVVpbnQxNkFycmF5Q29kZUdlbmVyYXRvcih2bSkpOworICAgIHR5cGVkQXJyYXlD
b25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDMyKV0gPSBKU1VpbnQzMkFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZSh2bSwgdGhpcywgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIHRoaXMsIHR5cGVkQXJyYXlTdXBlckNvbnN0cnVjdG9yKSwgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiVWlu
dDMyQXJyYXkiKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yQWxsb2NhdGVVaW50MzJBcnJheUNvZGVH
ZW5lcmF0b3Iodm0pKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXSA9IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgdGhpcywgSlNG
bG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB0eXBlZEFy
cmF5U3VwZXJDb25zdHJ1Y3RvciksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMild
LnByb3RvdHlwZS5nZXQoKSwgQVNDSUlMaXRlcmFsKCJGbG9hdDMyQXJyYXkiKSwgdHlwZWRBcnJh
eUNvbnN0cnVjdG9yQWxsb2NhdGVGbG9hdDMyQXJyYXlDb2RlR2VuZXJhdG9yKHZtKSk7CisgICAg
dHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0KV0gPSBKU0Zsb2F0NjRB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgdHlwZWRBcnJheVN1cGVyQ29uc3RydWN0b3Ip
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiRmxvYXQ2NEFycmF5IiksIHR5cGVkQXJyYXlDb25zdHJ1Y3RvckFsbG9jYXRl
RmxvYXQ2NEFycmF5Q29kZUdlbmVyYXRvcih2bSkpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KHZtLCB0aGlzLCBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
RGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiRGF0YVZpZXciKSwgbnVs
bHB0cik7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1CRVJf
T0ZfVFlQRURfQVJSQVlfVFlQRVM7IHR5cGVkQXJyYXlJbmRleC0tOykgewogICAgICAgICBtX3R5
cGVkQXJyYXlzW3R5cGVkQXJyYXlJbmRleF0ucHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOwogICAgICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB0eXBlZEFy
cmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0tPm5hbWUoZXhlYykpLCB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKICAgICB9CiAKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+SW50OEFycmF5
UHJpdmF0ZU5hbWUsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50OCldLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPkludDE2QXJyYXlQcml2YXRlTmFtZSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0lu
ZGV4KFR5cGVJbnQxNildLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPkludDMyQXJyYXlQcml2YXRlTmFtZSwgdHlwZWRBcnJh
eUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlVpbnQ4QXJyYXlQcml2
YXRlTmFtZSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OCldLCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPlVpbnQ4Q2xhbXBlZEFycmF5UHJpdmF0ZU5hbWUsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNb
dG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0sIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+VWludDE2QXJyYXlQcml2YXRlTmFt
ZSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYpXSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5V
aW50MzJBcnJheVByaXZhdGVOYW1lLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlw
ZVVpbnQzMildLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPkZsb2F0MzJBcnJheVByaXZhdGVOYW1lLCB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5GbG9hdDY0QXJyYXlQcml2
YXRlTmFtZSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0KV0sIERv
bnRFbnVtKTsKKwogICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2bSwgdGhpcywgTW9kdWxlTG9hZGVy
T2JqZWN0OjpjcmVhdGUodm0sIHRoaXMsIE1vZHVsZUxvYWRlck9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBpZiAoT3B0aW9u
czo6ZXhwb3NlSW50ZXJuYWxNb2R1bGVMb2FkZXIoKSkKICAgICAgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPkxvYWRlciwgbV9tb2R1bGVMb2FkZXIu
Z2V0KCksIERvbnRFbnVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
MmM5MDk2ZjZlZGZhY2E4MWE0NGRjNzYzOTY5OGFmNjhkMGQzMzQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAi
RXJyb3IuaCIKKyNpbmNsdWRlICJKU0NCdWlsdGlucy5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yOjpKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcikgfTsKKwor
dm9pZCBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgIlR5cGVkQXJyYXkiKTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5
cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworCisgICAgSlNDX0JVSUxUSU5fRlVO
Q1RJT04odm0ucHJvcGVydHlOYW1lcy0+b2YsIHR5cGVkQXJyYXlDb25zdHJ1Y3Rvck9mQ29kZUdl
bmVyYXRvciwgRG9udEVudW0pOworICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPmZyb20sIHR5cGVkQXJyYXlDb25zdHJ1Y3RvckZyb21Db2RlR2VuZXJhdG9yLCBEb250
RW51bSk7Cit9CisKK0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogSlNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yOjpjcmVhdGUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBKU09iamVjdCogcHJvdG90eXBlKQor
eworICAgIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitTdHJ1Y3R1cmUqIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCisKKy8vIFRoZSBvbmx5IHdheSB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0
aW9uIGlzIHRocm91Z2ggUmVmbGVjdC5jb25zdHJ1Y3Qgb3IgaWYgdGhleSBtdWNrZWQgd2l0aCB0
aGUgVHlwZWRBcnJheSBwcm90b3R5cGUgY2hhaW4uCisvLyBJbiBlaXRoZXIgY2FzZSB3ZSBhcmUg
b2sgd2l0aCB0aGlzIGJlaW5nIHNsb3cuCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IGV4ZWMtPm5ld1RhcmdldCgpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CisgICAgaWYgKCFvYmplY3QpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgIm5ldy50YXJn
ZXQgcGFzc2VkIHRvIFR5cGVkQXJyYXkgaXMgbm90IGFuIG9iamVjdC4iKSk7CisKKyAgICBDb25z
dHJ1Y3REYXRhIGRhdGE7CisgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3Ry
dWN0RGF0YShvYmplY3QsIGRhdGEpID09IENvbnN0cnVjdFR5cGVOb25lKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsICJuZXcudGFyZ2V0IHBhc3Nl
ZCB0byBUeXBlZEFycmF5IGlzIG5vdCBhIHZhbGlkIGNvbnN0cnVjdG9yLiIpKTsKKworICAgIGZv
ciAoOyAhdmFsdWUuaXNOdWxsKCk7IHZhbHVlID0ganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpLT5w
cm90b3R5cGUoKSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IqPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZmluZCBUeXBlZEFycmF5IGNvbnN0cnVj
dG9yIHRoYXQgaW5oZXJpdHMgZnJvbSBUeXBlZEFycmF5LiIpKTsKKyAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4q
Pih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEpTSW50OEFycmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDE2QXJyYXk+Kj4odmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxKU0ludDE2QXJy
YXk+KGV4ZWMpOworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTSW50MzJBcnJheT4qPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTSW50MzJBcnJheT4oZXhlYyk7Cisg
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8SlNVaW50OEFycmF5Pio+KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RH
ZW5lcmljVHlwZWRBcnJheVZpZXc8SlNVaW50OEFycmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFy
cmF5Pio+KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRB
cnJheVZpZXc8SlNVaW50MTZBcnJheT4oZXhlYyk7CisgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4qPih2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpT
VWludDMyQXJyYXk+KGV4ZWMpOworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+Kj4odmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxKU1VpbnQ4
Q2xhbXBlZEFycmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0MzJBcnJheT4qPih2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTRmxvYXQzMkFy
cmF5PihleGVjKTsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4qPih2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEpTRmxvYXQ2NEFycmF5PihleGVj
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJv
cihleGVjLCAiVW5hYmxlIHRvIGZpbmQgVHlwZWRBcnJheSBjb25zdHJ1Y3RvciBpbiBwcm90b3R5
cGUtY2hhaW4sIGhpdCBudWxsLiIpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNv
bnN0cnVjdFR5cGVkQXJyYXlWaWV3OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30K
KworQ2FsbFR5cGUgSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9u
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4gQ2FsbFR5cGVOb25lOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThhNjcyOWFiZTk3ZTRjNDBk
NGYyZTE4MmI4YmExMmVhNjRlZTBjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0m
LCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCogcHJvdG90eXBlKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgSlNPYmplY3QqIHByb3RvdHlwZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKKworICAgIAorfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Jf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAppbmRleCBhNjFmMjA0ZjU3NDVlMmFlYTQ3NTdhODc4
ZjcyMWUyZjRiN2MxNWU4Li5hMzQ4NGNhMjQzZWM3ZjVjOWEzYmExZGIwNjhiNzgxM2QxZTUyMTk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcApAQCAtMjUxLDggKzI1MSw4IEBAIEpTVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUqIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGU6OmNyZWF0ZSgKICAgICBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewogICAgIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9Ci0gICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4odm0uaGVh
cCkpCi0gICAgSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4o
dm0uaGVhcCkpCisgICAgICAgIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUodm0sIHN0cnVjdHVy
ZSk7CiAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKICAg
ICByZXR1cm4gcHJvdG90eXBlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL2VzNi55YW1sIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCmlu
ZGV4IGQ3MmJkMjFlYTk4OTU5YjcxMzY0MzczODBhODQ0MWQ4NjE1MDEzN2QuLjIxNWJkNGE4YTVj
NjYwZjA5YzQ1OGZlOGU0YmYwNzQxZGY2NTE0YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9lczYueWFtbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
ZXM2LnlhbWwKQEAgLTExMTUsOSArMTExNSw5IEBACiAtIHBhdGg6IGVzNi9TdHJpbmcucHJvdG90
eXBlX21ldGhvZHNfU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUuanMKICAgY21kOiBydW5FUzYg
OmZhaWwKIC0gcGF0aDogZXM2L3R5cGVkX2FycmF5c18lVHlwZWRBcnJheSUuZnJvbS5qcwotICBj
bWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi90eXBl
ZF9hcnJheXNfJVR5cGVkQXJyYXklLm9mLmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDog
cnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3R5cGVkX2FycmF5c18lVHlwZWRBcnJheSUucHJv
dG90eXBlLmNvcHlXaXRoaW4uanMKICAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYv
dHlwZWRfYXJyYXlzXyVUeXBlZEFycmF5JS5wcm90b3R5cGUuZW50cmllcy5qcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXNvdXJjZXMvdHlwZWRhcnJh
eS1jb25zdHJ1Y3Rvci1oZWxwZXItZnVuY3Rpb25zLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9yZXNvdXJjZXMvdHlwZWRhcnJheS1jb25zdHJ1Y3Rvci1oZWxwZXItZnVu
Y3Rpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMzRkYjRjNmFlNmFlZmM3Y2Y5NzNiMWI1YzYxODdlYTY2
OWI0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3Jlc291cmNlcy90eXBlZGFycmF5LWNvbnN0cnVjdG9yLWhlbHBlci1mdW5jdGlvbnMuanMK
QEAgLTAsMCArMSw2MCBAQAorbG9hZCgiLi9yZXNvdXJjZXMvc3RhbmRhbG9uZS1wcmUuanMiKTsK
KworInVzZSBzdHJpY3QiOworCit2YXIgdHlwZWRBcnJheXMgPSBbIkludDhBcnJheSIsICJVaW50
OEFycmF5IiwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgIkludDE2QXJyYXkiLCAiVWludDE2QXJyYXki
LCAiSW50MzJBcnJheSIsICJVaW50MzJBcnJheSIsICJGbG9hdDMyQXJyYXkiLCAiRmxvYXQ2NEFy
cmF5Il07CisKK2Z1bmN0aW9uIGZvckVhY2hUeXBlZEFycmF5KGNvbnN0cnVjdG9ycywgdGVzdEZ1
bmN0aW9uLCBuYW1lLCBhcmdzKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25zdHJ1Y3Rv
cnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IHR5cGVkQXJyYXkgPSBjb25zdHJ1Y3RvcnNb
aV07CisKKyAgICAgICAgbGV0IHJlc3VsdDsKKyAgICAgICAgaWYgKG5hbWUgIT09ICIiKQorICAg
ICAgICAgICAgcmVzdWx0ID0gZXZhbCh0eXBlZEFycmF5ICsgIi4iICsgbmFtZSArIGFyZ3MpCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwoIm5ldyAiICsgdHlwZWRBcnJh
eSArIGFyZ3MpCisKKyAgICAgICAgbGV0IHRlc3RSZXN1bHQgPSB0ZXN0RnVuY3Rpb24ocmVzdWx0
LCB0eXBlZEFycmF5KQorICAgICAgICBpZiAodGVzdFJlc3VsdCAhPT0gdHJ1ZSkKKyAgICAgICAg
ICAgIHJldHVybiB0ZXN0UmVzdWx0OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitm
dW5jdGlvbiBoYXNTYW1lVmFsdWVzKG1zZywgYXJyYXkxLCBhcnJheTIpIHsKKyAgICBpZiAoYXJy
YXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkgeworICAgICAgICBkZWJ1Zyhtc2cgKyAgIlRo
ZSBhcnJheXMgaGFkIGRpZmZlcmluZyBsZW5ndGhzLCBmaXJzdCBhcnJheTogIiArIGFycmF5MSAr
ICIgbGVuZ3RoOiAiICsgYXJyYXkxLmxlbmd0aCArICIgc2Vjb25kIGFycmF5OiAiICsgYXJyYXky
ICsgIiBsZW5ndGgiICsgYXJyYXkyLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBsZXQgYWxsU2FtZSA9IHRydWU7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBh
cnJheTEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYWxsU2FtZSA9IGFsbFNhbWUgJiYgT2JqZWN0
LmlzKGFycmF5MVtpXSwgYXJyYXkyW2ldKTsKKyAgICB9CisKKyAgICBpZiAoIWFsbFNhbWUpCisg
ICAgICAgIGRlYnVnKG1zZyArICAiVGhlIGFycmF5IGRpZCBub3QgaGF2ZSBhbGwgdGhlIGV4cGVj
dGVkIGVsZW1lbnRzLCBmaXJzdCBhcnJheTogIiArIGFycmF5MSArICIgc2Vjb25kIGFycmF5OiAi
ICsgYXJyYXkyKTsKKyAgICByZXR1cm4gYWxsU2FtZTsKKworfQorCitmdW5jdGlvbiB0ZXN0Q29u
c3RydWN0b3JGdW5jdGlvbihuYW1lLCBhcmdzLCBleHBlY3RlZCkgeworICAgIGZ1bmN0aW9uIGZv
byhhcnJheSwgY29uc3RydWN0b3IpIHsKKyAgICAgICAgaWYgKCFoYXNTYW1lVmFsdWVzKGNvbnN0
cnVjdG9yICsgIi4iICsgbmFtZSArICIgZGlkIG5vdCBwcm9kdWNlIHRoZSBjb3JyZWN0IHJlc3Vs
dCBvbiAiICsgbmFtZSArIGFyZ3MsIGFycmF5LCBleHBlY3RlZCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2UKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZvckVh
Y2hUeXBlZEFycmF5KHR5cGVkQXJyYXlzLCBmb28sIG5hbWUsIGFyZ3MpOworfQorCitmdW5jdGlv
biB0ZXN0Q29uc3RydWN0b3IoYXJncywgZXhwZWN0ZWQpIHsKKyAgICBmdW5jdGlvbiBmb28oYXJy
YXksIGNvbnN0cnVjdG9yKSB7CisgICAgICAgIGlmICghaGFzU2FtZVZhbHVlcyhjb25zdHJ1Y3Rv
ciArIGFyZ3MgKyAiIGRpZCBub3QgcHJvZHVjZSB0aGUgY29ycmVjdCByZXN1bHQiLCBhcnJheSwg
ZXhwZWN0ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmb3JFYWNoVHlwZWRBcnJheSh0eXBlZEFycmF5cywgZm9v
LCAiIiwgYXJncyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3R5cGVkYXJyYXktY29uc3RydWN0b3IuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3R5cGVkYXJyYXktY29uc3RydWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI3Y2Ew
YzU2MjFmYWQzN2ZjNmI3ZDExMjAzMzU4NjI4NDdjYzFiMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1jb25zdHJ1Y3Rvci5q
cwpAQCAtMCwwICsxLDY2IEBACitsb2FkKCIuL3Jlc291cmNlcy90eXBlZGFycmF5LWNvbnN0cnVj
dG9yLWhlbHBlci1mdW5jdGlvbnMuanMiKTsKKworbGV0IFR5cGVkQXJyYXkgPSBPYmplY3QuZ2V0
UHJvdG90eXBlT2YoSW50MzJBcnJheSk7CisKK2NsYXNzIEEgZXh0ZW5kcyBUeXBlZEFycmF5IHsK
KyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorCit9CisKK3Nob3VsZFRocm93KCJuZXcg
QSgpIik7CisKK2xldCBmb28gPSBbMSwyLDMsNF07CisKK2Z1bmN0aW9uIGl0ZXJhdG9yKCkgewor
ICAgIHJldHVybiB7IGk6IDAsCisgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmkgPCBmb28ubGVuZ3RoLzIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IGZvb1t0aGlzLmkrK10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUg
fTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIH07Cit9CisKK2Zvb1tTeW1ib2wuaXRlcmF0
b3JdID0gaXRlcmF0b3I7CisKK3Nob3VsZEJlVHJ1ZSgidGVzdENvbnN0cnVjdG9yKCcoZm9vKScs
IFsxLDJdKSIpOworZGVidWcoIiIpOworCitkZWJ1ZygiVGVzdCB0aGF0IHdlIGRvbid0IHByZW1w
dGl2ZWx5IGNvbnZlcnQgdG8gbmF0aXZlIHZhbHVlcyBhbmQgdXNlIGEgZ2Mtc2FmZSB0ZW1wb3Jh
cnkgc3RvcmFnZS4iKTsKKworCitkb25lID0gZmFsc2U7CitvYmogPSB7CisgICAgdmFsdWVPZjog
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghZG9uZSkKKyAgICAgICAgICAgIHRocm93ICJiYWQi
OworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9OworCitmb28gPSBbb2JqLCAyLCAzLCA0XTsK
KworZnVuY3Rpb24gaXRlcmF0b3IyKCkgeworICAgIGRvbmUgPSBmYWxzZTsKKyAgICByZXR1cm4g
eyBpOiAwLAorICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICBnYygpOworICAgICAgICAgICAgICAgICBpZiAodGhpcy5pIDwgZm9vLmxlbmd0aC8yKSB7Cisg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlOiBmb29bdGhpcy5pKytdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBkb25lID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OworICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgfTsKK30KKworZm9vW1N5bWJvbC5pdGVyYXRvcl0gPSBpdGVyYXRv
cjI7CisKK3Nob3VsZEJlVHJ1ZSgidGVzdENvbnN0cnVjdG9yKCcoZm9vKScsIFsxLDJdKSIpOwor
CitmaW5pc2hKU1Rlc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvdHlwZWRhcnJheS1mcm9tLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy90eXBlZGFycmF5LWZyb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJiZmM4YTJlZGZiZGM4NzZk
ZjQzODlmMDdlNjk2MGEwZGMxZjdmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1mcm9tLmpzCkBAIC0wLDAgKzEsNDcgQEAK
K2xvYWQoIi4vcmVzb3VyY2VzL3R5cGVkYXJyYXktY29uc3RydWN0b3ItaGVscGVyLWZ1bmN0aW9u
cy5qcyIpOworZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2Yg
dGhlIFR5cGVkQXJyYXkuZnJvbSBmdW5jdGlvbiIKKyk7CisKK3Nob3VsZEJlKCJJbnQzMkFycmF5
LmZyb20ubGVuZ3RoIiwgIjEiKTsKK3Nob3VsZEJlKCJJbnQzMkFycmF5LmZyb20ubmFtZSIsICIn
ZnJvbSciKTsKK2RlYnVnKCIiKTsKKworZGVidWcoInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uIGhh
cyB0aGUgZm9sbG93aW5nIGFyZyBsaXN0IChuYW1lLCBhcmdzLCBpbml0LCByZXN1bHQgWyAsIGV4
cGVjdGVkQXJyYXkgXSkiKTsKK2RlYnVnKCIiKTsKKworZGVidWcoIjEuMCBTaW5nbGUgQXJndW1l
bnQgVGVzdGluZyIpOworc2hvdWxkQmVUcnVlKCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbignZnJv
bScsICcoW10pJywgW10pIik7CitzaG91bGRCZVRydWUoInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9u
KCdmcm9tJywgJyhbMl0pJywgWzJdKSIpOworc2hvdWxkQmVUcnVlKCJ0ZXN0Q29uc3RydWN0b3JG
dW5jdGlvbignZnJvbScsICcoWzIsMyw0XSknLCBbMiwzLDRdKSIpOworZGVidWcoIiIpOworCitk
ZWJ1ZygiMi4wIFR3byBBcmd1bWVudCBUZXN0aW5nIik7CitmdW5jdGlvbiBldmVuKGUsIGkpIHsK
KyAgICByZXR1cm4gIShlICYgMSkgfHwgKHRoaXMuY2hhbmdlID8gdGhpcy5jaGFuZ2UuaW5kZXhP
ZihpKSA+PSAwIDogZmFsc2UpOworfQorc2hvdWxkQmVUcnVlKCJ0ZXN0Q29uc3RydWN0b3JGdW5j
dGlvbignZnJvbScsICcoWzEyLCA1LCA4LCAxMywgNDRdLCBldmVuKScsIFsxLCAwLCAxLCAwLCAx
XSkiKTsKK3Nob3VsZEJlVHJ1ZSgidGVzdENvbnN0cnVjdG9yRnVuY3Rpb24oJ2Zyb20nLCAnKFsx
MSwgNTQsIDE4LCAxMywgMV0sIGV2ZW4pJywgWzAsIDEsIDEsIDAsIDBdKSIpOworZGVidWcoIiIp
OworCitkZWJ1ZygiMy4wIFRocmVlIEFyZ3VtZW50IFRlc3RpbmciKTsKK3ZhciB0aGlzVmFsdWUg
PSB7IGNoYW5nZTogWzEsIDNdIH07CitzaG91bGRCZVRydWUoInRlc3RDb25zdHJ1Y3RvckZ1bmN0
aW9uKCdmcm9tJywgJyhbMTIsIDIzLCAxMSwgMSwgNDVdLCBldmVuLCB0aGlzVmFsdWUpJywgWzEs
IDEsIDAsIDEsIDBdKSIpOworZGVidWcoIiIpOworCisKK2RlYnVnKCI0LjAgRXhjZXB0aW9uIFRl
c3QiKTsKK2Z1bmN0aW9uIGlzQmlnRW5vdWdoQW5kRXhjZXB0aW9uKGVsZW1lbnQsIGluZGV4LCBh
cnJheSkgeworICAgIGlmKGluZGV4PT0xKSB0aHJvdyAiZXhjZXB0aW9uIGZyb20gZnVuY3Rpb24i
OworICAgIHJldHVybiAoZWxlbWVudCA+PSAxMCk7Cit9CitzaG91bGRUaHJvdygidGVzdENvbnN0
cnVjdG9yRnVuY3Rpb24oJ2Zyb20nLCAnKFsxMiwgMTUsIDEwLCAxMywgNDRdLCBpc0JpZ0Vub3Vn
aEFuZEV4Y2VwdGlvbiknLCBmYWxzZSkiKTsKK2RlYnVnKCIiKTsKKworZGVidWcoIjUuMCBXcm9u
ZyBUeXBlIGZvciBDYWxsYmFjayBUZXN0Iik7CitzaG91bGRUaHJvdygidGVzdENvbnN0cnVjdG9y
RnVuY3Rpb24oJ2Zyb20nLCAnKCBbMTIsIDE1LCAxMCwgMTMsIDQ0XSwgOCknLCBmYWxzZSkiKTsK
K3Nob3VsZFRocm93KCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbignZnJvbScsICcoWzEyLCAxNSwg
MTAsIDEzLCA0NF0sIFwid3JvbmdcIiknLCBmYWxzZSkiKTsKK3Nob3VsZFRocm93KCJ0ZXN0Q29u
c3RydWN0b3JGdW5jdGlvbignZnJvbScsICcoWzEyLCAxNSwgMTAsIDEzLCA0NF0sIG5ldyBPYmpl
Y3QoKSknLCBmYWxzZSkiKTsKK3Nob3VsZFRocm93KCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbign
ZnJvbScsICcoWzEyLCAxNSwgMTAsIDEzLCA0NF0sIG51bGwpJywgZmFsc2UpIik7CitkZWJ1Zygi
Iik7CitmaW5pc2hKU1Rlc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvdHlwZWRhcnJheS1vZi5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvdHlwZWRhcnJheS1vZi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTljMDg5N2NiYWU2MzBjMTM5
ZmIzZjFlODQwYzZkMzFlNmNiNzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBlZGFycmF5LW9mLmpzCkBAIC0wLDAgKzEsMTYgQEAKK2xv
YWQoIi4vcmVzb3VyY2VzL3R5cGVkYXJyYXktY29uc3RydWN0b3ItaGVscGVyLWZ1bmN0aW9ucy5q
cyIpOworZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhl
IFR5cGVkQXJyYXkub2YgZnVuY3Rpb24iCispOworCitzaG91bGRCZSgiSW50MzJBcnJheS5vZi5s
ZW5ndGgiLCAiMCIpOworc2hvdWxkQmUoIkludDMyQXJyYXkub2YubmFtZSIsICInb2YnIik7Citk
ZWJ1ZygiIik7CisKK2RlYnVnKCJ0ZXN0UHJvdG90eXBlRnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dp
bmcgYXJnIGxpc3QgKG5hbWUsIGFyZ3MsIGV4cGVjdGVkKSIpOworZGVidWcoIiIpOworCitzaG91
bGRCZVRydWUoInRlc3RDb25zdHJ1Y3RvckZ1bmN0aW9uKCdvZicsICcoKScsIFtdKSIpOworc2hv
dWxkQmVUcnVlKCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbignb2YnLCAnKDEpJywgWzFdKSIpOwor
c2hvdWxkQmVUcnVlKCJ0ZXN0Q29uc3RydWN0b3JGdW5jdGlvbignb2YnLCAnKDEsMiwzKScsIFsx
LDIsM10pIik7CitmaW5pc2hKU1Rlc3QoKTsK
</data>
<flag name="review"
          id="288215"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>