<?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>152171</bug_id>
          
          <creation_ts>2015-12-11 06:26:15 -0800</creation_ts>
          <short_desc>WebIDL generator should support the possibility for C++ classes to have a JS Builtin constructor</short_desc>
          <delta_ts>2015-12-15 00:55:55 -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>Tools / Tests</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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>adam.bergkvist</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1148454</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-11 06:26:15 -0800</bug_when>
    <thetext>It might be handy to use JS builtin to process the parameters passed to create a DOM object.
One solution is to create the C++ object using standard XX::create() and then call a JS builtin function similarly to JSBuiltin classes.
This might need the creation of a JSBuiltinConstructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148455</commentid>
    <comment_count>1</comment_count>
      <attachid>267168</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-11 06:34:06 -0800</bug_when>
    <thetext>Created attachment 267168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148456</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-11 06:35:11 -0800</bug_when>
    <thetext>Attachment 267168 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestClassWithJSBuiltinConstructor.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:153:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148954</commentid>
    <comment_count>3</comment_count>
      <attachid>267295</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 07:42:41 -0800</bug_when>
    <thetext>Created attachment 267295
Minor refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148958</commentid>
    <comment_count>4</comment_count>
      <attachid>267297</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 08:06:37 -0800</bug_when>
    <thetext>Created attachment 267297
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148967</commentid>
    <comment_count>5</comment_count>
      <attachid>267298</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 08:45:36 -0800</bug_when>
    <thetext>Created attachment 267298
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148968</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-14 08:48:02 -0800</bug_when>
    <thetext>Attachment 267298 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestClassWithJSBuiltinConstructor.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:158:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148975</commentid>
    <comment_count>7</comment_count>
      <attachid>267299</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 09:18:44 -0800</bug_when>
    <thetext>Created attachment 267299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148976</commentid>
    <comment_count>8</comment_count>
      <attachid>267300</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 09:20:30 -0800</bug_when>
    <thetext>Created attachment 267300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148977</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-14 09:21:18 -0800</bug_when>
    <thetext>Attachment 267300 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestClassWithJSBuiltinConstructor.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:158:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148978</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 09:23:32 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created attachment 267300 [details]
&gt; Patch

@adambe, patch is currently not supporting ConstructorCallWith for JSBuiltinConstructor. Is that ok with your needs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148992</commentid>
    <comment_count>11</comment_count>
      <attachid>267300</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-12-14 09:51:48 -0800</bug_when>
    <thetext>Comment on attachment 267300
Patch

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        (GenerateConstructorDefinition):
&gt; +        (IsConstructable):
&gt; +        (IsJSBuiltinConstructor):
&gt; +        (AddJSBuiltinIncludesIfNeeded):
&gt; +        (GenerateHeader): Deleted.
&gt; +        (GetJSBuiltinScopeName): Deleted.

Is this list of functions accurate? Did we actually delete two functions? If not, please fix this before landing.

&gt; Source/WebCore/ChangeLog:31
&gt; +        (WebKit::kit):
&gt; +        (WebKit::core):
&gt; +        (WebKit::wrapTestClassWithJSBuiltinConstructor):
&gt; +        (webkit_dom_test_class_with_js_builtin_constructor_finalize):
&gt; +        (webkit_dom_test_class_with_js_builtin_constructor_constructor):
&gt; +        (webkit_dom_test_class_with_js_builtin_constructor_class_init):
&gt; +        (webkit_dom_test_class_with_js_builtin_constructor_init):

These lists of functions are pointless in test expectations files like this. I suggest omitting them.

&gt; Source/WebCore/ChangeLog:53
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::create):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::createStructure):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::JSTestClassWithJSBuiltinConstructorPrototype):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::createJSObject):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::initializeProperties):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::initializeExecutable):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::finishCreation):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::JSTestClassWithJSBuiltinConstructor):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::createPrototype):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::getPrototype):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::destroy):
&gt; +        (WebCore::jsTestClassWithJSBuiltinConstructorConstructor):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::getConstructor):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::visitChildren):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorOwner::isReachableFromOpaqueRoots):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructorOwner::finalize):
&gt; +        (WebCore::toJSNewlyCreated):
&gt; +        (WebCore::toJS):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::toWrapped):

These lists of functions are pointless in test expectations files like this. I suggest omitting them.

&gt; Source/WebCore/ChangeLog:59
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::create):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::createStructure):
&gt; +        (WebCore::JSTestClassWithJSBuiltinConstructor::finishCreation):
&gt; +        (WebCore::wrapperOwner):
&gt; +        (WebCore::toJS):

These lists of functions are pointless in test expectations files like this. I suggest omitting them.

&gt; Source/WebCore/ChangeLog:64
&gt; +        (-[DOMTestClassWithJSBuiltinConstructor dealloc]):
&gt; +        (core):
&gt; +        (kit):

These lists of functions are pointless in test expectations files like this. I suggest omitting them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149002</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 10:07:50 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        (GenerateConstructorDefinition):
&gt; &gt; +        (IsConstructable):
&gt; &gt; +        (IsJSBuiltinConstructor):
&gt; &gt; +        (AddJSBuiltinIncludesIfNeeded):
&gt; &gt; +        (GenerateHeader): Deleted.
&gt; &gt; +        (GetJSBuiltinScopeName): Deleted.
&gt; 
&gt; Is this list of functions accurate? Did we actually delete two functions? If
&gt; not, please fix this before landing.

OK

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:31
&gt; &gt; +        (WebKit::kit):
&gt; &gt; +        (WebKit::core):
&gt; &gt; +        (WebKit::wrapTestClassWithJSBuiltinConstructor):
&gt; &gt; +        (webkit_dom_test_class_with_js_builtin_constructor_finalize):
&gt; &gt; +        (webkit_dom_test_class_with_js_builtin_constructor_constructor):
&gt; &gt; +        (webkit_dom_test_class_with_js_builtin_constructor_class_init):
&gt; &gt; +        (webkit_dom_test_class_with_js_builtin_constructor_init):
&gt; 
&gt; These lists of functions are pointless in test expectations files like this.
&gt; I suggest omitting them.

Are you referring to the changelog or the test expectation files?
If the latter, how can that be done?
Also functions related to WebCore::JSTestClassWithJSBuiltinConstructor are important to keep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149229</commentid>
    <comment_count>13</comment_count>
      <attachid>267350</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-15 00:00:06 -0800</bug_when>
    <thetext>Created attachment 267350
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149233</commentid>
    <comment_count>14</comment_count>
      <attachid>267350</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-15 00:55:49 -0800</bug_when>
    <thetext>Comment on attachment 267350
Patch for landing

Clearing flags on attachment: 267350

Committed r194100: &lt;http://trac.webkit.org/changeset/194100&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149234</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-15 00:55:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267168</attachid>
            <date>2015-12-11 06:34:06 -0800</date>
            <delta_ts>2015-12-14 07:42:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152171-20151211153332.patch</filename>
            <type>text/plain</type>
            <size>41402</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWY3YWZjNTc2OGNhZjEz
OTI2ZmRjYzIzMzM3NzM0MWU1NDgwNDMzYi4uYjYyOTUyM2Y4ODcyZGNmYzM3NGEwZDZiMjc4ZmYy
NTAzOWYwZjkwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDE1LTEyLTExICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgV2ViSURM
IGdlbmVyYXRvciBzaG91bGQgc3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgZm9yIEMrKyBjbGFzc2Vz
IHRvIGhhdmUgYSBKUyBCdWlsdGluIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2luZyBKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciBrZXl3b3JkIGFzIGEgd2F5IHRvIHJ1biBhdXRvbWF0aWNhbGx5IGEgSlMgYnVpbHRpbiBpbml0
aWFsaXphdGlvbiBmdW5jdGlvbgorICAgICAgICB0byBwcm9jZXNzIHRoZSBhcmd1bWVudHMgcGFz
c2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKworICAgICAgICBGaXhpbmcgdHlwbyBpbiBUZXN0Q3Vz
dG9tQ29uc3RydWN0b3IuaWRsLgorCisgICAgICAgIENvdmVyZWQgYnkgYmluZGluZyB0ZXN0cy4K
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAg
ICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoSXNDb25zdHJ1Y3RhYmxlKToKKyAgICAgICAg
KElzSlNCdWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAoQWRkSlNCdWlsdGluSW5jbHVkZXNJ
Zk5lZWRlZCk6CisgICAgICAgIChJc1JldHVybmluZ1Byb21pc2UpOiBEZWxldGVkLgorICAgICAg
ICAoR2V0SlNCdWlsdGluU2NvcGVOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktp
dDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRp
bl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nf
d2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVj
dG9yX2luaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbTogQWRkZWQuCisgICAgICAg
ICgtW0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkZWFsbG9jXSk6CisgICAg
ICAgIChjb3JlKToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsOgorCiAyMDE1LTEyLTEw
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgZm9u
dC12YXJpYW50LWNhcHMgZG9lcyBub3Qgd29yayBpZiB0aGUgZm9udCBkb2VzIG5vdCBzdXBwb3J0
IGZvbnQgZmVhdHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZDA0MTRjNTMyMjUxM2EzMDQ2ZTJjYzczZTU5MjY2Nzlj
M2IzMTY3NS4uNjczY2E2MjU5NDU2NTRhYzIzNjJmY2EyNzYyMTQ1MjMzNjkwMDBmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
QEAgLTk1NCw2ICs5NTQsMTQgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52
bSgpKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4g
cHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKKwor
ICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNv
bnN0cnVjdG9yIn0pIHsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIGNyZWF0ZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgJGltcGxUeXBlIiAu
ICI6OmNyZWF0ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB9XG5cbiIpOworICAgICAgICB9CisKICAgICB9CiAKICAgICBpZiAoSXNET01HbG9iYWxPYmpl
Y3QoJGludGVyZmFjZSkpIHsKQEAgLTUwMzQsNyArNTA0Miw3IEBAIHN1YiBJc0NvbnN0cnVjdGFi
bGUKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gSGFzQ3VzdG9t
Q29uc3RydWN0b3IoJGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29u
c3RydWN0b3JUZW1wbGF0ZSJ9OworICAgIHJldHVybiBIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50
ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3Ii
fSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9
IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRl
In0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVj
dG9yIn07CiB9CiAKIHN1YiBIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uCkBAIC01MDgy
LDYgKzUwOTAsNyBAQCBzdWIgSXNKU0J1aWx0aW5Db25zdHJ1Y3RvcgogCiAgICAgcmV0dXJuIDAg
aWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn07
CiAgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVp
bHRpbiJ9OworICAgIHJldHVybiAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9OwogICAgIHJldHVybiAwOwogfQogCkBAIC01MTEyLDcg
KzUxMjEsNyBAQCBzdWIgQWRkSlNCdWlsdGluSW5jbHVkZXNJZk5lZWRlZCgpCiB7CiAgICAgbXkg
JGludGVyZmFjZSA9IHNoaWZ0OwogCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJKU0J1aWx0aW4ifSkgeworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNCdWlsdGluIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoJGlu
dGVyZmFjZS0+bmFtZSAuICJCdWlsdGlucy5oIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzhhZDBkZmU4M2IwMDVkNjJm
Y2NhMGMwMGYzZDNiZWEyMTNkMmFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ1NTSW1wb3J0
UnVsZS5oIgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaCIKKyNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5f
Q09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNU
T1IsIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5f
Q09OU1RSVUNUT1IocmV0KTsKKworICAgIHJldHVybiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yKG9iaik7Cit9CisKK1dlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IqIHdyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Io
V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NM
QVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitH
X0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciwg
d2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3RvciwgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dp
dGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VU
X1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChw
cml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90
ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9y
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJ
VEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYt
PmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2Jq
ZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXpl
b2YoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVj
dG9yX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1Nf
V0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZSgpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ODZkZGEwMWEy
ZGQyMzMxNDhjMjllMzQzMDA3ZDc4Mjk4MzcxODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcl9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRI
X0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NsYXNz
X3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNU
X0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJ
VEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JV
SUxUSU5fQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlM
VElOX0NPTlNUUlVDVE9SKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJV
Q1RPUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5f
Q09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9S
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJV
Q1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IsIFdl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgeworICAgIFdlYktp
dERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rl
c3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKHZvaWQpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzhiNjIy
MmM4Zjg1OGZlODdmMTgxNGFjN2JiYmFkOTE0ZWM3NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaAorCisjaW5jbHVkZSAiVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IqKTsKK1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciop
OworV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1ODk2YjIzZDcwNjE1ODFjN2FkM2M0
MGRmMWM4OTMwZmJmNzFhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iu
Y3BwCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckJ1aWx0
aW5zLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwor
fTsKKwordHlwZWRlZiBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj4gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3RvcjsKKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmdldFBy
b3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gRnVuY3Rpb25FeGVjdXRhYmxlKiBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZShW
TSYgdm0pCit7CisgICAgcmV0dXJuIHRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcklu
aXRpYWxpemVUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb2RlR2VuZXJhdG9yKHZt
KTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Ip
IH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVU
YWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVhZE9u
bHksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSkgfTsKKwordm9p
ZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlm
eVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKSB9OworCitKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYgaW1wbCkKKyAgICA6
IEpTRE9NV3JhcHBlcjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6Om1vdmUoaW1wbCkpCit7Cit9CisKK0pTT2JqZWN0KiBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
KTsKK30KKworSlNPYmplY3QqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpn
ZXRQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCit2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0
LT5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6fkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgSlNPYmpl
Y3QqIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSo+
KGJhc2VWYWx1ZSk7CisgICAgaWYgKCFkb21PYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9t
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworfQorCitKU1ZhbHVlIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK2Jvb2wgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yID0ganNDYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oaGFuZGxl
LnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdy
YXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3ItPndyYXBwZWQoKSwganNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZ
KQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0
ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitl
eHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzM1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGltcGwpCit7CisgICAg
aWYgKCFpbXBsKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5l
d1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVj
dCwgaW1wbCk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwor
ICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGdldEV4aXN0aW5nV3JhcHBlcjxKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LCBpbXBsKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBh
Y3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbCkpOwor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JAV2ViQ29yZUBANkJAIikpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3Rl
ZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTMzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yRVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxz
IFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGEgdnRhYmxl
LCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJs
ZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgQ09NUElMRV9BU1NF
UlQoX19pc19wb2x5bW9ycGhpYyhUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpLCBU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaXNfbm90X3BvbHltb3JwaGljKTsKKyNl
bmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVy
IGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9K
UygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0
aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRl
ZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVj
dGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlTmV3V3JhcHBlcjxK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
K30KKworVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IqPih2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBl
ZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3YWIzMWQ5MmQ5
OTllNWIzYzM2YWQzOGU3OWQ1ZWRjYWQ2MTBlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IuaApAQCAtMCwwICsxLDkwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaAorI2RlZmluZSBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBKU0RP
TVdyYXBwZXI8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0RPTVdyYXBwZXI8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
PiBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
Y3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYgaW1wbCkK
KyAgICB7CisgICAgICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGOjptb3ZlKGlt
cGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOwor
ICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gY3Jl
YXRlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3I6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3Jl
YXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOworICAgIHN0YXRpYyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHRvV3Jh
cHBlZChKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwq
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpOworCitwcm90ZWN0ZWQ6CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYpOworCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIH0KKworfTsKKwor
Y2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JPd25lciA6IHB1YmxpYyBK
U0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyPiBvd25lcjsKKyAgICByZXR1
cm4gJm93bmVyLmdldCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3ImIGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNkNDJiM2VmZWEw
NzkwYmM2ZWJjZDU4M2VmYjQ1OTgwYjJkZWRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdA
Z21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9N
QUMoOTg3Nl81KQorV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IgOiBET01PYmplY3QKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZWYxYTJlNzM0M2E1NzIxN2FhMjE5YjU3OTlmMWQ0ZTM2YzU3Nzg5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLm1tCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKworI2ltcG9ydCAiRE9NTm9kZUlu
dGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNF
eHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0
Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50
YXRpb24gRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yCisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVh
ZChbRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVm
KCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJl
dF9jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHdyYXBw
ZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHZh
bHVlKQoreworICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7CisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50
ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAg
IHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9ySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2YzZmQ3Mzg0NmE3NzhlNWRhNDFjODVkODNiMWJjMWZiZTY2ZGNiYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKQEAgLTAsMCArMSwz
NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I7Cit9CisKK1dFQkNPUkVfRVhQT1JUIFdlYkNvcmU6OlRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IgKik7CitXRUJDT1JFX0VYUE9SVCBET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5p
ZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjc3MDNlNjkyZWExZGQxODM0NTM1YzI2OTBiZmY2OGUwNTQ4MDVkOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgSlNCdWlsdGlu
Q29uc3RydWN0b3IKK10gaW50ZXJmYWNlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAppbmRleCAzYWMwY2QxYThjNWI5M2Yw
NTJjNTFiZGQ4ZTBmMzczOTY1MThiNjEzLi5jYjNkZmNjMWNmM2EwZGNjMjg5Zjk2YzhlNDJmZTU2
NmYyZDIxZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbApAQCAtMjgsOCArMjgsNiBA
QAogCiBbCiAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgSlNCdWlsdEluLAogICAgIE5vSW50
ZXJmYWNlT2JqZWN0CiBdIGludGVyZmFjZSBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QgewogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267295</attachid>
            <date>2015-12-14 07:42:41 -0800</date>
            <delta_ts>2015-12-14 08:06:29 -0800</delta_ts>
            <desc>Minor refactoring</desc>
            <filename>bug-152171-20151214164204.patch</filename>
            <type>text/plain</type>
            <size>42443</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWY3YWZjNTc2OGNhZjEz
OTI2ZmRjYzIzMzM3NzM0MWU1NDgwNDMzYi4uNDY4NTVmZjE5YWU2MzY2NmNkYTE1MGNhYjEwMDM1
MWQxODNkZDRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE1LTEyLTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgV2ViSURM
IGdlbmVyYXRvciBzaG91bGQgc3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgZm9yIEMrKyBjbGFzc2Vz
IHRvIGhhdmUgYSBKUyBCdWlsdGluIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWludHJvZHVjaW5nIEpTQnVpbHRpbkNvbnN0cnVj
dG9yIGtleXdvcmQgYXMgYSB3YXkgdG8gcnVuIGF1dG9tYXRpY2FsbHkgYSBKUyBidWlsdGluIGlu
aXRpYWxpemF0aW9uIGZ1bmN0aW9uCisgICAgICAgIHRvIHByb2Nlc3MgdGhlIGFyZ3VtZW50cyBw
YXNzZWQgdG8gdGhlIERPTSBDKysgY29uc3RydWN0b3IuCisKKyAgICAgICAgU3BlY2lhbGl6ZWQg
Y3JlYXRlSlNPYmplY3QgZm9yIHRob3NlIGNsYXNzZXMuCisKKyAgICAgICAgRml4aW5nIHR5cG8g
aW4gVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKElz
Q29uc3RydWN0YWJsZSk6CisgICAgICAgIChJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKEFkZEpTQnVpbHRpbkluY2x1ZGVzSWZOZWVkZWQpOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoR2V0SlNCdWlsdGluU2NvcGVOYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVj
dG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
b3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGVQ
cm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpm
aW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp3
cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkZWFsbG9jXSk6CisgICAgICAgIChjb3Jl
KToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsOgorCiAyMDE1LTEyLTEwICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgZm9udC12YXJpYW50
LWNhcHMgZG9lcyBub3Qgd29yayBpZiB0aGUgZm9udCBkb2VzIG5vdCBzdXBwb3J0IGZvbnQgZmVh
dHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KaW5kZXggYjYzYWYwMzdjNzZiMjczNmM4ZWVmZmUwYWVlMGUyODFiNGUyMjhjMi4u
OTlmYjk3ZmE3NmM3MTU0OWJkYzA3NWVlZDQxNTUwZGQxNjAwYzNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTk1NCwx
NCArOTU0LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTtcbiIp
OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKLQotICAgICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9y
In0pIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRjbGFz
c05hbWUqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIGNyZWF0ZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgJGltcGxUeXBlIiAuICI6OmNyZWF0
ZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIp
OwotICAgICAgICB9Ci0KICAgICB9CiAKICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVy
ZmFjZSkpIHsKQEAgLTQ3MzUsNyArNDcyNywyMCBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRl
ZmluaXRpb24KICAgICBteSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKICAg
ICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAotICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbkNvbnN0
cnVjdG9yKCRpbnRlcmZhY2UpOworCisgICAgaWYgKElzSlNCdWlsdGluQ29uc3RydWN0b3IoJGlu
dGVyZmFjZSkpIHsKKyAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAjIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgQ29uc3RydWN0b3JDYWxsV2l0aAorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCA8PEVORCk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmplY3QqICR7Y2xhc3NOYW1lfUNvbnN0
cnVjdG9yOjpjcmVhdGVKU09iamVjdCgpCit7CisgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Y3Jl
YXRlKGdldERPTVN0cnVjdHVyZTwke2NsYXNzTmFtZX0+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAq
Z2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRl
KCkpOworfQorCitFTkQKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
bXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8g
IiR7Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9y
IjsKIApAQCAtNTA0Miw3ICs1MDQ3LDcgQEAgc3ViIElzQ29uc3RydWN0YWJsZQogewogICAgIG15
ICRpbnRlcmZhY2UgPSBzaGlmdDsKIAotICAgIHJldHVybiBIYXNDdXN0b21Db25zdHJ1Y3Rvcigk
aW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0
b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3Rv
ciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBs
YXRlIn07CisgICAgcmV0dXJuIEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpIHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifSB8fCAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifTsKIH0KIAog
c3ViIEhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24KQEAgLTUwOTAsNiArNTA5NSw3IEBA
IHN1YiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yCiAKICAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifTsKICAgICByZXR1cm4g
MSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluIn07CisgICAg
cmV0dXJuIDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNv
bnN0cnVjdG9yIn07CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUxMjAsNyArNTEyNiw3IEBAIHN1
YiBBZGRKU0J1aWx0aW5JbmNsdWRlc0lmTmVlZGVkKCkKIHsKICAgICBteSAkaW50ZXJmYWNlID0g
c2hpZnQ7CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVp
bHRpbiJ9KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1
aWx0aW4ifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29u
c3RydWN0b3IifSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaW50ZXJmYWNlLT5uYW1l
IC4gIkJ1aWx0aW5zLmgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzOGFkMGRmZTgzYjAwNWQ2MmZjY2EwYzAwZjNkM2Jl
YTIxM2QyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIK
KyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9N
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUgewor
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IGNv
cmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
aXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihy
ZXQpOworCisgICAgcmV0dXJuIHdyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Io
b2JqKTsKK30KKworV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBj
b3JlKFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvciogd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19C
VUlMVElOX0NPTlNUUlVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFT
U19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rl
c3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGlu
X2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmpl
Y3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rf
Y2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+
KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dp
dGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKSk7CisgICAgZ29iamVjdENs
YXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5f
Y29uc3RydWN0b3JfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemU7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5f
Y29uc3RydWN0b3JfaW5pdChXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxU
SU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKCk7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4NmRkYTAxYTJkZDIzMzE0OGMyOWUz
NDMwMDdkNzgyOTgzNzE4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
X2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gK
KworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWls
dGluX2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFT
U19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9K
U19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJV
Q1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNU
T1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBh
cmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9jbGFzc193aXRo
X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3OGI2MjIyYzhmODU4ZmU4N2Yx
ODE0YWM3YmJiYWQ5MTRlYzc1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB3cmFwVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciopOworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQo
V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CitXZWJDb3JlOjpU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODc0OWI1YTM4NmFhOWZmYzg5ZGEzMWMxMTE4ZDMwMDY5NzA0
ODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCAr
MSwyMDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
CitjbGFzcyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1
YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit0eXBlZGVm
IEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
PiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOworCit0ZW1w
bGF0ZTw+IEpTQzo6SlNPYmplY3QqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OmNyZWF0ZUpTT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjpjcmVhdGUoKSk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJl
YWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IEZ1bmN0aW9uRXhlY3V0YWJsZSog
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZUV4ZWN1dGFibGUoVk0mIHZtKQoreworICAgIHJldHVybiB0ZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JJbml0aWFsaXplVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29k
ZUdlbmVyYXRvcih2bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250
RW51bSB8IFJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPigwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5
cGUpIH07CisKK3ZvaWQgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENs
YXNzSW5mbyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcikgfTsK
KworSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYm
IGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGOjptb3ZlKGltcGwpKQoreworfQorCitK
U09iamVjdCogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZVByb3Rv
dHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordm9pZCBKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oY2VsbCk7Cisg
ICAgdGhpc09iamVjdC0+SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOworfQorCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRv
bU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcm90b3R5cGUqPihiYXNlVmFsdWUpOworICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworSlNWYWx1ZSBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bSwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCitib29sIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0
aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3
b3JsZCwgJmpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLT53cmFwcGVkKCksIGpz
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKK30KKworI2lmIEVOQUJMRShCSU5E
SU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigi
Pz9fN1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckBXZWJDb3JlQEA2QkAiKVtdKSgp
OyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBp
bXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJl
dHVybiBjcmVhdGVOZXdXcmFwcGVyPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
PihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVy
biBqc051bGwoKTsKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkp
CisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KGltcGwpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQ
b2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAg
dm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUzM1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8g
SWYgdGhpcyBmYWlscyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgZG9lcyBub3Qg
aGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAg
IENPTVBJTEVfQVNTRVJUKF9faXNfcG9seW1vcnBoaWMoVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2lzX25vdF9wb2x5
bW9ycGhpYyk7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRp
b24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAor
ICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAv
LyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50
ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9p
bnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0
ZU5ld1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9i
amVjdCwgaW1wbCk7Cit9CisKK1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4odmFsdWUpKQorICAgICAgICByZXR1cm4gJndy
YXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYThiNmIzOGM2NTkyOWMwY2FlMGMzMGQ0YTEyNzE4ZDc3ZGQ4MmI1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
X2gKKyNkZWZpbmUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaAorCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ig
OiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4g
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj4gQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3Qs
IFdURjo6bW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IqIHRvV3JhcHBlZChKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCitwcm90ZWN0ZWQ6CisgICAgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYpOworCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwor
ICAgIH0KKworfTsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JP
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9Owor
CitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmLCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyPiBv
d25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yKik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3ImIGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgJmltcGwpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Kik7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTNkNDJiM2VmZWEwNzkwYmM2ZWJjZDU4M2VmYjQ1OTgwYjJkZWRkYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworV0VCS0lUX0NM
QVNTX0FWQUlMQUJMRV9NQUMoOTg3Nl81KQorV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBET01PYmplY3QKK0BlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ZWYxYTJlNzM0M2E1NzIxN2FhMjE5YjU3OTlmMWQ0ZTM2YzU3Nzg5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLm1tCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKworI2lt
cG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIK
KyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9y
dCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oX2ludGVybmFs
KQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxv
Y2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNs
YXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAg
ICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKK1dl
YkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBw
ZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqIHZhbHVlKQoreworICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1Jv
dW5kT25lKCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAo
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gZ2V0RE9NV3Jh
cHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFz
ZV07CisgICAgRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0g
W1tET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgYWxsb2NdIF9pbml0XTsKKyAg
ICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFs
Kj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIs
IHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2YzZmQ3Mzg0NmE3NzhlNWRhNDFjODVkODNiMWJjMWZi
ZTY2ZGNiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFs
LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I7Cit9CisKK1dFQkNPUkVfRVhQT1JU
IFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKik7CitXRUJDT1JFX0VYUE9SVCBET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc3MDNlNjkyZWExZGQxODM0NTM1YzI2OTBi
ZmY2OGUwNTQ4MDVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsCkBAIC0w
LDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENh
bm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitb
CisgICAgSlNCdWlsdGluQ29uc3RydWN0b3IKK10gaW50ZXJmYWNlIFRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAppbmRleCAz
YWMwY2QxYThjNWI5M2YwNTJjNTFiZGQ4ZTBmMzczOTY1MThiNjEzLi5jYjNkZmNjMWNmM2EwZGNj
Mjg5Zjk2YzhlNDJmZTU2NmYyZDIxZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbApA
QCAtMjgsOCArMjgsNiBAQAogCiBbCiAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgSlNCdWls
dEluLAogICAgIE5vSW50ZXJmYWNlT2JqZWN0CiBdIGludGVyZmFjZSBUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QgewogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267297</attachid>
            <date>2015-12-14 08:06:37 -0800</date>
            <delta_ts>2015-12-14 08:45:29 -0800</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-152171-20151214170600.patch</filename>
            <type>text/plain</type>
            <size>46994</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE2NWFmZjI0OGNhMDI5
ZWJhYzEwYjE3YjIzYzc1NDlmNWM3NzMxNS4uMmY4ZTAyZmIzOTQ2M2M2NTM1NWEzZDI4MTlmYzU5
NWJmZGE4YTQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxNS0xMi0xNCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIFdlYklE
TCBnZW5lcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IGZvciBDKysgY2xhc3Nl
cyB0byBoYXZlIGEgSlMgQnVpbHRpbiBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVpbnRyb2R1Y2luZyBKU0J1aWx0aW5Db25zdHJ1
Y3RvciBrZXl3b3JkIGFzIGEgd2F5IHRvIHJ1biBhdXRvbWF0aWNhbGx5IGEgSlMgYnVpbHRpbiBp
bml0aWFsaXphdGlvbiBmdW5jdGlvbgorICAgICAgICB0byBwcm9jZXNzIHRoZSBhcmd1bWVudHMg
cGFzc2VkIHRvIHRoZSBET00gQysrIGNvbnN0cnVjdG9yLgorCisgICAgICAgIFNwZWNpYWxpemVk
IGNyZWF0ZUpTT2JqZWN0IGZvciB0aG9zZSBjbGFzc2VzLgorCisgICAgICAgIEZpeGluZyB0eXBv
IGluIFRlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwuCisKKyAgICAgICAgQ292ZXJlZCBieSBiaW5k
aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChJ
c0NvbnN0cnVjdGFibGUpOgorICAgICAgICAoSXNKU0J1aWx0aW5Db25zdHJ1Y3Rvcik6CisgICAg
ICAgIChBZGRKU0J1aWx0aW5JbmNsdWRlc0lmTmVlZGVkKToKKyAgICAgICAgKEdlbmVyYXRlSGVh
ZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdldEpTQnVpbHRpblNjb3BlTmFtZSk6IERlbGV0ZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jb25zdHJ1
Y3Rvcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NsYXNzX3dp
dGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9pbml0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQ
cm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlSlNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Y3JlYXRl
UHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yOjpnZXRQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JPd25lcjo6
ZmluYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yOjp0b1dyYXBwZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
d3JhcHBlck93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IubW06IEFkZGVkLgorICAgICAgICAoLVtET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgZGVhbGxvY10pOgorICAgICAgICAoY29y
ZSk6CisgICAgICAgIChraXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbDoKKworMjAxNS0xMi0xMSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIFdlYklETCBn
ZW5lcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IGZvciBDKysgY2xhc3NlcyB0
byBoYXZlIGEgSlMgQnVpbHRpbiBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgSlNCdWlsdGluQ29uc3RydWN0b3Ig
a2V5d29yZCBhcyBhIHdheSB0byBydW4gYXV0b21hdGljYWxseSBhIEpTIGJ1aWx0aW4gaW5pdGlh
bGl6YXRpb24gZnVuY3Rpb24KKyAgICAgICAgdG8gcHJvY2VzcyB0aGUgYXJndW1lbnRzIHBhc3Nl
ZCB0byB0aGUgY29uc3RydWN0b3IuCisKKyAgICAgICAgTW9kaWZpZWQgY3JlYXRlSlNPYmplY3Qg
aW5zdGVhZCBvZiBhZGRpbmcgYSBkZWRpY2F0ZWQgSlNDbGFzczo6Y3JlYXRlIHNvIHRoYXQgQ29u
c3RydWN0b3JDYWxsV2l0aCBzdXBwb3J0IGNhbiBiZSBhZGRlZCBpZiBuZWVkZWQuCisKKyAgICAg
ICAgRml4aW5nIHR5cG8gaW4gVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0Ns
YXNzPjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRpbkNvbnN0cnVjdG9y
PEpTQ2xhc3M+OjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZWFk
YWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNC
dWlsdGluUmVhZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3I6OmNyZWF0ZUpTT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRpblJlYWRhYmxlU3RyZWFtQ29udHJvbGxl
clByaXZhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlSlNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3Rv
ckRlZmluaXRpb24pOgorICAgICAgICAoSXNDb25zdHJ1Y3RhYmxlKToKKyAgICAgICAgKElzSlNC
dWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAoQWRkSlNCdWlsdGluSW5jbHVkZXNJZk5lZWRl
ZCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChJc1JldHVy
bmluZ1Byb21pc2UpOiBEZWxldGVkLgorICAgICAgICAoR2V0SlNCdWlsdGluU2NvcGVOYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9y
X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1
aWx0aW5fY29uc3RydWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
Y2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvclByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbTogQWRkZWQuCisgICAgICAg
ICgtW0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkZWFsbG9jXSk6CisgICAg
ICAgIChjb3JlKToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsOgorCiAyMDE1LTEyLTE0
ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVh
bXMgQVBJXSBFeHBvc2UgUmVhZGFibGVTdHJlYW0gYW5kIHJlbGF0aXZlcyB0byBXb3JrZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
aW5kZXggYjYzYWYwMzdjNzZiMjczNmM4ZWVmZmUwYWVlMGUyODFiNGUyMjhjMi4uOTlmYjk3ZmE3
NmM3MTU0OWJkYzA3NWVlZDQxNTUwZGQxNjAwYzNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTk1NCwxNCArOTU0LDYg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTtcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKLQotICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn0pIHsKLSAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNy
ZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNyZWF0
ZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgJGltcGxUeXBlIiAuICI6OmNyZWF0ZSgpKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwotICAgICAg
ICB9Ci0KICAgICB9CiAKICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsK
QEAgLTQ3MzUsNyArNDcyNywyMCBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24K
ICAgICBteSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKICAgICBteSAkZnVu
Y3Rpb24gPSBzaGlmdDsKIAotICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKCRp
bnRlcmZhY2UpOworCisgICAgaWYgKElzSlNCdWlsdGluQ29uc3RydWN0b3IoJGludGVyZmFjZSkp
IHsKKyAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0
aW5Db25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
Q29uc3RydWN0b3JDYWxsV2l0aAorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVO
RCk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmplY3QqICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpj
cmVhdGVKU09iamVjdCgpCit7CisgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Y3JlYXRlKGdldERP
TVN0cnVjdHVyZTwke2NsYXNzTmFtZX0+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCkpOworfQor
CitFTkQKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbXkgJGNvbnN0
cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NO
YW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKIApAQCAt
NTA0Miw3ICs1MDQ3LDcgQEAgc3ViIElzQ29uc3RydWN0YWJsZQogewogICAgIG15ICRpbnRlcmZh
Y2UgPSBzaGlmdDsKIAotICAgIHJldHVybiBIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNl
KSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07Cisg
ICAgcmV0dXJuIEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifSB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifTsKIH0KIAogc3ViIEhlYWRl
ck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24KQEAgLTUwOTAsNiArNTA5NSw3IEBAIHN1YiBJc0pT
QnVpbHRpbkNvbnN0cnVjdG9yCiAKICAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifTsKICAgICByZXR1cm4gMSBpZiAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluIn07CisgICAgcmV0dXJuIDEg
aWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9y
In07CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUxMjAsNyArNTEyNiw3IEBAIHN1YiBBZGRKU0J1
aWx0aW5JbmNsdWRlc0lmTmVlZGVkKCkKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAK
LSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbiJ9KSB7
CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW4ifSB8
fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3Ii
fSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaW50ZXJmYWNlLT5uYW1lIC4gIkJ1aWx0
aW5zLmgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmMzOGFkMGRmZTgzYjAwNWQ2MmZjY2EwYzAwZjNkM2JlYTIxM2QyYWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBA
IC0wLDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZS5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFU
RShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9U
RVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUgeworICAgIFJlZlB0
cjxXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7
Cit9IFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iq
IG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3Bv
aW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VC
S0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihyZXQpOworCisg
ICAgcmV0dXJuIHdyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iob2JqKTsKK30K
KworV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3Jh
cFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NP
TlNUUlVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pT
X0JVSUxUSU5fQ09OU1RSVUNUT1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9N
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nf
d2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVj
dG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NM
QVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOworCisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OworCisgICAgcHJpdi0+fldlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
clByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWls
dGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVz
dF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KTsKKworICAgIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVp
bHRpbl9jb25zdHJ1Y3Rvcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25z
dHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
dGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemU7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfaW5pdChXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RS
VUNUT1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4NmRkYTAxYTJkZDIzMzE0OGMyOWUzNDMwMDdkNzgy
OTgzNzE4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZp
bmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RP
UiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0
cnVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pT
X0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ip
KQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NM
QVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0
aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3OGI2MjIyYzhmODU4ZmU4N2YxODE0YWM3YmJi
YWQ5MTRlYzc1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOwor
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CitXZWJDb3JlOjpUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODc0OWI1YTM4NmFhOWZmYzg5ZGEzMWMxMTE4ZDMwMDY5NzA0ODRhOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwyMDYgQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit0eXBlZGVmIEpTQnVpbHRp
bkNvbnN0cnVjdG9yPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiBKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOworCit0ZW1wbGF0ZTw+IEpT
Qzo6SlNPYmplY3QqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3I6OmNyZWF0ZUpTT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3QoKSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVh
dGUoKSk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpn
ZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwg
RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFi
bGUoVk0mIHZtKQoreworICAgIHJldHVybiB0ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JJbml0aWFsaXplVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29kZUdlbmVyYXRv
cih2bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJl
YWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPigwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUpIH07CisK
K3ZvaWQgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcikgfTsKKworSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisg
ICAgOiBKU0RPTVdyYXBwZXI8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGOjptb3ZlKGltcGwpKQoreworfQorCitKU09iamVjdCog
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlw
ZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oY2VsbCk7CisgICAgdGhpc09i
amVjdC0+SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
T2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAg
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5
cGUqPihiYXNlVmFsdWUpOworICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCitib29sIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGhh
bmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxE
T01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpz
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLT53cmFwcGVkKCksIGpzVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVH
UklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykK
K2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBpbXBsKQorewor
ICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBjcmVh
dGVOZXdXcmFwcGVyPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihnbG9iYWxP
YmplY3QsIGltcGwpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBqc051bGwo
KTsKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9p
ZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwp
KTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhw
ZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUzM1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBm
YWlscyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhIHZ0
YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NW
VGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIENPTVBJTEVf
QVNTRVJUKF9faXNfcG9seW1vcnBoaWMoVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2lzX25vdF9wb2x5bW9ycGhpYyk7
CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVp
dGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRv
IHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRp
bmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElE
TCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBl
eHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBw
ZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1w
bCk7Cit9CisKK1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4odmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThiNmIz
OGM2NTkyOWMwY2FlMGMzMGQ0YTEyNzE4ZDc3ZGQ4MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZp
bmUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBwdWJsaWMg
SlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4geworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvcj4gQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGlt
cGwpCisgICAgeworICAgICAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURjo6bW92
ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgp
KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iq
IHRvV3JhcHBlZChKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpK
U0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpOworCitwcm90ZWN0ZWQ6CisgICAgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYpOworCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIH0KKwor
fTsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JPd25lciA6IHB1
YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyPiBvd25lcjsKKyAg
ICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yKik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3ImIGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwp
OyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNkNDJi
M2VmZWEwNzkwYmM2ZWJjZDU4M2VmYjQ1OTgwYjJkZWRkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53
ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworV0VCS0lUX0NMQVNTX0FWQUlM
QUJMRV9NQUMoOTg3Nl81KQorV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBET01PYmplY3QKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44ZWYxYTJlNzM0M2E1NzIxN2FhMjE5YjU3OTlmMWQ0ZTM2YzU3Nzg5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLm1tCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKworI2ltcG9ydCAiRE9N
Tm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQg
IkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29y
ZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBv
cnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29y
ZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oX2ludGVybmFsKQorCitAaW1w
bGVtZW50YXRpb24gRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yCisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFp
blRocmVhZChbRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNsYXNzXSwgc2Vs
ZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwt
PmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWlu
dGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+
KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqIHZhbHVlKQoreworICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7
CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1
ZSkpCisgICAgICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAg
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVy
LT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUp
OworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsK
KyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2YzZmQ3Mzg0NmE3NzhlNWRhNDFjODVkODNiMWJjMWZiZTY2ZGNiYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKQEAgLTAs
MCArMSwzNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I7Cit9CisKK1dFQkNPUkVfRVhQT1JUIFdlYkNvcmU6
OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IgKik7CitXRUJDT1JFX0VYUE9SVCBET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc3MDNlNjkyZWExZGQxODM0NTM1YzI2OTBiZmY2OGUwNTQ4
MDVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4g
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisg
KiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgSlNC
dWlsdGluQ29uc3RydWN0b3IKK10gaW50ZXJmYWNlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAppbmRleCAzYWMwY2QxYThj
NWI5M2YwNTJjNTFiZGQ4ZTBmMzczOTY1MThiNjEzLi5jYjNkZmNjMWNmM2EwZGNjMjg5Zjk2Yzhl
NDJmZTU2NmYyZDIxZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbApAQCAtMjgsOCAr
MjgsNiBAQAogCiBbCiAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgSlNCdWlsdEluLAogICAg
IE5vSW50ZXJmYWNlT2JqZWN0CiBdIGludGVyZmFjZSBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3QgewogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267298</attachid>
            <date>2015-12-14 08:45:36 -0800</date>
            <delta_ts>2015-12-14 09:18:37 -0800</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-152171-20151214174459.patch</filename>
            <type>text/plain</type>
            <size>46292</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE2NWFmZjI0OGNhMDI5
ZWJhYzEwYjE3YjIzYzc1NDlmNWM3NzMxNS4uMmY4ZTAyZmIzOTQ2M2M2NTM1NWEzZDI4MTlmYzU5
NWJmZGE4YTQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxNS0xMi0xNCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIFdlYklE
TCBnZW5lcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IGZvciBDKysgY2xhc3Nl
cyB0byBoYXZlIGEgSlMgQnVpbHRpbiBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVpbnRyb2R1Y2luZyBKU0J1aWx0aW5Db25zdHJ1
Y3RvciBrZXl3b3JkIGFzIGEgd2F5IHRvIHJ1biBhdXRvbWF0aWNhbGx5IGEgSlMgYnVpbHRpbiBp
bml0aWFsaXphdGlvbiBmdW5jdGlvbgorICAgICAgICB0byBwcm9jZXNzIHRoZSBhcmd1bWVudHMg
cGFzc2VkIHRvIHRoZSBET00gQysrIGNvbnN0cnVjdG9yLgorCisgICAgICAgIFNwZWNpYWxpemVk
IGNyZWF0ZUpTT2JqZWN0IGZvciB0aG9zZSBjbGFzc2VzLgorCisgICAgICAgIEZpeGluZyB0eXBv
IGluIFRlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwuCisKKyAgICAgICAgQ292ZXJlZCBieSBiaW5k
aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChJ
c0NvbnN0cnVjdGFibGUpOgorICAgICAgICAoSXNKU0J1aWx0aW5Db25zdHJ1Y3Rvcik6CisgICAg
ICAgIChBZGRKU0J1aWx0aW5JbmNsdWRlc0lmTmVlZGVkKToKKyAgICAgICAgKEdlbmVyYXRlSGVh
ZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEdldEpTQnVpbHRpblNjb3BlTmFtZSk6IERlbGV0ZWQu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jb25zdHJ1
Y3Rvcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NsYXNzX3dp
dGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9pbml0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQ
cm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlSlNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Y3JlYXRl
UHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yOjpnZXRQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JPd25lcjo6
ZmluYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yOjp0b1dyYXBwZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
d3JhcHBlck93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IubW06IEFkZGVkLgorICAgICAgICAoLVtET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgZGVhbGxvY10pOgorICAgICAgICAoY29y
ZSk6CisgICAgICAgIChraXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbDoKKworMjAxNS0xMi0xMSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIFdlYklETCBn
ZW5lcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IGZvciBDKysgY2xhc3NlcyB0
byBoYXZlIGEgSlMgQnVpbHRpbiBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgSlNCdWlsdGluQ29uc3RydWN0b3Ig
a2V5d29yZCBhcyBhIHdheSB0byBydW4gYXV0b21hdGljYWxseSBhIEpTIGJ1aWx0aW4gaW5pdGlh
bGl6YXRpb24gZnVuY3Rpb24KKyAgICAgICAgdG8gcHJvY2VzcyB0aGUgYXJndW1lbnRzIHBhc3Nl
ZCB0byB0aGUgY29uc3RydWN0b3IuCisKKyAgICAgICAgTW9kaWZpZWQgY3JlYXRlSlNPYmplY3Qg
aW5zdGVhZCBvZiBhZGRpbmcgYSBkZWRpY2F0ZWQgSlNDbGFzczo6Y3JlYXRlIHNvIHRoYXQgQ29u
c3RydWN0b3JDYWxsV2l0aCBzdXBwb3J0IGNhbiBiZSBhZGRlZCBpZiBuZWVkZWQuCisKKyAgICAg
ICAgRml4aW5nIHR5cG8gaW4gVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0Ns
YXNzPjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRpbkNvbnN0cnVjdG9y
PEpTQ2xhc3M+OjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZWFk
YWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNC
dWlsdGluUmVhZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3I6OmNyZWF0ZUpTT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQnVpbHRpblJlYWRhYmxlU3RyZWFtQ29udHJvbGxl
clByaXZhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlSlNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3Rv
ckRlZmluaXRpb24pOgorICAgICAgICAoSXNDb25zdHJ1Y3RhYmxlKToKKyAgICAgICAgKElzSlNC
dWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAoQWRkSlNCdWlsdGluSW5jbHVkZXNJZk5lZWRl
ZCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChJc1JldHVy
bmluZ1Byb21pc2UpOiBEZWxldGVkLgorICAgICAgICAoR2V0SlNCdWlsdGluU2NvcGVOYW1lKTog
RGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9y
X2NvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1
aWx0aW5fY29uc3RydWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
Y2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvclByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbTogQWRkZWQuCisgICAgICAg
ICgtW0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkZWFsbG9jXSk6CisgICAg
ICAgIChjb3JlKToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaDog
QWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsOgorCiAyMDE1LTEyLTE0
ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVh
bXMgQVBJXSBFeHBvc2UgUmVhZGFibGVTdHJlYW0gYW5kIHJlbGF0aXZlcyB0byBXb3JrZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
aW5kZXggZDA0MTRjNTMyMjUxM2EzMDQ2ZTJjYzczZTU5MjY2NzljM2IzMTY3NS4uOTlmYjk3ZmE3
NmM3MTU0OWJkYzA3NWVlZDQxNTUwZGQxNjAwYzNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTQ3MjcsNyArNDcyNywy
MCBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkZ2VuZXJhdGlu
Z05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAot
ICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpOworCisgICAg
aWYgKElzSlNCdWlsdGluQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7
CisgICAgICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgQ29uc3RydWN0b3JDYWxsV2l0
aAorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7Cit0ZW1wbGF0ZTw+IEpT
Qzo6SlNPYmplY3QqICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCgpCit7
CisgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTwke2NsYXNz
TmFtZX0+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3QoKSwgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCkpOworfQorCitFTkQKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0g
JGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0
b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKIApAQCAtNTAzNCw3ICs1MDQ3LDcgQEAg
c3ViIElzQ29uc3RydWN0YWJsZQogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKIAotICAg
IHJldHVybiBIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07CisgICAgcmV0dXJuIEhhc0N1c3Rv
bUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJO
YW1lZENvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNv
bnN0cnVjdG9yVGVtcGxhdGUifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNCdWlsdGluQ29uc3RydWN0b3IifTsKIH0KIAogc3ViIEhlYWRlck5lZWRzUHJvdG90eXBlRGVj
bGFyYXRpb24KQEAgLTUwODIsNiArNTA5NSw3IEBAIHN1YiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9y
CiAKICAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tQ29uc3RydWN0b3IifTsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNCdWlsdGluIn07CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn07CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTUxMTIsNyArNTEyNiw3IEBAIHN1YiBBZGRKU0J1aWx0aW5JbmNsdWRlc0lmTmVl
ZGVkKCkKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKLSAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbiJ9KSB7CisgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW4ifSB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifSkgewogICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygkaW50ZXJmYWNlLT5uYW1lIC4gIkJ1aWx0aW5zLmgiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMz
OGFkMGRmZTgzYjAwNWQ2MmZjY2EwYzAwZjNkM2JlYTIxM2QyYWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNp
bmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVj
U3RhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NMQVNT
X1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNf
QlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJD
b3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NMQVNT
X1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iob2JqKTsKK30KKworV2ViQ29yZTo6VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNU
T1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJ
Tl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0
cnVjdG9yX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1
aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9j
bGFzc19pbml0KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pz
X2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfaW5pdChXZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDY4NmRkYTAxYTJkZDIzMzE0OGMyOWUzNDMwMDdkNzgyOTgzNzE4NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiAgICAgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNU
T1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpKQorI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNU
X0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9D
TEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9K
U19CVUlMVElOX0NPTlNUUlVDVE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NMQVNT
X1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JV
SUxUSU5fQ09OU1RSVUNUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9K
U19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJ
Tl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0
X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg3OGI2MjIyYzhmODU4ZmU4N2YxODE0YWM3YmJiYWQ5MTRlYzc1NzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmgKQEAg
LTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisK
KyNpbmNsdWRlICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNvcmU6
OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOworV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKik7CitXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc0OWI1
YTM4NmFhOWZmYzg5ZGEzMWMxMTE4ZDMwMDY5NzA0ODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcwor
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAg
c3RhdGljIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5o
ZWFwKSkgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7Cit9OworCit0eXBlZGVmIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOworCit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmplY3QqIEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZUpTT2JqZWN0
KCkKK3sKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNy
ZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+
KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwg
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGUoKSk7Cit9CisKK3RlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sICZn
bG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZt
LCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ii
KSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0
ZW1wbGF0ZTw+IEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUoVk0mIHZtKQoreworICAg
IHJldHVybiB0ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbml0aWFsaXplVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29kZUdlbmVyYXRvcih2bSk7Cit9CisKK3RlbXBs
YXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9
Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCit9Owor
Citjb25zdCBDbGFzc0luZm8gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZVRhYmxl
VmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcikgfTsKKworSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCwgV1RGOjptb3ZlKGltcGwpKQoreworfQorCitKU09iamVjdCogSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2Jq
ZWN0KiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPih2bSwgZ2xvYmFs
T2JqZWN0KTsKK30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6
ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvcigpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPihiYXNlVmFsdWUpOwor
ICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworfQorCitib29sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yT3du
ZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFN
KGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sK
KyAgICBhdXRvKiBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IGpzQ2FzdDxK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihj
b250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yLT53cmFwcGVkKCksIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9S
TShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBjcmVhdGVOZXdXcmFwcGVyPEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QsIGltcGwpOworfQor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogaW1wbCkKK3sK
KyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAoSlNWYWx1
ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisK
KyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9p
bnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwpKTsKKyNpZiBQTEFURk9STShX
SU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
QFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVy
ID0gJl9aVFZON1dlYkNvcmUzM1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckVbMl07
CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQg
dG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRv
IHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIENPTVBJTEVfQVNTRVJUKF9faXNfcG9seW1v
cnBoaWMoVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKSwgVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yX2lzX25vdF9wb2x5bW9ycGhpYyk7CisjZW5kaWYKKyNlbmRpZgor
ICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFm
dGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGhh
cyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50
bHkgcmVxdWlyZSBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgeW91IHRvIG9wdCBv
dXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVW
YWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAg
UkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50
ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3I6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdy
YXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Kj4odmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThiNmIzOGM2NTkyOWMwY2FlMGMzMGQ0
YTEyNzE4ZDc3ZGQ4MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgK
QEAgLTAsMCArMSw4NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5j
bHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHR5cGVkZWYgSlNE
T01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gQmFzZTsKKyAgICBz
dGF0aWMgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgeworICAgICAg
ICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxs
LCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4o
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvcihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURjo6bW92ZShpbXBsKSk7CisgICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHRvV3JhcHBlZChKU0M6OkpT
VmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpOworCitwcm90ZWN0ZWQ6CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIH0KKworfTsKKworY2xhc3MgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdl
dCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CitpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3ImIGltcGwpIHsg
cmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNkNDJiM2VmZWEwNzkwYmM2ZWJjZDU4
M2VmYjQ1OTgwYjJkZWRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2Vi
Q29yZS9ET01PYmplY3QuaD4KKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoOTg3Nl81KQor
V0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IgOiBET01PYmplY3QKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWYxYTJlNzM0M2E1
NzIxN2FhMjE5YjU3OTlmMWQ0ZTM2YzU3Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLm1tCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKworI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisj
aW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbnRlcm5hbC5oIgor
I2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oIgorI2ltcG9ydCAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisj
aW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNp
bXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4K
KworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yCisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ig
KndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNv
cmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHdyYXBwZXItPl9pbnRlcm5h
bCkgOiAwOworfQorCitET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChX
ZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHZhbHVlKQoreworICAg
IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWlu
dGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYo
KTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBw
ZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50
ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Yz
ZmQ3Mzg0NmE3NzhlNWRhNDFjODVkODNiMWJjMWZiZTY2ZGNiYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I7Cit9CisKK1dFQkNPUkVfRVhQT1JUIFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgKik7CitXRUJDT1JFX0VYUE9SVCBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjc3MDNlNjkyZWExZGQxODM0NTM1YzI2OTBiZmY2OGUwNTQ4MDVkOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQ2Fub24gSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgSlNCdWlsdGluQ29uc3RydWN0b3IK
K10gaW50ZXJmYWNlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Cit9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21D
b25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dEN1c3RvbUNvbnN0cnVjdG9yLmlkbAppbmRleCAzYWMwY2QxYThjNWI5M2YwNTJjNTFiZGQ4ZTBm
MzczOTY1MThiNjEzLi5jYjNkZmNjMWNmM2EwZGNjMjg5Zjk2YzhlNDJmZTU2NmYyZDIxZjJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbApAQCAtMjgsOCArMjgsNiBAQAogCiBbCiAgICAg
Q3VzdG9tQ29uc3RydWN0b3IsCi0gICAgSlNCdWlsdEluLAogICAgIE5vSW50ZXJmYWNlT2JqZWN0
CiBdIGludGVyZmFjZSBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Qg
ewogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267299</attachid>
            <date>2015-12-14 09:18:44 -0800</date>
            <delta_ts>2015-12-14 09:20:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152171-20151214181807.patch</filename>
            <type>text/plain</type>
            <size>42482</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE2NWFmZjI0OGNhMDI5
ZWJhYzEwYjE3YjIzYzc1NDlmNWM3NzMxNS4uYzJlZDcwZDEwMTE2MjBiMTg0OTc1MzQyZjUyOThl
YTI4ODc0YzUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE1LTEyLTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgV2ViSURM
IGdlbmVyYXRvciBzaG91bGQgc3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgZm9yIEMrKyBjbGFzc2Vz
IHRvIGhhdmUgYSBKUyBCdWlsdGluIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWludHJvZHVjaW5nIEpTQnVpbHRpbkNvbnN0cnVj
dG9yIGtleXdvcmQgYXMgYSB3YXkgdG8gcnVuIGF1dG9tYXRpY2FsbHkgYSBKUyBidWlsdGluIGlu
aXRpYWxpemF0aW9uIGZ1bmN0aW9uCisgICAgICAgIHRvIHByb2Nlc3MgdGhlIGFyZ3VtZW50cyBw
YXNzZWQgdG8gdGhlIERPTSBDKysgY29uc3RydWN0b3IuCisKKyAgICAgICAgU3BlY2lhbGl6ZWQg
Y3JlYXRlSlNPYmplY3QgZm9yIHRob3NlIGNsYXNzZXMuCisKKyAgICAgICAgRml4aW5nIHR5cG8g
aW4gVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKElz
Q29uc3RydWN0YWJsZSk6CisgICAgICAgIChJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKEFkZEpTQnVpbHRpbkluY2x1ZGVzSWZOZWVkZWQpOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoR2V0SlNCdWlsdGluU2NvcGVOYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVj
dG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
b3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGVQ
cm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpm
aW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp3
cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkZWFsbG9jXSk6CisgICAgICAgIChjb3Jl
KToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsOgorCiAyMDE1LTEyLTE0ICBYYWJpZXIg
Um9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBF
eHBvc2UgUmVhZGFibGVTdHJlYW0gYW5kIHJlbGF0aXZlcyB0byBXb3JrZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggYjYz
YWYwMzdjNzZiMjczNmM4ZWVmZmUwYWVlMGUyODFiNGUyMjhjMi4uOTlmYjk3ZmE3NmM3MTU0OWJk
YzA3NWVlZDQxNTUwZGQxNjAwYzNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTk1NCwxNCArOTU0LDYgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTtcbiIpOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7CiAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKLQotICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNyZWF0ZShzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCwgJGltcGxUeXBlIiAuICI6OmNyZWF0ZSgpKTtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOwotICAgICAgICB9Ci0KICAg
ICB9CiAKICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKQEAgLTQ3MzUs
NyArNDcyNywyMCBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAk
Z2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBz
aGlmdDsKIAotICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKCRpbnRlcmZhY2Up
OworCisgICAgaWYgKElzSlNCdWlsdGluQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1
Y3RvciJ9KSB7CisgICAgICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgQ29uc3RydWN0
b3JDYWxsV2l0aAorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7Cit0ZW1w
bGF0ZTw+IEpTQzo6SlNPYmplY3QqICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVKU09i
amVjdCgpCit7CisgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6Y3JlYXRlKGdldERPTVN0cnVjdHVy
ZTwke2NsYXNzTmFtZX0+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3QoKSwgJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCkpOworfQorCitFTkQKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbXkgJGNvbnN0cnVjdG9yQ2xh
c3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NOYW1lfU5hbWVk
Q29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKIApAQCAtNTA0Miw3ICs1
MDQ3LDcgQEAgc3ViIElzQ29uc3RydWN0YWJsZQogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlm
dDsKIAotICAgIHJldHVybiBIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07CisgICAgcmV0dXJu
IEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifTsKIH0KIAogc3ViIEhlYWRlck5lZWRzUHJv
dG90eXBlRGVjbGFyYXRpb24KQEAgLTUwOTAsNiArNTA5NSw3IEBAIHN1YiBJc0pTQnVpbHRpbkNv
bnN0cnVjdG9yCiAKICAgICByZXR1cm4gMCBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifTsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluIn07CisgICAgcmV0dXJuIDEgaWYgJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn07CiAgICAg
cmV0dXJuIDA7CiB9CiAKQEAgLTUxMjAsNyArNTEyNiw3IEBAIHN1YiBBZGRKU0J1aWx0aW5JbmNs
dWRlc0lmTmVlZGVkKCkKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKLSAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbiJ9KSB7CisgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW4ifSB8fCAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifSkgewogICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaW50ZXJmYWNlLT5uYW1lIC4gIkJ1aWx0aW5zLmgiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMzOGFkMGRmZTgzYjAwNWQ2MmZjY2EwYzAwZjNkM2JlYTIxM2QyYWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEs
MTA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmgiCisKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJKU01haW5U
aHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgor
I2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNT
X1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3Jl
OjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Cit9IFdlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iq
IGtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9U
RVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUihyZXQpOworCisgICAgcmV0dXJu
IHdyYXBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iob2JqKTsKK30KKworV2ViQ29y
ZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9S
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5f
Q09OU1RSVUNUT1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19i
dWlsdGluX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhf
SlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWls
dGluX2NvbnN0cnVjdG9yX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0
cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jbGFzc193
aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlw
ZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAg
IFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNU
KG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChw
cml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25z
dHJ1Y3Rvcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9
IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3Ry
dWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jbGFz
c193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfaW5pdChX
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHJlcXVlc3QpCit7Cisg
ICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDY4NmRkYTAxYTJkZDIzMzE0OGMyOWUzNDMwMDdkNzgyOTgzNzE4Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiAgICAgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5f
Q09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SLCBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xB
U1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19X
SVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xB
U1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhf
SlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xh
c3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3Ry
dWN0b3JfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg3OGI2MjIyYzhmODU4ZmU4N2YxODE0YWM3YmJiYWQ5MTRlYzc1
NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOworV2ViS2l0RE9N
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CitXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODc0OWI1YTM4NmFhOWZmYzg5ZGEzMWMxMTE4ZDMwMDY5NzA0ODRhOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0
cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CisgICAgc3RhdGljIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit0eXBlZGVmIEpTQnVpbHRpbkNvbnN0cnVj
dG9yPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiBKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOworCit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmpl
Y3QqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0
ZUpTT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3I6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I+KGdsb2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxP
YmplY3QoKSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGUoKSk7Cit9
CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRQcm90b3R5
cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0p
OworfQorCit0ZW1wbGF0ZTw+IEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUoVk0mIHZt
KQoreworICAgIHJldHVybiB0ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbml0aWFs
aXplVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29kZUdlbmVyYXRvcih2bSk7Cit9
CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9Owor
CisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVW
YWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9
IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0
aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3Rv
dHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcikgfTsKKworSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgOiBKU0RP
TVdyYXBwZXI8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgV1RGOjptb3ZlKGltcGwpKQoreworfQorCitKU09iamVjdCogSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9
CisKK0pTT2JqZWN0KiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0UHJv
dG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPih2
bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvcigpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBi
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPihiYXNl
VmFsdWUpOworICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworSlNWYWx1ZSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworfQorCitib29sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93
bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29u
dGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9
IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGhhbmRsZS5zbG90
KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVy
V29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLT53cmFwcGVkKCksIGpzVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNp
ZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAi
QyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJu
ICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBjcmVhdGVOZXdXcmFw
cGVyPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QsIGlt
cGwpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
aW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBp
ZiAoSlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFs
VlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwpKTsKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFi
bGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUzM1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28g
eW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0
cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIENPTVBJTEVfQVNTRVJUKF9f
aXNfcG9seW1vcnBoaWMoVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKSwgVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2lzX25vdF9wb2x5bW9ycGhpYyk7CisjZW5kaWYK
KyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZl
IGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3
ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgeW91
IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNr
aXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0
aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZU
YWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisK
K1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKj4odmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThiNmIzOGM2NTkyOWMw
Y2FlMGMzMGQ0YTEyNzE4ZDc3ZGQ4MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01XcmFwcGVy
LmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNET01XcmFw
cGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHR5
cGVkZWYgSlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gQmFz
ZTsKKyAgICBzdGF0aWMgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNyZWF0
ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAg
eworICAgICAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvcihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURjo6bW92ZShpbXBsKSk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAg
ICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRl
UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGdldFByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHRvV3JhcHBl
ZChKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
KworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpOworCitwcm90ZWN0ZWQ6CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIH0KKworfTsKKworY2xh
c3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JPd25lciA6IHB1YmxpYyBKU0M6
OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQs
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFr
SGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4g
Jm93bmVyLmdldCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Im
IGltcGwpIHsgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNkNDJiM2VmZWEwNzkw
YmM2ZWJjZDU4M2VmYjQ1OTgwYjJkZWRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMo
OTg3Nl81KQorV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IgOiBET01PYmplY3QKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWYx
YTJlNzM0M2E1NzIxN2FhMjE5YjU3OTlmMWQ0ZTM2YzU3Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLm1tCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKworI2ltcG9ydCAiRE9NTm9kZUludGVy
bmFsLmgiCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbnRl
cm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRy
YXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9H
ZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRp
b24gRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yCisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChb
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9j
YXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHdyYXBwZXIt
Pl9pbnRlcm5hbCkgOiAwOworfQorCitET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHZhbHVl
KQoreworICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAg
ICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJu
YWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZh
bHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1
cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9ySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2YzZmQ3Mzg0NmE3NzhlNWRhNDFjODVkODNiMWJjMWZiZTY2ZGNiYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKQEAgLTAsMCArMSwzNCBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I7Cit9CisKK1dFQkNPUkVfRVhQT1JUIFdlYkNvcmU6OlRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgKik7CitXRUJDT1JFX0VYUE9SVCBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjc3MDNlNjkyZWExZGQxODM0NTM1YzI2OTBiZmY2OGUwNTQ4MDVkOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fub24gSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIHJlcXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgSlNCdWlsdGluQ29u
c3RydWN0b3IKK10gaW50ZXJmYWNlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7
Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAppbmRleCAzYWMwY2QxYThjNWI5M2YwNTJj
NTFiZGQ4ZTBmMzczOTY1MThiNjEzLi5jYjNkZmNjMWNmM2EwZGNjMjg5Zjk2YzhlNDJmZTU2NmYy
ZDIxZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbApAQCAtMjgsOCArMjgsNiBAQAog
CiBbCiAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgSlNCdWlsdEluLAogICAgIE5vSW50ZXJm
YWNlT2JqZWN0CiBdIGludGVyZmFjZSBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZh
Y2VPYmplY3QgewogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267300</attachid>
            <date>2015-12-14 09:20:30 -0800</date>
            <delta_ts>2015-12-14 23:59:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152171-20151214181953.patch</filename>
            <type>text/plain</type>
            <size>41780</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTE2NWFmZjI0OGNhMDI5
ZWJhYzEwYjE3YjIzYzc1NDlmNWM3NzMxNS4uYzJlZDcwZDEwMTE2MjBiMTg0OTc1MzQyZjUyOThl
YTI4ODc0YzUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE1LTEyLTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgV2ViSURM
IGdlbmVyYXRvciBzaG91bGQgc3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgZm9yIEMrKyBjbGFzc2Vz
IHRvIGhhdmUgYSBKUyBCdWlsdGluIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWludHJvZHVjaW5nIEpTQnVpbHRpbkNvbnN0cnVj
dG9yIGtleXdvcmQgYXMgYSB3YXkgdG8gcnVuIGF1dG9tYXRpY2FsbHkgYSBKUyBidWlsdGluIGlu
aXRpYWxpemF0aW9uIGZ1bmN0aW9uCisgICAgICAgIHRvIHByb2Nlc3MgdGhlIGFyZ3VtZW50cyBw
YXNzZWQgdG8gdGhlIERPTSBDKysgY29uc3RydWN0b3IuCisKKyAgICAgICAgU3BlY2lhbGl6ZWQg
Y3JlYXRlSlNPYmplY3QgZm9yIHRob3NlIGNsYXNzZXMuCisKKyAgICAgICAgRml4aW5nIHR5cG8g
aW4gVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKElz
Q29uc3RydWN0YWJsZSk6CisgICAgICAgIChJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKEFkZEpTQnVpbHRpbkluY2x1ZGVzSWZOZWVkZWQpOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoR2V0SlNCdWlsdGluU2NvcGVOYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZSk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVj
dG9yKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0
aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2luaXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yUHJvdG90eXBlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
b3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplRXhlY3V0YWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGVQ
cm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpm
aW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp3
cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBkZWFsbG9jXSk6CisgICAgICAgIChjb3Jl
KToKKyAgICAgICAgKGtpdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0Q3VzdG9tQ29uc3RydWN0b3IuaWRsOgorCiAyMDE1LTEyLTE0ICBYYWJpZXIg
Um9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgW1N0cmVhbXMgQVBJXSBF
eHBvc2UgUmVhZGFibGVTdHJlYW0gYW5kIHJlbGF0aXZlcyB0byBXb3JrZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZDA0
MTRjNTMyMjUxM2EzMDQ2ZTJjYzczZTU5MjY2NzljM2IzMTY3NS4uOTlmYjk3ZmE3NmM3MTU0OWJk
YzA3NWVlZDQxNTUwZGQxNjAwYzNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTQ3MjcsNyArNDcyNywyMCBAQCBzdWIg
R2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkZ2VuZXJhdGluZ05hbWVkQ29u
c3RydWN0b3IgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAotICAgIHJldHVy
biBpZiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpOworCisgICAgaWYgKElzSlNC
dWlsdGluQ29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7CisgICAgICAg
ICAgICAjIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgQ29uc3RydWN0b3JDYWxsV2l0aAorICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmpl
Y3QqICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCgpCit7CisgICAgcmV0
dXJuICR7Y2xhc3NOYW1lfTo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTwke2NsYXNzTmFtZX0+KGds
b2JhbE9iamVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgJHtp
bnRlcmZhY2VOYW1lfTo6Y3JlYXRlKCkpOworfQorCitFTkQKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgbXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRp
bmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7
Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKIApAQCAtNTAzNCw3ICs1MDQ3LDcgQEAgc3ViIElzQ29u
c3RydWN0YWJsZQogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKIAotICAgIHJldHVybiBI
YXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07CisgICAgcmV0dXJuIEhhc0N1c3RvbUNvbnN0cnVj
dG9yKCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25z
dHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0
cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9y
VGVtcGxhdGUifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGlu
Q29uc3RydWN0b3IifTsKIH0KIAogc3ViIEhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24K
QEAgLTUwODIsNiArNTA5NSw3IEBAIHN1YiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yCiAKICAgICBy
ZXR1cm4gMCBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3Ry
dWN0b3IifTsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSlNCdWlsdGluIn07CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn07CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAg
LTUxMTIsNyArNTEyNiw3IEBAIHN1YiBBZGRKU0J1aWx0aW5JbmNsdWRlc0lmTmVlZGVkKCkKIHsK
ICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbiJ9KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW4ifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifSkgewogICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygkaW50ZXJmYWNlLT5uYW1lIC4gIkJ1aWx0aW5zLmgiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzOGFkMGRmZTgz
YjAwNWQ2MmZjY2EwYzAwZjNkM2JlYTIxM2QyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJD
U1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgImdvYmplY3Qv
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNf
QlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6
OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNf
QlVJTFRJTl9DT05TVFJVQ1RPUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3Iob2JqKTsKK30KKworV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0
PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvcihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IsICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9y
LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
Y2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJV
Q1RPUl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJr
aXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1Rf
Q0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7Cisg
ICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jbGFzc19pbml0
KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9j
bGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3I7CisgICAgZ29iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5f
Y29uc3RydWN0b3JfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9j
bGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfaW5pdChXZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7
CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4
NmRkYTAxYTJkZDIzMzE0OGMyOWUzNDMwMDdkNzgyOTgzNzE4NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQ
SQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NM
QVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rl
c3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
Q0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJ
VEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRI
X0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNf
QlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09O
U1RSVUNUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJV
Q1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MgeworICAgIFdlYktpdERP
TU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9p
ZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg3OGI2MjIyYzhmODU4ZmU4N2YxODE0YWM3YmJiYWQ5MTRlYzc1NzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisKKyNpbmNsdWRl
ICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yKik7CitXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNv
cmUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc0OWI1YTM4NmFhOWZm
Yzg5ZGEzMWMxMTE4ZDMwMDY5NzA0ODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Cit9OworCit0eXBlZGVmIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOworCit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmplY3QqIEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZUpTT2JqZWN0KCkKK3sKKyAg
ICByZXR1cm4gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZShnZXRE
T01TdHJ1Y3R1cmU8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9i
amVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGUoKSk7Cit9CisKK3RlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmco
QVNDSUlMaXRlcmFsKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSkpLCBSZWFk
T25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+
IEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUoVk0mIHZtKQoreworICAgIHJldHVybiB0
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbml0aWFsaXplVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29kZUdlbmVyYXRvcih2bSk7Cit9CisKK3RlbXBsYXRlPD4gY29u
c3QgQ2xhc3NJbmZvIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAg
eyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCit9OworCitjb25zdCBD
bGFzc0luZm8gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OnNf
aW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAq
dGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvcikgfTsKKworSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGOjpt
b3ZlKGltcGwpKQoreworfQorCitKU09iamVjdCogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBl
PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsK
K30KKwordm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveShK
U0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPihiYXNlVmFsdWUpOworICAgIGlmICgh
ZG9tT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkp
KTsKK30KKworSlNWYWx1ZSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOworfQorCit2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
fQorCitib29sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRv
KiBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAg
ICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsK
KyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yLT53cmFwcGVkKCksIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsK
K30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAo
KmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lk
KiBfWlRWTjdXZWJDb3JlMzNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JFW107IH0K
KyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBjcmVhdGVOZXdXcmFwcGVyPEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICBpZiAo
IWltcGwpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQg
PSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+
KGdsb2JhbE9iamVjdCwgaW1wbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAg
dm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19p
ZGVudGlmaWVyKCI/P183VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQFdlYkNvcmVA
QDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZO
N1dlYkNvcmUzM1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckVbMl07CisjaWYgQ09N
UElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRo
ZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRl
cmZhY2UgZGVmaW5pdGlvbgorICAgIENPTVBJTEVfQVNTRVJUKF9faXNfcG9seW1vcnBoaWMoVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yX2lzX25vdF9wb2x5bW9ycGhpYyk7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElm
IHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUg
YnVnLCBvcgorICAgIC8vIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBoYXMgc3Vi
Y2xhc3Nlcy4gSWYgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGhhcyBzdWJjbGFz
c2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWly
ZSBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgeW91IHRvIG9wdCBvdXQgb2YgYmlu
ZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9u
IGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9B
U1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2Vu
ZGlmCisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRv
V3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4odmFsdWUp
KQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThiNmIzOGM2NTkyOWMwY2FlMGMzMGQ0YTEyNzE4ZDc3
ZGQ4MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCAr
MSw4NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVy
PFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gQmFzZTsKKyAgICBzdGF0aWMgSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURjo6bW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFBy
b3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHRvV3JhcHBlZChKU0M6OkpTVmFsdWUpOwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCitw
cm90ZWN0ZWQ6CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkK
KyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOworICAgIH0KKworfTsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBw
ZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CitpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3ImIGltcGwpIHsgcmV0dXJuIHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNkNDJiM2VmZWEwNzkwYmM2ZWJjZDU4M2VmYjQ1OTgw
YjJkZWRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0w
LDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01P
YmplY3QuaD4KKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoOTg3Nl81KQorV0VCQ09SRV9F
WFBPUlQgQGludGVyZmFjZSBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBE
T01PYmplY3QKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWYxYTJlNzM0M2E1NzIxN2FhMjE5
YjU3OTlmMWQ0ZTM2YzU3Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLm1tCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IuaCIKKworI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAi
RXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgor
I2ltcG9ydCAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJU
aHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldl
YlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmlu
ZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yCisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJD
b3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKndyYXBwZXIp
Cit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOwor
fQorCitET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHZhbHVlKQoreworICAgIFdlYkNvcmVU
aHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
ICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVybiBbW3dyYXBw
ZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yICp3cmFwcGVyID0gW1tET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9j
YXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBh
ZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3Jl
bGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2YzZmQ3Mzg0NmE3
NzhlNWRhNDFjODVkODNiMWJjMWZiZTY2ZGNiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckludGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxXZWJDb3JlL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I7
Cit9CisKK1dFQkNPUkVfRVhQT1JUIFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKik7CitX
RUJDT1JFX0VYUE9SVCBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChX
ZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc3MDNl
NjkyZWExZGQxODM0NTM1YzI2OTBiZmY2OGUwNTQ4MDVkOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQ2Fub24gSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJl
cXVpcmVkIHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisg
KiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitbCisgICAgSlNCdWlsdGluQ29uc3RydWN0b3IKK10gaW50ZXJm
YWNlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21Db25zdHJ1Y3Rv
ci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNv
bnN0cnVjdG9yLmlkbAppbmRleCAzYWMwY2QxYThjNWI5M2YwNTJjNTFiZGQ4ZTBmMzczOTY1MThi
NjEzLi5jYjNkZmNjMWNmM2EwZGNjMjg5Zjk2YzhlNDJmZTU2NmYyZDIxZjJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVj
dG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1
c3RvbUNvbnN0cnVjdG9yLmlkbApAQCAtMjgsOCArMjgsNiBAQAogCiBbCiAgICAgQ3VzdG9tQ29u
c3RydWN0b3IsCi0gICAgSlNCdWlsdEluLAogICAgIE5vSW50ZXJmYWNlT2JqZWN0CiBdIGludGVy
ZmFjZSBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QgewogfTsKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267350</attachid>
            <date>2015-12-15 00:00:06 -0800</date>
            <delta_ts>2015-12-15 00:55:49 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-152171-20151215085928.patch</filename>
            <type>text/plain</type>
            <size>39437</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWMyMDdjNDEzOGY0ZTA1
NDg1YTdiNWFlMWJhMGFlN2ZkNDIwMDcxZC4uYmY3ODFhNDVhYzVmYTEwYmU4OThmM2M2ODk0MzA1
NDdhMzk2NmZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTEyLTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgV2ViSURM
IGdlbmVyYXRvciBzaG91bGQgc3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgZm9yIEMrKyBjbGFzc2Vz
IHRvIGhhdmUgYSBKUyBCdWlsdGluIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBSZWludHJvZHVjaW5nIEpTQnVpbHRpbkNvbnN0cnVjdG9y
IGtleXdvcmQgYXMgYSB3YXkgdG8gcnVuIGF1dG9tYXRpY2FsbHkgYSBKUyBidWlsdGluIGluaXRp
YWxpemF0aW9uIGZ1bmN0aW9uCisgICAgICAgIHRvIHByb2Nlc3MgdGhlIGFyZ3VtZW50cyBwYXNz
ZWQgdG8gdGhlIERPTSBDKysgY29uc3RydWN0b3IuCisKKyAgICAgICAgU3BlY2lhbGl6ZWQgY3Jl
YXRlSlNPYmplY3QgZm9yIHRob3NlIGNsYXNzZXMuCisKKyAgICAgICAgRml4aW5nIHR5cG8gaW4g
VGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlkbC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRpbmcg
dGVzdHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToK
KyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKElzQ29u
c3RydWN0YWJsZSk6CisgICAgICAgIChJc0pTQnVpbHRpbkNvbnN0cnVjdG9yKToKKyAgICAgICAg
KEFkZEpTQnVpbHRpbkluY2x1ZGVzSWZOZWVkZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLm1tOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbnRlcm5h
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGw6CisKIDIwMTUt
MTItMTQgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291
cmNlVXNhZ2VPdmVybGF5IHNob3VsZCBzaG93IEdDIHRpbWVycy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggZDA0MTRjNTMy
MjUxM2EzMDQ2ZTJjYzczZTU5MjY2NzljM2IzMTY3NS4uOTlmYjk3ZmE3NmM3MTU0OWJkYzA3NWVl
ZDQxNTUwZGQxNjAwYzNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTQ3MjcsNyArNDcyNywyMCBAQCBzdWIgR2VuZXJh
dGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0
b3IgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAotICAgIHJldHVybiBpZiBJ
c0pTQnVpbHRpbkNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpOworCisgICAgaWYgKElzSlNCdWlsdGlu
Q29uc3RydWN0b3IoJGludGVyZmFjZSkpIHsKKyAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAj
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgQ29uc3RydWN0b3JDYWxsV2l0aAorICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmplY3QqICR7
Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGVKU09iamVjdCgpCit7CisgICAgcmV0dXJuICR7
Y2xhc3NOYW1lfTo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTwke2NsYXNzTmFtZX0+KGdsb2JhbE9i
amVjdCgpLT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgJHtpbnRlcmZh
Y2VOYW1lfTo6Y3JlYXRlKCkpOworfQorCitFTkQKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQogCiAgICAgbXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1l
ZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yIjsKIApAQCAtNTAzNCw3ICs1MDQ3LDcgQEAgc3ViIElzQ29uc3RydWN0
YWJsZQogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKIAotICAgIHJldHVybiBIYXNDdXN0
b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b25zdHJ1Y3RvclRlbXBsYXRlIn07CisgICAgcmV0dXJuIEhhc0N1c3RvbUNvbnN0cnVjdG9yKCRp
bnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3Rv
ciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9y
In0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxh
dGUifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3Ry
dWN0b3IifTsKIH0KIAogc3ViIEhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24KQEAgLTUw
ODIsNiArNTA5NSw3IEBAIHN1YiBJc0pTQnVpbHRpbkNvbnN0cnVjdG9yCiAKICAgICByZXR1cm4g
MCBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3Ii
fTsKICAgICByZXR1cm4gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNC
dWlsdGluIn07CisgICAgcmV0dXJuIDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn07CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUxMTIs
NyArNTEyNiw3IEBAIHN1YiBBZGRKU0J1aWx0aW5JbmNsdWRlc0lmTmVlZGVkKCkKIHsKICAgICBt
eSAkaW50ZXJmYWNlID0gc2hpZnQ7CiAKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQnVpbHRpbiJ9KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJKU0J1aWx0aW4ifSB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSlNCdWlsdGluQ29uc3RydWN0b3IifSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygk
aW50ZXJmYWNlLT5uYW1lIC4gIkJ1aWx0aW5zLmgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzOGFkMGRmZTgzYjAwNWQ2
MmZjY2EwYzAwZjNkM2JlYTIxM2QyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJDU1NJbXBv
cnRSdWxlLmgiCisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVy
dFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJ
Tl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJV
Q1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvclByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJ
Tl9DT05TVFJVQ1RPUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3Iob2JqKTsKK30KKworV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3RvciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1Rf
Q0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yLCBXRUJL
SVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nf
d2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9H
RVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9t
X3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1Nf
V0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJp
di0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBv
YmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jbGFzc19pbml0KFdlYktp
dERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKSk7
CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9jbGFzc193
aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3Ry
dWN0b3JfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jbGFzc193
aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfaW5pdChXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DTEFT
U19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAg
bmV3IChwcml2KSBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4NmRkYTAx
YTJkZDIzMzE0OGMyOWUzNDMwMDdkNzgyOTgzNzE4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJ
VEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xh
c3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1Nf
V0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNf
QlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JV
SUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNU
UlVDVE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJ
Tl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNU
T1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNU
UlVDVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwg
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQorCitzdHJ1
Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7CisgICAgV2Vi
S2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
dGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9pZCk7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8K
KyNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3OGI2
MjIyYzhmODU4ZmU4N2YxODE0YWM3YmJiYWQ5MTRlYzc1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiB3cmFw
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciopOworV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Kik7CitXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUoV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc0OWI1YTM4NmFhOWZmYzg5ZGEz
MWMxMTE4ZDMwMDY5NzA0ODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQnVp
bHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
clByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVy
biBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworCit0eXBlZGVmIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yPiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yOworCit0ZW1wbGF0ZTw+IEpTQzo6SlNPYmplY3QqIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0ZUpTT2JqZWN0KCkKK3sKKyAgICByZXR1
cm4gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZShnZXRET01TdHJ1
Y3R1cmU8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2JhbE9iamVjdCgp
LT52bSgpLCAqZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpjcmVhdGUoKSk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlM
aXRlcmFsKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSkpLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IEZ1bmN0
aW9uRXhlY3V0YWJsZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUoVk0mIHZtKQoreworICAgIHJldHVybiB0ZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbml0aWFsaXplVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ29kZUdlbmVyYXRvcih2bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90
b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29u
c3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGU6OnNfaW5mbyA9
IHsgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7
Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6c19pbmZvID0geyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvcikgfTsKKworSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OkpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGOjptb3ZlKGlt
cGwpKQoreworfQorCitKU09iamVjdCogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3I6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90
eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwor
dm9pZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEpTT2JqZWN0KiBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCit7CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUqPihiYXNlVmFsdWUpOworICAgIGlmICghZG9tT2Jq
ZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30K
KworSlNWYWx1ZSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkp
OworfQorCit2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCiti
b29sIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAg
VU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRv
JiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1
bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LT53cmFwcGVkKCksIGpzVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKK30KKwor
I2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0
IF9faWRlbnRpZmllcigiPz9fN1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckBXZWJD
b3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRW
TjdXZWJDb3JlMzNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JFW107IH0KKyNlbmRp
ZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIHJldHVybiBjcmVhdGVOZXdXcmFwcGVyPEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBnZXRF
eGlzdGluZ1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KGdsb2Jh
bE9iamVjdCwgaW1wbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyNpZiBFTkFCTEUoQklO
RElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KGltcGwpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCog
ZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlm
aWVyKCI/P183VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQFdlYkNvcmVAQDZCQCIp
KTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNv
cmUzM1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckVbMl07CisjaWYgQ09NUElMRVIo
Q0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAg
IC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2Ug
ZGVmaW5pdGlvbgorICAgIENPTVBJTEVfQVNTRVJUKF9faXNfcG9seW1vcnBoaWMoVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKSwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yX2lzX25vdF9wb2x5bW9ycGhpYyk7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBo
aXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBv
cgorICAgIC8vIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciBoYXMgc3ViY2xhc3Nl
cy4gSWYgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIGhhcyBzdWJjbGFzc2VzIHRo
YXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBo
YXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJp
YnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQo
YWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisg
ICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3I+KGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBl
ZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4odmFsdWUpKQorICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYThiNmIzOGM2NTkyOWMwY2FlMGMzMGQ0YTEyNzE4ZDc3ZGQ4MmI1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj4geworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyPFRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4oZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApKSBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
ICpnbG9iYWxPYmplY3QsIFdURjo6bW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGdldFByb3RvdHlw
ZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHRvV3JhcHBlZChKU0M6OkpTVmFsdWUpOworICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRD
b25zdHJ1Y3RvcihKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCitwcm90ZWN0
ZWQ6CisgICAgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1
cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3I+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSkKKyAgICB7
CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOworICAgIH0KKworfTsKKworY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25l
cihET01XcmFwcGVyV29ybGQmLCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3ImIGltcGwpIHsgcmV0dXJuIHRvSlMoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgJmltcGwpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKik7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTNkNDJiM2VmZWEwNzkwYmM2ZWJjZDU4M2VmYjQ1OTgwYjJkZWRk
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEs
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3Qu
aD4KKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoOTg3Nl81KQorV0VCQ09SRV9FWFBPUlQg
QGludGVyZmFjZSBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgOiBET01PYmpl
Y3QKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWYxYTJlNzM0M2E1NzIxN2FhMjE5YjU3OTlm
MWQ0ZTM2YzU3Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLm1t
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJE
T01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuaCIKKworI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0
aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9y
dCAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJUaHJlYWRD
aGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlw
dE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBM
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yCisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2Jq
Q1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChf
aW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOwor
fQorCitAZW5kCisKK1dlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
Y29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKndyYXBwZXIpCit7Cisg
ICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQorCitE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3JlOjpUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHZhbHVlKQoreworICAgIFdlYkNvcmVUaHJlYWRW
aW9sYXRpb25DaGVja1JvdW5kT25lKCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBpZiAoRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yICp3cmFw
cGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVybiBbW3dyYXBwZXIgcmV0
YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yICp3cmFwcGVyID0gW1tET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgYWxs
b2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERP
TU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01X
cmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2Vd
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9ySW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2YzZmQ3Mzg0NmE3NzhlNWRh
NDFjODVkODNiMWJjMWZiZTY2ZGNiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvckludGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJD
b3JlL0RPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I7Cit9CisK
K1dFQkNPUkVfRVhQT1JUIFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciogY29yZShET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKik7CitXRUJDT1JF
X0VYUE9SVCBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgKmtpdChXZWJDb3Jl
OjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc3MDNlNjkyZWEx
ZGQxODM0NTM1YzI2OTBiZmY2OGUwNTQ4MDVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ2Fu
b24gSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
LCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIHJlcXVpcmVk
IHRvIGJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5P
TiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAq
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCitbCisgICAgSlNCdWlsdGluQ29uc3RydWN0b3IKK10gaW50ZXJmYWNlIFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21Db25zdHJ1Y3Rvci5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVj
dG9yLmlkbAppbmRleCAzYWMwY2QxYThjNWI5M2YwNTJjNTFiZGQ4ZTBmMzczOTY1MThiNjEzLi5j
YjNkZmNjMWNmM2EwZGNjMjg5Zjk2YzhlNDJmZTU2NmYyZDIxZjJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNvbnN0cnVjdG9yLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEN1c3RvbUNv
bnN0cnVjdG9yLmlkbApAQCAtMjgsOCArMjgsNiBAQAogCiBbCiAgICAgQ3VzdG9tQ29uc3RydWN0
b3IsCi0gICAgSlNCdWlsdEluLAogICAgIE5vSW50ZXJmYWNlT2JqZWN0CiBdIGludGVyZmFjZSBU
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QgewogfTsKLQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>