<?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>33672</bug_id>
          
          <creation_ts>2010-01-14 06:18:32 -0800</creation_ts>
          <short_desc>[Android] JavaInstance uses JSC-specific types</short_desc>
          <delta_ts>2010-01-18 10:15:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</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>
          <dependson>33710</dependson>
    
    <dependson>33792</dependson>
          <blocked>32154</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>abarth</cc>
    
    <cc>android-webkit-unforking</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dimich</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180696</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-14 06:18:32 -0800</bug_when>
    <thetext>JavaInstance, defined in WebCore/bridge/jni/jni_instance.h, uses JSC-specific types.
This causes problems on Android, where we can build with JSC or V8.
See Bug 32154, which this bug blocks.

The JSC-specific version of JavaInstance should be moved to a different location, to
keep WebCore/bridge/jni for common code can be used with both JSC and V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180704</commentid>
    <comment_count>1</comment_count>
      <attachid>46563</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-14 06:50:54 -0800</bug_when>
    <thetext>Created attachment 46563
Patch 1 for Bug 33672

Moves JSC-specific JavaInstance from bridge/jni/jni_instance to bridge/jni/jsc/jni_instance_jsc

A later patch will add the V8 version of JavaInstance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180804</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-14 11:09:59 -0800</bug_when>
    <thetext>If you&apos;re making a new file, its name should be the name of the class. So it should be JavaInstance.h, not jni_instance.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181008</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-14 16:59:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; If you&apos;re making a new file, its name should be the name of the class. So it
&gt; should be JavaInstance.h, not jni_instance.h.
OK - I&apos;d stuck with those names to match the style of the existing files.

The new files I&apos;m adding are jni_instance_jsc.[cpp|h], as they provide the JSC-specific version of JavaInstance. A V8-specific version will be added in the future. Is JavaInstanceJsc.[cpp|h] the correct file name, or maybe JSJavaInstance.[cpp|h] to match the style used for the JSC bindings?

On a related note, when moving around existing code, should I fix the style, or leave it as-is to minimize the diff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181031</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-14 17:27:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Is JavaInstanceJsc.[cpp|h] the correct file name, or maybe
&gt; JSJavaInstance.[cpp|h] to match the style used for the JSC bindings?

Given the use of the abbreviate “JSC” to refer to WebKit’s built-in JavaScript engine (a decision I wasn’t consulted on), the right name would be JavaInstanceJSC.cpp.

In my opinion the JS prefix is naming the JavaScript language to differentiate the binding from the core DOM class it’s a binding for, rather than naming a particular JavaScript engine.

&gt; On a related note, when moving around existing code, should I fix the style, or
&gt; leave it as-is to minimize the diff?

I typically leave code as-is, using &quot;svn move&quot; to preserve the history, but it depends on the quantity of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181049</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-14 17:57:34 -0800</bug_when>
    <thetext>Based on our other naming conventions WebCore/bridge/jni/jsc/ should be called WebCore/bridge/jni/js/.  There&apos;s only two files in there currently.  Maybe it&apos;s not too late to correct this?

The distinction between JS / JSC is confusing.  I&apos;m not entirely sure we&apos;re consistent, but WebCore/bindings/js seems like the precedent here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181197</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-15 04:16:55 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Based on our other naming conventions WebCore/bridge/jni/jsc/ should be called
&gt; WebCore/bridge/jni/js/.  There&apos;s only two files in there currently.  Maybe it&apos;s
&gt; not too late to correct this?
Ok, I&apos;ve opened Bug 33710 to address this.

This brought up the fact that all of the jni_foo files in WebCore/bridge/jni should be renamed. See Bug 33712. Maybe its best to address this before I start renaming the JSC-specific ones in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181299</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-15 12:03:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Based on our other naming conventions WebCore/bridge/jni/jsc/ should be called
&gt; WebCore/bridge/jni/js/.  There&apos;s only two files in there currently.  Maybe it&apos;s
&gt; not too late to correct this?
&gt; 
&gt; The distinction between JS / JSC is confusing.  I&apos;m not entirely sure we&apos;re
&gt; consistent, but WebCore/bindings/js seems like the precedent here.

JS has always been intended to mean the JavaScript language, not a particular engine. The bindings/js directory meant “bindings for JavaScript”, not “bindings for JavaScriptCore”, and predates the idea of putting support for a non-WebKit JavaScript engine into the WebKit tree.

When engineers at Google added support for V8, the folks doing that chose to use a V8 prefix wherever the JS code previously used a JS prefix. This was not a discussion I was involved in, but I see the appeal of this terse scheme. That could make it seem like “JS” is the name of WebKit’s own JavaScript engine.

JSC is the namespace we used for JavaScript engine code in the JavaScriptCore directories. When talking about V8 vs. the WebKit built-in JavaScript, someone decided to use JSC and JavaScriptCore as the name of the engine. I think that’s a bit more logical than trying to redefine the term “JS” to mean a particular engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181302</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-15 12:06:17 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; This brought up the fact that all of the jni_foo files in WebCore/bridge/jni
&gt; should be renamed. See Bug 33712. Maybe its best to address this before I start
&gt; renaming the JSC-specific ones in this bug.

There’s a difference between renaming an existing file and adding a new one. I would prefer not to add any additional files with an old-style name even if we haven’t yet renamed the old ones.

By the way, the term “bridge” is a more modern term for the code here. The older code uses the prefix “Runtime” and the term “RuntimeObject”. I find those terms quite difficult to comprehend, and so it’s more than just file renaming that would need to be done.

Those of us at Apple have been leaving this code alone, especially the Java binding. We do not have particularly good testing coverage for it. But given the critical importance of Java to Android, I could see how you might want to put more effort into maintaining and improving the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181411</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-15 15:00:24 -0800</bug_when>
    <thetext>It would make this way easier to review if it was split in 2 patches: 

- &apos;svn mv&apos; patch that just moves files
- all the variables renamings etc, like _class-&gt;m_class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181808</commentid>
    <comment_count>10</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-18 03:45:01 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Based on our other naming conventions WebCore/bridge/jni/jsc/ should be called
&gt; &gt; WebCore/bridge/jni/js/.  There&apos;s only two files in there currently.  Maybe it&apos;s
&gt; &gt; not too late to correct this?
&gt; Ok, I&apos;ve opened Bug 33710 to address this.
I&apos;ve closed this as won&apos;t fix based on Darin&apos;s comments.

&gt; This brought up the fact that all of the jni_foo files in WebCore/bridge/jni
&gt; should be renamed. See Bug 33712. Maybe its best to address this before I start
&gt; renaming the JSC-specific ones in this bug.
I&apos;ll leave the general renaming in Bug 33712 for later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181812</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-18 03:53:47 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; It would make this way easier to review if it was split in 2 patches: 
&gt; 
&gt; - &apos;svn mv&apos; patch that just moves files
&gt; - all the variables renamings etc, like _class-&gt;m_class
OK, I&apos;ll send a patch to do just the renaming and have opened Bug 33792 to do the style fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181813</commentid>
    <comment_count>12</comment_count>
      <attachid>46810</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-18 03:54:23 -0800</bug_when>
    <thetext>Created attachment 46810
Patch 2 for Bug 33672

Renames WebCore/bridge/jni/jni_instance to WebCore/bridge/jni/jsc/JavaInstanceJSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181815</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-18 03:59:46 -0800</bug_when>
    <thetext>Attachment 46810 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
.cpp:170:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:180:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:179:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:218:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:217:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:224:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:228:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:229:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:231:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:233:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:235:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:286:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:297:  Declaration has space between type name and * in JavaClass *aClass  [whitespace/declaration] [3]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:315:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:315:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:321:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:323:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:325:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:325:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:326:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:327:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:330:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:331:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/jsc/JavaInstanceJSC.cpp:332:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 50


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181905</commentid>
    <comment_count>14</comment_count>
      <attachid>46810</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-18 09:54:28 -0800</bug_when>
    <thetext>Comment on attachment 46810
Patch 2 for Bug 33672

Thanks for addressing Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181911</commentid>
    <comment_count>15</comment_count>
      <attachid>46810</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-18 10:06:31 -0800</bug_when>
    <thetext>Comment on attachment 46810
Patch 2 for Bug 33672

Will land manually to preserve svn history</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181915</commentid>
    <comment_count>16</comment_count>
      <attachid>46810</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-18 10:15:31 -0800</bug_when>
    <thetext>Comment on attachment 46810
Patch 2 for Bug 33672

Clearing flags on attachment: 46810

Committed r53412: &lt;http://trac.webkit.org/changeset/53412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181916</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-18 10:15:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46563</attachid>
            <date>2010-01-14 06:50:54 -0800</date>
            <delta_ts>2010-01-18 03:54:23 -0800</delta_ts>
            <desc>Patch 1 for Bug 33672</desc>
            <filename>javaInstance.txt</filename>
            <type>text/plain</type>
            <size>44748</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzI2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDEtMTQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSlNDLXNwZWNpZmljIHZlcnNpb24gb2YgSmF2YUluc3RhbmNlIGZyb20gYnJpZGdlL2pu
aS9qbmlfaW5zdGFuY2UgdG8gYnJpZGdlL2puaS9qc2Mvam5pX2luc3RhbmNlX2pzYworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM2NzIKKworICAgICAg
ICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBBbmRyb2lkLmpz
Y2JpbmRpbmdzLm1rOiBNb2RpZmllZC4gUmVtb3ZlZCBqbmlfaW5zdGFuY2UuY3BwIGFuZCBhZGRl
ZCBqbmlfaW5zdGFuY2VfanNjLmNwcAorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOjogTW9kaWZp
ZWQuIFJlbW92ZWQgam5pX2luc3RhbmNlLmggYW5kIGFkZGVkIGpuaV9pbnN0YW5jZV9qc2MuaAor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTW9kaWZpZWQuIFJl
bW92ZWQgam5pX2luc3RhbmNlLltjcHB8aF0gYW5kIGFkZGVkIGpuaV9pbnN0YW5jZV9qc2MuW2Nw
cHxoXQorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW06IE1vZGlm
aWVkLiBJbmNsdWRlcyBqbmlfY2xhc3NfanNjLmgKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9p
bnN0YW5jZS5jcHA6IFJlbW92ZWQuIE1vdmVkIHRvIGpuaV9pbnN0YW5jZV9qc2MuY3BwCisgICAg
ICAgICogYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaDogUmVtb3ZlZC4gTW92ZWQgdG8gam5pX2lu
c3RhbmNlX2pzYy5oCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6IE1vZGlm
aWVkLgorICAgICAgICAoSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKTogTW9k
aWZpZWQuIFVwZGF0ZWQgdG8gdXNlIHJlbmFtZWQgSmF2YUluc3RhbmNlOjptX2luc3RhbmNlCisg
ICAgICAgIChKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKTogTW9kaWZpZWQu
IFVwZGF0ZWQgdG8gdXNlIHJlbmFtZWQgSmF2YUluc3RhbmNlOjptX2luc3RhbmNlCisgICAgICAg
IChKYXZhQXJyYXk6OkphdmFBcnJheSk6IE1vZGlmaWVkLiBVcGRhdGVkIHRvIHVzZSByZW5hbWVk
IEphdmFJbnN0YW5jZTo6bV9pbnN0YW5jZQorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3J1bnRp
bWUuaDogTW9kaWZpZWQuCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhQXJyYXk6OmphdmFB
cnJheSk6IE1vZGlmaWVkLiBVcGRhdGVkIHRvIHVzZSByZW5hbWVkIEphdmFJbnN0YW5jZTo6bV9p
bnN0YW5jZQorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL2puaV9pbnN0YW5jZV9qc2MuY3BwOiBB
ZGRlZC4gTW92ZWQgZnJvbSBqbmlfaW5zdGFuY2UuY3BwCisgICAgICAgIChKYXZhSW5zdGFuY2U6
OkphdmFJbnN0YW5jZSk6CisgICAgICAgIChKYXZhSW5zdGFuY2U6On5KYXZhSW5zdGFuY2UpOgor
ICAgICAgICAoSmF2YUluc3RhbmNlOjp2aXJ0dWFsQmVnaW4pOgorICAgICAgICAoSmF2YUluc3Rh
bmNlOjp2aXJ0dWFsRW5kKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MpOgorICAg
ICAgICAoSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChKYXZhSW5zdGFuY2U6
Om51bWJlclZhbHVlKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKToKKyAg
ICAgICAgKEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKToKKyAgICAgICAgKEphdmFJbnN0YW5j
ZTo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6dmFsdWVPZik6CisgICAg
ICAgIChKT2JqZWN0V3JhcHBlcjo6Sk9iamVjdFdyYXBwZXIpOgorICAgICAgICAoSk9iamVjdFdy
YXBwZXI6On5KT2JqZWN0V3JhcHBlcik6CisgICAgICAgICogYnJpZGdlL2puaS9qc2Mvam5pX2lu
c3RhbmNlX2pzYy5oOiBBZGRlZC4gTW92ZWQgZnJvbSBqbmlfaW5zdGFuY2UuaAorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Sk9iamVjdFdyYXBwZXI6Omluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OkpPYmplY3RXcmFwcGVyOjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpKT2JqZWN0V3JhcHBlcjo6cmVmKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkpP
YmplY3RXcmFwcGVyOjpkZXJlZik6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFu
Y2U6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2U6OmphdmFJ
bnN0YW5jZSk6CisKIDIwMTAtMDEtMTQgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5y
b2JpbnNvbkBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRl
eDogV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
QW5kcm9pZC5qc2NiaW5kaW5ncy5tawkocmV2aXNpb24gNTMyNjIpCisrKyBXZWJDb3JlL0FuZHJv
aWQuanNjYmluZGluZ3MubWsJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw5ICsxODQsOSBAQCBMT0NB
TF9TUkNfRklMRVMgKz0gXAogCWJyaWRnZS9jL2NfcnVudGltZS5jcHAgXAogCWJyaWRnZS9jL2Nf
dXRpbGl0eS5jcHAgXAogCWJyaWRnZS9qbmkvam5pX2NsYXNzLmNwcCBcCi0JYnJpZGdlL2puaS9q
bmlfaW5zdGFuY2UuY3BwIFwKIAlicmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcCBcCiAJYnJpZGdl
L2puaS9qbmlfdXRpbGl0eS5jcHAgXAorCWJyaWRnZS9qbmkvanNjL2puaV9pbnN0YW5jZV9qc2Mu
Y3BwIFwKIAlicmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcCBcCiAJYnJpZGdl
L25wcnVudGltZS5jcHAgXAogCWJyaWRnZS9ydW50aW1lLmNwcCBcCkluZGV4OiBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDUzMjYyKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
MTQsNiArMTQsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9XZWJDb3Jl
L2JpbmRpbmdzL2pzIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL2JyaWRnZSBcCiAJLUkkKHNyY2Rp
cikvV2ViQ29yZS9icmlkZ2UvYyBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
YyBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9jc3MgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvZG9t
IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL2RvbS9kZWZhdWx0IFwKQEAgLTUwMywxMCArNTA0LDEw
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3Bw
IFwKIAlXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oIFwKIAlXZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2NsYXNzLmggXAotCVdlYkNvcmUvYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaCBcCiAJV2Vi
Q29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5oIFwKIAlXZWJDb3JlL2JyaWRnZS9qbmkvam5p
X3J1bnRpbWUuaCBcCiAJV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmggXAorCVdlYkNv
cmUvYnJpZGdlL2puaS9qc2Mvam5pX2luc3RhbmNlX2pzYy5oIFwKIAlXZWJDb3JlL2JyaWRnZS9u
cGFwaS5oIFwKIAlXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUuY3BwIFwKIAlXZWJDb3JlL2JyaWRn
ZS9ucHJ1bnRpbWUuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNTMyNjIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA1LDggKzMwNSw2IEBACiAJCTFBNTY5
Q0ZFMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0
aWxpdHkuaCAqLzsgfTsKIAkJMUE1NjlDRkYwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9jbGFzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUND
RjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2NsYXNzLmNwcCAqLzsgfTsKIAkJMUE1NjlEMDAwRDdF
MkI4MjAwN0MzOTgzIC8qIGpuaV9jbGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRDAwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9jbGFzcy5o
ICovOyB9OwotCQkxQTU2OUQwMTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0QxMEQ3
RTJCODIwMDdDMzk4MyAvKiBqbmlfaW5zdGFuY2UuY3BwICovOyB9OwotCQkxQTU2OUQwMjBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEMjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2luc3Rh
bmNlLmggKi87IH07CiAJCTFBNTY5RDAzMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3Qu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNE
MzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tICovOyB9OwogCQkxQTU2OUQwNDBE
N0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNENDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pz
b2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUE1NjlEMDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9vYmpjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRDUwRDdFMkI4MjAwN0MzOTgz
IC8qIGpuaV9vYmpjLm1tICovOyB9OwpAQCAtMTExNSw2ICsxMTEzLDggQEAKIAkJNTUwQTBCQ0Ew
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk5RDFFMzAx
MEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuY3BwICovOyB9OwogCQk1OTlE
MUUzMzEwQzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk5RDFFMzExMEM5N0Q2RTAwRTBF
RjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuaCAqLzsgfTsKKwkJNTlDNDE0NDUxMEZGNURBOTAw
MEU4ODA4IC8qIGpuaV9pbnN0YW5jZV9qc2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5QzQxNDQ0MTBGRjVEQTkwMDBFODgwOCAvKiBqbmlfaW5zdGFu
Y2VfanNjLmggKi87IH07CisJCTU5QzQxNDQ3MTBGRjVEQjkwMDBFODgwOCAvKiBqbmlfaW5zdGFu
Y2VfanNjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU5QzQxNDQ2MTBGRjVEQjkwMDBFODgwOCAvKiBqbmlfaW5zdGFuY2VfanNjLmNwcCAqLzsgfTsK
IAkJNTlDNzdGMkExMDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlDNzdGMjgx
MDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwICovOyB9OwogCQk1
OUM3N0YyQjEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlDNzdGMjkxMDU0NUIz
QjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RDE1RTNBQjBGOUU2QUMxMDA5RTBFM0Yg
LyogWE1MVG9rZW5pemVyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTFRva2VuaXplclNj
b3BlLmNwcCAqLzsgfTsKQEAgLTU1NTAsOCArNTU1MCw2IEBACiAJCTFBNTY5Q0NEMEQ3RTJCODIw
MDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y191dGlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0NGMEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gam5pX2NsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1
NjlDRDAwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9jbGFzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBqbmlfY2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUE1NjlDRDEwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqbmlfaW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQTU2OUNEMjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGpuaV9pbnN0YW5jZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNEMzBEN0UyQjgyMDA3QzM5ODMgLyogam5p
X2pzb2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gam5p
X2pzb2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNENDBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGpuaV9qc29iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2
OUNENTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX29iamMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBqbmlfb2JqYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY0NjUsNiArNjQ2Myw4IEBACiAJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBR
dWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU5OUQxRTMwMTBDOTdENkUwMEUwRUYxMiAvKiBq
bmlfdXRpbGl0eV9wcml2YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IGpuaV91dGlsaXR5X3ByaXZhdGUuY3BwOyBwYXRoID0ganNjL2puaV91dGlsaXR5X3ByaXZh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTlEMUUzMTEwQzk3RDZFMDBF
MEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBqbmlfdXRpbGl0eV9wcml2YXRlLmg7IHBhdGggPSBqc2Mvam5pX3V0aWxpdHlfcHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1OUM0MTQ0NDEwRkY1REE5MDAw
RTg4MDggLyogam5pX2luc3RhbmNlX2pzYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBqbmlfaW5zdGFuY2VfanNjLmg7IHBhdGggPSBqc2Mvam5pX2luc3RhbmNlX2pzYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1OUM0MTQ0NjEwRkY1REI5MDAwRTg4MDggLyog
am5pX2luc3RhbmNlX2pzYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBqbmlfaW5zdGFuY2VfanNjLmNwcDsgcGF0aCA9IGpzYy9qbmlfaW5zdGFuY2VfanNjLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlDNzdGMjgxMDU0NUIzQjAwNTA2MTA0IC8q
IEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5jcHA7IHBhdGggPSBtb2NrL0dlb2xvY2F0
aW9uU2VydmljZU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OUM3N0Yy
OTEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvblNlcnZpY2VNb2NrLmg7IHBhdGggPSBt
b2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTFRva2VuaXplclNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTFRva2VuaXplclNjb3BlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMzQzLDggKzEwMzQzLDYgQEAKIAkJCQk1
OTlEMUUyRjEwQzk3RDRDMDBFMEVGMTIgLyoganNjICovLAogCQkJCTFBNTY5Q0NGMEQ3RTJCODIw
MDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwICovLAogCQkJCTFBNTY5Q0QwMEQ3RTJCODIwMDdDMzk4
MyAvKiBqbmlfY2xhc3MuaCAqLywKLQkJCQkxQTU2OUNEMTBEN0UyQjgyMDA3QzM5ODMgLyogam5p
X2luc3RhbmNlLmNwcCAqLywKLQkJCQkxQTU2OUNEMjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2lu
c3RhbmNlLmggKi8sCiAJCQkJMUE1NjlDRDQwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVj
dC5oICovLAogCQkJCTFBNTY5Q0QzMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QubW0g
Ki8sCiAJCQkJMUE1NjlDRDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9vYmpjLm1tICovLApAQCAt
MTEwNTcsNiArMTEwNTUsOCBAQAogCQk1OTlEMUUyRjEwQzk3RDRDMDBFMEVGMTIgLyoganNjICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1OUM0MTQ0NjEw
RkY1REI5MDAwRTg4MDggLyogam5pX2luc3RhbmNlX2pzYy5jcHAgKi8sCisJCQkJNTlDNDE0NDQx
MEZGNURBOTAwMEU4ODA4IC8qIGpuaV9pbnN0YW5jZV9qc2MuaCAqLywKIAkJCQk1OTlEMUUzMDEw
Qzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHAgKi8sCiAJCQkJNTk5RDFF
MzExMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuaCAqLywKIAkJCSk7CkBA
IC0xNzE0Miw3ICsxNzE0Miw2IEBACiAJCQkJMUM4MUJBMDEwRTk3MzNDQjAwMjY2RTA3IC8qIEph
dmFTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQjlGRjBFOTczM0NCMDAy
NjZFMDcgLyogSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2
OUQwMDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2NsYXNzLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
QTU2OUQwMjBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTU2OUQwNDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTU2OUQwNzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3J1bnRpbWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNTY5RDA5MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfdXRpbGl0eS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xODM0OSw2ICsxODM0OCw3IEBACiAJCQkJNkU0RTkxQUQxMEY3
RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RTRFOTFBRjEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNkVFOEE3NzMxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTlDNDE0NDUxMEZGNURBOTAw
MEU4ODA4IC8qIGpuaV9pbnN0YW5jZV9qc2MuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTkzMTUsNyAr
MTkzMTUsNiBAQAogCQkJCTFDODFCQTAyMEU5NzMzQ0IwMDI2NkUwNyAvKiBKYXZhU2NyaXB0UHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzgxQkEwMDBFOTczM0NCMDAyNjZFMDcgLyog
SmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5Q0ZGMEQ3
RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE1NjlE
MDEwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTU2OUQwMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE1NjlEMDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9vYmpjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE1NjlEMDYwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjA1MTMsNiArMjA1MTIsNyBAQAogCQkJCTZFNEU5MUFDMTBGN0ZC
MzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2RTRFOTFBRTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUU4QTc3MjEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTU5QzQxNDQ3MTBGRjVE
QjkwMDBFODgwOCAvKiBqbmlfaW5zdGFuY2VfanNjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gNTMy
NjIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNpbXBvcnQgInJ1bnRpbWUuaCIKIAogI2lmIEVO
QUJMRShNQUNfSkFWQV9CUklER0UpCi0jaW1wb3J0ICJqbmlfaW5zdGFuY2UuaCIKKyNpbXBvcnQg
ImpuaV9pbnN0YW5jZV9qc2MuaCIKICNlbmRpZgogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJQ
bHVnaW4pCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAkocmV2aXNpb24gNTMy
NjIpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJqbmlfaW5zdGFuY2UuaCIKLQotI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0Up
Ci0KLSNpbmNsdWRlICJqbmlfY2xhc3MuaCIKLSNpbmNsdWRlICJqbmlfcnVudGltZS5oIgotI2lu
Y2x1ZGUgImpuaV91dGlsaXR5LmgiCi0jaW5jbHVkZSAiam5pX3V0aWxpdHlfcHJpdmF0ZS5oIgot
I2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0j
aW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0KLSNpZiBQTEFURk9STShBTkRST0lEKQotI2lu
Y2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSNpZmRlZiBOREVCVUcKLSNkZWZpbmUgSlNfTE9H
KGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZpbmUgSlNfTE9HKGZvcm1h
dEFuZEFyZ3MuLi4pIHsgXAotICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVkIC0tICVzOiAgIiwg
X19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCi0gICAgZnByaW50ZihzdGRlcnIs
IGZvcm1hdEFuZEFyZ3MpOyBcCi19Ci0jZW5kaWYKLSAKLXVzaW5nIG5hbWVzcGFjZSBKU0M6OkJp
bmRpbmdzOwotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotSmF2YUluc3RhbmNlOjpKYXZhSW5zdGFu
Y2UgKGpvYmplY3QgaW5zdGFuY2UsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkK
LSAgICA6IEluc3RhbmNlKHJvb3RPYmplY3QpCi17Ci0gICAgX2luc3RhbmNlID0gbmV3IEpPYmpl
Y3RXcmFwcGVyIChpbnN0YW5jZSk7Ci0gICAgX2NsYXNzID0gMDsKLX0KLQotSmF2YUluc3RhbmNl
Ojp+SmF2YUluc3RhbmNlICgpIAotewotICAgIGRlbGV0ZSBfY2xhc3M7IAotfQotCi0jZGVmaW5l
IE5VTV9MT0NBTF9SRUZTIDY0Ci0KLXZvaWQgSmF2YUluc3RhbmNlOjp2aXJ0dWFsQmVnaW4oKQot
ewotICAgIGdldEpOSUVudigpLT5QdXNoTG9jYWxGcmFtZSAoTlVNX0xPQ0FMX1JFRlMpOwotfQot
Ci12b2lkIEphdmFJbnN0YW5jZTo6dmlydHVhbEVuZCgpCi17Ci0gICAgZ2V0Sk5JRW52KCktPlBv
cExvY2FsRnJhbWUgKE5VTEwpOwotfQotCi1DbGFzcyAqSmF2YUluc3RhbmNlOjpnZXRDbGFzcygp
IGNvbnN0IAotewotICAgIGlmIChfY2xhc3MgPT0gMCkKLSAgICAgICAgX2NsYXNzID0gbmV3IEph
dmFDbGFzcyAoX2luc3RhbmNlLT5faW5zdGFuY2UpOwotICAgIHJldHVybiBfY2xhc3M7Ci19Ci0K
LUpTVmFsdWUgSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
Ci17Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKLSAgICBq
c3RyaW5nIHN0cmluZ1ZhbHVlID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihfaW5z
dGFuY2UtPl9pbnN0YW5jZSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0g
ICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICBjb25zdCBqY2hhciAqYyA9IGdldFVD
aGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihlbnYsIHN0cmluZ1ZhbHVlKTsKLSAgICBVU3RyaW5n
IHUoKGNvbnN0IFVDaGFyICopYywgKGludCllbnYtPkdldFN0cmluZ0xlbmd0aChzdHJpbmdWYWx1
ZSkpOwotICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlbnYsIHN0cmluZ1Zh
bHVlLCBjKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdSk7Ci19Ci0KLUpTVmFsdWUgSmF2
YUluc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgamRv
dWJsZSBkb3VibGVWYWx1ZSA9IGNhbGxKTklNZXRob2Q8amRvdWJsZT4oX2luc3RhbmNlLT5faW5z
dGFuY2UsICJkb3VibGVWYWx1ZSIsICIoKUQiKTsKLSAgICByZXR1cm4ganNOdW1iZXIoZXhlYywg
ZG91YmxlVmFsdWUpOwotfQotCi1KU1ZhbHVlIEphdmFJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkg
Y29uc3QKLXsKLSAgICBqYm9vbGVhbiBib29sZWFuVmFsdWUgPSBjYWxsSk5JTWV0aG9kPGpib29s
ZWFuPihfaW5zdGFuY2UtPl9pbnN0YW5jZSwgImJvb2xlYW5WYWx1ZSIsICIoKVoiKTsKLSAgICBy
ZXR1cm4ganNCb29sZWFuKGJvb2xlYW5WYWx1ZSk7Ci19Ci0KLUpTVmFsdWUgSmF2YUluc3RhbmNl
OjppbnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9k
TGlzdCwgY29uc3QgQXJnTGlzdCAmYXJncykKLXsKLSAgICBpbnQgaSwgY291bnQgPSBhcmdzLnNp
emUoKTsKLSAgICBqdmFsdWUgKmpBcmdzOwotICAgIEpTVmFsdWUgcmVzdWx0VmFsdWU7Ci0gICAg
TWV0aG9kICptZXRob2QgPSAwOwotICAgIHNpemVfdCBudW1NZXRob2RzID0gbWV0aG9kTGlzdC5z
aXplKCk7Ci0gICAgCi0gICAgLy8gVHJ5IHRvIGZpbmQgYSBnb29kIG1hdGNoIGZvciB0aGUgb3Zl
cmxvYWRlZCBtZXRob2QuICBUaGUgCi0gICAgLy8gZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0
IEphdmFTY3JpcHQgZG9lc24gaGF2ZSB0aGUKLSAgICAvLyBub3Rpb24gb2YgbWV0aG9kIG92ZXJs
b2FkaW5nIGFuZCBKYXZhIGRvZXMuICBXZSBjb3VsZCAKLSAgICAvLyBnZXQgYSBiaXQgbW9yZSBz
b3BoaXN0aWNhdGVkIGFuZCBhdHRlbXB0IHRvIGRvZXMgc29tZQotICAgIC8vIHR5cGUgY2hlY2tp
bmcgYXMgd2UgYXMgY2hlY2tpbmcgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzLgotICAgIE1ldGhv
ZCAqYU1ldGhvZDsKLSAgICBmb3IgKHNpemVfdCBtZXRob2RJbmRleCA9IDA7IG1ldGhvZEluZGV4
IDwgbnVtTWV0aG9kczsgbWV0aG9kSW5kZXgrKykgewotICAgICAgICBhTWV0aG9kID0gbWV0aG9k
TGlzdFttZXRob2RJbmRleF07Ci0gICAgICAgIGlmIChhTWV0aG9kLT5udW1QYXJhbWV0ZXJzKCkg
PT0gY291bnQpIHsKLSAgICAgICAgICAgIG1ldGhvZCA9IGFNZXRob2Q7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobWV0aG9kID09IDApIHsKLSAgICAgICAg
SlNfTE9HICgidW5hYmxlIHRvIGZpbmQgYW4gYXBwcm9waWF0ZSBtZXRob2RcbiIpOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgSmF2YU1ldGhv
ZCAqak1ldGhvZCA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFNZXRob2QqPihtZXRob2QpOwotICAg
IEpTX0xPRyAoImNhbGwgJXMgJXMgb24gJXBcbiIsIFVTdHJpbmcoak1ldGhvZC0+bmFtZSgpKS5V
VEY4U3RyaW5nKCkuY19zdHIoKSwgak1ldGhvZC0+c2lnbmF0dXJlKCksIF9pbnN0YW5jZS0+X2lu
c3RhbmNlKTsKLSAgICAKLSAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgIGpBcmdzID0gKGp2
YWx1ZSAqKW1hbGxvYyAoY291bnQgKiBzaXplb2YoanZhbHVlKSk7Ci0gICAgfQotICAgIGVsc2UK
LSAgICAgICAgakFyZ3MgPSAwOwotICAgICAgICAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewotICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1ldGVyID0gak1ldGhvZC0+cGFy
YW1ldGVyQXQoaSk7Ci0gICAgICAgIGpBcmdzW2ldID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhl
YywgYXJncy5hdChpKSwgYVBhcmFtZXRlci0+Z2V0Sk5JVHlwZSgpLCBhUGFyYW1ldGVyLT50eXBl
KCkpOwotICAgICAgICBKU19MT0coImFyZ1slZF0gPSAlc1xuIiwgaSwgYXJncy5hdChpKS50b1N0
cmluZyhleGVjKS5hc2NpaSgpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGp2YWx1ZSByZXN1bHQ7
Ci0KLSAgICAvLyBUcnkgdG8gdXNlIHRoZSBKTkkgYWJzdHJhY3Rpb24gZmlyc3QsIG90aGVyd2lz
ZSBmYWxsIGJhY2sgdG8KLSAgICAvLyBub3JubWFsIEpOSS4gIFRoZSBKTkkgZGlzcGF0Y2ggYWJz
dHJhY3Rpb24gYWxsb3dzIHRoZSBKYXZhIHBsdWdpbgotICAgIC8vIHRvIGRpc3BhdGNoIHRoZSBj
YWxsIG9uIHRoZSBhcHByb3ByaWF0ZSBpbnRlcm5hbCBWTSB0aHJlYWQuCi0gICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RPYmplY3Qp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7Ci0gICAgaWYgKHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpKSB7Ci0gICAgICAgIGpvYmpl
Y3Qgb2JqID0gX2luc3RhbmNlLT5faW5zdGFuY2U7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
RGVzY3JpcHRpb247Ci0gICAgICAgIGNvbnN0IGNoYXIgKmNhbGxpbmdVUkwgPSAwOyAgLy8gRklY
TUUsIG5lZWQgdG8gcHJvcGFnYXRlIGNhbGxpbmcgVVJMIHRvIEphdmEKLSAgICAgICAgaGFuZGxl
ZCA9IGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2Jq
LCBqTWV0aG9kLT5pc1N0YXRpYygpLCBqTWV0aG9kLT5KTklSZXR1cm5UeXBlKCksIGpNZXRob2Qt
Pm1ldGhvZElEKG9iaiksIGpBcmdzLCByZXN1bHQsIGNhbGxpbmdVUkwsIGV4Y2VwdGlvbkRlc2Ny
aXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9T
dHJpbmcoZXhlYykpOwotICAgICAgICAgICAgZnJlZSAoakFyZ3MpOwotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gVGhlIGZv
bGxvd2luZyBjb2RlIGNhbiBiZSBjb25kaXRpb25hbGx5IHJlbW92ZWQgb25jZSB3ZSBoYXZlIGEg
VGlnZXIgdXBkYXRlIHRoYXQKLSAgICAvLyBjb250YWlucyB0aGUgbmV3IEphdmEgcGx1Z2luLiAg
SXQgaXMgbmVlZGVkIGZvciBidWlsZHMgcHJpb3IgdG8gVGlnZXIuCi0gICAgaWYgKCFoYW5kbGVk
KSB7ICAgIAotICAgICAgICBqb2JqZWN0IG9iaiA9IF9pbnN0YW5jZS0+X2luc3RhbmNlOwotICAg
ICAgICBzd2l0Y2ggKGpNZXRob2QtPkpOSVJldHVyblR5cGUoKSl7Ci0gICAgICAgICAgICBjYXNl
IHZvaWRfdHlwZToKLSAgICAgICAgICAgICAgICBjYWxsSk5JTWV0aG9kSURBPHZvaWQ+KG9iaiwg
ak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOwotICAgICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBvYmplY3RfdHlwZToKLSAgICAgICAgICAgICAg
ICByZXN1bHQubCA9IGNhbGxKTklNZXRob2RJREE8am9iamVjdD4ob2JqLCBqTWV0aG9kLT5tZXRo
b2RJRChvYmopLCBqQXJncyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIGJvb2xlYW5fdHlwZToKLSAgICAgICAgICAgICAgICByZXN1bHQueiA9IGNhbGxKTklNZXRo
b2RJREE8amJvb2xlYW4+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBieXRlX3R5cGU6Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmIgPSBjYWxsSk5JTWV0aG9kSURBPGpieXRlPihvYmosIGpNZXRob2Qt
Pm1ldGhvZElEKG9iaiksIGpBcmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdC5jID0gY2FsbEpOSU1l
dGhvZElEQTxqY2hhcj4ob2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIHNob3J0X3R5
cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnMgPSBjYWxsSk5JTWV0aG9kSURBPGpzaG9ydD4o
b2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIGludF90eXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdC5p
ID0gY2FsbEpOSU1ldGhvZElEQTxqaW50PihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpB
cmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBsb25nX3R5cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmogPSBjYWxsSk5JTWV0aG9k
SURBPGpsb25nPihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpBcmdzKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZmxvYXRfdHlwZToKLSAgICAgICAgICAg
ICAgICByZXN1bHQuZiA9IGNhbGxKTklNZXRob2RJREE8amZsb2F0PihvYmosIGpNZXRob2QtPm1l
dGhvZElEKG9iaiksIGpBcmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgZG91YmxlX3R5cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmQgPSBjYWxsSk5JTWV0
aG9kSURBPGpkb3VibGU+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgICAgICAKLSAgICBzd2l0Y2ggKGpNZXRob2QtPkpOSVJldHVyblR5cGUoKSl7Ci0gICAg
ICAgIGNhc2Ugdm9pZF90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNl
IG9iamVjdF90eXBlOiB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmwgIT0gMCkgewotICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmFycmF5VHlwZSA9IGpNZXRob2QtPnJldHVyblR5cGUoKTsK
LSAgICAgICAgICAgICAgICBpZiAoYXJyYXlUeXBlWzBdID09ICdbJykgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRWYWx1ZSA9IEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KGV4
ZWMsIHJlc3VsdC5sLCBhcnJheVR5cGUsIHJvb3RPYmplY3QpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0VmFsdWUg
PSBKYXZhSW5zdGFuY2U6OmNyZWF0ZShyZXN1bHQubCwgcm9vdE9iamVjdCktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAg
ICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNC
b29sZWFuKHJlc3VsdC56KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgCi0g
ICAgICAgIGNhc2UgYnl0ZV90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVt
YmVyKGV4ZWMsIHJlc3VsdC5iKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAg
Ci0gICAgICAgIGNhc2UgY2hhcl90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpz
TnVtYmVyKGV4ZWMsIHJlc3VsdC5jKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
ICAgCi0gICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0VmFsdWUg
PSBqc051bWJlcihleGVjLCByZXN1bHQucyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIAotICAgICAgICBjYXNlIGludF90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1
ZSA9IGpzTnVtYmVyKGV4ZWMsIHJlc3VsdC5pKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgICAgCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRW
YWx1ZSA9IGpzTnVtYmVyKGV4ZWMsIHJlc3VsdC5qKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgZmxvYXRfdHlwZTogewotICAgICAgICAgICAgcmVz
dWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuZik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIGRvdWJsZV90eXBlOiB7Ci0gICAgICAgICAg
ICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMsIHJlc3VsdC5kKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGludmFsaWRfdHlwZToKLSAgICAgICAgZGVmYXVs
dDogewotICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZyZWUgKGpBcmdzKTsKLQotICAgIHJldHVy
biByZXN1bHRWYWx1ZTsKLX0KLQotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkgY29uc3QKLXsKLSAg
ICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcpCi0gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShl
eGVjKTsKLSAgICBpZiAoaGludCA9PSBQcmVmZXJOdW1iZXIpCi0gICAgICAgIHJldHVybiBudW1i
ZXJWYWx1ZShleGVjKTsKLSAgICBKYXZhQ2xhc3MgKmFDbGFzcyA9IHN0YXRpY19jYXN0PEphdmFD
bGFzcyo+KGdldENsYXNzKCkpOwotICAgIGlmIChhQ2xhc3MtPmlzU3RyaW5nQ2xhc3MoKSkKLSAg
ICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOwotICAgIGlmIChhQ2xhc3MtPmlzTnVtYmVy
Q2xhc3MoKSkKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKGV4ZWMpOwotICAgIGlmIChhQ2xh
c3MtPmlzQm9vbGVhbkNsYXNzKCkpCi0gICAgICAgIHJldHVybiBib29sZWFuVmFsdWUoKTsKLSAg
ICByZXR1cm4gdmFsdWVPZihleGVjKTsKLX0KLQotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnZhbHVl
T2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdCAKLXsKLSAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhl
Yyk7Ci19Ci0KLUpPYmplY3RXcmFwcGVyOjpKT2JqZWN0V3JhcHBlcihqb2JqZWN0IGluc3RhbmNl
KQotOiBfcmVmQ291bnQoMCkKLXsKLSAgICBhc3NlcnQgKGluc3RhbmNlICE9IDApOwotCi0gICAg
Ly8gQ2FjaGUgdGhlIEpOSUVudiB1c2VkIHRvIGdldCB0aGUgZ2xvYmFsIHJlZiBmb3IgdGhpcyBq
YXZhIGluc3RhbmFjZS4KLSAgICAvLyBJdCdsbCBiZSB1c2VkIHRvIGRlbGV0ZSB0aGUgcmVmZXJl
bmNlLgotICAgIF9lbnYgPSBnZXRKTklFbnYoKTsKLSAgICAgICAgCi0gICAgX2luc3RhbmNlID0g
X2Vudi0+TmV3R2xvYmFsUmVmIChpbnN0YW5jZSk7Ci0gICAgCi0gICAgSlNfTE9HICgibmV3IGds
b2JhbCByZWYgJXAgZm9yICVwXG4iLCBfaW5zdGFuY2UsIGluc3RhbmNlKTsKLQotICAgIGlmICAo
X2luc3RhbmNlID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICBjb3Vs
ZCBub3QgZ2V0IEdsb2JhbFJlZiBmb3IgJXBcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGluc3Rh
bmNlKTsKLSAgICB9Ci19Ci0KLUpPYmplY3RXcmFwcGVyOjp+Sk9iamVjdFdyYXBwZXIoKSB7Ci0g
ICAgSlNfTE9HICgiZGVsZXRpbmcgZ2xvYmFsIHJlZiAlcFxuIiwgX2luc3RhbmNlKTsKLSAgICBf
ZW52LT5EZWxldGVHbG9iYWxSZWYgKF9pbnN0YW5jZSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuaAkocmV2aXNp
b24gNTMyNjIpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgX0pO
SV9JTlNUQU5DRV9IXwotI2RlZmluZSBfSk5JX0lOU1RBTkNFX0hfCi0KLSNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAicnVudGltZS5oIgotI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgotCi0jaW5jbHVkZSA8SmF2YVZNL2puaS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
bmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3MgSmF2YUNsYXNzOwotCi1jbGFzcyBKT2JqZWN0
V3JhcHBlcgotewotZnJpZW5kIGNsYXNzIFJlZlB0cjxKT2JqZWN0V3JhcHBlcj47Ci1mcmllbmQg
Y2xhc3MgSmF2YUFycmF5OwotZnJpZW5kIGNsYXNzIEphdmFGaWVsZDsKLWZyaWVuZCBjbGFzcyBK
YXZhSW5zdGFuY2U7Ci1mcmllbmQgY2xhc3MgSmF2YU1ldGhvZDsKLQotcHVibGljOgotICAgIGpv
YmplY3QgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBfaW5zdGFuY2U7IH0KLSAgICB2b2lkIHNl
dEluc3RhbmNlKGpvYmplY3QgaW5zdGFuY2UpIHsgX2luc3RhbmNlID0gaW5zdGFuY2U7IH0KLQot
cHJvdGVjdGVkOgotICAgIEpPYmplY3RXcmFwcGVyKGpvYmplY3QgaW5zdGFuY2UpOyAgICAKLSAg
ICB+Sk9iamVjdFdyYXBwZXIoKTsKLSAgICAKLSAgICB2b2lkIHJlZigpIHsgX3JlZkNvdW50Kys7
IH0KLSAgICB2b2lkIGRlcmVmKCkgCi0gICAgeyAKLSAgICAgICAgaWYgKC0tX3JlZkNvdW50ID09
IDApIAotICAgICAgICAgICAgZGVsZXRlIHRoaXM7IAotICAgIH0KLQotICAgIGpvYmplY3QgX2lu
c3RhbmNlOwotCi1wcml2YXRlOgotICAgIEpOSUVudiAqX2VudjsKLSAgICB1bnNpZ25lZCBpbnQg
X3JlZkNvdW50OwotfTsKLQotY2xhc3MgSmF2YUluc3RhbmNlIDogcHVibGljIEluc3RhbmNlCi17
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPiBjcmVhdGUoam9i
amVjdCBpbnN0YW5jZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0KSAKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YUluc3RhbmNlKGluc3RhbmNlLCByb290
T2JqZWN0KSk7Ci0gICAgfQotICAgIAotICAgIH5KYXZhSW5zdGFuY2UoKTsKLSAgICAKLSAgICB2
aXJ0dWFsIENsYXNzICpnZXRDbGFzcygpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgSlNWYWx1
ZSB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0
VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9k
TGlzdCYgbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKLQotICAgIGpvYmplY3QgamF2YUlu
c3RhbmNlKCkgY29uc3QgeyByZXR1cm4gX2luc3RhbmNlLT5faW5zdGFuY2U7IH0KLSAgICAKLSAg
ICBKU1ZhbHVlIHN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUgbnVt
YmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNWYWx1ZSBib29sZWFuVmFsdWUoKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIEphdmFJbnN0YW5jZShqb2JqZWN0IGluc3RhbmNlLCBQ
YXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlydHVhbEJlZ2luKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHZpcnR1YWxFbmQoKTsKLQotICAgIFJlZlB0cjxKT2JqZWN0V3Jh
cHBlcj4gX2luc3RhbmNlOwotICAgIG11dGFibGUgSmF2YUNsYXNzICpfY2xhc3M7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IEVOQUJMRShNQUNfSkFWQV9CUklER0UpCi0KLSNlbmRpZiAvLyBfSk5JX0lOU1RBTkNFX0hfCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHJldmlzaW9uIDUzMjYyKQorKysgV2Vi
Q29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCBKU1ZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5CiBqdmFsdWUg
SmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0CiB7CiAgICAgam9iamVjdCBqaW5zdGFuY2Ug
PSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9
IF9maWVsZC0+X2luc3RhbmNlOworICAgIGpvYmplY3QgZmllbGRKSW5zdGFuY2UgPSBfZmllbGQt
Pm1faW5zdGFuY2U7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqdmFsdWUg
cmVzdWx0OwogCkBAIC0xNjgsNyArMTY4LDcgQEAgSlNWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJv
bUluc3RhbmNlKEV4ZQogdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNl
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwganZhbHVlIGph
dmFWYWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKSBjb25zdAogewogICAg
IGpvYmplY3Qgamluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAgIGpvYmpl
Y3QgZmllbGRKSW5zdGFuY2UgPSBfZmllbGQtPl9pbnN0YW5jZTsKKyAgICBqb2JqZWN0IGZpZWxk
Skluc3RhbmNlID0gX2ZpZWxkLT5tX2luc3RhbmNlOwogICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5J
RW52KCk7CiAKICAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmplY3RDbGFzcyhmaWVsZEpJbnN0
YW5jZSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgSmF2YUFycmF5OjpKYXZhQXJyYXkoam9iamVjdCBh
cnJheSwgY29ucwogICAgIF9hcnJheSA9IG5ldyBKT2JqZWN0V3JhcHBlcihhcnJheSk7CiAgICAg
Ly8gSmF2YSBhcnJheSBhcmUgZml4ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUgbGVuZ3RoLgog
ICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgX2xlbmd0aCA9IGVudi0+R2V0QXJy
YXlMZW5ndGgoKGphcnJheSlfYXJyYXktPl9pbnN0YW5jZSk7CisgICAgX2xlbmd0aCA9IGVudi0+
R2V0QXJyYXlMZW5ndGgoKGphcnJheSlfYXJyYXktPm1faW5zdGFuY2UpOwogICAgIF90eXBlID0g
c3RyZHVwKHR5cGUpOwogICAgIF9yb290T2JqZWN0ID0gcm9vdE9iamVjdDsKIH0KSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL2puaS9qbmlfcnVudGltZS5oCShyZXZpc2lvbiA1MzI2MikKKysrIFdlYkNvcmUvYnJpZGdl
L2puaS9qbmlfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNp
ZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jaW5jbHVkZSA8am5pX3V0aWxpdHkuaD4KLSNp
bmNsdWRlIDxqbmlfaW5zdGFuY2UuaD4KKyNpbmNsdWRlICJqbmlfaW5zdGFuY2VfanNjLmgiCisj
aW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCiAK
QEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlQXQo
RXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0OwogICAgIAotICAgIGpvYmplY3QgamF2YUFy
cmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5LT5faW5zdGFuY2U7IH0KKyAgICBqb2JqZWN0IGph
dmFBcnJheSgpIGNvbnN0IHsgcmV0dXJuIF9hcnJheS0+bV9pbnN0YW5jZTsgfQogCiAgICAgc3Rh
dGljIEpTVmFsdWUgY29udmVydEpPYmplY3RUb0FycmF5IChFeGVjU3RhdGUqIGV4ZWMsIGpvYmpl
Y3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwog
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL2puaV9pbnN0YW5jZV9qc2MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX2luc3RhbmNlX2pzYy5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL2puaV9pbnN0YW5jZV9qc2MuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImpuaV9pbnN0YW5jZV9qc2MuaCIKKworI2lmIEVO
QUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJqbmlfY2xhc3MuaCIKKyNpbmNsdWRl
ICJqbmlfcnVudGltZS5oIgorI2luY2x1ZGUgImpuaV91dGlsaXR5LmgiCisjaW5jbHVkZSAiam5p
X3V0aWxpdHlfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCisjaW5jbHVk
ZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+CisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisKKyNpZiBQ
TEFURk9STShBTkRST0lEKQorI2luY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyNpZmRlZiBO
REVCVUcKKyNkZWZpbmUgSlNfTE9HKGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQorI2Vsc2UK
KyNkZWZpbmUgSlNfTE9HKGZvcm1hdEFuZEFyZ3MuLi4pIHsgXAorICAgIGZwcmludGYoc3RkZXJy
LCAiJXM6JWQgLS0gJXM6ICAiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwK
KyAgICBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0QW5kQXJncyk7IFwKK30KKyNlbmRpZgorCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK0phdmFJ
bnN0YW5jZTo6SmF2YUluc3RhbmNlKGpvYmplY3QgaW5zdGFuY2UsIFBhc3NSZWZQdHI8Um9vdE9i
amVjdD4gcm9vdE9iamVjdCkKKyAgICA6IEluc3RhbmNlKHJvb3RPYmplY3QpCit7CisgICAgbV9p
bnN0YW5jZSA9IG5ldyBKT2JqZWN0V3JhcHBlcihpbnN0YW5jZSk7CisgICAgbV9jbGFzcyA9IDA7
Cit9CisKK0phdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSgpCit7CisgICAgZGVsZXRlIG1fY2xh
c3M7Cit9CisKKyNkZWZpbmUgTlVNX0xPQ0FMX1JFRlMgNjQKKwordm9pZCBKYXZhSW5zdGFuY2U6
OnZpcnR1YWxCZWdpbigpCit7CisgICAgZ2V0Sk5JRW52KCktPlB1c2hMb2NhbEZyYW1lKE5VTV9M
T0NBTF9SRUZTKTsKK30KKwordm9pZCBKYXZhSW5zdGFuY2U6OnZpcnR1YWxFbmQoKQoreworICAg
IGdldEpOSUVudigpLT5Qb3BMb2NhbEZyYW1lKDApOworfQorCitDbGFzcyogSmF2YUluc3RhbmNl
OjpnZXRDbGFzcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsYXNzKQorICAgICAgICBtX2NsYXNz
ID0gbmV3IEphdmFDbGFzcyAobV9pbnN0YW5jZS0+bV9pbnN0YW5jZSk7CisgICAgcmV0dXJuIG1f
Y2xhc3M7Cit9CisKK0pTVmFsdWUgSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0Cit7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KworICAgIGpzdHJpbmcgc3RyaW5nVmFsdWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmpl
Y3Q+KG1faW5zdGFuY2UtPm1faW5zdGFuY2UsICJ0b1N0cmluZyIsICIoKUxqYXZhL2xhbmcvU3Ry
aW5nOyIpOworICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgY29uc3QgamNoYXIq
IGMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZW52LCBzdHJpbmdWYWx1ZSk7Cisg
ICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciopYywgKGludCllbnYtPkdldFN0cmluZ0xlbmd0aChz
dHJpbmdWYWx1ZSkpOworICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlbnYs
IHN0cmluZ1ZhbHVlLCBjKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdSk7Cit9CisKK0pT
VmFsdWUgSmF2YUluc3RhbmNlOjpudW1iZXJWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7
CisgICAgamRvdWJsZSBkb3VibGVWYWx1ZSA9IGNhbGxKTklNZXRob2Q8amRvdWJsZT4obV9pbnN0
YW5jZS0+bV9pbnN0YW5jZSwgImRvdWJsZVZhbHVlIiwgIigpRCIpOworICAgIHJldHVybiBqc051
bWJlcihleGVjLCBkb3VibGVWYWx1ZSk7Cit9CisKK0pTVmFsdWUgSmF2YUluc3RhbmNlOjpib29s
ZWFuVmFsdWUoKSBjb25zdAoreworICAgIGpib29sZWFuIGJvb2xlYW5WYWx1ZSA9IGNhbGxKTklN
ZXRob2Q8amJvb2xlYW4+KG1faW5zdGFuY2UtPm1faW5zdGFuY2UsICJib29sZWFuVmFsdWUiLCAi
KClaIik7CisgICAgcmV0dXJuIGpzQm9vbGVhbihib29sZWFuVmFsdWUpOworfQorCitKU1ZhbHVl
IEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9k
TGlzdCYgbWV0aG9kTGlzdCwgY29uc3QgQXJnTGlzdCAmYXJncykKK3sKKyAgICBpbnQgaSwgY291
bnQgPSBhcmdzLnNpemUoKTsKKyAgICBqdmFsdWUqIGpBcmdzOworICAgIEpTVmFsdWUgcmVzdWx0
VmFsdWU7CisgICAgTWV0aG9kKiBtZXRob2QgPSAwOworICAgIHNpemVfdCBudW1NZXRob2RzID0g
bWV0aG9kTGlzdC5zaXplKCk7CisKKyAgICAvLyBUcnkgdG8gZmluZCBhIGdvb2QgbWF0Y2ggZm9y
IHRoZSBvdmVybG9hZGVkIG1ldGhvZC4gIFRoZQorICAgIC8vIGZ1bmRhbWVudGFsIHByb2JsZW0g
aXMgdGhhdCBKYXZhU2NyaXB0IGRvZXNuIGhhdmUgdGhlCisgICAgLy8gbm90aW9uIG9mIG1ldGhv
ZCBvdmVybG9hZGluZyBhbmQgSmF2YSBkb2VzLiAgV2UgY291bGQKKyAgICAvLyBnZXQgYSBiaXQg
bW9yZSBzb3BoaXN0aWNhdGVkIGFuZCBhdHRlbXB0IHRvIGRvZXMgc29tZQorICAgIC8vIHR5cGUg
Y2hlY2tpbmcgYXMgd2UgYXMgY2hlY2tpbmcgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzLgorICAg
IE1ldGhvZCogYU1ldGhvZDsKKyAgICBmb3IgKHNpemVfdCBtZXRob2RJbmRleCA9IDA7IG1ldGhv
ZEluZGV4IDwgbnVtTWV0aG9kczsgbWV0aG9kSW5kZXgrKykgeworICAgICAgICBhTWV0aG9kID0g
bWV0aG9kTGlzdFttZXRob2RJbmRleF07CisgICAgICAgIGlmIChhTWV0aG9kLT5udW1QYXJhbWV0
ZXJzKCkgPT0gY291bnQpIHsKKyAgICAgICAgICAgIG1ldGhvZCA9IGFNZXRob2Q7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIW1ldGhvZCkgeworICAgICAg
ICBKU19MT0coInVuYWJsZSB0byBmaW5kIGFuIGFwcHJvcGlhdGUgbWV0aG9kXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgY29uc3QgSmF2YU1ldGhvZCog
ak1ldGhvZCA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFNZXRob2QqPihtZXRob2QpOworICAgIEpT
X0xPRygiY2FsbCAlcyAlcyBvbiAlcFxuIiwgVVN0cmluZyhqTWV0aG9kLT5uYW1lKCkpLlVURjhT
dHJpbmcoKS5jX3N0cigpLCBqTWV0aG9kLT5zaWduYXR1cmUoKSwgbV9pbnN0YW5jZS0+bV9pbnN0
YW5jZSk7CisKKyAgICBpZiAoY291bnQgPiAwKQorICAgICAgICBqQXJncyA9IChqdmFsdWUqKW1h
bGxvYyhjb3VudCAqIHNpemVvZihqdmFsdWUpKTsKKyAgICBlbHNlCisgICAgICAgIGpBcmdzID0g
MDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEphdmFQYXJh
bWV0ZXIqIGFQYXJhbWV0ZXIgPSBqTWV0aG9kLT5wYXJhbWV0ZXJBdChpKTsKKyAgICAgICAgakFy
Z3NbaV0gPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBhcmdzLmF0KGkpLCBhUGFyYW1ldGVy
LT5nZXRKTklUeXBlKCksIGFQYXJhbWV0ZXItPnR5cGUoKSk7CisgICAgICAgIEpTX0xPRygiYXJn
WyVkXSA9ICVzXG4iLCBpLCBhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOworICAg
IH0KKworICAgIGp2YWx1ZSByZXN1bHQ7CisKKyAgICAvLyBUcnkgdG8gdXNlIHRoZSBKTkkgYWJz
dHJhY3Rpb24gZmlyc3QsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKyAgICAvLyBub3JubWFsIEpO
SS4gIFRoZSBKTkkgZGlzcGF0Y2ggYWJzdHJhY3Rpb24gYWxsb3dzIHRoZSBKYXZhIHBsdWdpbgor
ICAgIC8vIHRvIGRpc3BhdGNoIHRoZSBjYWxsIG9uIHRoZSBhcHByb3ByaWF0ZSBpbnRlcm5hbCBW
TSB0aHJlYWQuCisgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3Qo
KTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgaWYgKHJvb3RPYmplY3QtPm5hdGl2ZUhh
bmRsZSgpKSB7CisgICAgICAgIGpvYmplY3Qgb2JqID0gbV9pbnN0YW5jZS0+bV9pbnN0YW5jZTsK
KyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgY29uc3QgY2hh
ciAqY2FsbGluZ1VSTCA9IDA7IC8vIEZJWE1FLCBuZWVkIHRvIHByb3BhZ2F0ZSBjYWxsaW5nIFVS
TCB0byBKYXZhCisgICAgICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9i
amVjdC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwgak1ldGhvZC0+
Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncywgcmVzdWx0LCBj
YWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgIGlmIChleGNlcHRpb25E
ZXNjcmlwdGlvbikgeworICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3Is
IGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGZyZWUo
akFyZ3MpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgY2FuIGJlIGNvbmRpdGlvbmFsbHkgcmVt
b3ZlZCBvbmNlIHdlIGhhdmUgYSBUaWdlciB1cGRhdGUgdGhhdAorICAgIC8vIGNvbnRhaW5zIHRo
ZSBuZXcgSmF2YSBwbHVnaW4uICBJdCBpcyBuZWVkZWQgZm9yIGJ1aWxkcyBwcmlvciB0byBUaWdl
ci4KKyAgICBpZiAoIWhhbmRsZWQpIHsKKyAgICAgICAgam9iamVjdCBvYmogPSBtX2luc3RhbmNl
LT5tX2luc3RhbmNlOworICAgICAgICBzd2l0Y2ggKGpNZXRob2QtPkpOSVJldHVyblR5cGUoKSkg
eworICAgICAgICBjYXNlIHZvaWRfdHlwZToKKyAgICAgICAgICAgIGNhbGxKTklNZXRob2RJREE8
dm9pZD4ob2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgICAgIHJlc3VsdC5sID0g
Y2FsbEpOSU1ldGhvZElEQTxqb2JqZWN0PihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpB
cmdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAg
ICAgICAgICAgIHJlc3VsdC56ID0gY2FsbEpOSU1ldGhvZElEQTxqYm9vbGVhbj4ob2JqLCBqTWV0
aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBieXRlX3R5cGU6CisgICAgICAgICAgICByZXN1bHQuYiA9IGNhbGxKTklNZXRob2RJREE8
amJ5dGU+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICAgICAgcmVzdWx0LmMgPSBj
YWxsSk5JTWV0aG9kSURBPGpjaGFyPihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpBcmdz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAg
ICAgICByZXN1bHQucyA9IGNhbGxKTklNZXRob2RJREE8anNob3J0PihvYmosIGpNZXRob2QtPm1l
dGhvZElEKG9iaiksIGpBcmdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGlu
dF90eXBlOgorICAgICAgICAgICAgcmVzdWx0LmkgPSBjYWxsSk5JTWV0aG9kSURBPGppbnQ+KG9i
aiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAgICAgICByZXN1bHQuaiA9IGNhbGxKTklN
ZXRob2RJREE8amxvbmc+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgICAgIHJl
c3VsdC5mID0gY2FsbEpOSU1ldGhvZElEQTxqZmxvYXQ+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQo
b2JqKSwgakFyZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZG91YmxlX3R5
cGU6CisgICAgICAgICAgICByZXN1bHQuZCA9IGNhbGxKTklNZXRob2RJREE8amRvdWJsZT4ob2Jq
LCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoak1ldGhvZC0+Sk5JUmV0dXJu
VHlwZSgpKSB7CisgICAgY2FzZSB2b2lkX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQu
bCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IGpNZXRob2QtPnJl
dHVyblR5cGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlUeXBlWzBdID09ICdbJykKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0
VG9BcnJheShleGVjLCByZXN1bHQubCwgYXJyYXlUeXBlLCByb290T2JqZWN0KTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFZhbHVlID0gSmF2YUluc3Rh
bmNlOjpjcmVhdGUocmVzdWx0LmwsIHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBib29s
ZWFuX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNCb29sZWFu
KHJlc3VsdC56KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgYnl0ZV90
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMs
IHJlc3VsdC5iKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgY2hhcl90
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMs
IHJlc3VsdC5jKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ugc2hvcnRf
dHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVj
LCByZXN1bHQucyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGludF90
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMs
IHJlc3VsdC5pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgbG9uZ190
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4ZWMs
IHJlc3VsdC5qKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgZmxvYXRf
dHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVj
LCByZXN1bHQuZik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRvdWJs
ZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKGV4
ZWMsIHJlc3VsdC5kKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgaW52
YWxpZF90eXBlOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdFZh
bHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBmcmVlKGpBcmdzKTsKKworICAgIHJldHVybiByZXN1bHRWYWx1ZTsKK30KKworSlNWYWx1
ZSBKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgaGludCkgY29uc3QKK3sKKyAgICBpZiAoaGludCA9PSBQcmVmZXJTdHJpbmcp
CisgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKKyAgICBpZiAoaGludCA9PSBQcmVm
ZXJOdW1iZXIpCisgICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShleGVjKTsKKyAgICBKYXZhQ2xh
c3MqIGFDbGFzcyA9IHN0YXRpY19jYXN0PEphdmFDbGFzcyo+KGdldENsYXNzKCkpOworICAgIGlm
IChhQ2xhc3MtPmlzU3RyaW5nQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4
ZWMpOworICAgIGlmIChhQ2xhc3MtPmlzTnVtYmVyQ2xhc3MoKSkKKyAgICAgICAgcmV0dXJuIG51
bWJlclZhbHVlKGV4ZWMpOworICAgIGlmIChhQ2xhc3MtPmlzQm9vbGVhbkNsYXNzKCkpCisgICAg
ICAgIHJldHVybiBib29sZWFuVmFsdWUoKTsKKyAgICByZXR1cm4gdmFsdWVPZihleGVjKTsKK30K
KworSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
eworICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKK30KKworSk9iamVjdFdyYXBwZXI6OkpP
YmplY3RXcmFwcGVyKGpvYmplY3QgaW5zdGFuY2UpCisgICAgOiBtX3JlZkNvdW50KDApCit7Cisg
ICAgYXNzZXJ0KGluc3RhbmNlKTsKKworICAgIC8vIENhY2hlIHRoZSBKTklFbnYgdXNlZCB0byBn
ZXQgdGhlIGdsb2JhbCByZWYgZm9yIHRoaXMgamF2YSBpbnN0YW5hY2UuCisgICAgLy8gSXQnbGwg
YmUgdXNlZCB0byBkZWxldGUgdGhlIHJlZmVyZW5jZS4KKyAgICBtX2VudiA9IGdldEpOSUVudigp
OworCisgICAgbV9pbnN0YW5jZSA9IG1fZW52LT5OZXdHbG9iYWxSZWYoaW5zdGFuY2UpOworCisg
ICAgSlNfTE9HKCJuZXcgZ2xvYmFsIHJlZiAlcCBmb3IgJXBcbiIsIG1faW5zdGFuY2UsIGluc3Rh
bmNlKTsKKworICAgIGlmICAoIW1faW5zdGFuY2UpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
JXM6ICBjb3VsZCBub3QgZ2V0IEdsb2JhbFJlZiBmb3IgJXBcbiIsIF9fUFJFVFRZX0ZVTkNUSU9O
X18sIGluc3RhbmNlKTsKK30KKworSk9iamVjdFdyYXBwZXI6On5KT2JqZWN0V3JhcHBlcigpCit7
CisgICAgSlNfTE9HKCJkZWxldGluZyBnbG9iYWwgcmVmICVwXG4iLCBtX2luc3RhbmNlKTsKKyAg
ICBtX2Vudi0+RGVsZXRlR2xvYmFsUmVmKG1faW5zdGFuY2UpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX2lu
c3RhbmNlX2pzYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX2lu
c3RhbmNlX2pzYy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9qbmlf
aW5zdGFuY2VfanNjLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgam5pX2luc3RhbmNlX2pzY19oCisjZGVmaW5lIGpuaV9pbnN0YW5j
ZV9qc2NfaAorCisjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKKworI2luY2x1ZGUgInJ1bnRp
bWUuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKworI2luY2x1ZGUgPEphdmFWTS9qbmku
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK2NsYXNzIEph
dmFDbGFzczsKKworY2xhc3MgSk9iamVjdFdyYXBwZXIgeworZnJpZW5kIGNsYXNzIFJlZlB0cjxK
T2JqZWN0V3JhcHBlcj47CitmcmllbmQgY2xhc3MgSmF2YUFycmF5OworZnJpZW5kIGNsYXNzIEph
dmFGaWVsZDsKK2ZyaWVuZCBjbGFzcyBKYXZhSW5zdGFuY2U7CitmcmllbmQgY2xhc3MgSmF2YU1l
dGhvZDsKKworcHVibGljOgorICAgIGpvYmplY3QgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBt
X2luc3RhbmNlOyB9CisgICAgdm9pZCBzZXRJbnN0YW5jZShqb2JqZWN0IGluc3RhbmNlKSB7IG1f
aW5zdGFuY2UgPSBpbnN0YW5jZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSk9iamVjdFdyYXBwZXIo
am9iamVjdCBpbnN0YW5jZSk7CisgICAgfkpPYmplY3RXcmFwcGVyKCk7CisKKyAgICB2b2lkIHJl
ZigpIHsgbV9yZWZDb3VudCsrOyB9CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBp
ZiAoISgtLW1fcmVmQ291bnQpKQorICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisg
ICAgam9iamVjdCBtX2luc3RhbmNlOworCitwcml2YXRlOgorICAgIEpOSUVudiogbV9lbnY7Cisg
ICAgdW5zaWduZWQgaW50IG1fcmVmQ291bnQ7Cit9OworCitjbGFzcyBKYXZhSW5zdGFuY2UgOiBw
dWJsaWMgSW5zdGFuY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFJbnN0
YW5jZT4gY3JlYXRlKGpvYmplY3QgaW5zdGFuY2UsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9v
dE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YUluc3RhbmNl
KGluc3RhbmNlLCByb290T2JqZWN0KSk7CisgICAgfQorCisgICAgfkphdmFJbnN0YW5jZSgpOwor
CisgICAgdmlydHVhbCBDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSlNW
YWx1ZSB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZh
dWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0
aG9kTGlzdCYgbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKworICAgIGpvYmplY3QgamF2
YUluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+bV9pbnN0YW5jZTsgfQorCisg
ICAgSlNWYWx1ZSBzdHJpbmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlIG51
bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWUgYm9vbGVhblZhbHVlKCkg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBKYXZhSW5zdGFuY2Uoam9iamVjdCBpbnN0YW5jZSwg
UGFzc1JlZlB0cjxSb290T2JqZWN0Pik7CisgICAgdmlydHVhbCB2b2lkIHZpcnR1YWxCZWdpbigp
OworICAgIHZpcnR1YWwgdm9pZCB2aXJ0dWFsRW5kKCk7CisKKyAgICBSZWZQdHI8Sk9iamVjdFdy
YXBwZXI+IG1faW5zdGFuY2U7CisgICAgbXV0YWJsZSBKYXZhQ2xhc3MqIG1fY2xhc3M7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNlbmRpZiAvLyBqbmlfaW5zdGFuY2VfanNj
X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46810</attachid>
            <date>2010-01-18 03:54:23 -0800</date>
            <delta_ts>2010-01-18 10:15:31 -0800</delta_ts>
            <desc>Patch 2 for Bug 33672</desc>
            <filename>javaInstance2.txt</filename>
            <type>text/plain</type>
            <size>43029</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzM5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDEtMTggIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVzIEpTQy1zcGVjaWZpYyB2ZXJzaW9uIG9mIEphdmFJbnN0YW5jZSBmcm9tIGJyaWRnZS9q
bmkvam5pX2luc3RhbmNlIHRvIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM2NzIKKworICAgICAg
ICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBBbmRyb2lkLmpz
Y2JpbmRpbmdzLm1rOiBNb2RpZmllZC4gUmVtb3ZlZCBqbmlfaW5zdGFuY2UuY3BwIGFuZCBhZGRl
ZCBKYXZhSW5zdGFuY2VKU0MuY3BwCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IE1vZGlmaWVk
LiBSZW1vdmVkIGpuaV9pbnN0YW5jZS5oIGFuZCBhZGRlZCBKYXZhSW5zdGFuY2VKU0MuaAorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTW9kaWZpZWQuIFJlbW92
ZWQgam5pX2luc3RhbmNlLltjcHB8aF0gYW5kIGFkZGVkIEphdmFJbnN0YW5jZUpTQy5bY3BwfGhd
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbTogTW9kaWZpZWQu
IEluY2x1ZGVzIEphdmFJbnN0YW5jZUpTQy5oCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfaW5z
dGFuY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2luc3RhbmNlLmg6
IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5oOiBNb2RpZmllZC4g
SW5jbHVkZXMgSmF2YUluc3RhbmNlSlNDLmgKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZh
SW5zdGFuY2VKU0MuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2luc3Rh
bmNlLmNwcC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaDogQ29w
aWVkIGZyb20gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oLgorCiAyMDEwLTAxLTE4
ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkIFN5bWJpYW4gYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLmpzY2Jp
bmRpbmdzLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawko
cmV2aXNpb24gNTMzOTkpCisrKyBXZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsJKHdvcmtp
bmcgY29weSkKQEAgLTE4NCw5ICsxODQsOSBAQCBMT0NBTF9TUkNfRklMRVMgKz0gXAogCWJyaWRn
ZS9jL2NfcnVudGltZS5jcHAgXAogCWJyaWRnZS9jL2NfdXRpbGl0eS5jcHAgXAogCWJyaWRnZS9q
bmkvam5pX2NsYXNzLmNwcCBcCi0JYnJpZGdlL2puaS9qbmlfaW5zdGFuY2UuY3BwIFwKIAlicmlk
Z2Uvam5pL2puaV9ydW50aW1lLmNwcCBcCiAJYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHAgXAor
CWJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAgXAogCWJyaWRnZS9qbmkvanNjL2pu
aV91dGlsaXR5X3ByaXZhdGUuY3BwIFwKIAlicmlkZ2UvbnBydW50aW1lLmNwcCBcCiAJYnJpZGdl
L3J1bnRpbWUuY3BwIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTMzOTkpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBAIHdlYmNvcmVfY3Bw
ZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvYmluZGluZ3MvanMgXAogCS1JJChzcmNk
aXIpL1dlYkNvcmUvYnJpZGdlIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL2JyaWRnZS9jIFwKKwkt
SSQoc3JjZGlyKS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjIFwKIAktSSQoc3JjZGlyKS9XZWJDb3Jl
L2NzcyBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9kb20gXAogCS1JJChzcmNkaXIpL1dlYkNvcmUv
ZG9tL2RlZmF1bHQgXApAQCAtNTAzLDEwICs1MDQsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAgXAogCVdlYkNvcmUvYnJpZGdlL2MvY191
dGlsaXR5LmggXAogCVdlYkNvcmUvYnJpZGdlL2puaS9qbmlfY2xhc3MuaCBcCi0JV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5oIFwKIAlXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2Jq
ZWN0LmggXAogCVdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oIFwKIAlXZWJDb3JlL2Jy
aWRnZS9qbmkvam5pX3V0aWxpdHkuaCBcCisJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5z
dGFuY2VKU0MuaCBcCiAJV2ViQ29yZS9icmlkZ2UvbnBhcGkuaCBcCiAJV2ViQ29yZS9icmlkZ2Uv
bnBydW50aW1lLmNwcCBcCiAJV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lLmggXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDUzMzk5KQor
KysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNSw4ICszMDUsNiBAQAogCQkxQTU2OUNGRTBEN0UyQjgyMDA3QzM5ODMgLyogY191
dGlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTU2OUNDRDBEN0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5LmggKi87IH07CiAJCTFBNTY5Q0ZG
MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDQ0YwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9j
bGFzcy5jcHAgKi87IH07CiAJCTFBNTY5RDAwMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0Qw
MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuaCAqLzsgfTsKLQkJMUE1NjlEMDEwRDdFMkI4
MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEMTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2luc3Rh
bmNlLmNwcCAqLzsgfTsKLQkJMUE1NjlEMDIwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlD
RDIwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5oICovOyB9OwogCQkxQTU2OUQwMzBE
N0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9q
c29iamVjdC5tbSAqLzsgfTsKIAkJMUE1NjlEMDQwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1
NjlDRDQwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4
MyAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNTY5Q0Q1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAqLzsgfTsKQEAg
LTExMTUsNiArMTExMyw4IEBACiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZp
ZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU5OUQxRTMyMTBDOTdENkUwMEUw
RUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OUQxRTMwMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRp
bGl0eV9wcml2YXRlLmNwcCAqLzsgfTsKIAkJNTk5RDFFMzMxMEM5N0Q2RTAwRTBFRjEyIC8qIGpu
aV91dGlsaXR5X3ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU5OUQxRTMxMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRl
LmggKi87IH07CisJCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3
QUYxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgKi87IH07CisJCTU5QTlF
N0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAv
KiBKYXZhSW5zdGFuY2VKU0MuaCAqLzsgfTsKIAkJNTlDNzdGMkExMDU0NUIzQjAwNTA2MTA0IC8q
IEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTlDNzdGMjgxMDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9u
U2VydmljZU1vY2suY3BwICovOyB9OwogCQk1OUM3N0YyQjEwNTQ1QjNCMDA1MDYxMDQgLyogR2Vv
bG9jYXRpb25TZXJ2aWNlTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTlDNzdGMjkxMDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2Vydmlj
ZU1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1RDE1RTNBQjBGOUU2QUMxMDA5RTBFM0YgLyogWE1MVG9rZW5pemVyU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQxNUUzQTkwRjlFNkFD
MTAwOUUwRTNGIC8qIFhNTFRva2VuaXplclNjb3BlLmNwcCAqLzsgfTsKQEAgLTU1NTAsOCArNTU1
MCw2IEBACiAJCTFBNTY5Q0NEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY191dGlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBNTY5Q0NGMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gam5pX2NsYXNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1NjlDRDAwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9j
bGFzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBqbmlfY2xhc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDRDEwRDdFMkI4MjAwN0MzOTgzIC8qIGpu
aV9pbnN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBqbmlf
aW5zdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNEMjBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGpuaV9pbnN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2
OUNEMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gam5pX2pzb2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTU2OUNENDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGpuaV9qc29iamVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNENTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX29i
amMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBqbmlfb2JqYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0NjUsNiArNjQ2Myw4IEBACiAJCTU1
MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU5
OUQxRTMwMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGpuaV91dGlsaXR5X3ByaXZhdGUuY3BwOyBw
YXRoID0ganNjL2puaV91dGlsaXR5X3ByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1OTlEMUUzMTEwQzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBqbmlfdXRpbGl0eV9wcml2YXRlLmg7
IHBhdGggPSBqc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1OUE5RTdBRjExMDQ3NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEphdmFJbnN0YW5jZUpTQy5jcHA7
IHBhdGggPSBqc2MvSmF2YUluc3RhbmNlSlNDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTlBOUU3QjExMTA0NzU5NDAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKYXZhSW5zdGFuY2VKU0MuaDsgcGF0aCA9IGpz
Yy9KYXZhSW5zdGFuY2VKU0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlDNzdG
MjgxMDU0NUIzQjAwNTA2MTA0IC8qIEdlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5jcHA7
IHBhdGggPSBtb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1OUM3N0YyOTEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9jYXRpb25TZXJ2
aWNlTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvblNl
cnZpY2VNb2NrLmg7IHBhdGggPSBtb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQxNUUzQTkwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTFRv
a2VuaXplclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhN
TFRva2VuaXplclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMzQz
LDggKzEwMzQzLDYgQEAKIAkJCQk1OTlEMUUyRjEwQzk3RDRDMDBFMEVGMTIgLyoganNjICovLAog
CQkJCTFBNTY5Q0NGMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwICovLAogCQkJCTFB
NTY5Q0QwMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuaCAqLywKLQkJCQkxQTU2OUNEMTBE
N0UyQjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNlLmNwcCAqLywKLQkJCQkxQTU2OUNEMjBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX2luc3RhbmNlLmggKi8sCiAJCQkJMUE1NjlDRDQwRDdFMkI4MjAw
N0MzOTgzIC8qIGpuaV9qc29iamVjdC5oICovLAogCQkJCTFBNTY5Q0QzMEQ3RTJCODIwMDdDMzk4
MyAvKiBqbmlfanNvYmplY3QubW0gKi8sCiAJCQkJMUE1NjlDRDUwRDdFMkI4MjAwN0MzOTgzIC8q
IGpuaV9vYmpjLm1tICovLApAQCAtMTEwNTcsNiArMTEwNTUsOCBAQAogCQk1OTlEMUUyRjEwQzk3
RDRDMDBFMEVGMTIgLyoganNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk1OUE5RTdCMTExMDQ3NTk0MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmgg
Ki8sCisJCQkJNTlBOUU3QUYxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAg
Ki8sCiAJCQkJNTk5RDFFMzAxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUu
Y3BwICovLAogCQkJCTU5OUQxRTMxMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2
YXRlLmggKi8sCiAJCQkpOwpAQCAtMTcxNDIsNyArMTcxNDIsNiBAQAogCQkJCTFDODFCQTAxMEU5
NzMzQ0IwMDI2NkUwNyAvKiBKYXZhU2NyaXB0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUM4MUI5RkYwRTk3MzNDQjAwMjY2RTA3IC8qIEphdmFTY3JpcHRQcm9maWxlTm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE1NjlEMDAwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9jbGFzcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlEMDIwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMDQwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9q
c29iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMDcwRDdFMkI4MjAwN0MzOTgzIC8q
IGpuaV9ydW50aW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQwOTBEN0UyQjgyMDA3QzM5
ODMgLyogam5pX3V0aWxpdHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTgzNDksNiArMTgzNDgsNyBA
QAogCQkJCTZFNEU5MUFEMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0RTkxQUYxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFRThBNzczMTBGODAzRjMw
MDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU5QTlFN0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMTkzMTUsNyArMTkzMTUsNiBAQAogCQkJCTFDODFCQTAyMEU5NzMzQ0IwMDI2NkUw
NyAvKiBKYXZhU2NyaXB0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzgxQkEwMDBF
OTczM0NCMDAyNjZFMDcgLyogSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBNTY5Q0ZGMEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfY2xhc3MuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMUE1NjlEMDEwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9pbnN0YW5jZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQwMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2Jq
ZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpu
aV9vYmpjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMDYwRDdFMkI4MjAwN0MzOTgzIC8q
IGpuaV9ydW50aW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA1MTMsNiArMjA1MTIsNyBAQAog
CQkJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk2RTRFOTFBRTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUU4QTc3MjEwRjgwM0Yz
MDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFj
Lm1tCShyZXZpc2lvbiA1MzM5OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogI2ltcG9ydCAicnVu
dGltZS5oIgogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLSNpbXBvcnQgImpuaV9pbnN0
YW5jZS5oIgorI2ltcG9ydCAiSmF2YUluc3RhbmNlSlNDLmgiCiAjZW5kaWYKIAogQGludGVyZmFj
ZSBOU09iamVjdCAoV2ViUGx1Z2luKQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0
YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5j
cHAJKHJldmlzaW9uIDUzMzk5KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0YW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiam5pX2luc3RhbmNlLmgiCi0KLSNpZiBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiam5pX2NsYXNzLmgiCi0jaW5jbHVkZSAiam5p
X3J1bnRpbWUuaCIKLSNpbmNsdWRlICJqbmlfdXRpbGl0eS5oIgotI2luY2x1ZGUgImpuaV91dGls
aXR5X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgotI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi0jaWYgUExBVEZP
Uk0oQU5EUk9JRCkKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jaWZkZWYgTkRFQlVH
Ci0jZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKLSNlbHNlCi0jZGVm
aW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKLSAgICBmcHJpbnRmIChzdGRlcnIsICIl
czolZCAtLSAlczogICIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgXAotICAg
IGZwcmludGYoc3RkZXJyLCBmb3JtYXRBbmRBcmdzKTsgXAotfQotI2VuZGlmCi0gCi11c2luZyBu
YW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUphdmFJbnN0
YW5jZTo6SmF2YUluc3RhbmNlIChqb2JqZWN0IGluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3RPYmplY3QpCi0gICAgOiBJbnN0YW5jZShyb290T2JqZWN0KQotewotICAgIF9pbnN0
YW5jZSA9IG5ldyBKT2JqZWN0V3JhcHBlciAoaW5zdGFuY2UpOwotICAgIF9jbGFzcyA9IDA7Ci19
Ci0KLUphdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSAoKSAKLXsKLSAgICBkZWxldGUgX2NsYXNz
OyAKLX0KLQotI2RlZmluZSBOVU1fTE9DQUxfUkVGUyA2NAotCi12b2lkIEphdmFJbnN0YW5jZTo6
dmlydHVhbEJlZ2luKCkKLXsKLSAgICBnZXRKTklFbnYoKS0+UHVzaExvY2FsRnJhbWUgKE5VTV9M
T0NBTF9SRUZTKTsKLX0KLQotdm9pZCBKYXZhSW5zdGFuY2U6OnZpcnR1YWxFbmQoKQotewotICAg
IGdldEpOSUVudigpLT5Qb3BMb2NhbEZyYW1lIChOVUxMKTsKLX0KLQotQ2xhc3MgKkphdmFJbnN0
YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdCAKLXsKLSAgICBpZiAoX2NsYXNzID09IDApCi0gICAgICAg
IF9jbGFzcyA9IG5ldyBKYXZhQ2xhc3MgKF9pbnN0YW5jZS0+X2luc3RhbmNlKTsKLSAgICByZXR1
cm4gX2NsYXNzOwotfQotCi1KU1ZhbHVlIEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAotewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0gICAgCi0gICAganN0cmluZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRo
b2Q8am9iamVjdD4oX2luc3RhbmNlLT5faW5zdGFuY2UsICJ0b1N0cmluZyIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpOwotICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgY29uc3Qg
amNoYXIgKmMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZW52LCBzdHJpbmdWYWx1
ZSk7Ci0gICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciAqKWMsIChpbnQpZW52LT5HZXRTdHJpbmdM
ZW5ndGgoc3RyaW5nVmFsdWUpKTsKLSAgICByZWxlYXNlVUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5F
bnYoZW52LCBzdHJpbmdWYWx1ZSwgYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHUpOwot
fQotCi1KU1ZhbHVlIEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAotewotICAgIGpkb3VibGUgZG91YmxlVmFsdWUgPSBjYWxsSk5JTWV0aG9kPGpkb3VibGU+
KF9pbnN0YW5jZS0+X2luc3RhbmNlLCAiZG91YmxlVmFsdWUiLCAiKClEIik7Ci0gICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGRvdWJsZVZhbHVlKTsKLX0KLQotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6
OmJvb2xlYW5WYWx1ZSgpIGNvbnN0Ci17Ci0gICAgamJvb2xlYW4gYm9vbGVhblZhbHVlID0gY2Fs
bEpOSU1ldGhvZDxqYm9vbGVhbj4oX2luc3RhbmNlLT5faW5zdGFuY2UsICJib29sZWFuVmFsdWUi
LCAiKClaIik7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihib29sZWFuVmFsdWUpOwotfQotCi1KU1Zh
bHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1l
dGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCi17Ci0gICAgaW50IGks
IGNvdW50ID0gYXJncy5zaXplKCk7Ci0gICAganZhbHVlICpqQXJnczsKLSAgICBKU1ZhbHVlIHJl
c3VsdFZhbHVlOwotICAgIE1ldGhvZCAqbWV0aG9kID0gMDsKLSAgICBzaXplX3QgbnVtTWV0aG9k
cyA9IG1ldGhvZExpc3Quc2l6ZSgpOwotICAgIAotICAgIC8vIFRyeSB0byBmaW5kIGEgZ29vZCBt
YXRjaCBmb3IgdGhlIG92ZXJsb2FkZWQgbWV0aG9kLiAgVGhlIAotICAgIC8vIGZ1bmRhbWVudGFs
IHByb2JsZW0gaXMgdGhhdCBKYXZhU2NyaXB0IGRvZXNuIGhhdmUgdGhlCi0gICAgLy8gbm90aW9u
IG9mIG1ldGhvZCBvdmVybG9hZGluZyBhbmQgSmF2YSBkb2VzLiAgV2UgY291bGQgCi0gICAgLy8g
Z2V0IGEgYml0IG1vcmUgc29waGlzdGljYXRlZCBhbmQgYXR0ZW1wdCB0byBkb2VzIHNvbWUKLSAg
ICAvLyB0eXBlIGNoZWNraW5nIGFzIHdlIGFzIGNoZWNraW5nIHRoZSBudW1iZXIgb2YgcGFyYW1l
dGVycy4KLSAgICBNZXRob2QgKmFNZXRob2Q7Ci0gICAgZm9yIChzaXplX3QgbWV0aG9kSW5kZXgg
PSAwOyBtZXRob2RJbmRleCA8IG51bU1ldGhvZHM7IG1ldGhvZEluZGV4KyspIHsKLSAgICAgICAg
YU1ldGhvZCA9IG1ldGhvZExpc3RbbWV0aG9kSW5kZXhdOwotICAgICAgICBpZiAoYU1ldGhvZC0+
bnVtUGFyYW1ldGVycygpID09IGNvdW50KSB7Ci0gICAgICAgICAgICBtZXRob2QgPSBhTWV0aG9k
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1ldGhvZCA9
PSAwKSB7Ci0gICAgICAgIEpTX0xPRyAoInVuYWJsZSB0byBmaW5kIGFuIGFwcHJvcGlhdGUgbWV0
aG9kXG4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAg
IGNvbnN0IEphdmFNZXRob2QgKmpNZXRob2QgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhTWV0aG9k
Kj4obWV0aG9kKTsKLSAgICBKU19MT0cgKCJjYWxsICVzICVzIG9uICVwXG4iLCBVU3RyaW5nKGpN
ZXRob2QtPm5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIGpNZXRob2QtPnNpZ25hdHVyZSgp
LCBfaW5zdGFuY2UtPl9pbnN0YW5jZSk7Ci0gICAgCi0gICAgaWYgKGNvdW50ID4gMCkgewotICAg
ICAgICBqQXJncyA9IChqdmFsdWUgKiltYWxsb2MgKGNvdW50ICogc2l6ZW9mKGp2YWx1ZSkpOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGpBcmdzID0gMDsKLSAgICAgICAgCi0gICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgSmF2YVBhcmFtZXRlciogYVBhcmFtZXRl
ciA9IGpNZXRob2QtPnBhcmFtZXRlckF0KGkpOwotICAgICAgICBqQXJnc1tpXSA9IGNvbnZlcnRW
YWx1ZVRvSlZhbHVlKGV4ZWMsIGFyZ3MuYXQoaSksIGFQYXJhbWV0ZXItPmdldEpOSVR5cGUoKSwg
YVBhcmFtZXRlci0+dHlwZSgpKTsKLSAgICAgICAgSlNfTE9HKCJhcmdbJWRdID0gJXNcbiIsIGks
IGFyZ3MuYXQoaSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBqdmFsdWUgcmVzdWx0OwotCi0gICAgLy8gVHJ5IHRvIHVzZSB0aGUgSk5JIGFic3RyYWN0aW9u
IGZpcnN0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0gICAgLy8gbm9ybm1hbCBKTkkuICBUaGUg
Sk5JIGRpc3BhdGNoIGFic3RyYWN0aW9uIGFsbG93cyB0aGUgSmF2YSBwbHVnaW4KLSAgICAvLyB0
byBkaXNwYXRjaCB0aGUgY2FsbCBvbiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJuYWwgVk0gdGhyZWFk
LgotICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7Ci0gICAg
aWYgKCFyb290T2JqZWN0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGJv
b2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmIChyb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkg
ewotICAgICAgICBqb2JqZWN0IG9iaiA9IF9pbnN0YW5jZS0+X2luc3RhbmNlOwotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOwotICAgICAgICBjb25zdCBjaGFyICpjYWxsaW5n
VVJMID0gMDsgIC8vIEZJWE1FLCBuZWVkIHRvIHByb3BhZ2F0ZSBjYWxsaW5nIFVSTCB0byBKYXZh
Ci0gICAgICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+bmF0
aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwgak1ldGhvZC0+Sk5JUmV0dXJu
VHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncywgcmVzdWx0LCBjYWxsaW5nVVJM
LCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb25EZXNjcmlwdGlv
bikgewotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIGZyZWUgKGpBcmdzKTsK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBjYW4gYmUgY29uZGl0aW9uYWxseSByZW1vdmVk
IG9uY2Ugd2UgaGF2ZSBhIFRpZ2VyIHVwZGF0ZSB0aGF0Ci0gICAgLy8gY29udGFpbnMgdGhlIG5l
dyBKYXZhIHBsdWdpbi4gIEl0IGlzIG5lZWRlZCBmb3IgYnVpbGRzIHByaW9yIHRvIFRpZ2VyLgot
ICAgIGlmICghaGFuZGxlZCkgeyAgICAKLSAgICAgICAgam9iamVjdCBvYmogPSBfaW5zdGFuY2Ut
Pl9pbnN0YW5jZTsKLSAgICAgICAgc3dpdGNoIChqTWV0aG9kLT5KTklSZXR1cm5UeXBlKCkpewot
ICAgICAgICAgICAgY2FzZSB2b2lkX3R5cGU6Ci0gICAgICAgICAgICAgICAgY2FsbEpOSU1ldGhv
ZElEQTx2b2lkPihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpBcmdzKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBjYWxsSk5JTWV0aG9kSURBPGpvYmplY3Q+KG9i
aiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LnogPSBjYWxsSk5JTWV0aG9kSURBPGpib29sZWFuPihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9i
aiksIGpBcmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgYnl0
ZV90eXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdC5iID0gY2FsbEpOSU1ldGhvZElEQTxqYnl0
ZT4ob2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGNoYXJfdHlwZToKLSAgICAgICAgICAgICAgICByZXN1
bHQuYyA9IGNhbGxKTklNZXRob2RJREE8amNoYXI+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2Jq
KSwgakFyZ3MpOwotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBzaG9ydF90eXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdC5zID0gY2FsbEpOSU1l
dGhvZElEQTxqc2hvcnQ+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBpbnRfdHlwZToKLSAgICAgICAg
ICAgICAgICByZXN1bHQuaSA9IGNhbGxKTklNZXRob2RJREE8amludD4ob2JqLCBqTWV0aG9kLT5t
ZXRob2RJRChvYmopLCBqQXJncyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgbG9uZ190eXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdC5q
ID0gY2FsbEpOSU1ldGhvZElEQTxqbG9uZz4ob2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBq
QXJncyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZsb2F0X3R5
cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmYgPSBjYWxsSk5JTWV0aG9kSURBPGpmbG9hdD4o
b2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIGRvdWJsZV90eXBlOgotICAgICAgICAgICAgICAgIHJlc3Vs
dC5kID0gY2FsbEpOSU1ldGhvZElEQTxqZG91YmxlPihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9i
aiksIGpBcmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgaW52
YWxpZF90eXBlOgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgc3dpdGNoIChqTWV0aG9kLT5KTklSZXR1
cm5UeXBlKCkpewotICAgICAgICBjYXNlIHZvaWRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAKLSAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAgICAgICAgaWYgKHJlc3VsdC5s
ICE9IDApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphcnJheVR5cGUgPSBqTWV0aG9k
LT5yZXR1cm5UeXBlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5VHlwZVswXSA9PSAnWycp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBKYXZhQXJyYXk6OmNvbnZlcnRK
T2JqZWN0VG9BcnJheShleGVjLCByZXN1bHQubCwgYXJyYXlUeXBlLCByb290T2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFZhbHVlID0gSmF2YUluc3RhbmNlOjpjcmVhdGUocmVzdWx0LmwsIHJvb3RPYmpl
Y3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdFZhbHVl
ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7Ci0gICAgICAgICAgICBy
ZXN1bHRWYWx1ZSA9IGpzQm9vbGVhbihyZXN1bHQueik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgcmVz
dWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuYik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIGNoYXJfdHlwZTogewotICAgICAgICAgICAg
cmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuYyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIHNob3J0X3R5cGU6IHsKLSAgICAgICAg
ICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIoZXhlYywgcmVzdWx0LnMpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAg
ICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuaSk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIGxvbmdfdHlwZTogewotICAg
ICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuaik7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIGZsb2F0X3R5cGU6IHsK
LSAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIoZXhlYywgcmVzdWx0LmYpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlw
ZTogewotICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuZCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBpbnZhbGlkX3R5cGU6
Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBmcmVlIChqQXJn
cyk7Ci0KLSAgICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19Ci0KLUpTVmFsdWUgSmF2YUluc3RhbmNl
OjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhp
bnQpIGNvbnN0Ci17Ci0gICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQotICAgICAgICByZXR1
cm4gc3RyaW5nVmFsdWUoZXhlYyk7Ci0gICAgaWYgKGhpbnQgPT0gUHJlZmVyTnVtYmVyKQotICAg
ICAgICByZXR1cm4gbnVtYmVyVmFsdWUoZXhlYyk7Ci0gICAgSmF2YUNsYXNzICphQ2xhc3MgPSBz
dGF0aWNfY2FzdDxKYXZhQ2xhc3MqPihnZXRDbGFzcygpKTsKLSAgICBpZiAoYUNsYXNzLT5pc1N0
cmluZ0NsYXNzKCkpCi0gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKLSAgICBpZiAo
YUNsYXNzLT5pc051bWJlckNsYXNzKCkpCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShleGVj
KTsKLSAgICBpZiAoYUNsYXNzLT5pc0Jvb2xlYW5DbGFzcygpKQotICAgICAgICByZXR1cm4gYm9v
bGVhblZhbHVlKCk7Ci0gICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7Ci19Ci0KLUpTVmFsdWUgSmF2
YUluc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgCi17Ci0gICAgcmV0dXJu
IHN0cmluZ1ZhbHVlKGV4ZWMpOwotfQotCi1KT2JqZWN0V3JhcHBlcjo6Sk9iamVjdFdyYXBwZXIo
am9iamVjdCBpbnN0YW5jZSkKLTogX3JlZkNvdW50KDApCi17Ci0gICAgYXNzZXJ0IChpbnN0YW5j
ZSAhPSAwKTsKLQotICAgIC8vIENhY2hlIHRoZSBKTklFbnYgdXNlZCB0byBnZXQgdGhlIGdsb2Jh
bCByZWYgZm9yIHRoaXMgamF2YSBpbnN0YW5hY2UuCi0gICAgLy8gSXQnbGwgYmUgdXNlZCB0byBk
ZWxldGUgdGhlIHJlZmVyZW5jZS4KLSAgICBfZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgICAgIAot
ICAgIF9pbnN0YW5jZSA9IF9lbnYtPk5ld0dsb2JhbFJlZiAoaW5zdGFuY2UpOwotICAgIAotICAg
IEpTX0xPRyAoIm5ldyBnbG9iYWwgcmVmICVwIGZvciAlcFxuIiwgX2luc3RhbmNlLCBpbnN0YW5j
ZSk7Ci0KLSAgICBpZiAgKF9pbnN0YW5jZSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYgKHN0
ZGVyciwgIiVzOiAgY291bGQgbm90IGdldCBHbG9iYWxSZWYgZm9yICVwXG4iLCBfX1BSRVRUWV9G
VU5DVElPTl9fLCBpbnN0YW5jZSk7Ci0gICAgfQotfQotCi1KT2JqZWN0V3JhcHBlcjo6fkpPYmpl
Y3RXcmFwcGVyKCkgewotICAgIEpTX0xPRyAoImRlbGV0aW5nIGdsb2JhbCByZWYgJXBcbiIsIF9p
bnN0YW5jZSk7Ci0gICAgX2Vudi0+RGVsZXRlR2xvYmFsUmVmIChfaW5zdGFuY2UpOwotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2lu
c3RhbmNlLmgJKHJldmlzaW9uIDUzMzk5KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9pbnN0
YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIF9KTklfSU5TVEFOQ0VfSF8KLSNkZWZpbmUgX0pOSV9JTlNUQU5DRV9IXwot
Ci0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNp
bmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLQotI2luY2x1ZGUgPEphdmFWTS9qbmkuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIEphdmFDbGFzczsK
LQotY2xhc3MgSk9iamVjdFdyYXBwZXIKLXsKLWZyaWVuZCBjbGFzcyBSZWZQdHI8Sk9iamVjdFdy
YXBwZXI+OwotZnJpZW5kIGNsYXNzIEphdmFBcnJheTsKLWZyaWVuZCBjbGFzcyBKYXZhRmllbGQ7
Ci1mcmllbmQgY2xhc3MgSmF2YUluc3RhbmNlOwotZnJpZW5kIGNsYXNzIEphdmFNZXRob2Q7Ci0K
LXB1YmxpYzoKLSAgICBqb2JqZWN0IGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gX2luc3RhbmNl
OyB9Ci0gICAgdm9pZCBzZXRJbnN0YW5jZShqb2JqZWN0IGluc3RhbmNlKSB7IF9pbnN0YW5jZSA9
IGluc3RhbmNlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBKT2JqZWN0V3JhcHBlcihqb2JqZWN0IGlu
c3RhbmNlKTsgICAgCi0gICAgfkpPYmplY3RXcmFwcGVyKCk7Ci0gICAgCi0gICAgdm9pZCByZWYo
KSB7IF9yZWZDb3VudCsrOyB9Ci0gICAgdm9pZCBkZXJlZigpIAotICAgIHsgCi0gICAgICAgIGlm
ICgtLV9yZWZDb3VudCA9PSAwKSAKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOyAKLSAgICB9Ci0K
LSAgICBqb2JqZWN0IF9pbnN0YW5jZTsKLQotcHJpdmF0ZToKLSAgICBKTklFbnYgKl9lbnY7Ci0g
ICAgdW5zaWduZWQgaW50IF9yZWZDb3VudDsKLX07Ci0KLWNsYXNzIEphdmFJbnN0YW5jZSA6IHB1
YmxpYyBJbnN0YW5jZQotewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFJbnN0
YW5jZT4gY3JlYXRlKGpvYmplY3QgaW5zdGFuY2UsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9v
dE9iamVjdCkgCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEphdmFJbnN0YW5j
ZShpbnN0YW5jZSwgcm9vdE9iamVjdCkpOwotICAgIH0KLSAgICAKLSAgICB+SmF2YUluc3RhbmNl
KCk7Ci0gICAgCi0gICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdDsKLSAgICAKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEpTVmFsdWUgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncyk7Ci0KLSAg
ICBqb2JqZWN0IGphdmFJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIF9pbnN0YW5jZS0+X2luc3Rh
bmNlOyB9Ci0gICAgCi0gICAgSlNWYWx1ZSBzdHJpbmdWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsK
LSAgICBKU1ZhbHVlIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUg
Ym9vbGVhblZhbHVlKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBKYXZhSW5zdGFuY2Uoam9i
amVjdCBpbnN0YW5jZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7Ci0gICAgdmlydHVhbCB2b2lk
IHZpcnR1YWxCZWdpbigpOwotICAgIHZpcnR1YWwgdm9pZCB2aXJ0dWFsRW5kKCk7Ci0KLSAgICBS
ZWZQdHI8Sk9iamVjdFdyYXBwZXI+IF9pbnN0YW5jZTsKLSAgICBtdXRhYmxlIEphdmFDbGFzcyAq
X2NsYXNzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gX0pO
SV9JTlNUQU5DRV9IXwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgJKHJldmlzaW9uIDUz
Mzk5KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNpbmNs
dWRlIDxqbmlfdXRpbGl0eS5oPgotI2luY2x1ZGUgPGpuaV9pbnN0YW5jZS5oPgorI2luY2x1ZGUg
IkphdmFJbnN0YW5jZUpTQy5oIgorI2luY2x1ZGUgImpuaV91dGlsaXR5LmgiCiAjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KIAogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
SW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiA1MzM5OSkJKGZyb20gV2ViQ29yZS9icmlkZ2Uvam5p
L2puaV9pbnN0YW5jZS5jcHA6NTMzOTkpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiam5pX2luc3RhbmNlLmgiCisK
KyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiam5pX2NsYXNzLmgiCisj
aW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKKyNpbmNsdWRlICJqbmlfdXRpbGl0eS5oIgorI2luY2x1
ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgor
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgor
CisjaWYgUExBVEZPUk0oQU5EUk9JRCkKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisj
aWZkZWYgTkRFQlVHCisjZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkK
KyNlbHNlCisjZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKKyAgICBmcHJpbnRm
IChzdGRlcnIsICIlczolZCAtLSAlczogICIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElP
Tl9fKTsgXAorICAgIGZwcmludGYoc3RkZXJyLCBmb3JtYXRBbmRBcmdzKTsgXAorfQorI2VuZGlm
CisgCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK0phdmFJbnN0YW5jZTo6SmF2YUluc3RhbmNlIChqb2JqZWN0IGluc3RhbmNlLCBQYXNzUmVm
UHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCisgICAgOiBJbnN0YW5jZShyb290T2JqZWN0KQor
eworICAgIF9pbnN0YW5jZSA9IG5ldyBKT2JqZWN0V3JhcHBlciAoaW5zdGFuY2UpOworICAgIF9j
bGFzcyA9IDA7Cit9CisKK0phdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSAoKSAKK3sKKyAgICBk
ZWxldGUgX2NsYXNzOyAKK30KKworI2RlZmluZSBOVU1fTE9DQUxfUkVGUyA2NAorCit2b2lkIEph
dmFJbnN0YW5jZTo6dmlydHVhbEJlZ2luKCkKK3sKKyAgICBnZXRKTklFbnYoKS0+UHVzaExvY2Fs
RnJhbWUgKE5VTV9MT0NBTF9SRUZTKTsKK30KKwordm9pZCBKYXZhSW5zdGFuY2U6OnZpcnR1YWxF
bmQoKQoreworICAgIGdldEpOSUVudigpLT5Qb3BMb2NhbEZyYW1lIChOVUxMKTsKK30KKworQ2xh
c3MgKkphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdCAKK3sKKyAgICBpZiAoX2NsYXNzID09
IDApCisgICAgICAgIF9jbGFzcyA9IG5ldyBKYXZhQ2xhc3MgKF9pbnN0YW5jZS0+X2luc3RhbmNl
KTsKKyAgICByZXR1cm4gX2NsYXNzOworfQorCitKU1ZhbHVlIEphdmFJbnN0YW5jZTo6c3RyaW5n
VmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgCisgICAganN0cmluZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5n
KWNhbGxKTklNZXRob2Q8am9iamVjdD4oX2luc3RhbmNlLT5faW5zdGFuY2UsICJ0b1N0cmluZyIs
ICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOworICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7
CisgICAgY29uc3QgamNoYXIgKmMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZW52
LCBzdHJpbmdWYWx1ZSk7CisgICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciAqKWMsIChpbnQpZW52
LT5HZXRTdHJpbmdMZW5ndGgoc3RyaW5nVmFsdWUpKTsKKyAgICByZWxlYXNlVUNoYXJhY3RlcnNG
b3JKU3RyaW5nSW5FbnYoZW52LCBzdHJpbmdWYWx1ZSwgYyk7CisgICAgcmV0dXJuIGpzU3RyaW5n
KGV4ZWMsIHUpOworfQorCitKU1ZhbHVlIEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAoreworICAgIGpkb3VibGUgZG91YmxlVmFsdWUgPSBjYWxsSk5JTWV0
aG9kPGpkb3VibGU+KF9pbnN0YW5jZS0+X2luc3RhbmNlLCAiZG91YmxlVmFsdWUiLCAiKClEIik7
CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGRvdWJsZVZhbHVlKTsKK30KKworSlNWYWx1ZSBK
YXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0Cit7CisgICAgamJvb2xlYW4gYm9vbGVh
blZhbHVlID0gY2FsbEpOSU1ldGhvZDxqYm9vbGVhbj4oX2luc3RhbmNlLT5faW5zdGFuY2UsICJi
b29sZWFuVmFsdWUiLCAiKClaIik7CisgICAgcmV0dXJuIGpzQm9vbGVhbihib29sZWFuVmFsdWUp
OworfQorCitKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCit7
CisgICAgaW50IGksIGNvdW50ID0gYXJncy5zaXplKCk7CisgICAganZhbHVlICpqQXJnczsKKyAg
ICBKU1ZhbHVlIHJlc3VsdFZhbHVlOworICAgIE1ldGhvZCAqbWV0aG9kID0gMDsKKyAgICBzaXpl
X3QgbnVtTWV0aG9kcyA9IG1ldGhvZExpc3Quc2l6ZSgpOworICAgIAorICAgIC8vIFRyeSB0byBm
aW5kIGEgZ29vZCBtYXRjaCBmb3IgdGhlIG92ZXJsb2FkZWQgbWV0aG9kLiAgVGhlIAorICAgIC8v
IGZ1bmRhbWVudGFsIHByb2JsZW0gaXMgdGhhdCBKYXZhU2NyaXB0IGRvZXNuIGhhdmUgdGhlCisg
ICAgLy8gbm90aW9uIG9mIG1ldGhvZCBvdmVybG9hZGluZyBhbmQgSmF2YSBkb2VzLiAgV2UgY291
bGQgCisgICAgLy8gZ2V0IGEgYml0IG1vcmUgc29waGlzdGljYXRlZCBhbmQgYXR0ZW1wdCB0byBk
b2VzIHNvbWUKKyAgICAvLyB0eXBlIGNoZWNraW5nIGFzIHdlIGFzIGNoZWNraW5nIHRoZSBudW1i
ZXIgb2YgcGFyYW1ldGVycy4KKyAgICBNZXRob2QgKmFNZXRob2Q7CisgICAgZm9yIChzaXplX3Qg
bWV0aG9kSW5kZXggPSAwOyBtZXRob2RJbmRleCA8IG51bU1ldGhvZHM7IG1ldGhvZEluZGV4Kysp
IHsKKyAgICAgICAgYU1ldGhvZCA9IG1ldGhvZExpc3RbbWV0aG9kSW5kZXhdOworICAgICAgICBp
ZiAoYU1ldGhvZC0+bnVtUGFyYW1ldGVycygpID09IGNvdW50KSB7CisgICAgICAgICAgICBtZXRo
b2QgPSBhTWV0aG9kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKG1ldGhvZCA9PSAwKSB7CisgICAgICAgIEpTX0xPRyAoInVuYWJsZSB0byBmaW5kIGFuIGFw
cHJvcGlhdGUgbWV0aG9kXG4iKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
fQorICAgIAorICAgIGNvbnN0IEphdmFNZXRob2QgKmpNZXRob2QgPSBzdGF0aWNfY2FzdDxjb25z
dCBKYXZhTWV0aG9kKj4obWV0aG9kKTsKKyAgICBKU19MT0cgKCJjYWxsICVzICVzIG9uICVwXG4i
LCBVU3RyaW5nKGpNZXRob2QtPm5hbWUoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIGpNZXRob2Qt
PnNpZ25hdHVyZSgpLCBfaW5zdGFuY2UtPl9pbnN0YW5jZSk7CisgICAgCisgICAgaWYgKGNvdW50
ID4gMCkgeworICAgICAgICBqQXJncyA9IChqdmFsdWUgKiltYWxsb2MgKGNvdW50ICogc2l6ZW9m
KGp2YWx1ZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGpBcmdzID0gMDsKKyAgICAgICAg
CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgSmF2YVBhcmFtZXRl
ciogYVBhcmFtZXRlciA9IGpNZXRob2QtPnBhcmFtZXRlckF0KGkpOworICAgICAgICBqQXJnc1tp
XSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIGFyZ3MuYXQoaSksIGFQYXJhbWV0ZXItPmdl
dEpOSVR5cGUoKSwgYVBhcmFtZXRlci0+dHlwZSgpKTsKKyAgICAgICAgSlNfTE9HKCJhcmdbJWRd
ID0gJXNcbiIsIGksIGFyZ3MuYXQoaSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgfQor
ICAgICAgICAKKyAgICBqdmFsdWUgcmVzdWx0OworCisgICAgLy8gVHJ5IHRvIHVzZSB0aGUgSk5J
IGFic3RyYWN0aW9uIGZpcnN0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisgICAgLy8gbm9ybm1h
bCBKTkkuICBUaGUgSk5JIGRpc3BhdGNoIGFic3RyYWN0aW9uIGFsbG93cyB0aGUgSmF2YSBwbHVn
aW4KKyAgICAvLyB0byBkaXNwYXRjaCB0aGUgY2FsbCBvbiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJu
YWwgVk0gdGhyZWFkLgorICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2Jq
ZWN0KCk7CisgICAgaWYgKCFyb290T2JqZWN0KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIGlmIChyb290T2JqZWN0LT5uYXRp
dmVIYW5kbGUoKSkgeworICAgICAgICBqb2JqZWN0IG9iaiA9IF9pbnN0YW5jZS0+X2luc3RhbmNl
OworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOworICAgICAgICBjb25zdCBj
aGFyICpjYWxsaW5nVVJMID0gMDsgIC8vIEZJWE1FLCBuZWVkIHRvIHByb3BhZ2F0ZSBjYWxsaW5n
IFVSTCB0byBKYXZhCisgICAgICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9v
dE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwgak1ldGhv
ZC0+Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncywgcmVzdWx0
LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgIGlmIChleGNlcHRp
b25EZXNjcmlwdGlvbikgeworICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJy
b3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgICAgIGZy
ZWUgKGpBcmdzKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBjYW4gYmUgY29uZGl0aW9u
YWxseSByZW1vdmVkIG9uY2Ugd2UgaGF2ZSBhIFRpZ2VyIHVwZGF0ZSB0aGF0CisgICAgLy8gY29u
dGFpbnMgdGhlIG5ldyBKYXZhIHBsdWdpbi4gIEl0IGlzIG5lZWRlZCBmb3IgYnVpbGRzIHByaW9y
IHRvIFRpZ2VyLgorICAgIGlmICghaGFuZGxlZCkgeyAgICAKKyAgICAgICAgam9iamVjdCBvYmog
PSBfaW5zdGFuY2UtPl9pbnN0YW5jZTsKKyAgICAgICAgc3dpdGNoIChqTWV0aG9kLT5KTklSZXR1
cm5UeXBlKCkpeworICAgICAgICAgICAgY2FzZSB2b2lkX3R5cGU6CisgICAgICAgICAgICAgICAg
Y2FsbEpOSU1ldGhvZElEQTx2b2lkPihvYmosIGpNZXRob2QtPm1ldGhvZElEKG9iaiksIGpBcmdz
KTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
b2JqZWN0X3R5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBjYWxsSk5JTWV0aG9kSURB
PGpvYmplY3Q+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwgakFyZ3MpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgICAg
ICAgICAgcmVzdWx0LnogPSBjYWxsSk5JTWV0aG9kSURBPGpib29sZWFuPihvYmosIGpNZXRob2Qt
Pm1ldGhvZElEKG9iaiksIGpBcmdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICAgICAgICAgIHJlc3VsdC5iID0gY2FsbEpOSU1l
dGhvZElEQTxqYnl0ZT4ob2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGNoYXJfdHlwZToKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYyA9IGNhbGxKTklNZXRob2RJREE8amNoYXI+KG9iaiwgak1ldGhvZC0+
bWV0aG9kSUQob2JqKSwgakFyZ3MpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBzaG9ydF90eXBlOgorICAgICAgICAgICAgICAgIHJlc3VsdC5z
ID0gY2FsbEpOSU1ldGhvZElEQTxqc2hvcnQ+KG9iaiwgak1ldGhvZC0+bWV0aG9kSUQob2JqKSwg
akFyZ3MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBpbnRfdHlw
ZToKKyAgICAgICAgICAgICAgICByZXN1bHQuaSA9IGNhbGxKTklNZXRob2RJREE8amludD4ob2Jq
LCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgbG9uZ190eXBlOgorICAgICAgICAgICAg
ICAgIHJlc3VsdC5qID0gY2FsbEpOSU1ldGhvZElEQTxqbG9uZz4ob2JqLCBqTWV0aG9kLT5tZXRo
b2RJRChvYmopLCBqQXJncyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIGZsb2F0X3R5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0LmYgPSBjYWxsSk5JTWV0aG9k
SURBPGpmbG9hdD4ob2JqLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncyk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICAg
ICAgICAgIHJlc3VsdC5kID0gY2FsbEpOSU1ldGhvZElEQTxqZG91YmxlPihvYmosIGpNZXRob2Qt
Pm1ldGhvZElEKG9iaiksIGpBcmdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgaW52YWxpZF90eXBlOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgc3dpdGNoIChqTWV0
aG9kLT5KTklSZXR1cm5UeXBlKCkpeworICAgICAgICBjYXNlIHZvaWRfdHlwZTogeworICAgICAg
ICAgICAgcmVzdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogeworICAgICAgICAgICAg
aWYgKHJlc3VsdC5sICE9IDApIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphcnJheVR5
cGUgPSBqTWV0aG9kLT5yZXR1cm5UeXBlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5VHlw
ZVswXSA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBKYXZhQXJy
YXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShleGVjLCByZXN1bHQubCwgYXJyYXlUeXBlLCByb290
T2JqZWN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFZhbHVlID0gSmF2YUluc3RhbmNlOjpjcmVhdGUocmVzdWx0
LmwsIHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHJlc3VsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7Cisg
ICAgICAgICAgICByZXN1bHRWYWx1ZSA9IGpzQm9vbGVhbihyZXN1bHQueik7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIGJ5dGVfdHlwZTogeworICAg
ICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuYik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIGNoYXJfdHlwZTogewor
ICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuYyk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIHNob3J0X3R5cGU6
IHsKKyAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIoZXhlYywgcmVzdWx0LnMpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBpbnRfdHlw
ZTogeworICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQuaSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIGxvbmdf
dHlwZTogeworICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVjLCByZXN1bHQu
aik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIGZs
b2F0X3R5cGU6IHsKKyAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIoZXhlYywgcmVz
dWx0LmYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2Fz
ZSBkb3VibGVfdHlwZTogeworICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc051bWJlcihleGVj
LCByZXN1bHQuZCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBp
bnZhbGlkX3R5cGU6CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHJlc3VsdFZhbHVl
ID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBmcmVlIChqQXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0VmFsdWU7Cit9CisKK0pTVmFsdWUg
SmF2YUluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlIGhpbnQpIGNvbnN0Cit7CisgICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQor
ICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7CisgICAgaWYgKGhpbnQgPT0gUHJlZmVy
TnVtYmVyKQorICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUoZXhlYyk7CisgICAgSmF2YUNsYXNz
ICphQ2xhc3MgPSBzdGF0aWNfY2FzdDxKYXZhQ2xhc3MqPihnZXRDbGFzcygpKTsKKyAgICBpZiAo
YUNsYXNzLT5pc1N0cmluZ0NsYXNzKCkpCisgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVj
KTsKKyAgICBpZiAoYUNsYXNzLT5pc051bWJlckNsYXNzKCkpCisgICAgICAgIHJldHVybiBudW1i
ZXJWYWx1ZShleGVjKTsKKyAgICBpZiAoYUNsYXNzLT5pc0Jvb2xlYW5DbGFzcygpKQorICAgICAg
ICByZXR1cm4gYm9vbGVhblZhbHVlKCk7CisgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7Cit9CisK
K0pTVmFsdWUgSmF2YUluc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QgCit7
CisgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOworfQorCitKT2JqZWN0V3JhcHBlcjo6Sk9i
amVjdFdyYXBwZXIoam9iamVjdCBpbnN0YW5jZSkKKzogX3JlZkNvdW50KDApCit7CisgICAgYXNz
ZXJ0IChpbnN0YW5jZSAhPSAwKTsKKworICAgIC8vIENhY2hlIHRoZSBKTklFbnYgdXNlZCB0byBn
ZXQgdGhlIGdsb2JhbCByZWYgZm9yIHRoaXMgamF2YSBpbnN0YW5hY2UuCisgICAgLy8gSXQnbGwg
YmUgdXNlZCB0byBkZWxldGUgdGhlIHJlZmVyZW5jZS4KKyAgICBfZW52ID0gZ2V0Sk5JRW52KCk7
CisgICAgICAgIAorICAgIF9pbnN0YW5jZSA9IF9lbnYtPk5ld0dsb2JhbFJlZiAoaW5zdGFuY2Up
OworICAgIAorICAgIEpTX0xPRyAoIm5ldyBnbG9iYWwgcmVmICVwIGZvciAlcFxuIiwgX2luc3Rh
bmNlLCBpbnN0YW5jZSk7CisKKyAgICBpZiAgKF9pbnN0YW5jZSA9PSBOVUxMKSB7CisgICAgICAg
IGZwcmludGYgKHN0ZGVyciwgIiVzOiAgY291bGQgbm90IGdldCBHbG9iYWxSZWYgZm9yICVwXG4i
LCBfX1BSRVRUWV9GVU5DVElPTl9fLCBpbnN0YW5jZSk7CisgICAgfQorfQorCitKT2JqZWN0V3Jh
cHBlcjo6fkpPYmplY3RXcmFwcGVyKCkgeworICAgIEpTX0xPRyAoImRlbGV0aW5nIGdsb2JhbCBy
ZWYgJXBcbiIsIF9pbnN0YW5jZSk7CisgICAgX2Vudi0+RGVsZXRlR2xvYmFsUmVmIChfaW5zdGFu
Y2UpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDUzMzk5KQor
KysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgImpuaV9pbnN0YW5jZS5oIgorI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgogCiAjaWYg
RU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhSW5zdGFuY2VKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFJbnN0YW5jZUpTQy5oCShyZXZpc2lvbiA1MzM5OSkJKGZyb20gV2ViQ29yZS9icmlkZ2Uvam5p
L2puaV9pbnN0YW5jZS5oOjUzMzk5KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5z
dGFuY2VKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBfSk5JX0lOU1RBTkNFX0hfCisjZGVmaW5lIF9KTklfSU5TVEFOQ0Vf
SF8KKworI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJydW50aW1lLmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisKKyNpbmNsdWRlIDxKYXZhVk0vam5pLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBKYXZhQ2xh
c3M7CisKK2NsYXNzIEpPYmplY3RXcmFwcGVyCit7CitmcmllbmQgY2xhc3MgUmVmUHRyPEpPYmpl
Y3RXcmFwcGVyPjsKK2ZyaWVuZCBjbGFzcyBKYXZhQXJyYXk7CitmcmllbmQgY2xhc3MgSmF2YUZp
ZWxkOworZnJpZW5kIGNsYXNzIEphdmFJbnN0YW5jZTsKK2ZyaWVuZCBjbGFzcyBKYXZhTWV0aG9k
OworCitwdWJsaWM6CisgICAgam9iamVjdCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIF9pbnN0
YW5jZTsgfQorICAgIHZvaWQgc2V0SW5zdGFuY2Uoam9iamVjdCBpbnN0YW5jZSkgeyBfaW5zdGFu
Y2UgPSBpbnN0YW5jZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSk9iamVjdFdyYXBwZXIoam9iamVj
dCBpbnN0YW5jZSk7ICAgIAorICAgIH5KT2JqZWN0V3JhcHBlcigpOworICAgIAorICAgIHZvaWQg
cmVmKCkgeyBfcmVmQ291bnQrKzsgfQorICAgIHZvaWQgZGVyZWYoKSAKKyAgICB7IAorICAgICAg
ICBpZiAoLS1fcmVmQ291bnQgPT0gMCkgCisgICAgICAgICAgICBkZWxldGUgdGhpczsgCisgICAg
fQorCisgICAgam9iamVjdCBfaW5zdGFuY2U7CisKK3ByaXZhdGU6CisgICAgSk5JRW52ICpfZW52
OworICAgIHVuc2lnbmVkIGludCBfcmVmQ291bnQ7Cit9OworCitjbGFzcyBKYXZhSW5zdGFuY2Ug
OiBwdWJsaWMgSW5zdGFuY2UKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZh
SW5zdGFuY2U+IGNyZWF0ZShqb2JqZWN0IGluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3RPYmplY3QpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKYXZhSW5z
dGFuY2UoaW5zdGFuY2UsIHJvb3RPYmplY3QpKTsKKyAgICB9CisgICAgCisgICAgfkphdmFJbnN0
YW5jZSgpOworICAgIAorICAgIHZpcnR1YWwgQ2xhc3MgKmdldENsYXNzKCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmly
dHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKSBjb25zdDsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRob2QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpOwor
CisgICAgam9iamVjdCBqYXZhSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBfaW5zdGFuY2UtPl9p
bnN0YW5jZTsgfQorICAgIAorICAgIEpTVmFsdWUgc3RyaW5nVmFsdWUoRXhlY1N0YXRlKikgY29u
c3Q7CisgICAgSlNWYWx1ZSBudW1iZXJWYWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1Zh
bHVlIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgSmF2YUluc3RhbmNl
KGpvYmplY3QgaW5zdGFuY2UsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworICAgIHZpcnR1YWwg
dm9pZCB2aXJ0dWFsQmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlydHVhbEVuZCgpOworCisg
ICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBfaW5zdGFuY2U7CisgICAgbXV0YWJsZSBKYXZhQ2xh
c3MgKl9jbGFzczsKK307CisKK30gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKKworI2VuZGlmIC8v
IF9KTklfSU5TVEFOQ0VfSF8KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3Rh
bmNlSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFu
Y2VKU0MuaAkocmV2aXNpb24gNTMzOTkpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIF9KTklfSU5TVEFOQ0VfSF8KLSNkZWZpbmUgX0pOSV9JTlNU
QU5DRV9IXworI2lmbmRlZiBKYXZhSW5zdGFuY2VKU0NfaAorI2RlZmluZSBKYXZhSW5zdGFuY2VK
U0NfaAogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIApAQCAtMTA3LDQgKzEwNyw0IEBA
IHByb3RlY3RlZDoKIAogI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNlbmRp
ZiAvLyBfSk5JX0lOU1RBTkNFX0hfCisjZW5kaWYgLy8gSmF2YUluc3RhbmNlSlNDX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>