<?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>154548</bug_id>
          
          <creation_ts>2016-02-22 12:13:06 -0800</creation_ts>
          <short_desc>InternalFunction::createSubclassStructure doesn&apos;t take into account that get() might throw</short_desc>
          <delta_ts>2016-02-22 16:51:41 -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>JavaScriptCore</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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1167133</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-22 12:13:06 -0800</bug_when>
    <thetext>This leads to bad things.
It does:
```
JSObject* prototype  = jsDynamicCast&lt;JSObject*&gt;(get(blah));
if (prototype) {
   ...
}
```
but, the return result from get() is always invalid when we throw an exception.
We often have code that does this:
```
return throwVMTypeError(blah);
```

So, the above code snippet will successfully cast the result as an object, which leads to total failure because an exception was thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167198</commentid>
    <comment_count>1</comment_count>
      <attachid>271956</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-22 14:29:06 -0800</bug_when>
    <thetext>Created attachment 271956
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167199</commentid>
    <comment_count>2</comment_count>
      <attachid>271956</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-02-22 14:35:40 -0800</bug_when>
    <thetext>Comment on attachment 271956
WIP

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

Looks good overall, one minor nit though.

&gt; Source/JavaScriptCore/runtime/StringConstructor.cpp:137
&gt; +    return JSValue::encode(StringObject::create(vm, structure, exec-&gt;uncheckedArgument(0).toString(exec)));

I think this would be cleaner as:

Structure* structure = InternalFunction::createSubclassStructure(exec, exec-&gt;newTarget(), globalObject-&gt;stringObjectStructure());
if (exec-&gt;hadException())
    return JSValue::encode(JSValue());

if (!exec-&gt;argumentCount())
    return JSValue::encode(StringObject::create(vm, InternalFunction::createSubclassStructure(exec, exec-&gt;newTarget(), globalObject-&gt;stringObjectStructure())));

return JSValue::encode(StringObject::create(vm, InternalFunction::createSubclassStructure(exec, exec-&gt;newTarget(), globalObject-&gt;stringObjectStructure()), exec-&gt;uncheckedArgument(0).toString(exec)));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167200</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-02-22 14:37:18 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 271956 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271956&amp;action=review
&gt; 
&gt; Looks good overall, one minor nit though.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/StringConstructor.cpp:137
&gt; &gt; +    return JSValue::encode(StringObject::create(vm, structure, exec-&gt;uncheckedArgument(0).toString(exec)));
&gt; 
&gt; I think this would be cleaner as:
&gt; 
&gt; Structure* structure = InternalFunction::createSubclassStructure(exec,
&gt; exec-&gt;newTarget(), globalObject-&gt;stringObjectStructure());
&gt; if (exec-&gt;hadException())
&gt;     return JSValue::encode(JSValue());
&gt; 
&gt; if (!exec-&gt;argumentCount())
&gt;     return JSValue::encode(StringObject::create(vm,
&gt; InternalFunction::createSubclassStructure(exec, exec-&gt;newTarget(),
&gt; globalObject-&gt;stringObjectStructure())));
&gt; 
&gt; return JSValue::encode(StringObject::create(vm,
&gt; InternalFunction::createSubclassStructure(exec, exec-&gt;newTarget(),
&gt; globalObject-&gt;stringObjectStructure()),
&gt; exec-&gt;uncheckedArgument(0).toString(exec)));

Whoops, this should be: 

Structure* structure = InternalFunction::createSubclassStructure(exec, exec-&gt;newTarget(), globalObject-&gt;stringObjectStructure());
if (exec-&gt;hadException())
    return JSValue::encode(JSValue());

if (!exec-&gt;argumentCount())
    return JSValue::encode(StringObject::create(vm, structure));

return JSValue::encode(StringObject::create(vm, structure, exec-&gt;uncheckedArgument(0).toString(exec)));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167212</commentid>
    <comment_count>4</comment_count>
      <attachid>271959</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-22 15:11:08 -0800</bug_when>
    <thetext>Created attachment 271959
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167214</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-22 15:13:33 -0800</bug_when>
    <thetext>Attachment 271959 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/RegExpConstructor.cpp:270:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpConstructor.cpp:272:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167215</commentid>
    <comment_count>6</comment_count>
      <attachid>271959</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-02-22 15:27:12 -0800</bug_when>
    <thetext>Comment on attachment 271959
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167216</commentid>
    <comment_count>7</comment_count>
      <attachid>271959</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-22 15:27:49 -0800</bug_when>
    <thetext>Comment on attachment 271959
patch

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

&gt; Source/JavaScriptCore/tests/stress/create-subclass-structure-might-throw.js:6
&gt; +let targets = [Function, String, Array];

Why not also test WeakSet, WeakMap, and the other types that you fixed in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167218</commentid>
    <comment_count>8</comment_count>
      <attachid>271959</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-22 15:33:51 -0800</bug_when>
    <thetext>Comment on attachment 271959
patch

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

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:735
&gt; +        if (exec-&gt;hadException())
&gt; +            return nullptr;

This exception check should be for both the if case as well because arrayStructureForProfileDuringAllocation() calls arrayStructureForIndexingTypeDuringAllocation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167219</commentid>
    <comment_count>9</comment_count>
      <attachid>271959</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-22 15:37:05 -0800</bug_when>
    <thetext>Comment on attachment 271959
patch

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

&gt; Source/JavaScriptCore/runtime/InternalFunction.cpp:105
&gt;              JSObject* prototype = jsDynamicCast&lt;JSObject*&gt;(newTarget.get(exec, exec-&gt;propertyNames().prototype));
&gt; +            if (exec-&gt;hadException())
&gt; +                return nullptr;

In the if case above, we&apos;re also casting newTarget.get() to get a prototype.  You can at least assert that it won&apos;t have an exception if it should not throw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167225</commentid>
    <comment_count>10</comment_count>
      <attachid>271960</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-22 15:54:26 -0800</bug_when>
    <thetext>Created attachment 271960
patch

fixed suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167227</commentid>
    <comment_count>11</comment_count>
      <attachid>271962</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-22 15:55:33 -0800</bug_when>
    <thetext>Created attachment 271962
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167228</commentid>
    <comment_count>12</comment_count>
      <attachid>271962</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-22 15:59:10 -0800</bug_when>
    <thetext>Comment on attachment 271962
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167229</commentid>
    <comment_count>13</comment_count>
      <attachid>271962</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-22 16:00:54 -0800</bug_when>
    <thetext>Comment on attachment 271962
patch

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

r=me too

&gt; Source/JavaScriptCore/tests/stress/create-subclass-structure-might-throw.js:6
&gt; +let targets = [Function, String, Array, Set, Map, WeakSet, WeakMap, RegExp, Number, Promise, Date, Boolean, Error, TypeError, SyntaxError, ArrayBuffer, Int32Array, Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Uint32Array, Float32Array, Float64Array];

I think DataView is made the same way as the TypeArrays.  Maybe you should add that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167248</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-22 16:51:41 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/196966</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271956</attachid>
            <date>2016-02-22 14:29:06 -0800</date>
            <delta_ts>2016-02-22 15:11:08 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>18222</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAg
SlNWYWx1ZSBib29sZWFuID0ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihl
eGVjKSk7CiAgICAgU3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2Jq
ZWN0U3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBCb29sZWFuT2JqZWN0
KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgYm9vbGVhblN0cnVjdHVy
ZSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIGJvb2xlYW4pOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw4IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4
ZWNTdGF0ZSogZXhlYywKICAgICAgICAgdmFsdWUgPSBtaWxsaXNlY29uZHNGcm9tQ29tcG9uZW50
cyhleGVjLCBhcmdzLCBXVEY6OkxvY2FsVGltZSk7CiAKICAgICBTdHJ1Y3R1cmUqIGRhdGVTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBu
ZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIERh
dGVJbnN0YW5jZTo6Y3JlYXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMTk2OTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcgogewogICAgIEpTVmFsdWUgbWVzc2Fn
ZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDApIDoganNVbmRlZmlu
ZWQoKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50ZXJu
YWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5lcnJvclN0cnVjdHVy
ZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShF
cnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxw
dHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MTk2OTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw4ICsxMjQsMTEgQEAgSlNPYmplY3QqIGNv
bnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogICAgIH0KIAorICAgIFN0cnVjdHVyZSog
c3ViY2xhc3NTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZnVuY3Rpb24sIGds
b2JhbE9iamVjdCwgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpKTsKKyAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uLCBnbG9iYWxPYmpl
Y3QsIHN1YmNsYXNzU3RydWN0dXJlKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9u
IENvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5h
bEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTk2OTUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw2ICsxMDEsOCBAQCBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0YSh2bSktPmNy
ZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uodm0sIHByb3Rv
dHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4obmV3VGFyZ2V0LmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSk7CisgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgICAgICBpZiAocHJvdG90eXBlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhh
cHBlbnMgaWYgc29tZW9uZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29uc3RydWN0
b3Igd2l0aCBhbm90aGVyIGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJnZXQuCiAg
ICAgICAgICAgICAgICAgLy8gVGh1cywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgY29zdCBvZiBs
b29raW5nIHVwIHRoZSBzdHJ1Y3R1cmUgZnJvbSBvdXIgaGFzaCB0YWJsZSBldmVyeSB0aW1lLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Nyw2ICs5Nyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpKTsKIAogICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5u
ZXdUYXJnZXQoKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVj
dHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0
ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGFycmF5QnVmZmVyU3RydWN0dXJl
LCBidWZmZXIucmVsZWFzZSgpKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgJKHJldmlzaW9uIDE5Njk1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxOSw2ICsyMTksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJh
eVZpZXcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgc2l6ZV90IGFyZ0NvdW50ID0gZXhlYy0+YXJn
dW1lbnRDb3VudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE5Njk1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyOSw4ICs3
MjksMTEgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlYwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlOwogICAgIGlmIChpbml0aWFsTGVuZ3RoID49IE1JTl9BUlJBWV9T
VE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpCiAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMs
IEFycmF5V2l0aEFycmF5U3RvcmFnZSwgbmV3VGFyZ2V0KTsKLSAgICBlbHNlCisgICAgZWxzZSB7
CiAgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9m
aWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpOworICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CiAKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9j
YXRpb25Gb3IocHJvZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwg
aW5pdGlhbExlbmd0aCkpOwogfQpAQCAtNzQyLDcgKzc0NSwxMCBAQCBpbmxpbmUgSlNBcnJheSog
Y29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJy
YXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMsIEpTVmFsdWUg
bmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogewotICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVj
LCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24o
ZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KSwgdmFsdWVzKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9j
YXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJh
eShleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcykpOwogfQogCiBpbmxpbmUgSlNBcnJheSogY29uc3Ry
dWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxl
LCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQpA
QCAtNzUyLDcgKzc1OCwxMCBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0
YXRlCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoLCBKU1ZhbHVlIG5ld1Rh
cmdldCA9IEpTVmFsdWUoKSkKIHsKLSAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6
dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMs
IHByb2ZpbGUsIG5ld1RhcmdldCksIHZhbHVlcywgbGVuZ3RoKSk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0Fs
bG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBcnJheUFsbG9j
YXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RB
cnJheShleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CiAKIGlubGluZSBKU0Fy
cmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqIHByb2ZpbGUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoLCBKU1Zh
bHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKQEAgLTc2Miw3ICs3NzEsMTAgQEAgaW5saW5lIEpT
QXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1Zh
bHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVl
KCkpCiB7Ci0gICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxv
Y2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVj
LCBwcm9maWxlLCBuZXdUYXJnZXQpLCB2YWx1ZXMsIGxlbmd0aCkpOworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdB
bGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0
QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkpOwog
fQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoRXhlY1N0
YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBKU1ZhbHVl
KiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9t
aXNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw2ICsxMDQsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgU3RydWN0dXJl
KiBwcm9taXNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1
Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVj
dHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0g
SlNQcm9taXNlOjpjcmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmlu
aXRpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDE5Njk1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9i
amVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU01hcCog
bWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCBtYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRl
cmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRP
ck51bGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGVycHJldGVyCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8TmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVChlcnJvclN0cnVjdHVyZSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1
Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMTk2OTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIHsKICAgICBkb3VibGUgbiA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpIDogMDsKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6
Y3JlYXRlKGV4ZWMtPnZtKCksIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0o
KSwganNOdW1iZXIobikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDkgKzI0OSw4
IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1MKIGlubGluZSBTdHJ1
Y3R1cmUqIGdldFJlZ0V4cFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKTsKLSAgICBpZiAobmV3VGFy
Z2V0ICE9IGpzVW5kZWZpbmVkKCkpIHsKKyAgICBpZiAobmV3VGFyZ2V0ICE9IGpzVW5kZWZpbmVk
KCkpCiAgICAgICAgIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNz
U3RydWN0dXJlKGV4ZWMsIG5ld1RhcmdldCwgc3RydWN0dXJlKTsKLSAgICB9CiAgICAgcmV0dXJu
IHN0cnVjdHVyZTsKIH0KIApAQCAtMjY3LDggKzI2NiwxMSBAQCBKU09iamVjdCogY29uc3RydWN0
UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8vIElmIGNhbGxlZCBhcyBhIGZ1bmN0aW9u
LCB0aGlzIGp1c3QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgKHNlZSAxNS4xMC4zLjEpLgog
ICAgICAgICBpZiAobmV3VGFyZ2V0ICE9IGpzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIFJl
Z0V4cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4oYXNPYmplY3QoYXJnMCkp
LT5yZWdFeHAoKTsKLQotICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1Rhcmdl
dCksIHJlZ0V4cCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4
cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCk7CisgICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0
ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIGFzT2JqZWN0KGFyZzApOwogICAgIH0KQEAgLTI5MSw3ICsyOTMsMTAgQEAgSlNPYmplY3Qq
IGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybiB2bS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVTeW50YXhF
cnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKLSAgICByZXR1cm4gUmVnRXhw
T2JqZWN0OjpjcmVhdGUodm0sIGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCksIHJlZ0V4cCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdF
eHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFJl
Z0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CiB9CiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhSZWdFeHBDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwog
ewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoZXhlYywgc2V0U3Ry
dWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAx
OTY5NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDE2IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRl
KHZtLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVj
LT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkpKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUodm0sIElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSwgZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBn
bG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CisgICAgfQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVj
dDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTk2OTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUo
KSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha01hcFN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtNYXBTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpTV2Vha01hcDo6Y3JlYXRlKGV4ZWMs
IHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMTk2OTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IEpTV2Vha1NldDo6Y3JlYXRlKGV4ZWMsIHdlYWtT
ZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271959</attachid>
            <date>2016-02-22 15:11:08 -0800</date>
            <delta_ts>2016-02-22 15:54:26 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>21711</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE2LTAyLTIyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlIGRvZXNuJ3QgdGFrZSBp
bnRvIGFjY291bnQgdGhhdCBnZXQoKSBtaWdodCB0aHJvdworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUgY2FsbHMgbmV3VGFyZ2V0LmdldCguLi4pIHdoaWNoIGNhbiB0aHJvdyAKKyAg
ICAgICAgYW4gZXhjZXB0aW9uLiBOZWl0aGVyIHRoZSBmdW5jdGlvbiBub3IgdGhlIGNhbGwgc2l0
ZXMgb2YgdGhlIGZ1bmN0aW9uIHRvb2sgdGhpcyBpbnRvCisgICAgICAgIGFjY291bnQuIFRoaXMg
cGF0Y2ggYXVkaXRzIHRoZSBjYWxsIHNpdGVzIG9mIHRoZSBmdW5jdGlvbiB0byBtYWtlIGl0IHdv
cmsgaW4KKyAgICAgICAgdGhlIGV2ZW50IHRoYXQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KKwor
ICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uU2tp
cHBpbmdFdmFsRW5hYmxlZENoZWNrKToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJy
YXlOZWdhdGl2ZUluZGV4ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKiBydW50
aW1lL01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAg
ICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRSZWdFeHBTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoUmVn
RXhwQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0
b3IpOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6
CisgICAgICAgICogcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RXZWFrTWFwKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdlYWtTZXQpOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9jcmVhdGUtc3ViY2xhc3Mtc3RydWN0dXJlLW1pZ2h0LXRocm93LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisKIDIwMTYtMDItMjIgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgSlNWYWx1ZTo6aXNDb25zdHJ1Y3RvciBhbmQgSlNWYWx1ZTo6
aXNGdW5jdGlvbiBzaG91bGQgY2hlY2sgZ2V0Q29uc3RydWN0RGF0YSBhbmQgZ2V0Q2FsbERhdGEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAg
SlNWYWx1ZSBib29sZWFuID0ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihl
eGVjKSk7CiAgICAgU3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2Jq
ZWN0U3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEJvb2xlYW5PYmplY3QqIG9i
aiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBib29sZWFuU3RydWN0dXJlKTsK
ICAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgYm9vbGVhbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsNiArMTcyLDggQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0
YXRlKiBleGVjLAogICAgICAgICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4
ZWMsIGFyZ3MsIFdURjo6TG9jYWxUaW1lKTsKIAogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVy
ZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rh
cmdldCwgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gRGF0ZUlu
c3RhbmNlOjpjcmVhdGUodm0sIGRhdGVTdHJ1Y3R1cmUsIHZhbHVlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgp
OwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBl
Tm90aGluZywgZmFsc2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOCArMTI0LDExIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RG
dW5jdGlvblNraXBwaW5nRXZhbEUKICAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAgICB9CiAKKyAgICBTdHJ1Y3R1cmUqIHN1YmNsYXNz
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uLCBnbG9iYWxPYmpl
Y3QsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rh
cmdldCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKSk7CisgICAgcmV0dXJuIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBmdW5jdGlvbiwgZ2xvYmFsT2JqZWN0LCBzdWJj
bGFzc1N0cnVjdHVyZSk7CiB9CiAKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1
Y3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiAr
MTAxLDggQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbAogICAgICAg
ICAgICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0pLT5jcmVhdGVJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBwcm90b3R5cGUsIGJh
c2VDbGFzcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KG5ld1RhcmdldC5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
aWYgKHByb3RvdHlwZSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgb25seSBoYXBwZW5zIGlm
IHNvbWVvbmUgUmVmbGVjdC5jb25zdHJ1Y3RzIG91ciBidWlsdGluIGNvbnN0cnVjdG9yIHdpdGgg
YW5vdGhlciBidWlsdGluIGNvbnN0cnVjdG9yIGFzIHRoZSBuZXcudGFyZ2V0LgogICAgICAgICAg
ICAgICAgIC8vIFRodXMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGNvc3Qgb2YgbG9va2luZyB1
cCB0aGUgc3RydWN0dXJlIGZyb20gb3VyIGhhc2ggdGFibGUgZXZlcnkgdGltZS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNiArOTcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihleGVjKSk7CiAKICAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0
KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1
ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGFycmF5QnVmZmVyU3RydWN0dXJlLCBidWZmZXIucmVs
ZWFzZSgpKTsKICAgICAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw2
ICsyMTksOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5
U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKSk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKICAgICBzaXplX3QgYXJnQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzI5LDggKzcyOSwxMSBAQCBpbmxpbmUg
SlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmU7CiAgICAgaWYgKGluaXRpYWxMZW5ndGggPj0gTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNU
SU9OX0xFTkdUSCkKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlLCBuZXdUYXJnZXQpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKICAgICAgICAgc3RydWN0
dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0
aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAogICAgIHJldHVy
biBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxl
LCBKU0FycmF5OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKSk7
CiB9CkBAIC03NDIsNyArNzQ1LDEwIEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFy
cmF5KEV4ZWMKICAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcywgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1Zh
bHVlKCkpCiB7Ci0gICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RB
bGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBu
ZXdUYXJnZXQpLCB2YWx1ZXMpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9m
aWxlLCBuZXdUYXJnZXQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0
ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVy
ZSwgdmFsdWVzKSk7CiB9CiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3Rh
dGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIGNvbnN0IEFyZ0xpc3Qm
IHZhbHVlcywgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCkBAIC03NTIsNyArNzU4LDEw
IEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpT
QXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1
ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgp
KQogewotICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2Nh
dGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFy
Z2V0KSwgdmFsdWVzLCBsZW5ndGgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBw
cm9maWxlLCBuZXdUYXJnZXQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVw
ZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVj
dHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgY29u
c3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0g
SlNWYWx1ZSgpKQpAQCAtNzYyLDcgKzc3MSwxMCBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0
QXJyYXkoRXhlY1N0YXRlCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZl
SW5kZXhlZChFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5z
aWduZWQgbGVuZ3RoLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKLSAgICByZXR1
cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmls
ZSwgY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1Rh
cmdldCksIHZhbHVlcywgbGVuZ3RoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywg
cHJvZmlsZSwgbmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1
cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5k
ZXhlZChleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CiAKIGlubGluZSBKU0Fy
cmF5KiBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChFeGVjU3RhdGUqIGV4ZWMsIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWdu
ZWQgbGVuZ3RoLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1
cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVj
LT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlKHZt
LCBwcm9taXNlU3RydWN0dXJlKTsKICAgICBwcm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgZXhlYy0+YXJndW1lbnQoMCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDYgKzU3LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1
cmUqIG1hcFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgp
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVj
LCBtYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyCiB7CiAgICAgSlNW
YWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcio+KGV4ZWMt
PmNhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNT
RVJUKGVycm9yU3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogewogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIE51bWJlck9i
amVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCks
IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5udW1i
ZXJPYmplY3RTdHJ1Y3R1cmUoKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgb2JqZWN0LT5z
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIGpzTnVtYmVyKG4pKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0OSw5ICsyNDksOCBAQCB2b2lkIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVs
dGlsaW5lKEV4ZWNTCiBpbmxpbmUgU3RydWN0dXJlKiBnZXRSZWdFeHBTdHJ1Y3R1cmUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG5ld1Rhcmdl
dCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVnRXhwU3Ry
dWN0dXJlKCk7Ci0gICAgaWYgKG5ld1RhcmdldCAhPSBqc1VuZGVmaW5lZCgpKSB7CisgICAgaWYg
KG5ld1RhcmdldCAhPSBqc1VuZGVmaW5lZCgpKQogICAgICAgICBzdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIHN0cnVj
dHVyZSk7Ci0gICAgfQogICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKQEAgLTI2Nyw4ICsyNjYs
MTEgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAv
LyBJZiBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgdGhpcyBqdXN0IHJldHVybnMgdGhlIGZpcnN0IGFy
Z3VtZW50IChzZWUgMTUuMTAuMy4xKS4KICAgICAgICAgaWYgKG5ld1RhcmdldCAhPSBqc1VuZGVm
aW5lZCgpKSB7CiAgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IHN0YXRpY19jYXN0PFJlZ0V4
cE9iamVjdCo+KGFzT2JqZWN0KGFyZzApKS0+cmVnRXhwKCk7Ci0KLSAgICAgICAgICAgIHJldHVy
biBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBnZXRSZWdFeHBTdHJ1Y3R1cmUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpLCByZWdFeHApOworICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdFeHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBu
ZXdUYXJnZXQpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCByZWdFeHAp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhc09iamVjdChhcmcwKTsKICAgICB9CkBAIC0y
OTEsNyArMjkzLDEwIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUK
ICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdm0udGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2Uo
KSkpOwogCi0gICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBnZXRSZWdFeHBTdHJ1
Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpLCByZWdFeHApOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
bmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5z
ZXRTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpTU2V0
OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1
LDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdP
YmplY3RTdHJ1Y3R1cmUoKSkpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUodm0s
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSwgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmpl
Y3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShT
dHJpbmdPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmluZ0NvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhl
Yy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFwU3RydWN0dXJlKCkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpTV2Vha01hcDo6Y3JlYXRl
KGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUo
KSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgSlNXZWFrU2V0KiB3ZWFrU2V0ID0gSlNXZWFrU2V0OjpjcmVhdGUoZXhlYywgd2Vh
a1NldFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jcmVhdGUtc3ViY2xhc3Mtc3RydWN0dXJlLW1pZ2h0
LXRocm93LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvY3JlYXRlLXN1YmNsYXNzLXN0cnVjdHVyZS1taWdodC10aHJvdy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY3JlYXRlLXN1YmNsYXNzLXN0
cnVjdHVyZS1taWdodC10aHJvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACitm
dW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgYXNzZXJ0aW9uLiIpOworfQorCitsZXQgdGFyZ2V0cyA9IFtGdW5jdGlvbiwgU3RyaW5n
LCBBcnJheV07Citmb3IgKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykgeworICAgIGxldCBlcnJvciA9
IG51bGw7CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGdldDogZnVuY3Rpb24odGhlVGFy
Z2V0LCBwcm9wTmFtZSkgeworICAgICAgICAgICAgYXNzZXJ0KHByb3BOYW1lID09PSAicHJvdG90
eXBlIik7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcjsKKyAgICAgICAgICAgIHRocm93
IGVycm9yOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0
YXJnZXQsIGhhbmRsZXIpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
KyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBu
ZXcgcHJveHk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdGhyZXcgPSB0cnVl
OworICAgICAgICAgICAgYXNzZXJ0KGUgPT09IGVycm9yKTsKKyAgICAgICAgICAgIGVycm9yID0g
bnVsbDsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQodGhyZXcpOworICAgIH0KK30K
</data>
<flag name="review"
          id="296782"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271960</attachid>
            <date>2016-02-22 15:54:26 -0800</date>
            <delta_ts>2016-02-22 15:55:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22573</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE2LTAyLTIyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlIGRvZXNuJ3QgdGFrZSBp
bnRvIGFjY291bnQgdGhhdCBnZXQoKSBtaWdodCB0aHJvdworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUgY2FsbHMgbmV3VGFyZ2V0LmdldCguLi4pIHdoaWNoIGNhbiB0aHJvdyAKKyAg
ICAgICAgYW4gZXhjZXB0aW9uLiBOZWl0aGVyIHRoZSBmdW5jdGlvbiBub3IgdGhlIGNhbGwgc2l0
ZXMgb2YgdGhlIGZ1bmN0aW9uIHRvb2sgdGhpcyBpbnRvCisgICAgICAgIGFjY291bnQuIFRoaXMg
cGF0Y2ggYXVkaXRzIHRoZSBjYWxsIHNpdGVzIG9mIHRoZSBmdW5jdGlvbiB0byBtYWtlIGl0IHdv
cmsgaW4KKyAgICAgICAgdGhlIGV2ZW50IHRoYXQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KKwor
ICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uU2tp
cHBpbmdFdmFsRW5hYmxlZENoZWNrKToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJy
YXlOZWdhdGl2ZUluZGV4ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKiBydW50
aW1lL01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAg
ICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRSZWdFeHBTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoUmVn
RXhwQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0
b3IpOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6
CisgICAgICAgICogcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RXZWFrTWFwKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdlYWtTZXQpOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9jcmVhdGUtc3ViY2xhc3Mtc3RydWN0dXJlLW1pZ2h0LXRocm93LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisKIDIwMTYtMDItMjIgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgSlNWYWx1ZTo6aXNDb25zdHJ1Y3RvciBhbmQgSlNWYWx1ZTo6
aXNGdW5jdGlvbiBzaG91bGQgY2hlY2sgZ2V0Q29uc3RydWN0RGF0YSBhbmQgZ2V0Q2FsbERhdGEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAg
SlNWYWx1ZSBib29sZWFuID0ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihl
eGVjKSk7CiAgICAgU3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2Jq
ZWN0U3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEJvb2xlYW5PYmplY3QqIG9i
aiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBib29sZWFuU3RydWN0dXJlKTsK
ICAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgYm9vbGVhbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsNiArMTcyLDggQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0
YXRlKiBleGVjLAogICAgICAgICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4
ZWMsIGFyZ3MsIFdURjo6TG9jYWxUaW1lKTsKIAogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVy
ZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rh
cmdldCwgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gRGF0ZUlu
c3RhbmNlOjpjcmVhdGUodm0sIGRhdGVTdHJ1Y3R1cmUsIHZhbHVlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgp
OwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBl
Tm90aGluZywgZmFsc2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOCArMTI0LDExIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RG
dW5jdGlvblNraXBwaW5nRXZhbEUKICAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAgICB9CiAKKyAgICBTdHJ1Y3R1cmUqIHN1YmNsYXNz
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uLCBnbG9iYWxPYmpl
Y3QsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rh
cmdldCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKSk7CisgICAgcmV0dXJuIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBmdW5jdGlvbiwgZ2xvYmFsT2JqZWN0LCBzdWJj
bGFzc1N0cnVjdHVyZSk7CiB9CiAKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1
Y3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywxMCAr
OTcsMTMgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAg
ICAgICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmls
ZSB0byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4obmV3VGFyZ2V0LmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSk7CisgICAgICAgICAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0YSh2bSktPmNyZWF0ZUludGVybmFs
RnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uodm0sIHByb3RvdHlwZSwgYmFzZUNs
YXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4obmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAo
cHJvdG90eXBlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgc29t
ZW9uZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29uc3RydWN0b3Igd2l0aCBhbm90
aGVyIGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJnZXQuCiAgICAgICAgICAgICAg
ICAgLy8gVGh1cywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgY29zdCBvZiBsb29raW5nIHVwIHRo
ZSBzdHJ1Y3R1cmUgZnJvbSBvdXIgaGFzaCB0YWJsZSBldmVyeSB0aW1lLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw2ICs5Nyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKIAogICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwg
Y29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVy
OjpjcmVhdGUoZXhlYy0+dm0oKSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIGJ1ZmZlci5yZWxlYXNl
KCkpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24g
MTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIx
OSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1
Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzEsNiArNzMxLDggQEAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlYwogICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihleGVj
LCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAgICAgICBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0Fs
bG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6
OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpKTsKIH0KQEAgLTc0
Miw3ICs3NDQsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlYwog
IAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgQXJnTGlzdCYgdmFsdWVzLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsK
LSAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25G
b3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCks
IHZhbHVlcykpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1Rh
cmdldCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9j
YXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMp
KTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVzLCBK
U1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKQEAgLTc1Miw3ICs3NTcsMTAgQEAgaW5saW5l
IEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29u
c3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9m
aWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMs
IHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7Ci0gICAg
cmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHBy
b2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpLCB2YWx1
ZXMsIGxlbmd0aCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5l
d1RhcmdldCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFs
bG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCB2YWx1
ZXMsIGxlbmd0aCkpOwogfQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBKU1ZhbHVl
KiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkp
CkBAIC03NjIsNyArNzcwLDEwIEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVj
U3RhdGUKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4
ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5n
dGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogewotICAgIHJldHVybiBBcnJheUFs
bG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1
Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVjLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KSwgdmFs
dWVzLCBsZW5ndGgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBu
ZXdUYXJnZXQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RB
bGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMs
IHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0
cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgs
IEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKIAogICAgIFN0cnVjdHVyZSogcHJvbWlzZVN0cnVjdHVyZSA9IEludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rhcmdl
dCgpLCBnbG9iYWxPYmplY3QtPnByb21pc2VTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIHByb21pc2VT
dHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBl
eGVjLT5hcmd1bWVudCgwKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIG1hcFN0cnVj
dHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlm
IChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXIKIHsKICAgICBKU1ZhbHVlIG1lc3Nh
Z2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkp
LT5lcnJvclN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBBU1NFUlQoZXJyb3JT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90aGluZywg
ZmFsc2UpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEsNyArODEsMTIgQEAgdm9pZCBOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE51bWJl
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMp
IDogMDsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4
ZWMtPnZtKCksIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
ck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBOdW1iZXJPYmplY3Qq
IG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0o
KSwganNOdW1iZXIobikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDkgKzI0OSw4
IEBAIHZvaWQgc2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1MKIGlubGluZSBTdHJ1
Y3R1cmUqIGdldFJlZ0V4cFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKTsKLSAgICBpZiAobmV3VGFy
Z2V0ICE9IGpzVW5kZWZpbmVkKCkpIHsKKyAgICBpZiAobmV3VGFyZ2V0ICE9IGpzVW5kZWZpbmVk
KCkpCiAgICAgICAgIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNz
U3RydWN0dXJlKGV4ZWMsIG5ld1RhcmdldCwgc3RydWN0dXJlKTsKLSAgICB9CiAgICAgcmV0dXJu
IHN0cnVjdHVyZTsKIH0KIApAQCAtMjY3LDggKzI2NiwxMSBAQCBKU09iamVjdCogY29uc3RydWN0
UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8vIElmIGNhbGxlZCBhcyBhIGZ1bmN0aW9u
LCB0aGlzIGp1c3QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgKHNlZSAxNS4xMC4zLjEpLgog
ICAgICAgICBpZiAobmV3VGFyZ2V0ICE9IGpzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIFJl
Z0V4cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4oYXNPYmplY3QoYXJnMCkp
LT5yZWdFeHAoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhw
U3RydWN0dXJlKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmV3VGFyZ2V0KTsKKyAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdl
dFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCksIHJlZ0V4cCk7
CisgICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3Ry
dWN0dXJlLCByZWdFeHApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhc09iamVjdChhcmcw
KTsKICAgICB9CkBAIC0yOTEsNyArMjkzLDEwIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAo
RXhlY1N0YXRlKiBleGUKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1
cm4gdm0udGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhw
LT5lcnJvck1lc3NhZ2UoKSkpOwogCi0gICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZt
LCBnZXRSZWdFeHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpLCByZWdF
eHApOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMs
IGdsb2JhbE9iamVjdCwgbmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0
ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIHsKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNT
ZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVl
IGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNSwxMCArMTI1LDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKIAotICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFs
T2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2Jq
ZWN0OjpjcmVhdGUodm0sIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJl
KGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVj
dHVyZSgpKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBl
IFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmIGNvbnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1
cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFwU3Ry
dWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpT
V2Vha01hcDo6Y3JlYXRlKGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRl
cmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRP
ck51bGwoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1Nl
dFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrU2V0KiB3ZWFrU2V0ID0gSlNXZWFrU2V0Ojpj
cmVhdGUoZXhlYywgd2Vha1NldFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jcmVhdGUtc3ViY2xhc3Mt
c3RydWN0dXJlLW1pZ2h0LXRocm93LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvY3JlYXRlLXN1YmNsYXNzLXN0cnVjdHVyZS1taWdodC10aHJvdy5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY3Jl
YXRlLXN1YmNsYXNzLXN0cnVjdHVyZS1taWdodC10aHJvdy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM0IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJiYWQgYXNzZXJ0aW9uLiIpOworfQorCitsZXQgdGFyZ2V0cyA9IFtG
dW5jdGlvbiwgU3RyaW5nLCBBcnJheSwgU2V0LCBNYXAsIFdlYWtTZXQsIFdlYWtNYXAsIFJlZ0V4
cCwgTnVtYmVyLCBQcm9taXNlLCBEYXRlLCBCb29sZWFuLCBFcnJvciwgVHlwZUVycm9yLCBTeW50
YXhFcnJvciwgQXJyYXlCdWZmZXIsIEludDMyQXJyYXksIEludDhBcnJheSwgVWludDhBcnJheSwg
VWludDhDbGFtcGVkQXJyYXksIEludDE2QXJyYXksIFVpbnQxNkFycmF5LCBVaW50MzJBcnJheSwg
RmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXldOworZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMp
IHsKKyAgICBsZXQgZXJyb3IgPSBudWxsOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBs
ZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbih0aGVUYXJnZXQsIHByb3BOYW1l
KSB7CisgICAgICAgICAgICBhc3NlcnQocHJvcE5hbWUgPT09ICJwcm90b3R5cGUiKTsKKyAgICAg
ICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHRocm93IGVycm9yOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94
eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA1MDA7IGkrKykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgIG5ldyBwcm94eTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAg
ICAgICAgZXJyb3IgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7Cisg
ICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271962</attachid>
            <date>2016-02-22 15:55:33 -0800</date>
            <delta_ts>2016-02-22 15:59:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22501</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE2LTAyLTIyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlIGRvZXNuJ3QgdGFrZSBp
bnRvIGFjY291bnQgdGhhdCBnZXQoKSBtaWdodCB0aHJvdworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUgY2FsbHMgbmV3VGFyZ2V0LmdldCguLi4pIHdoaWNoIGNhbiB0aHJvdyAKKyAg
ICAgICAgYW4gZXhjZXB0aW9uLiBOZWl0aGVyIHRoZSBmdW5jdGlvbiBub3IgdGhlIGNhbGwgc2l0
ZXMgb2YgdGhlIGZ1bmN0aW9uIHRvb2sgdGhpcyBpbnRvCisgICAgICAgIGFjY291bnQuIFRoaXMg
cGF0Y2ggYXVkaXRzIHRoZSBjYWxsIHNpdGVzIG9mIHRoZSBmdW5jdGlvbiB0byBtYWtlIGl0IHdv
cmsgaW4KKyAgICAgICAgdGhlIGV2ZW50IHRoYXQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KKwor
ICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uU2tp
cHBpbmdFdmFsRW5hYmxlZENoZWNrKToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJy
YXlOZWdhdGl2ZUluZGV4ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKiBydW50
aW1lL01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAg
ICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRSZWdFeHBTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoUmVn
RXhwQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0
b3IpOgorICAgICAgICAoSlNDOjpTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6
CisgICAgICAgICogcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RXZWFrTWFwKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdlYWtTZXQpOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9jcmVhdGUtc3ViY2xhc3Mtc3RydWN0dXJlLW1pZ2h0LXRocm93LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisKIDIwMTYtMDItMjIgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgSlNWYWx1ZTo6aXNDb25zdHJ1Y3RvciBhbmQgSlNWYWx1ZTo6
aXNGdW5jdGlvbiBzaG91bGQgY2hlY2sgZ2V0Q29uc3RydWN0RGF0YSBhbmQgZ2V0Q2FsbERhdGEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAg
SlNWYWx1ZSBib29sZWFuID0ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihl
eGVjKSk7CiAgICAgU3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2Jq
ZWN0U3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEJvb2xlYW5PYmplY3QqIG9i
aiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBib29sZWFuU3RydWN0dXJlKTsK
ICAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgYm9vbGVhbik7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsNiArMTcyLDggQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0
YXRlKiBleGVjLAogICAgICAgICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4
ZWMsIGFyZ3MsIFdURjo6TG9jYWxUaW1lKTsKIAogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVy
ZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rh
cmdldCwgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCkpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gRGF0ZUlu
c3RhbmNlOjpjcmVhdGUodm0sIGRhdGVTdHJ1Y3R1cmUsIHZhbHVlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJldGVyCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgp
OwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBl
Tm90aGluZywgZmFsc2UpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsOCArMTI0LDExIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RG
dW5jdGlvblNraXBwaW5nRXZhbEUKICAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICAgICB9CiAKKyAgICBTdHJ1Y3R1cmUqIHN1YmNsYXNz
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGZ1bmN0aW9uLCBnbG9iYWxPYmpl
Y3QsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rh
cmdldCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKSk7CisgICAgcmV0dXJuIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBmdW5jdGlvbiwgZ2xvYmFsT2JqZWN0LCBzdWJj
bGFzc1N0cnVjdHVyZSk7CiB9CiAKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1
Y3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywxMCAr
OTcsMTMgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAg
ICAgICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmls
ZSB0byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4KICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4obmV3VGFyZ2V0LmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSk7CisgICAgICAgICAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0YSh2bSktPmNyZWF0ZUludGVybmFs
RnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uodm0sIHByb3RvdHlwZSwgYmFzZUNs
YXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4obmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlKSk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAo
cHJvdG90eXBlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgc29t
ZW9uZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29uc3RydWN0b3Igd2l0aCBhbm90
aGVyIGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJnZXQuCiAgICAgICAgICAgICAg
ICAgLy8gVGh1cywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgY29zdCBvZiBsb29raW5nIHVwIHRo
ZSBzdHJ1Y3R1cmUgZnJvbSBvdXIgaGFzaCB0YWJsZSBldmVyeSB0aW1lLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw2ICs5Nyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKIAogICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwg
Y29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVy
OjpjcmVhdGUoZXhlYy0+dm0oKSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIGJ1ZmZlci5yZWxlYXNl
KCkpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24g
MTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIx
OSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1
Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzEsNiArNzMxLDggQEAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlYwogICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihleGVj
LCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAgICAgICBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0Fs
bG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6
OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpKTsKIH0KQEAgLTc0
Miw3ICs3NDQsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlYwog
IAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgQXJnTGlzdCYgdmFsdWVzLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsK
LSAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25G
b3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCks
IHZhbHVlcykpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1Rh
cmdldCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9j
YXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMp
KTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVzLCBK
U1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKQEAgLTc1Miw3ICs3NTcsMTAgQEAgaW5saW5l
IEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29u
c3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9m
aWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMs
IHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7Ci0gICAg
cmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHBy
b2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpLCB2YWx1
ZXMsIGxlbmd0aCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5l
d1RhcmdldCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFs
bG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCB2YWx1
ZXMsIGxlbmd0aCkpOwogfQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBKU1ZhbHVl
KiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkp
CkBAIC03NjIsNyArNzcwLDEwIEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVj
U3RhdGUKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4
ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5n
dGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogewotICAgIHJldHVybiBBcnJheUFs
bG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1
Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVjLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KSwgdmFs
dWVzLCBsZW5ndGgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBu
ZXdUYXJnZXQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RB
bGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMs
IHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0
cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgs
IEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKIAogICAgIFN0cnVjdHVyZSogcHJvbWlzZVN0cnVjdHVyZSA9IEludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rhcmdl
dCgpLCBnbG9iYWxPYmplY3QtPnByb21pc2VTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIHByb21pc2VT
dHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBl
eGVjLT5hcmd1bWVudCgwKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIG1hcFN0cnVj
dHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlm
IChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXIKIHsKICAgICBKU1ZhbHVlIG1lc3Nh
Z2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkp
LT5lcnJvclN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBBU1NFUlQoZXJyb3JT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90aGluZywg
ZmFsc2UpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEsOCArODEsMTEgQEAgdm9pZCBOdW1iZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE51bWJl
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMp
IDogMDsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4
ZWMtPnZtKCksIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
ck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAorICAgIE51bWJlck9iamVj
dCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsK
ICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwganNOdW1iZXIobikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDkgKzI0OSw4IEBAIHZvaWQgc2V0UmVn
RXhwQ29uc3RydWN0b3JNdWx0aWxpbmUoRXhlY1MKIGlubGluZSBTdHJ1Y3R1cmUqIGdldFJlZ0V4
cFN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKTsKLSAgICBpZiAobmV3VGFyZ2V0ICE9IGpzVW5kZWZp
bmVkKCkpIHsKKyAgICBpZiAobmV3VGFyZ2V0ICE9IGpzVW5kZWZpbmVkKCkpCiAgICAgICAgIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IG5ld1RhcmdldCwgc3RydWN0dXJlKTsKLSAgICB9CiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0K
IApAQCAtMjY3LDggKzI2NiwxMSBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0
ZSogZXhlCiAgICAgICAgIC8vIElmIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCB0aGlzIGp1c3QgcmV0
dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgKHNlZSAxNS4xMC4zLjEpLgogICAgICAgICBpZiAobmV3
VGFyZ2V0ICE9IGpzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0g
c3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4oYXNPYmplY3QoYXJnMCkpLT5yZWdFeHAoKTsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMs
IGdsb2JhbE9iamVjdCwgbmV3VGFyZ2V0KTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAg
cmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdldFJlZ0V4cFN0cnVjdHVy
ZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCksIHJlZ0V4cCk7CisgICAgICAgICAgICBy
ZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCByZWdFeHAp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhc09iamVjdChhcmcwKTsKICAgICB9CkBAIC0y
OTEsNyArMjkzLDEwIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUK
ICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdm0udGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2Uo
KSkpOwogCi0gICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHZtLCBnZXRSZWdFeHBTdHJ1
Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpLCByZWdFeHApOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
bmV3VGFyZ2V0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5z
ZXRTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpTU2V0
OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAxOTY5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1
LDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIAotICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFN0cmluZ09iamVjdDo6Y3JlYXRlKHZtLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdP
YmplY3RTdHJ1Y3R1cmUoKSkpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUodm0s
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSwgZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmpl
Y3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShT
dHJpbmdPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmluZ0NvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtN
YXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE5Njk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhl
Yy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBl
eGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFwU3RydWN0dXJlKCkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpTV2Vha01hcDo6Y3JlYXRl
KGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTk2OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUo
KSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgSlNXZWFrU2V0KiB3ZWFrU2V0ID0gSlNXZWFrU2V0OjpjcmVhdGUoZXhlYywgd2Vh
a1NldFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jcmVhdGUtc3ViY2xhc3Mtc3RydWN0dXJlLW1pZ2h0
LXRocm93LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvY3JlYXRlLXN1YmNsYXNzLXN0cnVjdHVyZS1taWdodC10aHJvdy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY3JlYXRlLXN1YmNsYXNzLXN0
cnVjdHVyZS1taWdodC10aHJvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACitm
dW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgYXNzZXJ0aW9uLiIpOworfQorCitsZXQgdGFyZ2V0cyA9IFtGdW5jdGlvbiwgU3RyaW5n
LCBBcnJheSwgU2V0LCBNYXAsIFdlYWtTZXQsIFdlYWtNYXAsIFJlZ0V4cCwgTnVtYmVyLCBQcm9t
aXNlLCBEYXRlLCBCb29sZWFuLCBFcnJvciwgVHlwZUVycm9yLCBTeW50YXhFcnJvciwgQXJyYXlC
dWZmZXIsIEludDMyQXJyYXksIEludDhBcnJheSwgVWludDhBcnJheSwgVWludDhDbGFtcGVkQXJy
YXksIEludDE2QXJyYXksIFVpbnQxNkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBG
bG9hdDY0QXJyYXldOworZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHsKKyAgICBsZXQgZXJy
b3IgPSBudWxsOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgaGFuZGxlciA9IHsK
KyAgICAgICAgZ2V0OiBmdW5jdGlvbih0aGVUYXJnZXQsIHByb3BOYW1lKSB7CisgICAgICAgICAg
ICBhc3NlcnQocHJvcE5hbWUgPT09ICJwcm90b3R5cGUiKTsKKyAgICAgICAgICAgIGVycm9yID0g
bmV3IEVycm9yOworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRocm93
IGVycm9yOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0
YXJnZXQsIGhhbmRsZXIpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgewor
ICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG5l
dyBwcm94eTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB0aHJldyA9IHRydWU7
CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICAgICAgZXJyb3IgPSBu
dWxsOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgICAgIGFzc2VydChj
YWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="296786"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>