<?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>168179</bug_id>
          
          <creation_ts>2017-02-11 15:07:06 -0800</creation_ts>
          <short_desc>Remove the remaining functions out of JSDOMBinding</short_desc>
          <delta_ts>2017-02-12 18:01:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1275865</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-11 15:07:06 -0800</bug_when>
    <thetext>Remove more functions out of JSDOMBinding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275868</commentid>
    <comment_count>1</comment_count>
      <attachid>301276</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-11 15:19:32 -0800</bug_when>
    <thetext>Created attachment 301276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275886</commentid>
    <comment_count>2</comment_count>
      <attachid>301284</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-11 16:30:39 -0800</bug_when>
    <thetext>Created attachment 301284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275920</commentid>
    <comment_count>3</comment_count>
      <attachid>301290</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-11 21:09:46 -0800</bug_when>
    <thetext>Created attachment 301290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275927</commentid>
    <comment_count>4</comment_count>
      <attachid>301290</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-11 23:44:30 -0800</bug_when>
    <thetext>Comment on attachment 301290
Patch

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

&gt; Source/JavaScriptCore/runtime/IteratorOperations.cpp:170
&gt; +    JSObject* object = asObject(value);

I would have used a reference here.

&gt; Source/JavaScriptCore/runtime/IteratorOperations.h:47
&gt; +JS_EXPORT_PRIVATE bool hasIteratorMethod(ExecState&amp;, JSValue);
&gt; +
&gt;  JS_EXPORT_PRIVATE JSValue iteratorForIterable(ExecState*, JSValue iterable);

I think these should be paragraphed together because they seem pretty closely related.

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:26
&gt; +// FIXME: Remove this header.

What is this blocked on?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275928</commentid>
    <comment_count>5</comment_count>
      <attachid>301290</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-11 23:45:19 -0800</bug_when>
    <thetext>Comment on attachment 301290
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/IteratorOperations.cpp:170
&gt;&gt; +    JSObject* object = asObject(value);
&gt; 
&gt; I would have used a reference here.

Oops, I see this is in JavaScriptCore, not WebCore, and I guess the local custom here its that we want to use pointers any time it’s a heap cell like this is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275993</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-12 10:27:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 301290 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301290&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IteratorOperations.cpp:170
&gt; &gt; +    JSObject* object = asObject(value);
&gt; 
&gt; I would have used a reference here.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IteratorOperations.h:47
&gt; &gt; +JS_EXPORT_PRIVATE bool hasIteratorMethod(ExecState&amp;, JSValue);
&gt; &gt; +
&gt; &gt;  JS_EXPORT_PRIVATE JSValue iteratorForIterable(ExecState*, JSValue iterable);
&gt; 
&gt; I think these should be paragraphed together because they seem pretty
&gt; closely related.

Ok.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:26
&gt; &gt; +// FIXME: Remove this header.
&gt; 
&gt; What is this blocked on?

I need to remove it and get everything building by adding the headers to the appropriate places. I want to do that in a separate pass.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275994</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-12 10:30:52 -0800</bug_when>
    <thetext>Committed r212207: &lt;http://trac.webkit.org/changeset/212207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276058</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-12 16:24:14 -0800</bug_when>
    <thetext>Carlos, it broke our bindings generation tests, can you investigate please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276059</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-12 16:26:10 -0800</bug_when>
    <thetext>It broke the Mac bindings tests as well!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276060</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-12 16:27:53 -0800</bug_when>
    <thetext>And it broke the cloop bot:

/Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/Lookup.h:392:28: error: incomplete type &apos;JSC::JSFunction&apos; named in nested name specifier
    return JSValue::encode(JSFunction::create(state-&gt;vm(), state-&gt;lexicalGlobalObject(), length, propertyName.publicName(), nativeFunction));
                           ^~~~~~~~~~~~
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/ArrayPrototype.cpp:25:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/ArrayPrototype.h:23:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/JSArray.h:24:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/ButterflyInlines.h:28:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/ArrayStorage.h:33:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/Structure.h:28:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/runtime/ClassInfo.h:25:
In file included from /Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/interpreter/CallFrame.h:28:
/Volumes/Data/slave/sierra-cloop-debug/build/Source/JavaScriptCore/interpreter/StackVisitor.h:41:7: note: forward declaration of &apos;JSC::JSFunction&apos;
class JSFunction;
      ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276066</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-12 17:27:07 -0800</bug_when>
    <thetext>To fix the bindings tests someone just has to regenerate the results I think. To fix the CLoop build we just need to add an include.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276067</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-02-12 17:59:07 -0800</bug_when>
    <thetext>Cloop build fix attempted in https://trac.webkit.org/changeset/212212.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276068</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-02-12 18:01:20 -0800</bug_when>
    <thetext>Rebaselined the bindings tests in https://trac.webkit.org/changeset/212213.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301276</attachid>
            <date>2017-02-11 15:19:32 -0800</date>
            <delta_ts>2017-02-11 16:30:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168179-20170211151703.patch</filename>
            <type>text/plain</type>
            <size>36731</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyMTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDE3LTAyLTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVt
b3ZlIG1vcmUgZnVuY3Rpb25zIG91dCBvZiBKU0RPTUJpbmRpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE3OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdHdvIHV0aWxpdHkgZnVuY3Rpb25z
IGludG8gbW9yZSBhcHByb3ByaWF0ZSBsb2NhdGlvbnMuCisKKyAgICAgICAgLSBNb3ZlIGhhc0l0
ZXJhdG9yTWV0aG9kIHRvIEl0ZXJhdG9yT3BlcmF0aW9ucy4KKyAgICAgICAgLSBNb3ZlIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlciB0byBMb29rdXAKKworICAgICAgICAqIHJ1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6aGFzSXRlcmF0b3JNZXRob2Qp
OgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg6CisgICAgICAgICogcnVu
dGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0
dGVyKToKKwogMjAxNy0wMi0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KIAogICAgICAgICBbSlNDXSBJbXBsZW1lbnQgKFNoYXJlZClBcnJheUJ1ZmZlci5wcm90b3R5
cGUuYnl0ZUxlbmd0aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0
b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksMTIgKzE1OSwyOSBAQCBKU09iamVjdCogY3JlYXRlSXRlcmF0b3JSZXN1bHRP
YmplY3QoRXhlCiAgICAgcmV0dXJuIHJlc3VsdE9iamVjdDsKIH0KIAorYm9vbCBoYXNJdGVyYXRv
ck1ldGhvZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9
IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJv
cGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKK30K
KwogSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
aXRlcmFibGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5j
dGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5pdGVyYXRv
clN5bWJvbCk7CisgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KHN0
YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVyYXRvckZ1
bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVy
YXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUl0ZXJh
dAogCiBTdHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QmKTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNJdGVyYXRvck1l
dGhvZChFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBp
dGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmFibGUpOwogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2FsbEJhY2tUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNCArMzg3LDkgQEAgaW5s
aW5lIHZvaWQgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKFZNJiB2bQogICAgIH0KIH0KIAordGVtcGxh
dGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEVuY29kZWRKU1Zh
bHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRp
dmVGdW5jdGlvbikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTIxOTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIzIEBACisyMDE3LTAyLTAzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgQWRvcHQgU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc4MjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oOgorICAgICAgICAoV1RGOjpTaWduZWRJbnRlZ2VyU3RyaW5nVHlwZUFkYXB0ZXI6OlNp
Z25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRlcik6CisgICAgICAgIChXVEY6OlVuc2lnbmVkSW50
ZWdlclN0cmluZ1R5cGVBZGFwdGVyOjpVbnNpZ25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRlcik6
CisgICAgICAgIEFkZCBiYXNlIGNsYXNzIGZvciBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIg
c3RyaW5nIGFkYXB0YXRpb24uIEFsbG93aW5nCisgICAgICAgIHVzIHRvIGVhc2lseSBhZGFwdCB0
eXBlcyBvZiBkaWZmZXJlbnQgc2l6ZXMuIEFkZCBhZGFwdG9ycyBmb3IgYWxsIHRoZSBpbnRlZ2Vy
CisgICAgICAgIHR5cGVzIFN0cmluZzo6bnVtYmVyKCkgb3ZlcmxvYWRzLgorCisgICAgICAgIChX
VEY6OlN0cmluZ1R5cGVBZGFwdGVyPGRvdWJsZT46OlN0cmluZ1R5cGVBZGFwdGVyPGRvdWJsZT4p
OgorICAgICAgICBDaGFuZ2UgdGhlIGRlZmF1bHQgZG91YmxlIGFkYXB0YXRpb24gbWF0Y2ggU3Ry
aW5nOjpudW1iZXIoKS4KKworICAgICAgICAoV1RGOjpGb3JtYXR0ZWROdW1iZXI6OmVjbWFTY3Jp
cHQpOgorICAgICAgICBBZGQgYSBmb3JtYXR0ZXIgdGhhdCBtYXRjaGVzIG51bWJlclRvU3RyaW5n
RUNNQVNjcmlwdC4KKwogMjAxNy0wMi0xMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIFtYY29kZV0gV1RGIGluc3RhbGxzIGV4dHJhIGNvcGllcyBvZiB0d28gaGVh
ZGVycyBvdXRzaWRlIC91c3IvbG9jYWwvaW5jbHVkZS93dGYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaAkocmV2aXNpb24gMjEyMTk0KQor
KysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0
ZTw+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxpbnQ+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFNp
Z25lZEludGVnZXJUeXBlPgorY2xhc3MgU2lnbmVkSW50ZWdlclN0cmluZ1R5cGVBZGFwdGVyIHsK
IHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxpbnQ+KGludCBudW1iZXIpCisgICAgU2ln
bmVkSW50ZWdlclN0cmluZ1R5cGVBZGFwdGVyKFNpZ25lZEludGVnZXJUeXBlIG51bWJlcikKICAg
ICAgICAgOiBtX251bWJlcihudW1iZXIpCiAgICAgewogICAgIH0KQEAgLTQ4LDEzICs0OCwxMyBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nOjpu
dW1iZXIobV9udW1iZXIpOyB9CiAKIHByaXZhdGU6Ci0gICAgaW50IG1fbnVtYmVyOworICAgIFNp
Z25lZEludGVnZXJUeXBlIG1fbnVtYmVyOwogfTsKIAotdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5n
VHlwZUFkYXB0ZXI8dW5zaWduZWQ+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdl
clR5cGU+CitjbGFzcyBVbnNpZ25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRlciB7CiBwdWJsaWM6
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8dW5zaWduZWQ+KHVuc2lnbmVkIG51bWJlcikKKyAgICBV
bnNpZ25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRlcihVbnNpZ25lZEludGVnZXJUeXBlIG51bWJl
cikKICAgICAgICAgOiBtX251bWJlcihudW1iZXIpCiAgICAgewogICAgIH0KQEAgLTY4LDE1ICs2
OCw2NCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3Ry
aW5nOjpudW1iZXIobV9udW1iZXIpOyB9CiAKIHByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9udW1i
ZXI7CisgICAgVW5zaWduZWRJbnRlZ2VyVHlwZSBtX251bWJlcjsKIH07CiAKLXRlbXBsYXRlPD4K
LWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGRvdWJsZT4geworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPGludD4gOiBwdWJsaWMgU2lnbmVkSW50ZWdlclN0cmluZ1R5cGVBZGFw
dGVyPGludD4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyPGludD4oaW50IG51bWJl
cikKKyAgICAgICAgOiBTaWduZWRJbnRlZ2VyU3RyaW5nVHlwZUFkYXB0ZXI8aW50PihudW1iZXIp
CisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8
bG9uZz4gOiBwdWJsaWMgU2lnbmVkSW50ZWdlclN0cmluZ1R5cGVBZGFwdGVyPGxvbmc+IHsKK3B1
YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxsb25nPihsb25nIG51bWJlcikKKyAgICAgICAg
OiBTaWduZWRJbnRlZ2VyU3RyaW5nVHlwZUFkYXB0ZXI8bG9uZz4obnVtYmVyKQorICAgIHsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGxvbmcgbG9uZz4g
OiBwdWJsaWMgU2lnbmVkSW50ZWdlclN0cmluZ1R5cGVBZGFwdGVyPGxvbmcgbG9uZz4geworcHVi
bGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyPGxvbmcgbG9uZz4obG9uZyBsb25nIG51bWJlcikK
KyAgICAgICAgOiBTaWduZWRJbnRlZ2VyU3RyaW5nVHlwZUFkYXB0ZXI8bG9uZyBsb25nPihudW1i
ZXIpCisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8dW5zaWduZWQ+IDogcHVibGljIFVuc2lnbmVkSW50ZWdlclN0cmluZ1R5cGVBZGFwdGVyPHVu
c2lnbmVkPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXI8dW5zaWduZWQ+KHVuc2ln
bmVkIG51bWJlcikKKyAgICAgICAgOiBVbnNpZ25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRlcjx1
bnNpZ25lZD4obnVtYmVyKQorICAgIHsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IGNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPHVuc2lnbmVkIGxvbmc+IDogcHVibGljIFVuc2lnbmVkSW50ZWdlclN0
cmluZ1R5cGVBZGFwdGVyPHVuc2lnbmVkIGxvbmc+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBl
QWRhcHRlcjx1bnNpZ25lZCBsb25nPih1bnNpZ25lZCBsb25nIG51bWJlcikKKyAgICAgICAgOiBV
bnNpZ25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRlcjx1bnNpZ25lZCBsb25nPihudW1iZXIpCisg
ICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8dW5z
aWduZWQgbG9uZyBsb25nPiA6IHB1YmxpYyBVbnNpZ25lZEludGVnZXJTdHJpbmdUeXBlQWRhcHRl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjx1
bnNpZ25lZCBsb25nIGxvbmc+KHVuc2lnbmVkIGxvbmcgbG9uZyBudW1iZXIpCisgICAgICAgIDog
VW5zaWduZWRJbnRlZ2VyU3RyaW5nVHlwZUFkYXB0ZXI8dW5zaWduZWQgbG9uZyBsb25nPihudW1i
ZXIpCisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8ZG91YmxlPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8ZG91YmxlPihkb3Vi
bGUgbnVtYmVyKQogICAgIHsKLSAgICAgICAgbnVtYmVyVG9TdHJpbmcobnVtYmVyLCBtX2J1ZmZl
cik7CisgICAgICAgIC8vIE1hdGNoIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIFN0cmluZzo6bnVt
YmVyKGRvdWJsZSwgLi4uKS4KKyAgICAgICAgbnVtYmVyVG9GaXhlZFByZWNpc2lvblN0cmluZyhu
dW1iZXIsIDYsIG1fYnVmZmVyLCB0cnVlKTsKICAgICAgICAgbV9sZW5ndGggPSBzdHJsZW4obV9i
dWZmZXIpOwogICAgIH0KIApAQCAtMTAyLDggKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9sZW5ndGg7CiB9OwogCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxm
bG9hdD4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8ZG91YmxlPiB7Cit0ZW1wbGF0ZTw+IGNs
YXNzIFN0cmluZ1R5cGVBZGFwdGVyPGZsb2F0PiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxk
b3VibGU+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxmbG9hdD4oZmxvYXQgbnVt
YmVyKQogICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPGRvdWJsZT4obnVtYmVyKQpAQCAtMTEz
LDYgKzE2MSwxNCBAQCBwdWJsaWM6CiAKIGNsYXNzIEZvcm1hdHRlZE51bWJlciB7CiBwdWJsaWM6
CisgICAgc3RhdGljIEZvcm1hdHRlZE51bWJlciBlY21hU2NyaXB0KGRvdWJsZSBudW1iZXIpCisg
ICAgeworICAgICAgICBGb3JtYXR0ZWROdW1iZXIgbnVtYmVyRm9ybWF0dGVyOworICAgICAgICBu
dW1iZXJUb1N0cmluZyhudW1iZXIsIG51bWJlckZvcm1hdHRlci5tX2J1ZmZlcik7CisgICAgICAg
IG51bWJlckZvcm1hdHRlci5tX2xlbmd0aCA9IHN0cmxlbihudW1iZXJGb3JtYXR0ZXIubV9idWZm
ZXIpOworICAgICAgICByZXR1cm4gbnVtYmVyRm9ybWF0dGVyOworICAgIH0KKwogICAgIHN0YXRp
YyBGb3JtYXR0ZWROdW1iZXIgZml4ZWRQcmVjaXNpb24oZG91YmxlIG51bWJlciwgdW5zaWduZWQg
c2lnbmlmaWNhbnRGaWd1cmVzID0gNiwgYm9vbCB0cnVuY2F0ZVRyYWlsaW5nWmVyb3MgPSBmYWxz
ZSkKICAgICB7CiAgICAgICAgIEZvcm1hdHRlZE51bWJlciBudW1iZXJGb3JtYXR0ZXI7CkBAIC0x
MzcsOCArMTkzLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAKLXRl
bXBsYXRlPD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEZvcm1hdHRlZE51bWJlcj4gewordGVt
cGxhdGU8PiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxGb3JtYXR0ZWROdW1iZXI+IHsKIHB1Ymxp
YzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxGb3JtYXR0ZWROdW1iZXI+KGNvbnN0IEZvcm1hdHRl
ZE51bWJlciYgbnVtYmVyRm9ybWF0dGVyKQogICAgICAgICA6IG1fbnVtYmVyRm9ybWF0dGVyKG51
bWJlckZvcm1hdHRlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMjE5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE3
LTAyLTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIG1v
cmUgZnVuY3Rpb25zIG91dCBvZiBKU0RPTUJpbmRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdXRpbGl0eSBmdW5jdGlvbnMgaW50byBtb3Jl
IGFwcHJvcHJpYXRlIGxvY2F0aW9ucy4KKyAgICAgICAgLSBNb3ZlIGhhc0l0ZXJhdG9yTWV0aG9k
IHRvIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKKyAgICAgICAgLSBNb3ZlIG5vbkNhY2hp
bmdTdGF0aWNGdW5jdGlvbkdldHRlciB0byBydW50aW1lL0xvb2t1cC5oCisgICAgICAgIC0gTW92
ZSBhZGRJbXB1cmVQcm9wZXJ0eSB0byBDb21tb25WTQorCisgICAgICAgIFJlbW92ZSB0b0pTIG92
ZXJsb2FkIHRoYXQgdG9vayBhIFZlY3RvcjxUPi4gUmVwbGFjZSBpdCdzIHVzYWdlCisgICAgICAg
IHdpdGggdG9KUzxJRExTZXF1ZW5jZTxUPj4gdXNhZ2UuIFRvIG1ha2UgdGhpcyB3b3JrLCBhZGRl
ZCB0d28KKyAgICAgICAgbmV3IHR5cGVzLCBJRExJREJLZXlEYXRhIGFuZCBJRExJREJWYWx1ZS4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1
cmVkQ2xvbmUpOgorICAgICAgICBBZG9wdCBKU0RPTUNvbnZlcnQgaW5mcmFzdHJ1Y3R1cmUgZm9y
IGNvbnZlcnNpb25zIHVzaW5nIG5ldyB0eXBlcy4KKworICAgICAgICAqIGJpbmRpbmdzL0lETFR5
cGVzLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW5kZXhlZERCLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExJREJLZXlEYXRhPjo6Y29udmVydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExJREJWYWx1ZT46OmNvbnZlcnQpOgorICAg
ICAgICBBZGQgbmV3IHR5cGVzIGZvciBJREJLZXlEYXRhIGFuZCBJREJWYWx1ZS4KKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZEltcHVy
ZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Db21tb25WTS5oOgorICAgICAgICBN
b3ZlIGFkZEltcHVyZVByb3BlcnR5IGhlcmUgZnJvbSBKU0RPTUJpbmRpbmcuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmlkYktleURhdGFUb1NjcmlwdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIFJlbW92ZSB1bnVzZWQgaWRiS2V5RGF0
YVRvU2NyaXB0VmFsdWUsIGFuZCBncm91cCBsaWtlIGZ1bmN0aW9ucworICAgICAgICB0b2dldGhl
ci4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphZGRJbXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpo
YXNJdGVyYXRvck1ldGhvZCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUvcmVtb3ZlIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFVuaW9uLmg6CisgICAgICAgIFVwZGF0ZSBmb3IgbW92ZSBvZiBoYXNJdGVyYXRvck1ldGhv
ZCB0byBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9j
dW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20u
Y3BwOgorICAgICAgICBVcGRhdGUgZm9yIG1vdmUgb2Ygbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9u
R2V0dGVyIHRvIHJ1bnRpbWUvTG9va3VwLmgKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3Vi
dGxlQ3J5cHRvQ3VzdG9tLmNwcDoKKyAgICAgICAgUmVtb3ZlIHVubmVlZGVkIGluY2x1ZGUgb2Yg
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZU92ZXJsb2FkZWRGdW5jdGlv
bk9yQ29uc3RydWN0b3IpOgorICAgICAgICBJbmNsdWRlIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRp
b25zIHdoZW4gbmVlZGluZyB0byBkaXN0aW5ndWlzaCBhIHNlcXVlbmNlLgorCisgICAgICAgICog
aHRtbC9IVE1MRG9jdW1lbnQuY3BwOgorICAgICAgICBSZXBsYWNlIGluY2x1ZGUgb2YgSlNET01C
aW5kaW5nLmggd2l0aCBDb21tb25WTS5oIGZvciBhZGRJbXB1cmVQcm9wZXJ0eS4KKwogMjAxNy0w
Mi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVu
dCBVUkwncyB0b0pTT04oKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuY3BwCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsOSAr
MzQ1LDExIEBAIHZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYKIAogICAg
IGF1dG8mIHZtID0gY29udGV4dC0+dm0oKTsKIAotICAgIG1fY3VycmVudEtleSA9IHsgdm0sIGlk
YktleURhdGFUb1NjcmlwdFZhbHVlKCpleGVjLCBnZXRSZXN1bHQua2V5RGF0YSgpKSB9OworICAg
IC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNj
cmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9m
IHRoZSBJREJDdXJzb3Igd3JhcHBlciBjYW4gYmUgdXNlZCwgcmF0aGVyIHRoYW4gdGhlIGxleGlj
YWxHbG9iYWxPYmplY3QuCisgICAgbV9jdXJyZW50S2V5ID0geyB2bSwgdG9KUygqZXhlYywgKmV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0UmVzdWx0LmtleURhdGEoKS5tYXliZUNyZWF0
ZUlEQktleSgpLmdldCgpKSB9OwogICAgIG1fY3VycmVudEtleURhdGEgPSBnZXRSZXN1bHQua2V5
RGF0YSgpOwotICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSB7IHZtLCBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqZXhlYywgZ2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCkpIH07CisgICAgbV9jdXJy
ZW50UHJpbWFyeUtleSA9IHsgdm0sIHRvSlMoKmV4ZWMsICpleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpLm1heWJlQ3JlYXRlSURCS2V5KCkuZ2V0
KCkpIH07CiAgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSBnZXRSZXN1bHQucHJpbWFyeUtl
eURhdGEoKTsKIAogICAgIGlmIChpc0tleUN1cnNvcldpdGhWYWx1ZSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHJldmlzaW9u
IDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsMTEgKzM2NCwxMyBAQCB2b2lkIElEQlJlcXVlc3Q6
OnNldFJlc3VsdChjb25zdCBJREJLZXlECiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvKiBleGVjID0gY29udGV4dC0+ZXhlY1N0YXRlKCk7Ci0gICAgaWYgKCFl
eGVjKQorICAgIGF1dG8qIHN0YXRlID0gY29udGV4dC0+ZXhlY1N0YXRlKCk7CisgICAgaWYgKCFz
dGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgaWRiS2V5RGF0YVRvU2NyaXB0VmFs
dWUoKmV4ZWMsIGtleURhdGEpIH0gfTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIHNo
b3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0
aGF0IGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUgSURCUmVxdWVzdCB3cmFwcGVyIGNhbiBi
ZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KKyAgICBtX3Jlc3Vs
dCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCB0
b0pTPElETElEQktleURhdGE+KCpzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlEYXRhKSB9IH07CiB9CiAKIHZvaWQgSURC
UmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYga2V5RGF0YXMpCkBA
IC0zODMsOSArMzg1LDEwIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3Rv
cjwKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAKLQorICAgIC8vIEZJWE1FOiBU
aGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0
aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBJREJSZXF1
ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LgogICAgIExvY2tlcjxKU0xvY2s+IGxvY2tlcihjb250ZXh0LT52bSgpLmFwaUxvY2soKSk7
Ci0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29u
dGV4dC0+dm0oKSwgdG9KUyhzdGF0ZSwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleURhdGFzKSB9IH07CisgICAgbV9yZXN1bHQgPSBS
ZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJ
RExTZXF1ZW5jZTxJRExJREJLZXlEYXRhPj4oKnN0YXRlLCAqanNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleURhdGFzKSB9IH07CiB9CiAK
IHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjxJREJWYWx1ZT4mIHZhbHVl
cykKQEAgLTM5NiwxMiArMzk5LDE0IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0
IFZlY3RvcjwKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8q
IGV4ZWMgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKLSAgICBpZiAoIWV4ZWMpCisgICAgYXV0byog
c3RhdGUgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKKyAgICBpZiAoIXN0YXRlKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICAvLyBGSVhNRTogVGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxh
emlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0aGF0IGdsb2JhbCBvYmpl
Y3QKKyAgICAvLyBvZiB0aGUgSURCUmVxdWVzdCB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIg
dGhhbiB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIo
Y29udGV4dC0+dm0oKS5hcGlMb2NrKCkpOwotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCksIHRvSlMoZXhlYywganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgdmFsdWVzKSB9
IH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsg
Y29udGV4dC0+dm0oKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJREJWYWx1ZT4+KCpzdGF0ZSwgKmpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2
YWx1ZXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQodWludDY0X3QgbnVt
YmVyKQpAQCAtNDEyLDcgKzQxNyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2
NF90IG51bWIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmVz
dWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCks
IEpTQzo6anNOdW1iZXIobnVtYmVyKSB9IH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJRExVbnJlc3RyaWN0
ZWREb3VibGU+KG51bWJlcikgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRv
U3RydWN0dXJlZENsb25lKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKQEAgLTQyNSwxMSArNDMwLDEz
IEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2wKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGV4ZWMgPSBjb250ZXh0LT5leGVj
U3RhdGUoKTsKLSAgICBpZiAoIWV4ZWMpCisgICAgYXV0byogc3RhdGUgPSBjb250ZXh0LT5leGVj
U3RhdGUoKTsKKyAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Jlc3Vs
dCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCBk
ZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjLCB2YWx1ZSkgfSB9OworICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBu
ZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBJ
REJSZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xv
YmFsT2JqZWN0LgorICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtu
b3duPiB7IGNvbnRleHQtPnZtKCksIHRvSlM8SURMSURCVmFsdWU+KCpzdGF0ZSwgKmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZSkg
fSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYs
OCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3Ryb25nOwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJREJLZXk7CitjbGFzcyBJREJLZXlEYXRhOworY2xhc3MgSURCVmFsdWU7CiB0
ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRE9NUHJvbWlzZTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KQEAgLTIwMCw2ICsyMDIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMRXZl
bnRMaXN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMWFBhdGhOU1Jlc29sdmVyIDog
SURMV3JhcHBlcjxUPiB7IH07CiAKIHN0cnVjdCBJRExJREJLZXkgOiBJRExXcmFwcGVyPElEQktl
eT4geyB9Oworc3RydWN0IElETElEQktleURhdGEgOiBJRExXcmFwcGVyPElEQktleURhdGE+IHsg
fTsKK3N0cnVjdCBJRExJREJWYWx1ZSA6IElETFdyYXBwZXI8SURCVmFsdWU+IHsgfTsKIAogI2lm
IEVOQUJMRShXRUJHTCkKIHN0cnVjdCBJRExXZWJHTEFueSA6IElETFR5cGU8V2ViR0xBbnk+IHsg
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHJldmlzaW9u
IDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMu
aD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIApAQCAtNjEsNSArNjIsMTAgQEAgVk0mIGNvbW1vblZNU2xvdygpCiAgICAgcmV0dXJuICpn
X2NvbW1vblZNT3JOdWxsOwogfQogCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVy
dHkocHJvcGVydHlOYW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwogfQpAQCAtNDIsNSArNDQsNyBAQCBpbmxpbmUg
SlNDOjpWTSYgY29tbW9uVk0oKQogICAgIHJldHVybiBjb21tb25WTVNsb3coKTsKIH0KIAordm9p
ZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2NywxMiArMzY3LDYgQEAgUmVmPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShFeGVjU3Rh
dAogICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgc2NyaXB0VmFsdWUpOwog
fQogCi1KU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCi17Ci0gICAgUmVmUHRyPElEQktleT4g
a2V5ID0ga2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpOwotICAgIHJldHVybiB0b0pTKGV4ZWMs
ICpleGVjLmxleGljYWxHbG9iYWxPYmplY3QoKSwga2V5LmdldCgpKTsKLX0KLQogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogewogICAgIEFTU0VSVChzdGF0ZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5oCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDIxICs0NiwxOCBAQCBj
bGFzcyBJREJWYWx1ZTsKIGNsYXNzIEluZGV4S2V5OwogY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7
CiAKLQogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5
UGF0aCYpOwogYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBib29sIGluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQktleURhdGEm
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IElEQktleVBhdGgmKTsKIAotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCS2V5Kik7Ci1KU0M6OkpT
VmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJL
ZXlEYXRhJik7CiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IElEQkluZGV4SW5mbyYsIEpTQzo6SlNWYWx1ZSwgSW5kZXhLZXkmIG91dEtleSk7CiAK
LUpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgSURCVmFsdWUmKTsKLQogUmVmPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYpOwogCi1KU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSURCS2V5RGF0YSYp
OworSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBJREJWYWx1ZSYpOwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IElEQlZhbHVlJik7CitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBJREJLZXkqKTsKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBJ
REJLZXlEYXRhJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxNyArMjIsMTAg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAotI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCi0KIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5
TmFtZSk7Ci19Ci0KIEpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5pc051bGwoKSkKQEAgLTQwLDIxICszMyw0
IEBAIEpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7CiB9CiAKLWJvb2wgaGFzSXRlcmF0b3JNZXRob2Qo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxE
YXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlN
ZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJh
dG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVk
KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMjkg
KzQ3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCiBKU0M6OkpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1
bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCiAKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFz
SXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi10ZW1wbGF0
ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQotewotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwg
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZl
Y3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3Jb
aV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkp
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydElu
ZGV4ZWREQi5oCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRJbmRleGVkREIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMjgg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PgogICAgIH0KIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleURhdGE+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SURCVmFsdWU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFVuaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0VW5pb24uaAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTgzLDcgKzE4
NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXIKICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
U2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IEpTQzo6aGFzSXRlcmF0b3JNZXRo
b2Qoc3RhdGUsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzSXRlcmF0b3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CkBAIC0xOTYsNyArMTk3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3Ry
dWN0IENvbnZlcnRlcgogICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBh
cnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyAhPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JN
ZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBKU0M6Omhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVu
QXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjEyMTk0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiU2NoZWR1
bGVkQWN0aW9uLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDxydW50aW1lL0pT
Q0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgogCiAjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKICNpbmNsdWRlICJKU1dlYktpdE5hbWVzcGFjZS5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJKU0hUTUxDb2xsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9M
b29rdXAuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMjE5NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgIkpTUnNhT2FlcFBhcmFtcy5oIgog
I2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjU1OCwxMyArMjU1OCwxNCBAQCBzdWIg
R2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0cnVjCiAgICAgfQogCiAgICAgbXkgJGdl
bmVyYXRlT3ZlcmxvYWRDYWxsSWZOZWNlc3NhcnkgPSBzdWIgewotICAgICAgICBteSAoJG92ZXJs
b2FkLCAkY29uZGl0aW9uKSA9IEBfOworICAgICAgICBteSAoJG92ZXJsb2FkLCAkY29uZGl0aW9u
LCAkaW5jbHVkZSkgPSBAXzsKICAgICAgICAgcmV0dXJuIHVubGVzcyAkb3ZlcmxvYWQ7CiAgICAg
ICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRp
dGlvbmFsU3RyaW5nKCRvdmVybG9hZCk7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lm
ICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoJGNvbmRpdGlvbilcbiAgICAiKSBpZiAk
Y29uZGl0aW9uOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuICR7
ZnVuY3Rpb25OYW1lfSRvdmVybG9hZC0+e292ZXJsb2FkSW5kZXh9KHN0YXRlKTtcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaW5jbHVkZSwgJG92ZXJsb2FkLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSkgaWYgJGluY2x1ZGU7CiAgICAgfTsKICAgICBt
eSAkaXNPcHRpb25hbFBhcmFtZXRlciA9IHN1YiB7CiAgICAgICAgIG15ICgkdHlwZSwgJG9wdGlv
bmFsaXR5KSA9IEBfOwpAQCAtMjY5NSw3ICsyNjk2LDcgQEAgRU5ECiAKICAgICAgICAgICAgICMg
RklYTUU6IEF2b2lkIGludm9raW5nIEdldE1ldGhvZChvYmplY3QsIFN5bWJvbC5pdGVyYXRvcikg
YWdhaW4gaW4gY29udmVydDxJRExTZXF1ZW5jZTxUPj4oLi4uKS4KICAgICAgICAgICAgICRvdmVy
bG9hZCA9IEdldE92ZXJsb2FkVGhhdE1hdGNoZXMoJFMsICRkLCBcJiRpc1NlcXVlbmNlT3JGcm96
ZW5BcnJheVBhcmFtZXRlcik7Ci0gICAgICAgICAgICAmJGdlbmVyYXRlT3ZlcmxvYWRDYWxsSWZO
ZWNlc3NhcnkoJG92ZXJsb2FkLCAiaGFzSXRlcmF0b3JNZXRob2QoKnN0YXRlLCBkaXN0aW5ndWlz
aGluZ0FyZykiKTsKKyAgICAgICAgICAgICYkZ2VuZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2Fy
eSgkb3ZlcmxvYWQsICJoYXNJdGVyYXRvck1ldGhvZCgqc3RhdGUsIGRpc3Rpbmd1aXNoaW5nQXJn
KSIsICI8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4iKTsKIAogICAgICAgICAgICAgJG92
ZXJsb2FkID0gR2V0T3ZlcmxvYWRUaGF0TWF0Y2hlcygkUywgJGQsIFwmJGlzRGljdGlvbmFyeU9y
UmVjb3JkT3JPYmplY3RPckNhbGxiYWNrSW50ZXJmYWNlUGFyYW1ldGVyKTsKICAgICAgICAgICAg
ICYkZ2VuZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJkaXN0aW5ndWlz
aGluZ0FyZy5pc09iamVjdCgpICYmIGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+dHlwZSgp
ICE9IFJlZ0V4cE9iamVjdFR5cGUiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNv
bW1vblZNLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKQEAgLTYzLDE1ICs2NCwxNCBAQAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSGFzaFRvb2xzLmgiCi0jaW5jbHVkZSAiSFRNTERvY3Vt
ZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5j
bHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkhhc2hUb29scy5oIgog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5j
cHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FjaGUgewpAQCAtMTMwLDcgKzEzMSw3IEBAIHB1YmxpYzoKIAogc3RhdGljIFN0
cmluZyBtYWtlVmVyc2lvbmVkRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIGJhc2VEaXJlY3Rv
cnlQYXRoKQogewotICAgIFN0cmluZyB2ZXJzaW9uU3ViZGlyZWN0b3J5ID0gdmVyc2lvbkRpcmVj
dG9yeVByZWZpeCArIFN0cmluZzo6bnVtYmVyKFN0b3JhZ2U6OnZlcnNpb24pOworICAgIGF1dG8g
dmVyc2lvblN1YmRpcmVjdG9yeSA9IG1ha2VTdHJpbmcodmVyc2lvbkRpcmVjdG9yeVByZWZpeCwg
U3RvcmFnZTo6dmVyc2lvbik7CiAgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChiYXNlRGlyZWN0b3J5UGF0aCwgdmVyc2lvblN1YmRpcmVjdG9yeSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVy
cm9yLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTkyLDcgKzkzLDcgQEAgdm9pZCBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdgogICAgIGVsc2UKICAgICAgICAgYmFz
ZSA9IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOwogCi0gICAgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgYmFz
ZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOworICAgIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9u
SUQsIG1ha2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKIAogI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgYXV0byBuZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtT
ZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklELCBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc3Vw
cGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBA
IC03OCw3ICs3OCw3IEBAIHN0YXRpYyBXZWJQYWdlR3JvdXBEYXRhIHBhZ2VHcm91cERhdGEoY28K
ICAgICBpZiAoIWlkZW50aWZpZXIuaXNFbXB0eSgpKQogICAgICAgICBkYXRhLmlkZW50aWZpZXIg
PSBpZGVudGlmaWVyOwogICAgIGVsc2UKLSAgICAgICAgZGF0YS5pZGVudGlmaWVyID0gbWFrZVN0
cmluZygiX191bmlxdWVQYWdlR3JvdXBJRC0iLCBTdHJpbmc6Om51bWJlcihkYXRhLnBhZ2VHcm91
cElEKSk7CisgICAgICAgIGRhdGEuaWRlbnRpZmllciA9IG1ha2VTdHJpbmcoIl9fdW5pcXVlUGFn
ZUdyb3VwSUQtIiwgZGF0YS5wYWdlR3JvdXBJRCk7CiAKICAgICBkYXRhLnZpc2libGVUb0luamVj
dGVkQnVuZGxlID0gdmlzaWJsZVRvSW5qZWN0ZWRCdW5kbGU7CiAgICAgZGF0YS52aXNpYmxlVG9I
aXN0b3J5Q2xpZW50ID0gdmlzaWJsZVRvSGlzdG9yeUNsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tQREZWaWV3Lm1tCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLUERGVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNVUkxFeHRyYXMuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC00MzMsOCArNDM0LDcgQEAgLSAo
TlNVUkwgKilfVVJMRm9yTGlua0Fubm90YXRpb246KFVJUERGTAogICAgICAgICByZXR1cm4gW05T
VVJMIFVSTFdpdGhTdHJpbmc6dXJsLnJlbGF0aXZlU3RyaW5nIHJlbGF0aXZlVG9VUkw6ZG9jdW1l
bnRVUkxdOwogCiAgICAgaWYgKE5TVUludGVnZXIgcGFnZU51bWJlciA9IGxpbmtBbm5vdGF0aW9u
LnBhZ2VOdW1iZXIpIHsKLSAgICAgICAgU3RyaW5nIGFuY2hvclN0cmluZyA9IEFTQ0lJTGl0ZXJh
bCgiI3BhZ2UiKTsKLSAgICAgICAgYW5jaG9yU3RyaW5nLmFwcGVuZChTdHJpbmc6Om51bWJlcihw
YWdlTnVtYmVyKSk7CisgICAgICAgIGF1dG8gYW5jaG9yU3RyaW5nID0gbWFrZVN0cmluZygiI3Bh
Z2UiLCBwYWdlTnVtYmVyKTsKICAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOmFu
Y2hvclN0cmluZyByZWxhdGl2ZVRvVVJMOmRvY3VtZW50VVJMXTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmNwcAkocmV2aXNpb24gMjEyMTk0
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC00OCw3ICs0OCw3IEBAIHN0YXRpYyBXb3JsZE1hcCYgYWxsV29y
bGRzKCkKIHN0YXRpYyBTdHJpbmcgdW5pcXVlV29ybGROYW1lKCkKIHsKICAgICBzdGF0aWMgdWlu
dDY0X3QgdW5pcXVlV29ybGROYW1lTnVtYmVyID0gMDsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhB
U0NJSUxpdGVyYWwoIlVuaXF1ZVdvcmxkXyIpLCBTdHJpbmc6Om51bWJlcih1bmlxdWVXb3JsZE5h
bWVOdW1iZXIrKykpOworICAgIHJldHVybiBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVW5pcXVl
V29ybGRfIiksIHVuaXF1ZVdvcmxkTmFtZU51bWJlcisrKTsKIH0KIAogUmVmPEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQ+IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6OmNyZWF0ZSgpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlz
aW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwLDYg
KzQwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dDo6ZW5zdXJlUHIKICAgICBlbHNlCiAgICAgICAgIGJhc2UgPSBTZXNzaW9uVHJh
Y2tlcjo6Z2V0SWRlbnRpZmllckJhc2UoKTsKIAotICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAnLicgKyBTdHJp
bmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBtYWtlU3RyaW5n
KGJhc2UsICcuJywgc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7CiAjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShz
ZXNzaW9uSUQpOwogICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RG
TW92ZShuZXR3b3JrU2Vzc2lvbikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301284</attachid>
            <date>2017-02-11 16:30:39 -0800</date>
            <delta_ts>2017-02-11 21:09:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>p.diff</filename>
            <type>text/plain</type>
            <size>25592</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyMTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDE3LTAyLTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVt
b3ZlIG1vcmUgZnVuY3Rpb25zIG91dCBvZiBKU0RPTUJpbmRpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE3OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdHdvIHV0aWxpdHkgZnVuY3Rpb25z
IGludG8gbW9yZSBhcHByb3ByaWF0ZSBsb2NhdGlvbnMuCisKKyAgICAgICAgLSBNb3ZlIGhhc0l0
ZXJhdG9yTWV0aG9kIHRvIEl0ZXJhdG9yT3BlcmF0aW9ucy4KKyAgICAgICAgLSBNb3ZlIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlciB0byBMb29rdXAKKworICAgICAgICAqIHJ1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6aGFzSXRlcmF0b3JNZXRob2Qp
OgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg6CisgICAgICAgICogcnVu
dGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0
dGVyKToKKwogMjAxNy0wMi0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KIAogICAgICAgICBbSlNDXSBJbXBsZW1lbnQgKFNoYXJlZClBcnJheUJ1ZmZlci5wcm90b3R5
cGUuYnl0ZUxlbmd0aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0
b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksMTIgKzE1OSwyOSBAQCBKU09iamVjdCogY3JlYXRlSXRlcmF0b3JSZXN1bHRP
YmplY3QoRXhlCiAgICAgcmV0dXJuIHJlc3VsdE9iamVjdDsKIH0KIAorYm9vbCBoYXNJdGVyYXRv
ck1ldGhvZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9
IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0
eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJv
cGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKK30K
KwogSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUg
aXRlcmFibGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5j
dGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5pdGVyYXRv
clN5bWJvbCk7CisgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KHN0
YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVyYXRvckZ1
bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVy
YXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUl0ZXJh
dAogCiBTdHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QmKTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNJdGVyYXRvck1l
dGhvZChFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBp
dGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmFibGUpOwogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2FsbEJhY2tUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNCArMzg3LDkgQEAgaW5s
aW5lIHZvaWQgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKFZNJiB2bQogICAgIH0KIH0KIAordGVtcGxh
dGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEVuY29kZWRKU1Zh
bHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRp
dmVGdW5jdGlvbikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjE5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDY5IEBACisyMDE3LTAyLTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmVtb3ZlIG1vcmUgZnVuY3Rpb25zIG91dCBvZiBKU0RPTUJpbmRpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE3OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdXRp
bGl0eSBmdW5jdGlvbnMgaW50byBtb3JlIGFwcHJvcHJpYXRlIGxvY2F0aW9ucy4KKyAgICAgICAg
LSBNb3ZlIGhhc0l0ZXJhdG9yTWV0aG9kIHRvIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgK
KyAgICAgICAgLSBNb3ZlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlciB0byBydW50aW1l
L0xvb2t1cC5oCisgICAgICAgIC0gTW92ZSBhZGRJbXB1cmVQcm9wZXJ0eSB0byBDb21tb25WTQor
CisgICAgICAgIFJlbW92ZSB0b0pTIG92ZXJsb2FkIHRoYXQgdG9vayBhIFZlY3RvcjxUPi4gUmVw
bGFjZSBpdCdzIHVzYWdlCisgICAgICAgIHdpdGggdG9KUzxJRExTZXF1ZW5jZTxUPj4gdXNhZ2Uu
IFRvIG1ha2UgdGhpcyB3b3JrLCBhZGRlZCB0d28KKyAgICAgICAgbmV3IHR5cGVzLCBJRExJREJL
ZXlEYXRhIGFuZCBJRExJREJWYWx1ZS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNldEdldFJlc3VsdCk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICBBZG9wdCBKU0RPTUNv
bnZlcnQgaW5mcmFzdHJ1Y3R1cmUgZm9yIGNvbnZlcnNpb25zIHVzaW5nIG5ldyB0eXBlcy4KKwor
ICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0SW5kZXhlZERCLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExJ
REJLZXlEYXRhPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExJ
REJWYWx1ZT46OmNvbnZlcnQpOgorICAgICAgICBBZGQgbmV3IHR5cGVzIGZvciBJREJLZXlEYXRh
IGFuZCBJREJWYWx1ZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0NvbW1vblZNLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9Db21tb25WTS5oOgorICAgICAgICBNb3ZlIGFkZEltcHVyZVByb3BlcnR5IGhlcmUgZnJvbSBK
U0RPTUJpbmRpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlkYktleURhdGFUb1NjcmlwdFZhbHVlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAg
IFJlbW92ZSB1bnVzZWQgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUsIGFuZCBncm91cCBsaWtlIGZ1
bmN0aW9ucworICAgICAgICB0b2dldGhlci4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRJbXB1cmVQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpoYXNJdGVyYXRvck1ldGhvZCk6IERlbGV0ZWQuCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpub25D
YWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
dG9KUyk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUvcmVtb3ZlIGZ1bmN0aW9ucy4KKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmg6CisgICAgICAgIFVwZGF0ZSBmb3Ig
bW92ZSBvZiBoYXNJdGVyYXRvck1ldGhvZCB0byBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5o
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICBVcGRhdGUgZm9yIG1vdmUgb2Yg
bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyIHRvIHJ1bnRpbWUvTG9va3VwLmgKKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcDoKKyAgICAgICAgUmVt
b3ZlIHVubmVlZGVkIGluY2x1ZGUgb2YgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAorCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChH
ZW5lcmF0ZU92ZXJsb2FkZWRGdW5jdGlvbk9yQ29uc3RydWN0b3IpOgorICAgICAgICBJbmNsdWRl
IHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zIHdoZW4gbmVlZGluZyB0byBkaXN0aW5ndWlzaCBh
IHNlcXVlbmNlLgorCisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuY3BwOgorICAgICAgICBS
ZXBsYWNlIGluY2x1ZGUgb2YgSlNET01CaW5kaW5nLmggd2l0aCBDb21tb25WTS5oIGZvciBhZGRJ
bXB1cmVQcm9wZXJ0eS4KKwogMjAxNy0wMi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcGxlbWVudCBVUkwncyB0b0pTT04oKQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCShyZXZpc2lvbiAyMTIx
OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDUsOSArMzQ1LDExIEBAIHZvaWQgSURCQ3Vyc29yOjpzZXRHZXRS
ZXN1bHQoSURCUmVxdWVzdCYKIAogICAgIGF1dG8mIHZtID0gY29udGV4dC0+dm0oKTsKIAotICAg
IG1fY3VycmVudEtleSA9IHsgdm0sIGlkYktleURhdGFUb1NjcmlwdFZhbHVlKCpleGVjLCBnZXRS
ZXN1bHQua2V5RGF0YSgpKSB9OworICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxk
IGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQg
Z2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBJREJDdXJzb3Igd3JhcHBlciBjYW4gYmUgdXNl
ZCwgcmF0aGVyIHRoYW4gdGhlIGxleGljYWxHbG9iYWxPYmplY3QuCisgICAgbV9jdXJyZW50S2V5
ID0geyB2bSwgdG9KUygqZXhlYywgKmV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0UmVz
dWx0LmtleURhdGEoKS5tYXliZUNyZWF0ZUlEQktleSgpLmdldCgpKSB9OwogICAgIG1fY3VycmVu
dEtleURhdGEgPSBnZXRSZXN1bHQua2V5RGF0YSgpOwotICAgIG1fY3VycmVudFByaW1hcnlLZXkg
PSB7IHZtLCBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZSgqZXhlYywgZ2V0UmVzdWx0LnByaW1hcnlL
ZXlEYXRhKCkpIH07CisgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IHsgdm0sIHRvSlMoKmV4ZWMs
ICpleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgp
Lm1heWJlQ3JlYXRlSURCS2V5KCkuZ2V0KCkpIH07CiAgICAgbV9jdXJyZW50UHJpbWFyeUtleURh
dGEgPSBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKTsKIAogICAgIGlmIChpc0tleUN1cnNvcldp
dGhWYWx1ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsMTEgKzM2
NCwxMyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJREJLZXlECiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBleGVjID0gY29udGV4dC0+
ZXhlY1N0YXRlKCk7Ci0gICAgaWYgKCFleGVjKQorICAgIGF1dG8qIHN0YXRlID0gY29udGV4dC0+
ZXhlY1N0YXRlKCk7CisgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9y
ZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0o
KSwgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoKmV4ZWMsIGtleURhdGEpIH0gfTsKKyAgICAvLyBG
SVhNRTogVGhpcyBjb252ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQg
bmVlZHMgdGhlIEpTVmFsdWVzLCBzbyB0aGF0IGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUg
SURCUmVxdWVzdCB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUgbGV4aWNhbEds
b2JhbE9iamVjdC4KKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4geyBjb250ZXh0LT52bSgpLCB0b0pTPElETElEQktleURhdGE+KCpzdGF0ZSwgKmpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXlE
YXRhKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjxJ
REJLZXlEYXRhPiYga2V5RGF0YXMpCkBAIC0zODMsOSArMzg1LDEwIEBAIHZvaWQgSURCUmVxdWVz
dDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjwKICAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1
cm47CiAKLQorICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRvbmUgbGF6
aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFsIG9iamVj
dAorICAgIC8vIG9mIHRoZSBJREJSZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJhdGhlciB0
aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgogICAgIExvY2tlcjxKU0xvY2s+IGxvY2tlcihj
b250ZXh0LT52bSgpLmFwaUxvY2soKSk7Ci0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUyhzdGF0ZSwganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleURhdGFz
KSB9IH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJRExTZXF1ZW5jZTxJRExJREJLZXlEYXRhPj4oKnN0YXRl
LCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSksIGtleURhdGFzKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0
IFZlY3RvcjxJREJWYWx1ZT4mIHZhbHVlcykKQEAgLTM5NiwxMiArMzk5LDE0IEBAIHZvaWQgSURC
UmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IFZlY3RvcjwKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGF1dG8qIGV4ZWMgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKLSAg
ICBpZiAoIWV4ZWMpCisgICAgYXV0byogc3RhdGUgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKKyAg
ICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogVGhpcyBjb252
ZXJzaW9uIHNob3VsZCBiZSBkb25lIGxhemlseSwgd2hlbiBzY3JpcHQgbmVlZHMgdGhlIEpTVmFs
dWVzLCBzbyB0aGF0IGdsb2JhbCBvYmplY3QKKyAgICAvLyBvZiB0aGUgSURCUmVxdWVzdCB3cmFw
cGVyIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KICAg
ICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIoY29udGV4dC0+dm0oKS5hcGlMb2NrKCkpOwotICAgIG1f
cmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZt
KCksIHRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSwgdmFsdWVzKSB9IH07CisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJRExTZXF1ZW5jZTxJ
RExJREJWYWx1ZT4+KCpzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1ZXMpIH0gfTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0
OjpzZXRSZXN1bHQodWludDY0X3QgbnVtYmVyKQpAQCAtNDEyLDcgKzQxNyw3IEBAIHZvaWQgSURC
UmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWIKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiB7IGNvbnRleHQtPnZtKCksIEpTQzo6anNOdW1iZXIobnVtYmVyKSB9IH07CisgICAg
bV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+
dm0oKSwgdG9KUzxJRExVbnJlc3RyaWN0ZWREb3VibGU+KG51bWJlcikgfSB9OwogfQogCiB2b2lk
IElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKGNvbnN0IElEQlZhbHVlJiB2
YWx1ZSkKQEAgLTQyNSwxMSArNDMwLDEzIEBAIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9T
dHJ1Y3R1cmVkQ2wKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8qIGV4ZWMgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKLSAgICBpZiAoIWV4ZWMpCisgICAgYXV0
byogc3RhdGUgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKKyAgICBpZiAoIXN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4geyBjb250ZXh0LT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVj
LCB2YWx1ZSkgfSB9OworICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRv
bmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFs
IG9iamVjdAorICAgIC8vIG9mIHRoZSBJREJSZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJh
dGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgorICAgIG1fcmVzdWx0ID0gUmVzdWx0
IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZtKCksIHRvSlM8SURMSURC
VmFsdWU+KCpzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLCB2YWx1ZSkgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJl
c3VsdFRvVW5kZWZpbmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5cGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAkocmV2
aXNpb24gMjEyMTk0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3Ry
b25nOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJLZXk7CitjbGFzcyBJREJLZXlE
YXRhOworY2xhc3MgSURCVmFsdWU7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRE9NUHJvbWlz
ZTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTIwMCw2ICsyMDIsOCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSURMRXZlbnRMaXN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSURMWFBhdGhOU1Jlc29sdmVyIDogSURMV3JhcHBlcjxUPiB7IH07CiAKIHN0cnVjdCBJRExJ
REJLZXkgOiBJRExXcmFwcGVyPElEQktleT4geyB9Oworc3RydWN0IElETElEQktleURhdGEgOiBJ
RExXcmFwcGVyPElEQktleURhdGE+IHsgfTsKK3N0cnVjdCBJRExJREJWYWx1ZSA6IElETFdyYXBw
ZXI8SURCVmFsdWU+IHsgfTsKIAogI2lmIEVOQUJMRShXRUJHTCkKIHN0cnVjdCBJRExXZWJHTEFu
eSA6IElETFR5cGU8V2ViR0xBbnk+IHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0NvbW1vblZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Db21tb25WTS5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0NvbW1vblZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNjEsNSArNjIsMTAgQEAgVk0mIGNvbW1v
blZNU2xvdygpCiAgICAgcmV0dXJuICpnX2NvbW1vblZNT3JOdWxsOwogfQogCit2b2lkIGFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNv
bW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgJ
KHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFZNOwogfQpA
QCAtNDIsNSArNDQsNyBAQCBpbmxpbmUgSlNDOjpWTSYgY29tbW9uVk0oKQogICAgIHJldHVybiBj
b21tb25WTVNsb3coKTsKIH0KIAordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNT
dHJpbmcmKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24g
MjEyMTk0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NywxMiArMzY3LDYgQEAgUmVmPElEQktleT4gc2Ny
aXB0VmFsdWVUb0lEQktleShFeGVjU3RhdAogICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFs
dWUoZXhlYywgc2NyaXB0VmFsdWUpOwogfQogCi1KU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvU2Ny
aXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEp
Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgp
OwotICAgIHJldHVybiB0b0pTKGV4ZWMsICpleGVjLmxleGljYWxHbG9iYWxPYmplY3QoKSwga2V5
LmdldCgpKTsKLX0KLQogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRh
KQogewogICAgIEFTU0VSVChzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDIxICs0NiwxOCBAQCBjbGFzcyBJREJWYWx1ZTsKIGNsYXNzIEluZGV4S2V5Owog
Y2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CiAKLQogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwogYm9vbCBjYW5JbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJ
REJLZXlQYXRoJik7CiBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IElEQktleURhdGEmLCBKU0M6OkpTVmFsdWUsIGNvbnN0IElEQktleVBhdGgm
KTsKIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSURCS2V5Kik7Ci1KU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoSlND
OjpFeGVjU3RhdGUmLCBjb25zdCBJREJLZXlEYXRhJik7CiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlG
b3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEpTQzo6SlNWYWx1
ZSwgSW5kZXhLZXkmIG91dEtleSk7CiAKLUpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVl
VG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCVmFsdWUmKTsKLQogUmVmPElEQktl
eT4gc2NyaXB0VmFsdWVUb0lEQktleShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1
ZSYpOwogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgSURCS2V5RGF0YSYpOworSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFs
dWVUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJWYWx1ZSYpOwogSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IElEQlZh
bHVlJik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBJREJLZXkqKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBjb25zdCBJREJLZXlEYXRhJik7CiAKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMTIxOTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiwxNyArMjIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKIAotI2luY2x1ZGUgIkNvbW1vblZNLmgiCi0KIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0
eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBjb21tb25WTSgpLmFk
ZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KIEpTVmFsdWUganNTdHJpbmdPclVu
ZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAocy5p
c051bGwoKSkKQEAgLTQwLDIxICszMyw0IEBAIEpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChF
eGVjU3RhdGUqIGUKICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7CiB9CiAK
LWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxU
eXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUs
IGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFT
Q0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIp
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4g
IWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lv
biAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsMjkgKzQ3LDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0
cmluZyYpOwotCiBKU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCiAK
LVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0
aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5j
dGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6
OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZl
RnVuY3Rpb24pKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydEluZGV4ZWREQi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCShyZXZpc2lvbiAyMTIxOTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRJbmRleGVkREIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMjggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSURCS2V5PgogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TElEQktleURhdGE+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCVmFsdWU+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAkocmV2aXNpb24g
MjEyMTk0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIklETFR5cGVzLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMTgzLDcgKzE4NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0
cnVjdCBDb252ZXJ0ZXIKICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5j
ZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhv
ZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRv
ciA9IEpTQzo6aGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CkBAIC0xOTYsNyArMTk3LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcgogICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlw
ZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBKU0M6Omhhc0l0ZXJhdG9yTWV0aG9kKHN0
YXRlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBSZXR1cm5UeXBlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0
ZXJhdG9yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZy
b3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0xv
b2t1cC5oPgogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKICNpbmNsdWRlICJK
U1dlYktpdE5hbWVzcGFjZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjEyMTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIK
ICNpbmNsdWRlICJKU0hUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCisjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvTG9va3VwLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxl
Q3J5cHRvQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1
ZGUgIkpTUnNhT2FlcFBhcmFtcy5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09O
T2JqZWN0Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MjU1OCwxMyArMjU1OCwxNCBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0
cnVjCiAgICAgfQogCiAgICAgbXkgJGdlbmVyYXRlT3ZlcmxvYWRDYWxsSWZOZWNlc3NhcnkgPSBz
dWIgewotICAgICAgICBteSAoJG92ZXJsb2FkLCAkY29uZGl0aW9uKSA9IEBfOworICAgICAgICBt
eSAoJG92ZXJsb2FkLCAkY29uZGl0aW9uLCAkaW5jbHVkZSkgPSBAXzsKICAgICAgICAgcmV0dXJu
IHVubGVzcyAkb3ZlcmxvYWQ7CiAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2Rl
R2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRvdmVybG9hZCk7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29u
ZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAo
JGNvbmRpdGlvbilcbiAgICAiKSBpZiAkY29uZGl0aW9uOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuICR7ZnVuY3Rpb25OYW1lfSRvdmVybG9hZC0+e292ZXJsb2Fk
SW5kZXh9KHN0YXRlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxu
IikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaW5j
bHVkZSwgJG92ZXJsb2FkLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSkgaWYg
JGluY2x1ZGU7CiAgICAgfTsKICAgICBteSAkaXNPcHRpb25hbFBhcmFtZXRlciA9IHN1YiB7CiAg
ICAgICAgIG15ICgkdHlwZSwgJG9wdGlvbmFsaXR5KSA9IEBfOwpAQCAtMjY5NSw3ICsyNjk2LDcg
QEAgRU5ECiAKICAgICAgICAgICAgICMgRklYTUU6IEF2b2lkIGludm9raW5nIEdldE1ldGhvZChv
YmplY3QsIFN5bWJvbC5pdGVyYXRvcikgYWdhaW4gaW4gY29udmVydDxJRExTZXF1ZW5jZTxUPj4o
Li4uKS4KICAgICAgICAgICAgICRvdmVybG9hZCA9IEdldE92ZXJsb2FkVGhhdE1hdGNoZXMoJFMs
ICRkLCBcJiRpc1NlcXVlbmNlT3JGcm96ZW5BcnJheVBhcmFtZXRlcik7Ci0gICAgICAgICAgICAm
JGdlbmVyYXRlT3ZlcmxvYWRDYWxsSWZOZWNlc3NhcnkoJG92ZXJsb2FkLCAiaGFzSXRlcmF0b3JN
ZXRob2QoKnN0YXRlLCBkaXN0aW5ndWlzaGluZ0FyZykiKTsKKyAgICAgICAgICAgICYkZ2VuZXJh
dGVPdmVybG9hZENhbGxJZk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJoYXNJdGVyYXRvck1ldGhvZCgq
c3RhdGUsIGRpc3Rpbmd1aXNoaW5nQXJnKSIsICI8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMu
aD4iKTsKIAogICAgICAgICAgICAgJG92ZXJsb2FkID0gR2V0T3ZlcmxvYWRUaGF0TWF0Y2hlcygk
UywgJGQsIFwmJGlzRGljdGlvbmFyeU9yUmVjb3JkT3JPYmplY3RPckNhbGxiYWNrSW50ZXJmYWNl
UGFyYW1ldGVyKTsKICAgICAgICAgICAgICYkZ2VuZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2Fy
eSgkb3ZlcmxvYWQsICJkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgpICYmIGFzT2JqZWN0KGRp
c3Rpbmd1aXNoaW5nQXJnKS0+dHlwZSgpICE9IFJlZ0V4cE9iamVjdFR5cGUiKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiAr
NTQsNyBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIK
QEAgLTYzLDE1ICs2NCwxNCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSGFzaFRvb2xz
LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRN
TEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkhhc2hUb29scy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301290</attachid>
            <date>2017-02-11 21:09:46 -0800</date>
            <delta_ts>2017-02-11 23:44:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168179-20170211210717.patch</filename>
            <type>text/plain</type>
            <size>31612</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyMTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDE3LTAyLTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVt
b3ZlIHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG91dCBvZiBKU0RPTUJpbmRpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODE3OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdXRpbGl0eSBmdW5j
dGlvbnMgaW50byBtb3JlIGFwcHJvcHJpYXRlIGxvY2F0aW9ucy4KKyAgICAgICAgLSBNb3ZlIGhh
c0l0ZXJhdG9yTWV0aG9kIHRvIEl0ZXJhdG9yT3BlcmF0aW9ucy4KKyAgICAgICAgLSBNb3ZlIG5v
bkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlciB0byBMb29rdXAKKworICAgICAgICAqIHJ1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6aGFzSXRlcmF0b3JNZXRo
b2QpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg6CisgICAgICAgICog
cnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9u
R2V0dGVyKToKKwogMjAxNy0wMi0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAogICAgICAgICBbSlNDXSBJbXBsZW1lbnQgKFNoYXJlZClBcnJheUJ1ZmZlci5wcm90
b3R5cGUuYnl0ZUxlbmd0aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTIxOTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTksMTIgKzE1OSwyOSBAQCBKU09iamVjdCogY3JlYXRlSXRlcmF0b3JSZXN1
bHRPYmplY3QoRXhlCiAgICAgcmV0dXJuIHJlc3VsdE9iamVjdDsKIH0KIAorYm9vbCBoYXNJdGVy
YXRvck1ldGhvZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1ldGhv
ZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3Ig
cHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsK
K30KKwogSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFs
dWUgaXRlcmFibGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIEpTVmFsdWUgaXRlcmF0b3JG
dW5jdGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5pdGVy
YXRvclN5bWJvbCk7CisgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0
KHN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVyYXRv
ckZ1bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
dGVyYXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjEyMTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDggQEAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUl0
ZXJhdAogCiBTdHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QmKTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNJdGVyYXRv
ck1ldGhvZChFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmFibGUpOwogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbEJhY2tUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTG9va3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTG9va3VwLmgJKHJldmlzaW9uIDIxMjE5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNCArMzg3LDkgQEAg
aW5saW5lIHZvaWQgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKFZNJiB2bQogICAgIH0KIH0KIAordGVt
cGxhdGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEVuY29kZWRK
U1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBu
YXRpdmVGdW5jdGlvbikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIxMjIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE3LTAyLTExICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG91dCBvZiBK
U0RPTUJpbmRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2ODE3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdXRpbGl0eSBmdW5jdGlvbnMgaW50byBtb3JlIGFwcHJvcHJpYXRlIGxvY2F0aW9u
cy4KKyAgICAgICAgLSBNb3ZlIGhhc0l0ZXJhdG9yTWV0aG9kIHRvIHJ1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmgKKyAgICAgICAgLSBNb3ZlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRl
ciB0byBydW50aW1lL0xvb2t1cC5oCisgICAgICAgIC0gTW92ZSBhZGRJbXB1cmVQcm9wZXJ0eSB0
byBDb21tb25WTQorCisgICAgICAgIFJlbW92ZSB0b0pTIG92ZXJsb2FkIHRoYXQgdG9vayBhIFZl
Y3RvcjxUPi4gUmVwbGFjZSBpdCdzIHVzYWdlCisgICAgICAgIHdpdGggdG9KUzxJRExTZXF1ZW5j
ZTxUPj4gdXNhZ2UuIFRvIG1ha2UgdGhpcyB3b3JrLCBhZGRlZCB0d28KKyAgICAgICAgbmV3IHR5
cGVzLCBJRExJREJLZXlEYXRhIGFuZCBJRExJREJWYWx1ZS4KKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNl
dEdldFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICBB
ZG9wdCBKU0RPTUNvbnZlcnQgaW5mcmFzdHJ1Y3R1cmUgZm9yIGNvbnZlcnNpb25zIHVzaW5nIG5l
dyB0eXBlcy4KKworICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0SW5kZXhlZERCLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0Nv
bnZlcnRlcjxJRExJREJLZXlEYXRhPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0Nv
bnZlcnRlcjxJRExJREJWYWx1ZT46OmNvbnZlcnQpOgorICAgICAgICBBZGQgbmV3IHR5cGVzIGZv
ciBJREJLZXlEYXRhIGFuZCBJREJWYWx1ZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0NvbW1v
blZNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZEltcHVyZVByb3BlcnR5KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9Db21tb25WTS5oOgorICAgICAgICBNb3ZlIGFkZEltcHVyZVByb3BlcnR5
IGhlcmUgZnJvbSBKU0RPTUJpbmRpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlkYktleURhdGFUb1NjcmlwdFZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
Lmg6CisgICAgICAgIFJlbW92ZSB1bnVzZWQgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUsIGFuZCBn
cm91cCBsaWtlIGZ1bmN0aW9ucworICAgICAgICB0b2dldGhlci4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRnVuY3Rp
b25HZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6IERlbGV0ZWQuCisg
ICAgICAgIE1vdmUvcmVtb3ZlIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFVuaW9uLmg6CisgICAgICAgIFVwZGF0ZSBmb3IgbW92ZSBvZiBoYXNJdGVyYXRv
ck1ldGhvZCB0byBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNI
VE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwOgorICAgICAgICBVcGRhdGUgZm9yIG1vdmUgb2Ygbm9uQ2FjaGluZ1N0YXRpY0Z1
bmN0aW9uR2V0dGVyIHRvIHJ1bnRpbWUvTG9va3VwLmgKKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcDoKKyAgICAgICAgUmVtb3ZlIHVubmVlZGVkIGluY2x1
ZGUgb2YgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAorCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZU92ZXJsb2FkZWRG
dW5jdGlvbk9yQ29uc3RydWN0b3IpOgorICAgICAgICBJbmNsdWRlIHJ1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zIHdoZW4gbmVlZGluZyB0byBkaXN0aW5ndWlzaCBhIHNlcXVlbmNlLgorCisgICAg
ICAgICogaHRtbC9IVE1MRG9jdW1lbnQuY3BwOgorICAgICAgICBSZXBsYWNlIGluY2x1ZGUgb2Yg
SlNET01CaW5kaW5nLmggd2l0aCBDb21tb25WTS5oIGZvciBhZGRJbXB1cmVQcm9wZXJ0eS4KKwog
MjAxNy0wMi0xMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yIFhTTFRQcm9jZXNzb3IuaWRsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTExMDMsNyArMTEwMyw2IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAKICAg
ICBiaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAKICAgICBiaW5kaW5n
cy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCiAgICAgYmluZGluZ3MvanMvSlNE
T01Db25zdHJ1Y3RvckJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHJldmlzaW9uIDIxMjIwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
NSw5ICszNDUsMTEgQEAgdm9pZCBJREJDdXJzb3I6OnNldEdldFJlc3VsdChJREJSZXF1ZXN0Jgog
CiAgICAgYXV0byYgdm0gPSBjb250ZXh0LT52bSgpOwogCi0gICAgbV9jdXJyZW50S2V5ID0geyB2
bSwgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoKmV4ZWMsIGdldFJlc3VsdC5rZXlEYXRhKCkpIH07
CisgICAgLy8gRklYTUU6IFRoaXMgY29udmVyc2lvbiBzaG91bGQgYmUgZG9uZSBsYXppbHksIHdo
ZW4gc2NyaXB0IG5lZWRzIHRoZSBKU1ZhbHVlcywgc28gdGhhdCBnbG9iYWwgb2JqZWN0CisgICAg
Ly8gb2YgdGhlIElEQkN1cnNvciB3cmFwcGVyIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB0aGUg
bGV4aWNhbEdsb2JhbE9iamVjdC4KKyAgICBtX2N1cnJlbnRLZXkgPSB7IHZtLCB0b0pTKCpleGVj
LCAqZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnZXRSZXN1bHQua2V5RGF0YSgpLm1heWJl
Q3JlYXRlSURCS2V5KCkuZ2V0KCkpIH07CiAgICAgbV9jdXJyZW50S2V5RGF0YSA9IGdldFJlc3Vs
dC5rZXlEYXRhKCk7Ci0gICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IHsgdm0sIGlkYktleURhdGFU
b1NjcmlwdFZhbHVlKCpleGVjLCBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKSkgfTsKKyAgICBt
X2N1cnJlbnRQcmltYXJ5S2V5ID0geyB2bSwgdG9KUygqZXhlYywgKmV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgZ2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCkubWF5YmVDcmVhdGVJREJLZXko
KS5nZXQoKSkgfTsKICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3VsdC5wcmlt
YXJ5S2V5RGF0YSgpOwogCiAgICAgaWYgKGlzS2V5Q3Vyc29yV2l0aFZhbHVlKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NCwxMSArMzY0LDEzIEBAIHZvaWQgSURCUmVx
dWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQktleUQKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8qIGV4ZWMgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKLSAgICBp
ZiAoIWV4ZWMpCisgICAgYXV0byogc3RhdGUgPSBjb250ZXh0LT5leGVjU3RhdGUoKTsKKyAgICBp
ZiAoIXN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqZXhlYywga2V5RGF0YSkgfSB9OworICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNp
b24gc2hvdWxkIGJlIGRvbmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMs
IHNvIHRoYXQgZ2xvYmFsIG9iamVjdAorICAgIC8vIG9mIHRoZSBJREJSZXF1ZXN0IHdyYXBwZXIg
Y2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgorICAgIG1f
cmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZt
KCksIHRvSlM8SURMSURCS2V5RGF0YT4oKnN0YXRlLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleURhdGEpIH0gfTsKIH0KIAogdm9p
ZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBrZXlEYXRh
cykKQEAgLTM4Myw5ICszODUsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3Qg
VmVjdG9yPAogICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotCisgICAgLy8gRklY
TUU6IFRoaXMgY29udmVyc2lvbiBzaG91bGQgYmUgZG9uZSBsYXppbHksIHdoZW4gc2NyaXB0IG5l
ZWRzIHRoZSBKU1ZhbHVlcywgc28gdGhhdCBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2YgdGhlIElE
QlJlcXVlc3Qgd3JhcHBlciBjYW4gYmUgdXNlZCwgcmF0aGVyIHRoYW4gdGhlIGxleGljYWxHbG9i
YWxPYmplY3QuCiAgICAgTG9ja2VyPEpTTG9jaz4gbG9ja2VyKGNvbnRleHQtPnZtKCkuYXBpTG9j
aygpKTsKLSAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4g
eyBjb250ZXh0LT52bSgpLCB0b0pTKHN0YXRlLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YXMpIH0gfTsKKyAgICBtX3Jlc3Vs
dCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCB0
b0pTPElETFNlcXVlbmNlPElETElEQktleURhdGE+Pigqc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5RGF0YXMpIH0gfTsK
IH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgVmVjdG9yPElEQlZhbHVlPiYg
dmFsdWVzKQpAQCAtMzk2LDEyICszOTksMTQgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
Y29uc3QgVmVjdG9yPAogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byogZXhlYyA9IGNvbnRleHQtPmV4ZWNTdGF0ZSgpOwotICAgIGlmICghZXhlYykKKyAgICBh
dXRvKiBzdGF0ZSA9IGNvbnRleHQtPmV4ZWNTdGF0ZSgpOworICAgIGlmICghc3RhdGUpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGRv
bmUgbGF6aWx5LCB3aGVuIHNjcmlwdCBuZWVkcyB0aGUgSlNWYWx1ZXMsIHNvIHRoYXQgZ2xvYmFs
IG9iamVjdAorICAgIC8vIG9mIHRoZSBJREJSZXF1ZXN0IHdyYXBwZXIgY2FuIGJlIHVzZWQsIHJh
dGhlciB0aGFuIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgogICAgIExvY2tlcjxKU0xvY2s+IGxv
Y2tlcihjb250ZXh0LT52bSgpLmFwaUxvY2soKSk7Ci0gICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUyhleGVjLCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB2YWx1
ZXMpIH0gfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4geyBjb250ZXh0LT52bSgpLCB0b0pTPElETFNlcXVlbmNlPElETElEQlZhbHVlPj4oKnN0YXRl
LCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSksIHZhbHVlcykgfSB9OwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRf
dCBudW1iZXIpCkBAIC00MTIsNyArNDE3LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQo
dWludDY0X3QgbnVtYgogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IHsgY29udGV4dC0+
dm0oKSwgSlNDOjpqc051bWJlcihudW1iZXIpIH0gfTsKKyAgICBtX3Jlc3VsdCA9IFJlc3VsdCB7
IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4geyBjb250ZXh0LT52bSgpLCB0b0pTPElETFVucmVz
dHJpY3RlZERvdWJsZT4obnVtYmVyKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVz
dWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtNDI1LDExICs0
MzAsMTMgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbAogICAgIGlm
ICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogZXhlYyA9IGNvbnRleHQt
PmV4ZWNTdGF0ZSgpOwotICAgIGlmICghZXhlYykKKyAgICBhdXRvKiBzdGF0ZSA9IGNvbnRleHQt
PmV4ZWNTdGF0ZSgpOworICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
cmVzdWx0ID0gUmVzdWx0IHsgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiB7IGNvbnRleHQtPnZt
KCksIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmV4ZWMsIHZhbHVlKSB9IH07CisgICAg
Ly8gRklYTUU6IFRoaXMgY29udmVyc2lvbiBzaG91bGQgYmUgZG9uZSBsYXppbHksIHdoZW4gc2Ny
aXB0IG5lZWRzIHRoZSBKU1ZhbHVlcywgc28gdGhhdCBnbG9iYWwgb2JqZWN0CisgICAgLy8gb2Yg
dGhlIElEQlJlcXVlc3Qgd3JhcHBlciBjYW4gYmUgdXNlZCwgcmF0aGVyIHRoYW4gdGhlIGxleGlj
YWxHbG9iYWxPYmplY3QuCisgICAgbV9yZXN1bHQgPSBSZXN1bHQgeyBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+IHsgY29udGV4dC0+dm0oKSwgdG9KUzxJRExJREJWYWx1ZT4oKnN0YXRlLCAqanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHZh
bHVlKSB9IH07CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDczLDcgKzM0NzMsNiBAQAog
CQk5M0IyRDgxNjBGOTkyMEQyMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE1MEY5OTIwRDIw
MDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzQjJEODE4MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRk
ZW5UZXJtaW5hdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAq
LzsgfTsKIAkJOTNCNkEwRTYwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFNTBCMEJDQTVD
MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk5M0I3MEQ2MzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5k
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
QjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovOyB9OwogCQk5M0I3
MEQ2NDA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyog
SlNET01CaW5kaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOTNCNzBENjkwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRXZlbnRMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ0RDA5
RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmNwcCAqLzsgfTsKIAkJOTNCNzBENkEw
OUVCMEM3QzAwOUQ4NDY4IC8qIEpTRXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENEUwOUVCMEM3QzAwOUQ4NDY4IC8qIEpT
RXZlbnRMaXN0ZW5lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMTIxNiw3ICsxMTIxNSw2IEBACiAJCTkzQjJEODE1MEY5OTIwRDIwMDZBRTZC
MiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdWRkZW5UZXJtaW5hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Iy
RDgxNzBGOTkyMEVFMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRl
eHRNZW51LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0TWVudS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0I3MEQ0NzA5RUIwQzdDMDA5RDg0Njgg
LyogSlNET01CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RPTUJpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0
ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUJpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNCNzBENEQwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRXZlbnRMaXN0ZW5lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFdmVudExpc3RlbmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNzBENEUwOUVCMEM3QzAwOUQ4NDY4IC8qIEpT
RXZlbnRMaXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFdmVu
dExpc3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjQwNiw3ICsyMjQw
NCw2IEBACiAJCQkJRTEyNUY4M0MxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9u
RGF0YS5oICovLAogCQkJCTlCRDRFOTE0MUM0NjI4NzIwMDUwNjVCQyAvKiBKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UuY3BwICovLAogCQkJCTlCRDRFOTE1MUM0NjI4NzIwMDUwNjVCQyAvKiBKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCAqLywKLQkJCQk5M0I3MEQ0NzA5RUIwQzdDMDA5RDg0Njgg
LyogSlNET01CaW5kaW5nLmNwcCAqLywKIAkJCQk5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyog
SlNET01CaW5kaW5nLmggKi8sCiAJCQkJN0M0NUM5QzYxRTNFOEFCQTAwQUFCNTU4IC8qIEpTRE9N
QmluZGluZ0NhbGxlci5oICovLAogCQkJCTdDNDVDOUNBMUUzRThEMkUwMEFBQjU1OCAvKiBKU0RP
TUJpbmRpbmdTZWN1cml0eS5jcHAgKi8sCkBAIC0zMDM4Nyw3ICszMDM4NCw2IEBACiAJCQkJMTIy
MUUwNUYxQzAyQjQ0NDAwNkExQTAwIC8qIEpTRG9jdW1lbnRUaW1lbGluZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk2NURGMzFGNTA5RDFDQzYwMDAwQkUzMjUgLyogSlNEb2N1bWVudFR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDMjI2MEMwREI2OUYxOTAwODlCNjY5IC8qIEpTRE9NQXBw
bGljYXRpb25DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I3MEQ2MzA5RUIwQzdDMDA5
RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNDVDOUNGMUUz
RUZERjcwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzYwRDdDMDBEMjlBNDYzMDBCOTkxOEYgLyogSlNET01Db3JlRXhjZXB0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZENjc3NzNCMTk1Q0IxRTYwMDcyRTBEMyAvKiBKU0RPTUNTU05h
bWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L0lETFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlw
ZXMuaAkocmV2aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlw
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4g
Y2xhc3MgU3Ryb25nOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJLZXk7CitjbGFz
cyBJREJLZXlEYXRhOworY2xhc3MgSURCVmFsdWU7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3Mg
RE9NUHJvbWlzZTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTIwMCw2ICsyMDIsOCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMRXZlbnRMaXN0CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSURMWFBhdGhOU1Jlc29sdmVyIDogSURMV3JhcHBlcjxUPiB7IH07CiAKIHN0
cnVjdCBJRExJREJLZXkgOiBJRExXcmFwcGVyPElEQktleT4geyB9Oworc3RydWN0IElETElEQktl
eURhdGEgOiBJRExXcmFwcGVyPElEQktleURhdGE+IHsgfTsKK3N0cnVjdCBJRExJREJWYWx1ZSA6
IElETFdyYXBwZXI8SURCVmFsdWU+IHsgfTsKIAogI2lmIEVOQUJMRShXRUJHTCkKIHN0cnVjdCBJ
RExXZWJHTEFueSA6IElETFR5cGU8V2ViR0xBbnk+IHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9Db21tb25WTS5jcHAJKHJldmlzaW9uIDIxMjIwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZN
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNjEsNSArNjIsMTAgQEAg
Vk0mIGNvbW1vblZNU2xvdygpCiAgICAgcmV0dXJuICpnX2NvbW1vblZNT3JOdWxsOwogfQogCit2
b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQor
eworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Db21tb25WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Nv
bW1vblZNLmgJKHJldmlzaW9uIDIxMjIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0NvbW1vblZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IFZNOwogfQpAQCAtNDIsNSArNDQsNyBAQCBpbmxpbmUgSlNDOjpWTSYgY29tbW9uVk0oKQogICAg
IHJldHVybiBjb21tb25WTVNsb3coKTsKIH0KIAordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25z
dCBBdG9taWNTdHJpbmcmKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAko
cmV2aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NywxMiArMzY3LDYgQEAgUmVmPElE
QktleT4gc2NyaXB0VmFsdWVUb0lEQktleShFeGVjU3RhdAogICAgIHJldHVybiBjcmVhdGVJREJL
ZXlGcm9tVmFsdWUoZXhlYywgc2NyaXB0VmFsdWUpOwogfQogCi1KU0M6OkpTVmFsdWUgaWRiS2V5
RGF0YVRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEpCi17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXliZUNyZWF0
ZUlEQktleSgpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsICpleGVjLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwga2V5LmdldCgpKTsKLX0KLQogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJREJLZXlEYXRh
JiBrZXlEYXRhKQogewogICAgIEFTU0VSVChzdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCShyZXZpc2lvbiAyMTIyMDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDIxICs0NiwxOCBAQCBjbGFzcyBJREJWYWx1ZTsKIGNsYXNzIElu
ZGV4S2V5OwogY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CiAKLQogUmVmUHRyPElEQktleT4gbWF5
YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgSlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwogYm9vbCBjYW5JbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUm
LCBjb25zdCBJREJLZXlQYXRoJik7CiBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQktleURhdGEmLCBKU0M6OkpTVmFsdWUsIGNvbnN0IElE
QktleVBhdGgmKTsKIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSURCS2V5Kik7Ci1KU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0
VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJLZXlEYXRhJik7CiB2b2lkIGdlbmVyYXRl
SW5kZXhLZXlGb3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEpT
Qzo6SlNWYWx1ZSwgSW5kZXhLZXkmIG91dEtleSk7CiAKLUpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6
ZUlEQlZhbHVlVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCVmFsdWUmKTsKLQog
UmVmPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpT
Qzo6SlNWYWx1ZSYpOwogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgY29uc3QgSURCS2V5RGF0YSYpOworSlNDOjpKU1ZhbHVlIGRlc2VyaWFs
aXplSURCVmFsdWVUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJWYWx1ZSYpOwog
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNv
bnN0IElEQlZhbHVlJik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBJREJLZXkqKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBJREJLZXlEYXRhJik7CiAKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUu
Y3BwCShyZXZpc2lvbiAyMTIyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jp
bmRpbmdzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBACiAjaW5j
bHVkZSAiSlNDdXN0b21FdmVudEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHAiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmNwcCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmdTZWN1cml0eS5jcHAiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmNw
cCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHAiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIxMjIwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAo
QykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKLQotI2luY2x1ZGUgIkNvbW1vblZNLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9t
aWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBv
YmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3Bl
cnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
cmV2aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
Ky8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoZWFkZXIuCisKICNpbmNsdWRlICJFeGNlcHRpb25Pci5o
IgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KQEAg
LTQwLDM0ICs0MiwzIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLWNs
YXNzIEpTRnVuY3Rpb247Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBhZGRJbXB1
cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQotV0VCQ09SRV9FWFBPUlQgYm9vbCBo
YXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLXRlbXBs
YXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6
RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3Ro
LCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYg
dmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSog
YXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3Rv
cltpXSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUo
KSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW5kZXhlZERC
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
SW5kZXhlZERCLmgJKHJldmlzaW9uIDIxMjIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwy
OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+CiAgICAgfQogfTsK
IAordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5RGF0YT4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExJREJWYWx1ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0VW5pb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCShyZXZpc2lvbiAyMTIyMDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNlLmgiCisjaW5jbHVkZSA8cnVudGltZS9J
dGVyYXRvck9wZXJhdGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xODMsNyAr
MTg0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcgogICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYg
YW5kIG1ldGhvZC4gICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gSlNDOjpoYXNJdGVyYXRvck1l
dGhvZChzdGF0ZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNJdGVyYXRvcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKQEAgLTE5Niw3ICsxOTcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgQ29udmVydGVyCiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVu
IGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KICAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICE9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRv
ck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJ
dGVyYXRvciA9IEpTQzo6aGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96
ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZp
c2lvbiAyMTIyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTY2hl
ZHVsZWRBY3Rpb24uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAKICNpZiBFTkFCTEUo
VVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogI2luY2x1ZGUgIkpTV2ViS2l0TmFtZXNwYWNlLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAyMTIyMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0xvb2t1cC5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjEyMjAx
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjEyMjAxKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAiSlNSc2FPYWVwUGFyYW1zLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1l
L0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDIxMjIwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTU4LDEzICsyNTU4LDE0IEBAIHN1
YiBHZW5lcmF0ZU92ZXJsb2FkZWRGdW5jdGlvbk9yQ29uc3RydWMKICAgICB9CiAKICAgICBteSAk
Z2VuZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2FyeSA9IHN1YiB7Ci0gICAgICAgIG15ICgkb3Zl
cmxvYWQsICRjb25kaXRpb24pID0gQF87CisgICAgICAgIG15ICgkb3ZlcmxvYWQsICRjb25kaXRp
b24sICRpbmNsdWRlKSA9IEBfOwogICAgICAgICByZXR1cm4gdW5sZXNzICRvdmVybG9hZDsKICAg
ICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmcoJG92ZXJsb2FkKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIj
aWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmICgkY29uZGl0aW9uKVxuICAgICIpIGlm
ICRjb25kaXRpb247CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
JHtmdW5jdGlvbk5hbWV9JG92ZXJsb2FkLT57b3ZlcmxvYWRJbmRleH0oc3RhdGUpO1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJp
bmc7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCRpbmNsdWRlLCAkb3ZlcmxvYWQtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KSBpZiAkaW5jbHVkZTsKICAgICB9OwogICAg
IG15ICRpc09wdGlvbmFsUGFyYW1ldGVyID0gc3ViIHsKICAgICAgICAgbXkgKCR0eXBlLCAkb3B0
aW9uYWxpdHkpID0gQF87CkBAIC0yNjk1LDcgKzI2OTYsNyBAQCBFTkQKIAogICAgICAgICAgICAg
IyBGSVhNRTogQXZvaWQgaW52b2tpbmcgR2V0TWV0aG9kKG9iamVjdCwgU3ltYm9sLml0ZXJhdG9y
KSBhZ2FpbiBpbiBjb252ZXJ0PElETFNlcXVlbmNlPFQ+PiguLi4pLgogICAgICAgICAgICAgJG92
ZXJsb2FkID0gR2V0T3ZlcmxvYWRUaGF0TWF0Y2hlcygkUywgJGQsIFwmJGlzU2VxdWVuY2VPckZy
b3plbkFycmF5UGFyYW1ldGVyKTsKLSAgICAgICAgICAgICYkZ2VuZXJhdGVPdmVybG9hZENhbGxJ
Zk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJoYXNJdGVyYXRvck1ldGhvZCgqc3RhdGUsIGRpc3Rpbmd1
aXNoaW5nQXJnKSIpOworICAgICAgICAgICAgJiRnZW5lcmF0ZU92ZXJsb2FkQ2FsbElmTmVjZXNz
YXJ5KCRvdmVybG9hZCwgImhhc0l0ZXJhdG9yTWV0aG9kKCpzdGF0ZSwgZGlzdGluZ3Vpc2hpbmdB
cmcpIiwgIjxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPiIpOwogCiAgICAgICAgICAgICAk
b3ZlcmxvYWQgPSBHZXRPdmVybG9hZFRoYXRNYXRjaGVzKCRTLCAkZCwgXCYkaXNEaWN0aW9uYXJ5
T3JSZWNvcmRPck9iamVjdE9yQ2FsbGJhY2tJbnRlcmZhY2VQYXJhbWV0ZXIpOwogICAgICAgICAg
ICAgJiRnZW5lcmF0ZU92ZXJsb2FkQ2FsbElmTmVjZXNzYXJ5KCRvdmVybG9hZCwgImRpc3Rpbmd1
aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT50eXBl
KCkgIT0gUmVnRXhwT2JqZWN0VHlwZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmNwcAkocmV2aXNpb24gMjEyMjAxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
Q29tbW9uVk0uaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgpAQCAtNjMsMTUgKzY0LDE0IEBACiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIYXNoVG9vbHMuaCIKLSNpbmNsdWRlICJIVE1MRG9j
dW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKICNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVTZXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSGFzaFRvb2xzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cg==
</data>
<flag name="review"
          id="323122"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>