<?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>26948</bug_id>
          
          <creation_ts>2009-07-02 21:57:45 -0700</creation_ts>
          <short_desc>Need to refactor Worker to derive from AbstractWorker</short_desc>
          <delta_ts>2009-07-17 14:20:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>26932</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="Andrew Wilson">atwilson</assigned_to>
          <cc>ap</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129664</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-02 21:57:45 -0700</bug_when>
    <thetext>There&apos;s some duplicate code now in AbstractWorker and Worker - we need to refactor Worker to derive from AbstractWorker and remove the duplicate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129799</commentid>
    <comment_count>1</comment_count>
      <attachid>32257</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-04 11:51:01 -0700</bug_when>
    <thetext>Created attachment 32257
Diff to aid in discussion of toJS() problem with webkit-dev - do not review

Attached my patch to set GenerateToJS on Worker.idl to work around a problem where constructing a Worker() was really yielding a SharedWorker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131119</commentid>
    <comment_count>2</comment_count>
      <attachid>32616</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-11 11:09:24 -0700</bug_when>
    <thetext>Created attachment 32616
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131178</commentid>
    <comment_count>3</comment_count>
      <attachid>32616</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-12 10:32:56 -0700</bug_when>
    <thetext>Comment on attachment 32616
proposed patch

Removing &quot;review ?&quot; for now, as it looks like there&apos;s a bug in the V8 GC behavior which I saw while working on another refactoring. I&apos;ll either upload a new patch or restore this to &apos;?&apos; once I finish my investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132339</commentid>
    <comment_count>4</comment_count>
      <attachid>32892</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-16 14:15:53 -0700</bug_when>
    <thetext>Created attachment 32892
proposed patch (fixed problem with previous patch that prevent V8 bindings from compiling)

V8AbstractWorker underwent some bit rot (V8Proxy refactoring moved some of the APIs it depended on, which was masked by the fact that SHARED_WORKERS is disabled by default).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132414</commentid>
    <comment_count>5</comment_count>
      <attachid>32892</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-16 17:15:42 -0700</bug_when>
    <thetext>Comment on attachment 32892
proposed patch (fixed problem with previous patch that prevent V8 bindings from compiling)

Just a few thing to address (one nit and one bug).

&gt; diff --git a/WebCore/bindings/js/JSWorkerCustom.cpp b/WebCore/bindings/js/JSWorkerCustom.cpp
&gt; @@ -42,40 +40,7 @@ void JSWorker::mark()
&gt;  {
&gt;      DOMObject::mark();

I think this should be JSAbstractWorker::mark(); or even better just &quot;Base::mark();&quot; (and then this would have not have needed to change).



&gt; diff --git a/WebCore/bindings/v8/custom/V8WorkerCustom.cpp b/WebCore/bindings/v8/custom/V8WorkerCustom.cpp
&gt; -    if (args.Length() == 0) {
&gt; +    if (args.Length() == 0)
If you&apos;re going to fix the style here

       if (!args.Length())

is what you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132434</commentid>
    <comment_count>6</comment_count>
      <attachid>32909</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-16 18:14:51 -0700</bug_when>
    <thetext>Created attachment 32909
Patch addressing Levin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132499</commentid>
    <comment_count>7</comment_count>
      <attachid>32909</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-17 00:05:16 -0700</bug_when>
    <thetext>Comment on attachment 32909
Patch addressing Levin&apos;s comments

LayoutTests/fast/workers/worker-constructor.html fails to apply cleanly.  Please update the patch and I&apos;ll review/land ot promptly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132640</commentid>
    <comment_count>8</comment_count>
      <attachid>32959</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-17 11:08:24 -0700</bug_when>
    <thetext>Created attachment 32959
Fixed up merge errors with worker-constructor layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132699</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-17 14:20:09 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/46048</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32257</attachid>
            <date>2009-07-04 11:51:01 -0700</date>
            <delta_ts>2009-07-11 11:09:24 -0700</delta_ts>
            <desc>Diff to aid in discussion of toJS() problem with webkit-dev - do not review</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23926</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3Iu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbApp
bmRleCA4ZjhlNzIzLi44NDU2ODU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCkBAIC0xMyw2ICsxMywxNSBAQCBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CiB9CiAKIHRyeSB7CisgICAgdmFyIHdvcmtlciA9IG5ldyBX
b3JrZXIoInJlc291cmNlcy93b3JrZXItY29tbW9uLmpzIik7CisgICBpZiAodHlwZW9mIHdvcmtl
ci5wb3N0TWVzc2FnZSAhPSAidW5kZWZpbmVkIikKKyAgICAgICAgbG9nKCJQQVNTOiBTdWNjZXNz
ZnVsbHkgY3JlYXRlZCB3b3JrZXIiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogd29y
a2VyLnBvc3RNZXNzYWdlIGRpZCBub3QgZXhpc3QiKTsKK30gY2F0Y2ggKGV4KSB7CisgICAgbG9n
KCJGQUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoIiArIGV4ICsgIikgdGhyb3duIHdoZW4gY3Jl
YXRpbmcgd29ya2VyIik7Cit9Cit0cnkgewogICAgIG5ldyBXb3JrZXIoe3RvU3RyaW5nOmZ1bmN0
aW9uKCl7dGhyb3cgImV4Y2VwdGlvbiJ9fSkKICAgICBsb2coIkZBSUw6IHRvU3RyaW5nIGV4Y2Vw
dGlvbiBub3QgcHJvcGFnYXRlZC4iKTsKIH0gY2F0Y2ggKGV4KSB7CkBAIC0zOCw3ICs0Nyw3IEBA
IHRyeSB7CiB9CiAKIHRyeSB7Ci0gICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoImRvZXMtbm90
LWV4aXN0LmpzIik7CisgICAgd29ya2VyID0gbmV3IFdvcmtlcigiZG9lcy1ub3QtZXhpc3QuanMi
KTsKICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICBsb2coIlBBU1M6
IG9uZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQgdGhhdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIp
OwogICAgICAgICBsb2coIkRPTkUiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy93b3JrZXItbG9jYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3Jr
ZXItbG9jYXRpb24uaHRtbAppbmRleCBlMTM5YjlhLi45MTM3ZDRmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWxvY2F0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3dvcmtlci1sb2NhdGlvbi5odG1sCkBAIC0yMyw2ICsyMyw3IEBAIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKIH0KIAogdmFyIHdvcmtlciA9IG5ldyBX
b3JrZXIoJ3Jlc291cmNlcy93b3JrZXItY29tbW9uLmpzJyk7CithbGVydCh3b3JrZXIpOwogd29y
a2VyLnBvc3RNZXNzYWdlKCJldmFsIFdvcmtlckxvY2F0aW9uIik7CiB3b3JrZXIucG9zdE1lc3Nh
Z2UoImV2YWwgdHlwZW9mIGxvY2F0aW9uIik7CiB3b3JrZXIucG9zdE1lc3NhZ2UoImV2YWwgbG9j
YXRpb24iKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNv
cmUucHJvCmluZGV4IDViYWQxNmMuLmMzYTU2MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTQxMSwxMSArMTQxMSwxMyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfV09SS0VSUz0xKSB7CiAKICAgICBJRExfQklORElOR1Mg
Kz0gXAogICAgICAgICBwYWdlL1dvcmtlck5hdmlnYXRvci5pZGwgXAorICAgICAgICB3b3JrZXJz
L0Fic3RyYWN0V29ya2VyLmlkbCBcCiAgICAgICAgIHdvcmtlcnMvV29ya2VyLmlkbCBcCiAgICAg
ICAgIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwgXAogICAgICAgICB3b3JrZXJzL1dvcmtlckxv
Y2F0aW9uLmlkbAogCiAgICAgU09VUkNFUyArPSBcCisgICAgICAgIGJpbmRpbmdzL2pzL0pTQWJz
dHJhY3RXb3JrZXJDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDb25z
dHJ1Y3Rvci5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNw
cCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgXApAQCAt
MTQyMyw2ICsxNDI1LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dPUktFUlM9MSkgewog
ICAgICAgICBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBcCiAgICAgICAg
IGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBcCiAgICAgICAgIHBhZ2UvV29ya2Vy
TmF2aWdhdG9yLmNwcCBcCisgICAgICAgIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwIFwKICAg
ICAgICAgd29ya2Vycy9Xb3JrZXIuY3BwIFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmNwcCBcCiAgICAgICAgIHdvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwIFwKQEAgLTE0MzYsMTQg
KzE0MzksMTEgQEAgY29udGFpbnMoREVGSU5FUywgU0hBUkVEX1dPUktFUlM9MSkgewogICAgIEZF
QVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TSEFSRURfV09SS0VSUz0xCiAKICAg
ICBJRExfQklORElOR1MgKz0gXAotICAgICAgICB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBc
CiAgICAgICAgIHdvcmtlcnMvU2hhcmVkV29ya2VyLmlkbAogCiAgICAgU09VUkNFUyArPSBcCi0g
ICAgICAgIGJpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwIFwKICAgICAgICAg
YmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgXAogICAgICAgICBiaW5k
aW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgXAotICAgICAgICB3b3JrZXJzL0Fic3Ry
YWN0V29ya2VyLmNwcCBcCiAgICAgICAgIHdvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAppbmRleCAw
NzA4N2FmLi43OWVhYzk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJh
Y3RXb3JrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFjdFdv
cmtlckN1c3RvbS5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
Ci0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5j
bHVkZSAiSlNBYnN0cmFjdFdvcmtlci5oIgogCkBAIC04Myw0ICs4Myw0IEBAIEpTVmFsdWUgSlNB
YnN0cmFjdFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJM
RShTSEFSRURfV09SS0VSUykKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXQuY3BwCmluZGV4IDMwNzY5MWYuLmI4Y2VlZWMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcApAQCAtNTAsMTcgKzUwLDE0IEBACiAjZW5kaWYKIAog
I2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgIkFic3RyYWN0V29ya2VyLmgiCisjaW5jbHVk
ZSAiSlNBYnN0cmFjdFdvcmtlci5oIgogI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAjaW5jbHVkZSAi
SlNXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0jaW5jbHVk
ZSAiQWJzdHJhY3RXb3JrZXIuaCIKLSNpbmNsdWRlICJKU0Fic3RyYWN0V29ya2VyLmgiCi0jZW5k
aWYKLQogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA2
LDcgKzEwMyw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEV2ZW50VGFyZ2V0KiB0
YXJnZXQpCiAgICAgICAgIHJldHVybiB0b0pTRE9NR2xvYmFsT2JqZWN0KHdvcmtlckNvbnRleHQp
OwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktF
UlMpCiAgICAgaWYgKEFic3RyYWN0V29ya2VyKiBhYnN0cmFjdFdvcmtlciA9IHRhcmdldC0+dG9B
YnN0cmFjdFdvcmtlcigpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBhYnN0cmFjdFdvcmtl
cik7CiAjZW5kaWYKQEAgLTE0Miw3ICsxMzksNyBAQCBFdmVudFRhcmdldCogdG9FdmVudFRhcmdl
dChKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgQ09OVkVSVF9UT19FVkVOVF9UQVJHRVQoV29ya2Vy
Q29udGV4dCkKICNlbmRpZgogCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2lmIEVOQUJM
RShXT1JLRVJTKQogICAgIENPTlZFUlRfVE9fRVZFTlRfVEFSR0VUKEFic3RyYWN0V29ya2VyKQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKaW5kZXggOTcwNzUx
OS4uMDA1NGE5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3Rv
bS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKQEAgLTMw
LDggKzMwLDYgQEAKICNpbmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5jbHVkZSAiSlNET01HbG9i
YWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU01l
c3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkBAIC00Miw0MCArNDAsNyBAQCB2b2lkIEpTV29ya2VyOjptYXJrKCkKIHsKICAgICBET01PYmpl
Y3Q6Om1hcmsoKTsKIAotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7Ci0g
ICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9uZXJyb3IoKSk7Ci0KLSAgICB0eXBlZGVmIFdvcmtl
cjo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgdHlwZWRlZiBXb3Jr
ZXI6Okxpc3RlbmVyVmVjdG9yIExpc3RlbmVyVmVjdG9yOwotICAgIEV2ZW50TGlzdGVuZXJzTWFw
JiBldmVudExpc3RlbmVycyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKLSAgICBmb3IgKEV2
ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4o
KTsgbWFwSXRlciAhPSBldmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7Ci0gICAgICAg
IGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQu
YmVnaW4oKTsgdmVjSXRlciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikKLSAg
ICAgICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0aW9uKCk7Ci0gICAgfQotfQotCi1KU1Zh
bHVlIEpTV29ya2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKLXsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAg
aWYgKCFnbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFJl
ZlB0cjxKU0V2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2xvYmFsT2JqZWN0LT5maW5kT3JDcmVh
dGVKU0V2ZW50TGlzdGVuZXIoYXJncy5hdCgxKSk7Ci0gICAgaWYgKCFsaXN0ZW5lcikKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLnJlbGVhc2UoKSwgYXJncy5hdCgyKS50
b0Jvb2xlYW4oZXhlYykpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVl
IEpTV29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKLXsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAg
aWYgKCFnbG9iYWxPYmplY3QpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEpT
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU0V2ZW50TGlzdGVu
ZXIoYXJncy5hdCgxKSk7Ci0gICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYyksIGxpc3RlbmVyLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgbWFya0lmTm90TnVsbChzdGF0aWNfY2FzdDxXb3Jr
ZXIqPihpbXBsKCkpLT5vbm1lc3NhZ2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEluZGV4LmgKaW5kZXggNTNlZWVhOS4uMDYzMjIyMiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOElu
ZGV4LmgKQEAgLTU3LDYgKzU3LDcgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9yeSkoKTsKICAgICBWKFdPUktFUiwg
V29ya2VyKQogCiAjZGVmaW5lIFdPUktFUl9OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihBQlNUUkFDVFdPUktFUiwgQWJzdHJh
Y3RXb3JrZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihXT1JL
RVJDT05URVhULCBXb3JrZXJDb250ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgVihXT1JLRVJMT0NBVElPTiwgV29ya2VyTG9jYXRpb24pICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihXT1JLRVJOQVZJR0FUT1IsIFdvcmtlck5h
dmlnYXRvcikKQEAgLTY4LDkgKzY5LDcgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9yeSkoKTsKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCiAjZGVmaW5lIFNIQVJFRF9XT1JLRVJfQUNUSVZFX09CSkVDVF9XUkFQ
UEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihTSEFSRURXT1JLRVIsIFNo
YXJlZFdvcmtlcikKLQotI2RlZmluZSBTSEFSRURfV09SS0VSX05PTk5PREVfV1JBUFBFUl9UWVBF
UyhWKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFYoQUJTVFJBQ1RXT1JLRVIsIEFi
c3RyYWN0V29ya2VyKQorI2RlZmluZSBTSEFSRURfV09SS0VSX05PTk5PREVfV1JBUFBFUl9UWVBF
UyhWKQogI2Vsc2UKICNkZWZpbmUgU0hBUkVEX1dPUktFUl9BQ1RJVkVfT0JKRUNUX1dSQVBQRVJf
VFlQRVMoVikKICNkZWZpbmUgU0hBUkVEX1dPUktFUl9OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1
c3RvbS5jcHAKaW5kZXggMjg2MGRiOS4uNDM1ZWM5NSAxMDA3NTUKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKQEAgLTMwLDcgKzMw
LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJT
KQorI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiQWJzdHJhY3RXb3JrZXIuaCIKIApA
QCAtMTM0LDQgKzEzNCw0IEBAIENBTExCQUNLX0ZVTkNfREVDTChBYnN0cmFjdFdvcmtlclJlbW92
ZUV2ZW50TGlzdGVuZXIpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVO
QUJMRShTSEFSRURfV09SS0VSUykKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKaW5kZXggNzYwOTUyNC4uNWNl
YzkwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5k
aW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgK
QEAgLTEyNCw5ICsxMjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrV29ya2VyQ29udGV4dFJlcXVlc3RDYWNoZUluZGV4ID0ga0RlZmF1bHRXcmFw
cGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrV29y
a2VyQ29udGV4dEludGVybmFsRmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDE7Ci0jZW5kaWYKIAotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrQWJzdHJhY3RXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCA9IGtE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQga0Fic3RyYWN0V29ya2VySW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVy
SW50ZXJuYWxGaWVsZENvdW50ICsgMTsKICNlbmRpZgpAQCAtNDc1LDExICs0NzMsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoV09SS0VSUykKKyAgICAgICAg
REVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihBYnN0cmFjdFdvcmtlck9uZXJyb3IpOworICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEFic3RyYWN0V29ya2VyQWRkRXZlbnRMaXN0ZW5lcik7CisgICAg
ICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3JrZXJSZW1vdmVFdmVudExpc3RlbmVyKTsK
KwogICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKFdvcmtlck9ubWVzc2FnZSk7Ci0g
ICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoV29ya2VyT25lcnJvcik7CiAgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyQ29uc3RydWN0b3IpOwotICAgICAgICBERUNMQVJFX0NB
TExCQUNLKFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNL
KFdvcmtlclJlbW92ZUV2ZW50TGlzdGVuZXIpOwogCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlf
QUNDRVNTT1JfR0VUVEVSKFdvcmtlckNvbnRleHRTZWxmKTsKICAgICAgICAgREVDTEFSRV9QUk9Q
RVJUWV9BQ0NFU1NPUihXb3JrZXJDb250ZXh0T25tZXNzYWdlKTsKQEAgLTQ5Myw5ICs0OTIsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VS
UykKLSAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihBYnN0cmFjdFdvcmtlck9uZXJy
b3IpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEFic3RyYWN0V29ya2VyQWRkRXZlbnRMaXN0
ZW5lcik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3JrZXJSZW1vdmVFdmVu
dExpc3RlbmVyKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhTaGFyZWRXb3JrZXJDb25zdHJ1
Y3Rvcik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
dXN0b20uY3BwCmluZGV4IDk4OGJkYmQuLjU2YmY2YWMgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTUwLDE5ICs1MCwxNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woV29ya2VyQ29uc3RydWN0b3IpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldv
cmtlci5Db25zdHJ1Y3RvciIpOwogCi0gICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKSB7
CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rp
b24uIik7Ci0gICAgfQogCi0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMCkgeworICAgIGlmIChh
cmdzLkxlbmd0aCgpID09IDApCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKLSAgICB9CiAKICAgICB2ODo6VHJ5
Q2F0Y2ggdHJ5Q2F0Y2g7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBzY3JpcHRVcmwgPSBh
cmdzWzBdLT5Ub1N0cmluZygpOwotICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkgeworICAg
IGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IodHJ5
Q2F0Y2guRXhjZXB0aW9uKCkpOwotICAgIH0KKwogICAgIGlmIChzY3JpcHRVcmwuSXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCkBAIC0xNTAsNzggKzE0OCw2IEBA
IEFDQ0VTU09SX1NFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCiAgICAgfQogfQogCi1BQ0NFU1NPUl9H
RVRURVIoV29ya2VyT25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9uZXJy
b3IuX2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwotICAg
IGlmICh3b3JrZXItPm9uZXJyb3IoKSkgewotICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od29ya2VyLT5v
bmVycm9yKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxp
c3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsK
LSAgICB9Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfU0VUVEVS
KFdvcmtlck9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbmVycm9yLl9z
ZXQiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKLSAgICBWOE9i
amVjdEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVu
dExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkpOwotICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkp
IHsKLSAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgp
OwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRW
OExpc3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAgICAgICAgd29ya2VyLT5zZXRP
bmVycm9yKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod29ya2VyLCB2YWx1ZSwgZmFsc2UpOwotICAgICAg
ICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmIChvbGRMaXN0ZW5lcikgewotICAgICAg
ICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVu
ZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlclJl
cXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd29ya2VyLT5z
ZXRPbmVycm9yKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1DQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQWRkRXZl
bnRMaXN0ZW5lcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLmFkZEV2ZW50TGlzdGVu
ZXIoKSIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwotCi0gICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIs
IGFyZ3NbMV0sIGZhbHNlKTsKLSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgU3RyaW5nIHR5
cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9
IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICB3b3JrZXItPmFkZEV2ZW50TGlzdGVu
ZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgICAgIGNyZWF0ZUhpZGRlbkRl
cGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0
Q2FjaGVJbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUNB
TExCQUNLX0ZVTkNfREVDTChXb3JrZXJSZW1vdmVFdmVudExpc3RlbmVyKQotewotICAgIElOQ19T
VEFUUyhMIkRPTS5Xb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyKiB3
b3JrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5k
ZXg6OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgdHJ1ZSk7Ci0gICAg
aWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOwotICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUo
KTsKLSAgICAgICAgd29ya2VyLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdl
dCgpLCB1c2VDYXB0dXJlKTsKLQotICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3Mu
SG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwot
ICAgIH0KLQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCmluZGV4
IGY2OTJiNDMuLmQ4NGEzZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAorKysgYi9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTkzLDkgKzkzLDcgQEAgV29y
a2VyQ29udGV4dCogRXZlbnRUYXJnZXQ6OnRvV29ya2VyQ29udGV4dCgpCiB7CiAgICAgcmV0dXJu
IDA7CiB9Ci0jZW5kaWYKIAotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKIEFic3RyYWN0V29y
a2VyKiBFdmVudFRhcmdldDo6dG9BYnN0cmFjdFdvcmtlcigpCiB7CiAgICAgcmV0dXJuIDA7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuaAppbmRleCBlYzZlZDUxLi5kN2NjNmRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5oCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTY4LDE0ICs2
OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU1ZHRWxlbWVudElu
c3RhbmNlKiB0b1NWR0VsZW1lbnRJbnN0YW5jZSgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktF
UlMpCisgICAgICAgIHZpcnR1YWwgQWJzdHJhY3RXb3JrZXIqIHRvQWJzdHJhY3RXb3JrZXIoKTsK
ICAgICAgICAgdmlydHVhbCBXb3JrZXIqIHRvV29ya2VyKCk7CiAgICAgICAgIHZpcnR1YWwgV29y
a2VyQ29udGV4dCogdG9Xb3JrZXJDb250ZXh0KCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTSEFS
RURfV09SS0VSUykKLSAgICAgICAgdmlydHVhbCBBYnN0cmFjdFdvcmtlciogdG9BYnN0cmFjdFdv
cmtlcigpOwotI2VuZGlmCi0KICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpID0gMDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuY3BwCmluZGV4IDdhYjRmOGIuLjJjZjFjNzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL0Fic3Ry
YWN0V29ya2VyLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
LSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNs
dWRlICJBYnN0cmFjdFdvcmtlci5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC0xMjEsNCArMTIx
LDQgQEAgdm9pZCBBYnN0cmFjdFdvcmtlcjo6ZGlzcGF0Y2hTY3JpcHRFcnJvckV2ZW50KGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGludCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmggYi9XZWJD
b3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaAppbmRleCAzZDU4MDUzLi5mMDllN2U4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaAorKysgYi9XZWJDb3JlL3dv
cmtlcnMvQWJzdHJhY3RXb3JrZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRlZiBBYnN0cmFj
dFdvcmtlcl9oCiAjZGVmaW5lIEFic3RyYWN0V29ya2VyX2gKIAotI2lmIEVOQUJMRShTSEFSRURf
V09SS0VSUykKKyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hh
c2guaCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKQEAgLTgyLDYgKzgyLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoU0hBUkVEX1dPUktFUlMpCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCiAKICNlbmRp
ZiAvLyBBYnN0cmFjdFdvcmtlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJh
Y3RXb3JrZXIuaWRsIGIvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbAppbmRleCA3
NGViMGY3Li4zMzJhNmUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuaWRsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwKQEAgLTMwLDcg
KzMwLDcgQEAKIAogbW9kdWxlIHRocmVhZHMgewogCi0gICAgaW50ZXJmYWNlIFtDdXN0b21NYXJr
RnVuY3Rpb24sIENvbmRpdGlvbmFsPVNIQVJFRF9XT1JLRVJTXSBBYnN0cmFjdFdvcmtlciB7Cisg
ICAgaW50ZXJmYWNlIFtDdXN0b21NYXJrRnVuY3Rpb24sIEdlbmVyYXRlQ29uc3RydWN0b3IsIENv
bmRpdGlvbmFsPVdPUktFUlNdIEFic3RyYWN0V29ya2VyIHsKIAogICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmVycm9yOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDJlMDNlM2QuLjJlOGJj
ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFdvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICA6IEFjdGl2ZURPTU9iamVjdChj
b250ZXh0LCB0aGlzKQorICAgIDogQWJzdHJhY3RXb3JrZXIoY29udGV4dCkKICAgICAsIG1fY29u
dGV4dFByb3h5KFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKHRoaXMpKQogewogICAgIG1fc2Ny
aXB0VVJMID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKTsKQEAgLTExNSw3ICsxMTUsNyBAQCBi
b29sIFdvcmtlcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHZvaWQgV29ya2VyOjpub3Rp
ZnlGaW5pc2hlZCgpCiB7CiAgICAgaWYgKG1fc2NyaXB0TG9hZGVyLT5mYWlsZWQoKSkKLSAgICAg
ICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CisgICAgICAgIGRpc3BhdGNoTG9hZEVycm9yRXZlbnQo
KTsKICAgICBlbHNlCiAgICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRleHQo
bV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0
VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIApAQCAtMTI0LDcxICsxMjQsNiBAQCB2
b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoKQogICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOwogfQogCi12b2lkIFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKLXsKLSAgICBSZWZQ
dHI8RXZlbnQ+IGV2dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlKTsKLSAgICBpZiAobV9vbkVycm9yTGlzdGVuZXIpIHsKLSAgICAgICAgZXZ0LT5z
ZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAg
ICAgICAgbV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgdHJ1ZSk7Ci0g
ICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQu
cmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgV29ya2VyOjphZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAg
ICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3RlbmVy
VmVjdG9yIGxpc3RlbmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVy
KTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5z
ZWNvbmQ7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRl
ciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyAr
K2xpc3RlbmVySXRlcikgewotICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRM
aXN0ZW5lcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRM
aXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9ICAgIAotfQotCi12b2lk
IFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUp
OwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwot
ICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxp
c3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3Rl
bmVySXRlcikgewotICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7
Ci0gICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5i
ZWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9v
bCBXb3JrZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9F
UlI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKLSAgICBm
b3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xp
c3RlbmVySXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQo
KS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KIHZvaWQgV29ya2VyOjpkaXNwYXRjaE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0
KQogewogICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2Fn
ZSwgIiIsICIiLCAwLCBwb3J0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIu
aCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAppbmRleCAxZmNjOGJlLi4wZmFhNmU2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5oCkBAIC0yOSw4ICsyOSw5IEBACiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotI2luY2x1
ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJBYnN0cmFjdFdvcmtlci5oIgogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCkBAIC00OSwxMyArNTAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNsYXNzIFdvcmtlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUg
V29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworICAgIGNsYXNz
IFdvcmtlciA6IHB1YmxpYyBBYnN0cmFjdFdvcmtlciwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2Vy
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyKHVybCwg
Y29udGV4dCwgZWMpKTsgfQogICAgICAgICB+V29ya2VyKCk7CiAKLSAgICAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQogICAg
ICAgICB2aXJ0dWFsIFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgICAg
ICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC03
MCwzOSArNjksMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVy
ZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAgICAgICBFdmVudExpc3Rl
bmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJzOyB9Ci0K
LSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8V29ya2VyPjo6ZGVyZWY7Ci0KICAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdlTGlzdGVu
ZXIgPSBldmVudExpc3RlbmVyOyB9CiAgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KIAotICAgICAgICB2
b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7
IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAgICBFdmVudExpc3Rl
bmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0K
LQogICAgIHByaXZhdGU6CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlGaW5pc2hlZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRl
cmVmKCk7IH0KLQogICAgICAgICBLVVJMIG1fc2NyaXB0VVJMOwogICAgICAgICBPd25QdHI8V29y
a2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRlcjsKIAogICAgICAgICBXb3JrZXJDb250ZXh0
UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0
byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KIAogICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1f
b25FcnJvckxpc3RlbmVyOwotICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVu
ZXJzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKaW5kZXgg
ZTA3OGU3Yy4uOTZlZGQ3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKQEAgLTI2LDI0ICsyNiwxOCBAQAogCiBt
b2R1bGUgdGhyZWFkcyB7CiAKLSAgICBpbnRlcmZhY2UgW0N1c3RvbU1hcmtGdW5jdGlvbiwgQ29u
ZGl0aW9uYWw9V09SS0VSU10gV29ya2VyIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0
b21NYXJrRnVuY3Rpb24sCisgICAgICAgIEdlbmVyYXRlVG9KUywKKyAgICAgICAgR2VuZXJhdGVO
YXRpdmVDb252ZXJ0ZXIsCisgICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMKKyAgICBdIFdvcmtl
ciA6IEFic3RyYWN0V29ya2VyIHsKIAotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CiAgICAg
ICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0g
TWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwotCi0gICAgICAgIC8vIEV2ZW50VGFyZ2V0
IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9N
U3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
RXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1
cmUpOwotICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQotICAgICAg
ICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32616</attachid>
            <date>2009-07-11 11:09:24 -0700</date>
            <delta_ts>2009-07-16 14:15:53 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch-refactor.txt</filename>
            <type>text/plain</type>
            <size>25197</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MTMxMTc5Li5iMTNkYTUxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MTAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRvIHJlZmFjdG9yIFdvcmtlciB0
byBkZXJpdmUgZnJvbSBBYnN0cmFjdFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDgKKworICAgICAgICBBZGRlZCBjaGVja3MgdG8gbWFr
ZSBzdXJlIHRoYXQgV29ya2VycyBhcmUgcHJvcGVybHkgY29uc3RydWN0ZWQgYW5kIFdvcmtlciBh
dHRyaWJ1dGVzCisgICAgICAgIGFyZSB2aXNpYmxlIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0Lgor
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sOgorICAgICAg
ICBBZGRlZCBleHBsaWNpdCBjaGVjayBmb3IgY29ycmVjdCBjb25zdHJ1Y3Rpb24vcG9zdE1lc3Nh
Z2UgdmlzaWJpbGl0eS4KKwogMjAwOS0wNy0xMSAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dAppbmRleCA5NzY3OGQxLi5kM2JlM2VmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMSw1ICsx
LDYgQEAKIFRlc3QgV29ya2VyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmlu
dCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuCiAKK1BBU1M6
IFN1Y2Nlc3NmdWxseSBjcmVhdGVkIHdvcmtlci4KIFBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBw
cm9wYWdhdGVkIGNvcnJlY3RseS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1
cnNpdmVseSByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGltdW0gY2Fs
bCBzdGFjayBzaXplIGV4Y2VlZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3Rv
ciB3aXRob3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRheEVycm9y
OiBOb3QgZW5vdWdoIGFyZ3VtZW50cykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItY29uc3RydWN0b3IuaHRtbAppbmRleCA4ZjhlNzIzLi4xNjMwMzBmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCkBAIC0xMyw2
ICsxMywxNSBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiB9CiAKIHRyeSB7
CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy93b3JrZXItY29tbW9uLmpz
Iik7CisgICAgaWYgKHR5cGVvZiB3b3JrZXIucG9zdE1lc3NhZ2UgIT0gInVuZGVmaW5lZCIpCisg
ICAgICAgIGxvZygiUEFTUzogU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgd29ya2VyLiIpOworICAgIGVs
c2UKKyAgICAgICAgbG9nKCJGQUlMOiB3b3JrZXIucG9zdE1lc3NhZ2UgZGlkIG5vdCBleGlzdC4i
KTsKK30gY2F0Y2ggKGV4KSB7CisgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAo
IiArIGV4ICsgIikgdGhyb3duIHdoZW4gY3JlYXRpbmcgd29ya2VyIik7Cit9Cit0cnkgewogICAg
IG5ldyBXb3JrZXIoe3RvU3RyaW5nOmZ1bmN0aW9uKCl7dGhyb3cgImV4Y2VwdGlvbiJ9fSkKICAg
ICBsb2coIkZBSUw6IHRvU3RyaW5nIGV4Y2VwdGlvbiBub3QgcHJvcGFnYXRlZC4iKTsKIH0gY2F0
Y2ggKGV4KSB7CkBAIC0zOCw3ICs0Nyw3IEBAIHRyeSB7CiB9CiAKIHRyeSB7Ci0gICAgdmFyIHdv
cmtlciA9IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0LmpzIik7CisgICAgd29ya2VyID0gbmV3
IFdvcmtlcigiZG9lcy1ub3QtZXhpc3QuanMiKTsKICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0
aW9uKCkgewogICAgICAgICBsb2coIlBBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQg
dGhhdCBjb3VsZCBub3QgYmUgbG9hZGVkLiIpOwogICAgICAgICBsb2coIkRPTkUiKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcyOWUw
ZS4uNGEwNDUxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAwOS0wNy0xMCAgRHJldyBXaWxzb24gIDxhdHdp
bHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5lZWQgdG8gcmVmYWN0b3IgV29ya2VyIHRvIGRlcml2ZSBmcm9tIEFic3RyYWN0
V29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Njk0OAorCisgICAgICAgIENoYW5nZWQgV29ya2VyIHRvIGRlcml2ZSBmcm9tIEFic3RyYWN0V29y
a2VyLCB3aGljaCBpbnZvbHZlZCBtb3ZpbmcKKyAgICAgICAgQWJzdHJhY3RXb3JrZXIgZmlsZXMg
ZnJvbSBiZWluZyB3cmFwcGVkIGJ5IEVOQUJMRV9TSEFSRURfV09SS0VSUyB0bworICAgICAgICBF
TkFCTEVfV09SS0VSUy4KKworICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGZ1bmN0aW9uYWxpdHkg
ZnJvbSB0aGUgSlMvVjggYmluZGluZ3MgdGhhdCBpcyBub3cKKyAgICAgICAgaW5oZXJpdGVkIGZy
b20gQWJzdHJhY3RXb3JrZXIuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgTW92
ZWQgQWJzdHJhY3RXb3JrZXIgZmlsZXMgb3V0IG9mIFNIQVJFRF9XT1JLRVJTIHNlY3Rpb24gYW5k
IGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3cmFwcGVkIGJ5IEVOQUJMRShXT1JLRVJT
KSwgbm90IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisgICAgICAgICogYmluZGluZ3MvanMvSlNX
b3JrZXJDdXN0b20uY3BwOgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGV2ZW50IGxpc3RlbmVy
IGNvZGUgKG5vdyBpbiBiYXNlIGNsYXNzKQorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6Om1h
cmspOgorICAgICAgICBObyBsb25nZXIgbmVlZCB0byBleHBsaWNpdGx5IG1hcmsgZXZlbnQgbGlz
dGVuZXJzIChoYW5kbGVkIGJ5IGJhc2UgY2xhc3MpLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
SW5kZXguaDoKKyAgICAgICAgTW92ZWQgQWJzdHJhY3RXb3JrZXIgbGluZXMgb3V0IG9mIFNIQVJF
RF9XT1JLRVJTIHNlY3Rpb24gYW5kIGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIENoYW5nZWQgdG8g
YmUgd3JhcHBlZCBieSBFTkFCTEUoV09SS0VSUyksIG5vdCBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAgICAg
ICAgTW92ZWQgQWJzdHJhY3RXb3JrZXIgbGluZXMgb3V0IG9mIFNIQVJFRF9XT1JLRVJTIHNlY3Rp
b24gYW5kIGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3Jr
ZXJDdXN0b20uY3BwOgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGV2ZW50IGxpc3RlbmVyIGNv
ZGUgdGhhdCBub3cgbGl2ZXMgaW4gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpW
OFdvcmtlckNvbnN0cnVjdG9yKTogQ2xlYW5lZCB1cCBsZWdhY3kgc3R5bGUgbml0cy4KKyAgICAg
ICAgKiB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3
cmFwcGVkIGJ5IEVOQUJMRShXT1JLRVJTKSwgbm90IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisg
ICAgICAgICogd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oOgorICAgICAgICBDaGFuZ2VkIHRvIGJl
IHdyYXBwZWQgYnkgRU5BQkxFKFdPUktFUlMpLCBub3QgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKS4K
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIFJlbW92ZWQgZXZlbnQgbGlz
dGVuZXIgY29kZSAobm93IGluIGJhc2UgY2xhc3MpLgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
OjpXb3JrZXIpOiBOb3cgZGVyaXZlcyBmcm9tIEFic3RyYWN0V29ya2VyLgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6IENhbGxzIGRpc3BhdGNoTG9hZEVycm9yRXZl
bnQgb24gYmFzZSBjbGFzcy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5oOgorICAgICAgICBS
ZW1vdmVkIEFQSXMgdGhhdCBub3cgbGl2ZSBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlci5pZGw6CisgICAgICAgIE5vdyBkZXJpdmVzIGZyb20gQWJzdHJhY3RXb3Jr
ZXIuCisgICAgICAgIFJlbW92ZWQgQVBJcyB0aGF0IGxpdmUgaW4gdGhlIGJhc2UgY2xhc3MsIGFu
ZCBhZGRlZCBhIEdlbmVyYXRlVG9KUyBmbGFnLgorCiAyMDA5LTA3LTExICBEcmV3IFdpbHNvbiAg
PGF0d2lsc29uQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwppbmRleCBlMjBmMDg1Li4xNzRhODBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTE0MjEsMTEgKzE0MjEsMTMgQEAgY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1dPUktFUlM9MSkgewogCiAgICAgSURMX0JJTkRJTkdTICs9IFwK
ICAgICAgICAgcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaWRsIFwKKyAgICAgICAgd29ya2Vycy9BYnN0
cmFjdFdvcmtlci5pZGwgXAogICAgICAgICB3b3JrZXJzL1dvcmtlci5pZGwgXAogICAgICAgICB3
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXJMb2NhdGlv
bi5pZGwKIAogICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0
V29ya2VyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0
b3IuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAgXAog
ICAgICAgICBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwIFwKQEAgLTE0MzMs
NiArMTQzNSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPTEpIHsKICAgICAg
ICAgYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogICAgICAgICBsb2Fk
ZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgXAogICAgICAgICBwYWdlL1dvcmtlck5hdmln
YXRvci5jcHAgXAorICAgICAgICB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCBcCiAgICAgICAg
IHdvcmtlcnMvV29ya2VyLmNwcCBcCiAgICAgICAgIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAg
XAogICAgICAgICB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCkBAIC0xNDQ2LDE0ICsxNDQ5
LDExIEBAIGNvbnRhaW5zKERFRklORVMsIFNIQVJFRF9XT1JLRVJTPTEpIHsKICAgICBGRUFUVVJF
X0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM9MQogCiAgICAgSURM
X0JJTkRJTkdTICs9IFwKLSAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwgXAogICAg
ICAgICB3b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwKIAogICAgIFNPVVJDRVMgKz0gXAotICAgICAg
ICBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRp
bmdzL2pzL0pTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwIFwKICAgICAgICAgYmluZGluZ3Mv
anMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwIFwKLSAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdv
cmtlci5jcHAgXAogICAgICAgICB3b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKaW5kZXggODJlMDZl
My4uYTQzMzk3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29y
a2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJD
dXN0b20uY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lm
IEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUg
IkpTQWJzdHJhY3RXb3JrZXIuaCIKIApAQCAtOTAsNCArOTAsNCBAQCBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBBYnN0cmFjdFdvcmtlciogYmFzZU9iamVjdCkKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8v
IEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAppbmRl
eCA5NzA3NTE5Li4wMDU0YTlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNw
cApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAKICNpbmNsdWRlICJK
U0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1
ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKQEAgLTQyLDQwICs0MCw3IEBAIHZvaWQgSlNXb3JrZXI6Om1hcmsoKQogewogICAg
IERPTU9iamVjdDo6bWFyaygpOwogCi0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ubWVzc2Fn
ZSgpKTsKLSAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25lcnJvcigpKTsKLQotICAgIHR5cGVk
ZWYgV29ya2VyOjpFdmVudExpc3RlbmVyc01hcCBFdmVudExpc3RlbmVyc01hcDsKLSAgICB0eXBl
ZGVmIFdvcmtlcjo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7Ci0gICAgRXZlbnRMaXN0
ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOwotICAg
IGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3RlbmVy
cy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIpIHsK
LSAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0ZXIt
PnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2ZWNJ
dGVyKQotICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24oKTsKLSAgICB9Ci19
Ci0KLUpTVmFsdWUgSlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZp
bmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDEpKTsKLSAgICBpZiAoIWxpc3RlbmVy
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIucmVsZWFzZSgpLCBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0K
LUpTVmFsdWUgSlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZEpTRXZl
bnRMaXN0ZW5lcihhcmdzLmF0KDEpKTsKLSAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBtYXJrSWZOb3ROdWxsKHN0YXRpY19j
YXN0PFdvcmtlcio+KGltcGwoKSktPm9ubWVzc2FnZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAppbmRleCA1M2VlZWE5Li4wNjMyMjIyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SW5kZXguaApAQCAtNTcsNiArNTcsNyBAQCB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiAoKkZ1bmN0aW9uVGVtcGxhdGVGYWN0b3J5KSgpOwogICAgIFYo
V09SS0VSLCBXb3JrZXIpCiAKICNkZWZpbmUgV09SS0VSX05PTk5PREVfV1JBUFBFUl9UWVBFUyhW
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKEFCU1RSQUNUV09SS0VS
LCBBYnN0cmFjdFdvcmtlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBWKFdPUktFUkNPTlRFWFQsIFdvcmtlckNvbnRleHQpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBWKFdPUktFUkxPQ0FUSU9OLCBXb3JrZXJMb2NhdGlvbikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKFdPUktFUk5BVklHQVRPUiwg
V29ya2VyTmF2aWdhdG9yKQpAQCAtNjgsOSArNjksNyBAQCB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAoKkZ1bmN0aW9uVGVtcGxhdGVGYWN0b3J5KSgpOwogI2lm
IEVOQUJMRShTSEFSRURfV09SS0VSUykKICNkZWZpbmUgU0hBUkVEX1dPUktFUl9BQ1RJVkVfT0JK
RUNUX1dSQVBQRVJfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKFNIQVJFRFdP
UktFUiwgU2hhcmVkV29ya2VyKQotCi0jZGVmaW5lIFNIQVJFRF9XT1JLRVJfTk9OTk9ERV9XUkFQ
UEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVihBQlNUUkFDVFdP
UktFUiwgQWJzdHJhY3RXb3JrZXIpCisjZGVmaW5lIFNIQVJFRF9XT1JLRVJfTk9OTk9ERV9XUkFQ
UEVSX1RZUEVTKFYpCiAjZWxzZQogI2RlZmluZSBTSEFSRURfV09SS0VSX0FDVElWRV9PQkpFQ1Rf
V1JBUFBFUl9UWVBFUyhWKQogI2RlZmluZSBTSEFSRURfV09SS0VSX05PTk5PREVfV1JBUFBFUl9U
WVBFUyhWKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFj
dFdvcmtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0
V29ya2VyQ3VzdG9tLmNwcAppbmRleCAyODYwZGI5Li40MzVlYzk1IDEwMDc1NQotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcApAQCAt
MzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU0hBUkVE
X1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJBYnN0cmFjdFdvcmtl
ci5oIgogCkBAIC0xMzQsNCArMTM0LDQgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEFic3RyYWN0V29y
a2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcikKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAppbmRleCA3NjA5
NTI0Li41Y2VjOTAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1
c3RvbUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJp
bmRpbmcuaApAQCAtMTI0LDkgKzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtXb3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXggPSBrRGVm
YXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwogICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtXb3JrZXJDb250ZXh0SW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50
ZXJuYWxGaWVsZENvdW50ICsgMTsKLSNlbmRpZgogCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJT
KQogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtBYnN0cmFjdFdvcmtlclJlcXVlc3RDYWNoZUlu
ZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrQWJzdHJhY3RXb3JrZXJJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwogI2VuZGlmCkBAIC00NzUsMTEgKzQ3Mywx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXT1JLRVJTKQor
ICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKEFic3RyYWN0V29ya2VyT25lcnJvcik7
CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3JrZXJBZGRFdmVudExpc3RlbmVy
KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhBYnN0cmFjdFdvcmtlclJlbW92ZUV2ZW50TGlz
dGVuZXIpOworCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoV29ya2VyT25tZXNz
YWdlKTsKLSAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihXb3JrZXJPbmVycm9yKTsK
ICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIERF
Q0xBUkVfQ0FMTEJBQ0soV29ya2VyQWRkRXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soV29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcik7CiAKICAgICAgICAgREVDTEFSRV9Q
Uk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dFNlbGYpOwogICAgICAgICBERUNM
QVJFX1BST1BFUlRZX0FDQ0VTU09SKFdvcmtlckNvbnRleHRPbm1lc3NhZ2UpOwpAQCAtNDkzLDkg
KzQ5Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNIQVJF
RF9XT1JLRVJTKQotICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKEFic3RyYWN0V29y
a2VyT25lcnJvcik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3JrZXJBZGRF
dmVudExpc3RlbmVyKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhBYnN0cmFjdFdvcmtlclJl
bW92ZUV2ZW50TGlzdGVuZXIpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNoYXJlZFdvcmtl
ckNvbnN0cnVjdG9yKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdvcmtlckN1c3RvbS5jcHAKaW5kZXggMjliMmQ0My4uNzI2M2Q4YyAxMDA3NTUKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcApAQCAtNTAsMTkgKzUwLDE3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKIHsKICAgICBJTkNfU1RBVFMo
TCJET00uV29ya2VyLkNvbnN0cnVjdG9yIik7CiAKLSAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RD
YWxsKCkpIHsKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMg
YSBmdW5jdGlvbi4iKTsKLSAgICB9CiAKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAwKSB7Cisg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5v
dCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwotICAgIH0KIAogICAg
IHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHNjcmlw
dFVybCA9IGFyZ3NbMF0tPlRvU3RyaW5nKCk7Ci0gICAgaWYgKHRyeUNhdGNoLkhhc0NhdWdodCgp
KSB7CisgICAgaWYgKHRyeUNhdGNoLkhhc0NhdWdodCgpKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcih0cnlDYXRjaC5FeGNlcHRpb24oKSk7Ci0gICAgfQorCiAgICAgaWYgKHNjcmlwdFVybC5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKQEAgLTE1MCw3OCAr
MTQ4LDYgQEAgQUNDRVNTT1JfU0VUVEVSKFdvcmtlck9ubWVzc2FnZSkKICAgICB9CiB9CiAKLUFD
Q0VTU09SX0dFVFRFUihXb3JrZXJPbmVycm9yKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXIub25lcnJvci5fZ2V0Iik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhv
bGRlcigpKTsKLSAgICBpZiAod29ya2VyLT5vbmVycm9yKCkpIHsKLSAgICAgICAgVjhPYmplY3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cio+KHdvcmtlci0+b25lcnJvcigpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4
TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgcmV0dXJu
IHY4TGlzdGVuZXI7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUFD
Q0VTU09SX1NFVFRFUihXb3JrZXJPbmVycm9yKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXIub25lcnJvci5fc2V0Iik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhv
bGRlcigpKTsKLSAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkpOwotICAgIGlm
ICh2YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5n
ZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShp
bmZvLkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNo
ZUluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KLSAg
ICAgICAgd29ya2VyLT5zZXRPbmVycm9yKDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod29ya2VyLCB2YWx1
ZSwgZmFsc2UpOwotICAgICAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmIChvbGRM
aXN0ZW5lcikgewotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExp
c3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBW
OEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgd29ya2VyLT5zZXRPbmVycm9yKGxpc3RlbmVyKTsKLSAgICAgICAgICAgIGNyZWF0
ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprV29ya2Vy
UmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1DQUxMQkFDS19GVU5D
X0RFQ0woV29ya2VyQWRkRXZlbnRMaXN0ZW5lcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29y
a2VyLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwg
YXJncy5Ib2xkZXIoKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBn
ZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgZmFsc2UpOwotICAgIGlmIChsaXN0ZW5l
cikgewotICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAg
ICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAg
IHdvcmtlci0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0K
LSAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBW
OEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlclJlbW92ZUV2ZW50
TGlzdGVuZXIpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5yZW1vdmVFdmVudExpc3Rl
bmVyKCkiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwot
Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3
b3JrZXIsIGFyZ3NbMV0sIHRydWUpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBTdHJp
bmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKLSAgICAgICAgYm9vbCB1c2VDYXB0
dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIHdvcmtlci0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7Ci0KLSAgICAgICAg
cmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6
a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAg
Yi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCmluZGV4IDdhYjRmOGIuLjJjZjFj
NzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKKysrIGIv
V2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjaWYgRU5B
QkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJBYnN0cmFjdFdvcmtlci5oIgogI2luY2x1ZGUgIkV2
ZW50LmgiCkBAIC0xMjEsNCArMTIxLDQgQEAgdm9pZCBBYnN0cmFjdFdvcmtlcjo6ZGlzcGF0Y2hT
Y3JpcHRFcnJvckV2ZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGludCkKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQor
I2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0Fi
c3RyYWN0V29ya2VyLmggYi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaAppbmRleCBi
MjZkOGM4Li5kMTE5YWZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaApAQCAtMzEsNyArMzEs
NyBAQAogI2lmbmRlZiBBYnN0cmFjdFdvcmtlcl9oCiAjZGVmaW5lIEFic3RyYWN0V29ya2VyX2gK
IAotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
QEAgLTgxLDYgKzgxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCiAKICNlbmRpZiAvLyBBYnN0cmFjdFdvcmtlcl9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIGIvV2ViQ29yZS93b3JrZXJzL0Fic3Ry
YWN0V29ya2VyLmlkbAppbmRleCAxMjM0YzBkLi5hZTdlYmM2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFj
dFdvcmtlci5pZGwKQEAgLTMxLDcgKzMxLDcgQEAKIG1vZHVsZSB0aHJlYWRzIHsKIAogICAgIGlu
dGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVNIQVJFRF9XT1JLRVJTLAorICAgICAgICBD
b25kaXRpb25hbD1XT1JLRVJTLAogICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCiAgICAgICAg
IEN1c3RvbVRvSlMsCiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKaW5k
ZXggMmUwM2UzZC4uMmU4YmM4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5j
cHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogV29ya2VyOjpXb3JrZXIoY29uc3QgU3RyaW5nJiB1cmwsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotICAgIDog
QWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgOiBBYnN0cmFjdFdvcmtlcihjb250
ZXh0KQogICAgICwgbV9jb250ZXh0UHJveHkoV29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUodGhp
cykpCiB7CiAgICAgbV9zY3JpcHRVUkwgPSBjb250ZXh0LT5jb21wbGV0ZVVSTCh1cmwpOwpAQCAt
MTE1LDcgKzExNSw3IEBAIGJvb2wgV29ya2VyOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAog
dm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkKIHsKICAgICBpZiAobV9zY3JpcHRMb2FkZXIt
PmZhaWxlZCgpKQotICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKKyAgICAgICAgZGlzcGF0
Y2hMb2FkRXJyb3JFdmVudCgpOwogICAgIGVsc2UKICAgICAgICAgbV9jb250ZXh0UHJveHktPnN0
YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdFVSTCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51
c2VyQWdlbnQobV9zY3JpcHRVUkwpLCBtX3NjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCkBAIC0x
MjQsNzEgKzEyNCw2IEBAIHZvaWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZCgpCiAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CiAKLXZvaWQgV29ya2VyOjpkaXNwYXRjaEVycm9yRXZl
bnQoKQotewotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuZXJyb3JFdmVudCwgZmFsc2UsIHRydWUpOwotICAgIGlmIChtX29uRXJyb3JMaXN0ZW5lcikg
ewotICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICAgICAgZXZ0LT5zZXRDdXJyZW50
VGFyZ2V0KHRoaXMpOwotICAgICAgICBtX29uRXJyb3JMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZ0
LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBk
aXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0KLQot
dm9pZCBXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAg
ICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmlu
ZChldmVudFR5cGUpOwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpIHsK
LSAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzOwotICAgICAgICBsaXN0ZW5lcnMuYXBw
ZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5
cGUsIGxpc3RlbmVycyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTGlzdGVuZXJWZWN0b3ImIGxp
c3RlbmVycyA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRl
cmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBs
aXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgICAgICBpZiAoKmxpc3Rl
bmVySXRlciA9PSBldmVudExpc3RlbmVyKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsK
LSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwotICAg
IH0gICAgCi19Ci0KLXZvaWQgV29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQot
ewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVy
cy5maW5kKGV2ZW50VHlwZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMg
PSBpdGVyLT5zZWNvbmQ7Ci0gICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
bGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5l
cnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09
IGV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXJJ
dGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotfQotCi1ib29sIFdvcmtlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFldmVudCB8fCBldmVudC0+
dHlwZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJ
RklFRF9FVkVOVF9UWVBFX0VSUjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
TGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50
LT50eXBlKCkpOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3Rl
bmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVy
c0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7Ci0gICAgICAgIGV2ZW50LT5zZXRUYXJnZXQo
dGhpcyk7Ci0gICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwotICAgICAgICBs
aXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOwotICAg
IH0KLQotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLX0KLQogdm9pZCBX
b3JrZXI6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8
TWVzc2FnZVBvcnQ+IHBvcnQpCiB7CiAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZl
bnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIDAsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCmluZGV4IDFmY2M4
YmUuLjBmYWE2ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAorKysgYi9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKQEAgLTI5LDggKzI5LDkgQEAKIAogI2lmIEVOQUJMRShX
T1JLRVJTKQogCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkFic3Ry
YWN0V29ya2VyLmgiCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTQ5LDEzICs1MCwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0gICAg
Y2xhc3MgV29ya2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyPiwgcHVibGljIEFjdGl2ZURP
TU9iamVjdCwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQsIHB1YmxpYyBFdmVudFRh
cmdldCB7CisgICAgY2xhc3MgV29ya2VyIDogcHVibGljIEFic3RyYWN0V29ya2VyLCBwcml2YXRl
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXb3JrZXIodXJsLCBjb250ZXh0LCBlYykpOyB9CiAgICAgICAgIH5Xb3JrZXIoKTsKIAot
ICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsgfQotCiAgICAgICAgIHZpcnR1YWwgV29ya2VyKiB0b1dvcmtlcigpIHsgcmV0dXJu
IHRoaXM7IH0KIAogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTcwLDM5ICs2OSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29s
IHVzZUNhcHR1cmUpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3RlbmVyVmVjdG9yOwotICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7Ci0g
ICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZl
bnRMaXN0ZW5lcnM7IH0KLQotICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlcj46OnJlZjsK
LSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpkZXJlZjsKLQogICAgICAgICB2b2lk
IHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsg
bV9vbk1lc3NhZ2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KICAgICAgICAgRXZlbnRMaXN0
ZW5lciogb25tZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vbk1lc3NhZ2VMaXN0ZW5lci5nZXQo
KTsgfQogCi0gICAgICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0g
ICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX29uRXJyb3JM
aXN0ZW5lci5nZXQoKTsgfQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgV29ya2VyKGNvbnN0IFN0
cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotCiAgICAgICAgIEtVUkwgbV9zY3JpcHRVUkw7CiAg
ICAgICAgIE93blB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IG1fc2NyaXB0TG9hZGVyOwogCiAgICAg
ICAgIFdvcmtlckNvbnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRoZSBwcm94eSBvdXRs
aXZlcyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgogCiAgICAgICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTWVzc2FnZUxpc3RlbmVyOwotICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlzdGVuZXI7Ci0gICAgICAgIEV2ZW50TGlzdGVuZXJz
TWFwIG1fZXZlbnRMaXN0ZW5lcnM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwgYi9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyLmlkbAppbmRleCBlMDc4ZTdjLi5lNzAxNTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmlkbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbApAQCAtMjYs
MjQgKzI2LDE4IEBACiAKIG1vZHVsZSB0aHJlYWRzIHsKIAotICAgIGludGVyZmFjZSBbQ3VzdG9t
TWFya0Z1bmN0aW9uLCBDb25kaXRpb25hbD1XT1JLRVJTXSBXb3JrZXIgeworICAgIGludGVyZmFj
ZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCisgICAgICAgIEN1c3RvbU1hcmtGdW5j
dGlvbiwKKyAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisgICAgICAgIEdlbmVyYXRl
VG9KUworICAgIF0gV29ya2VyIDogQWJzdHJhY3RXb3JrZXIgewogCi0gICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ubWVzc2FnZTsKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2Fn
ZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKICAgICAgICAgICAgIHJh
aXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgdGVybWluYXRlKCk7Ci0KLSAgICAg
ICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZl
bnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAg
IFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVy
IGxpc3RlbmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBF
dmVudCBldnQpCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwogICAgIH07CiAK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32892</attachid>
            <date>2009-07-16 14:15:53 -0700</date>
            <delta_ts>2009-07-16 18:14:51 -0700</delta_ts>
            <desc>proposed patch (fixed problem with previous patch that prevent V8 bindings from compiling)</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>28786</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NDdjNDgyLi5lZTVjOTY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MTAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRvIHJlZmFjdG9yIFdvcmtlciB0
byBkZXJpdmUgZnJvbSBBYnN0cmFjdFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDgKKworICAgICAgICBBZGRlZCBjaGVja3MgdG8gbWFr
ZSBzdXJlIHRoYXQgV29ya2VycyBhcmUgcHJvcGVybHkgY29uc3RydWN0ZWQgYW5kIFdvcmtlciBh
dHRyaWJ1dGVzCisgICAgICAgIGFyZSB2aXNpYmxlIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0Lgor
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sOgorICAgICAg
ICBBZGRlZCBleHBsaWNpdCBjaGVjayBmb3IgY29ycmVjdCBjb25zdHJ1Y3Rpb24vcG9zdE1lc3Nh
Z2UgdmlzaWJpbGl0eS4KKwogMjAwOS0wNy0xNCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApp
bmRleCA5NzY3OGQxLi5kM2JlM2VmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDYgQEAK
IFRlc3QgV29ya2VyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNl
cmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuCiAKK1BBU1M6IFN1Y2Nl
c3NmdWxseSBjcmVhdGVkIHdvcmtlci4KIFBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBwcm9wYWdh
dGVkIGNvcnJlY3RseS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVs
eSByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFj
ayBzaXplIGV4Y2VlZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRo
b3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRheEVycm9yOiBOb3Qg
ZW5vdWdoIGFyZ3VtZW50cykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXIt
Y29uc3RydWN0b3IuaHRtbAppbmRleCA4ZjhlNzIzLi4xNjMwMzBmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCkBAIC0xMyw2ICsxMywx
NSBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiB9CiAKIHRyeSB7CisgICAg
dmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy93b3JrZXItY29tbW9uLmpzIik7Cisg
ICAgaWYgKHR5cGVvZiB3b3JrZXIucG9zdE1lc3NhZ2UgIT0gInVuZGVmaW5lZCIpCisgICAgICAg
IGxvZygiUEFTUzogU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgd29ya2VyLiIpOworICAgIGVsc2UKKyAg
ICAgICAgbG9nKCJGQUlMOiB3b3JrZXIucG9zdE1lc3NhZ2UgZGlkIG5vdCBleGlzdC4iKTsKK30g
Y2F0Y2ggKGV4KSB7CisgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoIiArIGV4
ICsgIikgdGhyb3duIHdoZW4gY3JlYXRpbmcgd29ya2VyIik7Cit9Cit0cnkgewogICAgIG5ldyBX
b3JrZXIoe3RvU3RyaW5nOmZ1bmN0aW9uKCl7dGhyb3cgImV4Y2VwdGlvbiJ9fSkKICAgICBsb2co
IkZBSUw6IHRvU3RyaW5nIGV4Y2VwdGlvbiBub3QgcHJvcGFnYXRlZC4iKTsKIH0gY2F0Y2ggKGV4
KSB7CkBAIC0zOCw3ICs0Nyw3IEBAIHRyeSB7CiB9CiAKIHRyeSB7Ci0gICAgdmFyIHdvcmtlciA9
IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0LmpzIik7CisgICAgd29ya2VyID0gbmV3IFdvcmtl
cigiZG9lcy1ub3QtZXhpc3QuanMiKTsKICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkg
ewogICAgICAgICBsb2coIlBBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQgdGhhdCBj
b3VsZCBub3QgYmUgbG9hZGVkLiIpOwogICAgICAgICBsb2coIkRPTkUiKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODY4ODYwYS4uYjll
NzJiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0OCBAQAorMjAwOS0wNy0xNiAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5lZWQgdG8gcmVmYWN0b3IgV29ya2VyIHRvIGRlcml2ZSBmcm9tIEFic3RyYWN0V29ya2Vy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OAor
CisgICAgICAgIENoYW5nZWQgV29ya2VyIHRvIGRlcml2ZSBmcm9tIEFic3RyYWN0V29ya2VyLCB3
aGljaCBpbnZvbHZlZCBtb3ZpbmcKKyAgICAgICAgQWJzdHJhY3RXb3JrZXIgZmlsZXMgZnJvbSBi
ZWluZyB3cmFwcGVkIGJ5IEVOQUJMRV9TSEFSRURfV09SS0VSUyB0bworICAgICAgICBFTkFCTEVf
V09SS0VSUy4KKworICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGZ1bmN0aW9uYWxpdHkgZnJvbSB0
aGUgSlMvVjggYmluZGluZ3MgdGhhdCBpcyBub3cKKyAgICAgICAgaW5oZXJpdGVkIGZyb20gQWJz
dHJhY3RXb3JrZXIuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgTW92ZWQgQWJz
dHJhY3RXb3JrZXIgZmlsZXMgb3V0IG9mIFNIQVJFRF9XT1JLRVJTIHNlY3Rpb24gYW5kIGludG8g
V09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3cmFwcGVkIGJ5IEVOQUJMRShXT1JLRVJTKSwgbm90
IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJD
dXN0b20uY3BwOgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGV2ZW50IGxpc3RlbmVyIGNvZGUg
KG5vdyBpbiBiYXNlIGNsYXNzKQorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6Om1hcmspOgor
ICAgICAgICBObyBsb25nZXIgbmVlZCB0byBleHBsaWNpdGx5IG1hcmsgZXZlbnQgbGlzdGVuZXJz
IChoYW5kbGVkIGJ5IGJhc2UgY2xhc3MpLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SW5kZXgu
aDoKKyAgICAgICAgTW92ZWQgQWJzdHJhY3RXb3JrZXIgbGluZXMgb3V0IG9mIFNIQVJFRF9XT1JL
RVJTIHNlY3Rpb24gYW5kIGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIENoYW5nZWQgdG8gYmUgd3Jh
cHBlZCBieSBFTkFCTEUoV09SS0VSUyksIG5vdCBFTkFCTEUoU0hBUkVEX1dPUktFUlMpLgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAgICAgICAgTW92
ZWQgQWJzdHJhY3RXb3JrZXIgbGluZXMgb3V0IG9mIFNIQVJFRF9XT1JLRVJTIHNlY3Rpb24gYW5k
IGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0
b20uY3BwOgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGV2ZW50IGxpc3RlbmVyIGNvZGUgdGhh
dCBub3cgbGl2ZXMgaW4gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtl
ckNvbnN0cnVjdG9yKTogQ2xlYW5lZCB1cCBsZWdhY3kgc3R5bGUgbml0cy4KKyAgICAgICAgKiB3
b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3cmFwcGVk
IGJ5IEVOQUJMRShXT1JLRVJTKSwgbm90IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisgICAgICAg
ICogd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oOgorICAgICAgICBDaGFuZ2VkIHRvIGJlIHdyYXBw
ZWQgYnkgRU5BQkxFKFdPUktFUlMpLCBub3QgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKS4KKyAgICAg
ICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIFJlbW92ZWQgZXZlbnQgbGlzdGVuZXIg
Y29kZSAobm93IGluIGJhc2UgY2xhc3MpLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpXb3Jr
ZXIpOiBOb3cgZGVyaXZlcyBmcm9tIEFic3RyYWN0V29ya2VyLgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6IENhbGxzIGRpc3BhdGNoTG9hZEVycm9yRXZlbnQgb24g
YmFzZSBjbGFzcy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5oOgorICAgICAgICBSZW1vdmVk
IEFQSXMgdGhhdCBub3cgbGl2ZSBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKiB3b3JrZXJz
L1dvcmtlci5pZGw6CisgICAgICAgIE5vdyBkZXJpdmVzIGZyb20gQWJzdHJhY3RXb3JrZXIuCisg
ICAgICAgIFJlbW92ZWQgQVBJcyB0aGF0IGxpdmUgaW4gdGhlIGJhc2UgY2xhc3MsIGFuZCBhZGRl
ZCBhIEdlbmVyYXRlVG9KUyBmbGFnLgorCiAyMDA5LTA3LTE1ICBEcmV3IFdpbHNvbiAgPGF0d2ls
c29uQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCBiZjAzYTVmLi5iMjUwZjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTE0MTYsMTEgKzE0MTYsMTMgQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1dPUktFUlM9MSkgewogCiAgICAgSURMX0JJTkRJTkdTICs9IFwKICAgICAg
ICAgcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaWRsIFwKKyAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdv
cmtlci5pZGwgXAogICAgICAgICB3b3JrZXJzL1dvcmtlci5pZGwgXAogICAgICAgICB3b3JrZXJz
L1dvcmtlckNvbnRleHQuaWRsIFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5pZGwK
IAogICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2Vy
Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAgXAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwIFwKQEAgLTE0MjgsNiArMTQz
MCw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPTEpIHsKICAgICAgICAgYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogICAgICAgICBsb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgXAogICAgICAgICBwYWdlL1dvcmtlck5hdmlnYXRvci5j
cHAgXAorICAgICAgICB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCBcCiAgICAgICAgIHdvcmtl
cnMvV29ya2VyLmNwcCBcCiAgICAgICAgIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgXAogICAg
ICAgICB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCkBAIC0xNDQxLDE0ICsxNDQ0LDExIEBA
IGNvbnRhaW5zKERFRklORVMsIFNIQVJFRF9XT1JLRVJTPTEpIHsKICAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM9MQogCiAgICAgSURMX0JJTkRJ
TkdTICs9IFwKLSAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwgXAogICAgICAgICB3
b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwKIAogICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBiaW5k
aW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pz
L0pTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNT
aGFyZWRXb3JrZXJDdXN0b20uY3BwIFwKLSAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5j
cHAgXAogICAgICAgICB3b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAKIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKaW5kZXggODJlMDZlMy4uYTQz
Mzk3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20u
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJM
RShTSEFSRURfV09SS0VSUykKKyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUgIkpTQWJz
dHJhY3RXb3JrZXIuaCIKIApAQCAtOTAsNCArOTAsNCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiBleGVjLCBBYnN0cmFjdFdvcmtlciogYmFzZU9iamVjdCkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAppbmRleCA5NzA3
NTE5Li4wMDU0YTlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcApAQCAt
MzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAKICNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkpT
TWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKQEAgLTQyLDQwICs0MCw3IEBAIHZvaWQgSlNXb3JrZXI6Om1hcmsoKQogewogICAgIERPTU9i
amVjdDo6bWFyaygpOwogCi0gICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ubWVzc2FnZSgpKTsK
LSAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25lcnJvcigpKTsKLQotICAgIHR5cGVkZWYgV29y
a2VyOjpFdmVudExpc3RlbmVyc01hcCBFdmVudExpc3RlbmVyc01hcDsKLSAgICB0eXBlZGVmIFdv
cmtlcjo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7Ci0gICAgRXZlbnRMaXN0ZW5lcnNN
YXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOwotICAgIGZvciAo
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3RlbmVycy5iZWdp
bigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIpIHsKLSAgICAg
ICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0ZXItPnNlY29u
ZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2ZWNJdGVyKQot
ICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24oKTsKLSAgICB9Ci19Ci0KLUpT
VmFsdWUgSlNXb3JrZXI6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQotewotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
UmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRPckNy
ZWF0ZUpTRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDEpKTsKLSAgICBpZiAoIWxpc3RlbmVyKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIo
YXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIucmVsZWFzZSgpLCBhcmdzLmF0KDIp
LnRvQm9vbGVhbihleGVjKSk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFs
dWUgSlNXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQotewotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
SlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZEpTRXZlbnRMaXN0
ZW5lcihhcmdzLmF0KDEpKTsKLSAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKLSAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBtYXJrSWZOb3ROdWxsKHN0YXRpY19jYXN0PFdv
cmtlcio+KGltcGwoKSktPm9ubWVzc2FnZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDIwNmJjMmUuLjgyMGI1YmUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTM4Myw2ICszODMsMTMgQEAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RE9NV3JhcHBlcjo6Z2V0VGVt
cGxhdGUoVjhDbGFzc0luZGV4OjpWOFcKICAgICB9CiAKICNpZiBFTkFCTEUoV09SS0VSUykKKyAg
ICBjYXNlIFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVI6IHsKKyAgICAgICAgLy8gUmVzZXJ2
ZSBvbmUgbW9yZSBpbnRlcm5hbCBmaWVsZCBmb3Iga2VlcGluZyBldmVudCBsaXN0ZW5lcnMuCisg
ICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxhdGUgPSBk
ZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAgICAgIGluc3RhbmNlVGVtcGxhdGUt
PlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0Fic3RyYWN0V29ya2VySW50ZXJuYWxG
aWVsZENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBWOENsYXNzSW5k
ZXg6OldPUktFUjogewogICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFsIGZpZWxk
IGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxh
dGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCmluZGV4IDc1NzVhMWUuLmFmYTgxY2IgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEluZGV4LmNwcApAQCAtMzcxLDYgKzM3MSw3IEBACiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXT1JLRVJTKQorI2luY2x1ZGUgIlY4QWJzdHJhY3RXb3JrZXIuaCIKICNpbmNsdWRlICJW
OFdvcmtlci5oIgogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4V29y
a2VyTG9jYXRpb24uaCIKQEAgLTM3OCw3ICszNzksNiBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCi0jaW5jbHVkZSAiVjhBYnN0cmFjdFdvcmtlci5oIgogI2luY2x1ZGUg
IlY4U2hhcmVkV29ya2VyLmgiCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEluZGV4LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAppbmRleCA2NDcx
OTQxLi42NThiZGFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaApAQCAtNTcsNiArNTcsNyBAQCB0eXBl
ZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAoKkZ1bmN0aW9uVGVtcGxh
dGVGYWN0b3J5KSgpOwogICAgIFYoV09SS0VSLCBXb3JrZXIpCiAKICNkZWZpbmUgV09SS0VSX05P
Tk5PREVfV1JBUFBFUl9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBWKEFCU1RSQUNUV09SS0VSLCBBYnN0cmFjdFdvcmtlcikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBWKFdPUktFUkNPTlRFWFQsIFdvcmtlckNvbnRleHQpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKFdPUktFUkxPQ0FUSU9O
LCBXb3JrZXJMb2NhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBWKFdPUktFUk5BVklHQVRPUiwgV29ya2VyTmF2aWdhdG9yKQpAQCAtNjgsOSArNjksNyBAQCB0
eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAoKkZ1bmN0aW9uVGVt
cGxhdGVGYWN0b3J5KSgpOwogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICNkZWZpbmUgU0hB
UkVEX1dPUktFUl9BQ1RJVkVfT0JKRUNUX1dSQVBQRVJfVFlQRVMoVikgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBWKFNIQVJFRFdPUktFUiwgU2hhcmVkV29ya2VyKQotCi0jZGVmaW5lIFNIQVJF
RF9XT1JLRVJfTk9OTk9ERV9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgVihBQlNUUkFDVFdPUktFUiwgQWJzdHJhY3RXb3JrZXIpCisjZGVmaW5lIFNIQVJF
RF9XT1JLRVJfTk9OTk9ERV9XUkFQUEVSX1RZUEVTKFYpCiAjZWxzZQogI2RlZmluZSBTSEFSRURf
V09SS0VSX0FDVElWRV9PQkpFQ1RfV1JBUFBFUl9UWVBFUyhWKQogI2RlZmluZSBTSEFSRURfV09S
S0VSX05PTk5PREVfV1JBUFBFUl9UWVBFUyhWKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAppbmRleCAyODYwZGI5Li5mZWQ5
YmY2IDEwMDc1NQotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0V29y
a2VyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFic3RyYWN0
V29ya2VyQ3VzdG9tLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNp
bmNsdWRlICJBYnN0cmFjdFdvcmtlci5oIgogCkBAIC02Myw3ICs2Myw3IEBAIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihBYnN0cmFjdFdvcmtlciogd29ya2VyLCB2
ODo6TG9jYWw8djg6CiBBQ0NFU1NPUl9HRVRURVIoQWJzdHJhY3RXb3JrZXJPbmVycm9yKQogewog
ICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdvcmtlci5vbmVycm9yLl9nZXQiKTsKLSAgICBB
YnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFi
c3RyYWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBpbmZvLkhvbGRlcigp
KTsKKyAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIs
IGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh3b3JrZXItPm9uZXJyb3IoKSkgewogICAgICAgICBW
OE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVu
dExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkpOwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwpAQCAtNzUs
NyArNzUsNyBAQCBBQ0NFU1NPUl9HRVRURVIoQWJzdHJhY3RXb3JrZXJPbmVycm9yKQogQUNDRVNT
T1JfU0VUVEVSKEFic3RyYWN0V29ya2VyT25lcnJvcikKIHsKICAgICBJTkNfU1RBVFMoTCJET00u
QWJzdHJhY3RXb3JrZXIub25lcnJvci5fc2V0Iik7Ci0gICAgQWJzdHJhY3RXb3JrZXIqIHdvcmtl
ciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFz
c0luZGV4OjpBQlNUUkFDVFdPUktFUiwgaW5mby5Ib2xkZXIoKSk7CisgICAgQWJzdHJhY3RXb3Jr
ZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0
V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBpbmZvLkhvbGRlcigpKTsKICAg
ICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmpl
Y3RFdmVudExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkpOwogICAgIGlmICh2YWx1ZS0+SXNO
dWxsKCkpIHsKICAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7CkBAIC0xMDIsNyArMTAyLDcgQEAg
QUNDRVNTT1JfU0VUVEVSKEFic3RyYWN0V29ya2VyT25lcnJvcikKIENBTExCQUNLX0ZVTkNfREVD
TChBYnN0cmFjdFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9N
LkFic3RyYWN0V29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIEFic3RyYWN0V29ya2Vy
KiB3b3JrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+
KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIEFic3Ry
YWN0V29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxB
YnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgYXJncy5Ib2xkZXIo
KSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3Rl
bmVyKHdvcmtlciwgYXJnc1sxXSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewpAQCAtMTE4
LDcgKzExOCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChBYnN0cmFjdFdvcmtlckFkZEV2ZW50TGlz
dGVuZXIpCiBDQUxMQkFDS19GVU5DX0RFQ0woQWJzdHJhY3RXb3JrZXJSZW1vdmVFdmVudExpc3Rl
bmVyKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdvcmtlci5yZW1vdmVFdmVudExp
c3RlbmVyKCkiKTsKLSAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09S
S0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJbmRl
eDo6QUJTVFJBQ1RXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIHRydWUp
OwogICAgIGlmIChsaXN0ZW5lcikgewpAQCAtMTM0LDQgKzEzNCw0IEBAIENBTExCQUNLX0ZVTkNf
REVDTChBYnN0cmFjdFdvcmtlclJlbW92ZUV2ZW50TGlzdGVuZXIpCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5k
aW5nLmgKaW5kZXggNzYwOTUyNC4uNWNlYzkwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21CaW5kaW5nLmgKQEAgLTEyNCw5ICsxMjQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrV29ya2VyQ29udGV4dFJlcXVlc3RD
YWNoZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrV29ya2VyQ29udGV4dEludGVybmFsRmllbGRDb3VudCA9IGtE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDE7Ci0jZW5kaWYKIAotI2lmIEVOQUJM
RShTSEFSRURfV09SS0VSUykKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQWJzdHJhY3RXb3Jr
ZXJSZXF1ZXN0Q2FjaGVJbmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCAr
IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0Fic3RyYWN0V29ya2VySW50ZXJuYWxGaWVs
ZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTsKICNlbmRpZgpA
QCAtNDc1LDExICs0NzMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBF
TkFCTEUoV09SS0VSUykKKyAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihBYnN0cmFj
dFdvcmtlck9uZXJyb3IpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEFic3RyYWN0V29ya2Vy
QWRkRXZlbnRMaXN0ZW5lcik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3Jr
ZXJSZW1vdmVFdmVudExpc3RlbmVyKTsKKwogICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VT
U09SKFdvcmtlck9ubWVzc2FnZSk7Ci0gICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1Io
V29ya2VyT25lcnJvcik7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyQ29uc3RydWN0
b3IpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpOwot
ICAgICAgICBERUNMQVJFX0NBTExCQUNLKFdvcmtlclJlbW92ZUV2ZW50TGlzdGVuZXIpOwogCiAg
ICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKFdvcmtlckNvbnRleHRTZWxm
KTsKICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihXb3JrZXJDb250ZXh0T25tZXNz
YWdlKTsKQEAgLTQ5Myw5ICs0OTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NF
U1NPUihBYnN0cmFjdFdvcmtlck9uZXJyb3IpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEFi
c3RyYWN0V29ya2VyQWRkRXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
QWJzdHJhY3RXb3JrZXJSZW1vdmVFdmVudExpc3RlbmVyKTsKICAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvcik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCmluZGV4IDI5YjJkNDMuLjcyNjNkOGMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAg
LTUwLDE5ICs1MCwxNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29uc3RydWN0b3IpCiB7
CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5Db25zdHJ1Y3RvciIpOwogCi0gICAgaWYgKCFh
cmdzLklzQ29uc3RydWN0Q2FsbCgpKSB7CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5u
b3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7Ci0gICAgfQogCi0gICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPT0gMCkgeworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDApCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9y
KTsKLSAgICB9CiAKICAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CiAgICAgdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiBzY3JpcHRVcmwgPSBhcmdzWzBdLT5Ub1N0cmluZygpOwotICAgIGlmICh0cnlD
YXRjaC5IYXNDYXVnaHQoKSkgeworICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IodHJ5Q2F0Y2guRXhjZXB0aW9uKCkpOwotICAgIH0KKwogICAg
IGlmIChzY3JpcHRVcmwuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwogCkBAIC0xNTAsNzggKzE0OCw2IEBAIEFDQ0VTU09SX1NFVFRFUihXb3JrZXJPbm1lc3NhZ2Up
CiAgICAgfQogfQogCi1BQ0NFU1NPUl9HRVRURVIoV29ya2VyT25lcnJvcikKLXsKLSAgICBJTkNf
U1RBVFMoTCJET00uV29ya2VyLm9uZXJyb3IuX2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6
OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgaWYgKHdvcmtlci0+b25lcnJvcigpKSB7Ci0g
ICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9i
amVjdEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7Ci0gICAgICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7
Ci0gICAgICAgIHJldHVybiB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoV29ya2VyT25lcnJvcikKLXsKLSAgICBJTkNf
U1RBVFMoTCJET00uV29ya2VyLm9uZXJyb3IuX3NldCIpOwotICAgIFdvcmtlciogd29ya2VyID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6
OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7Ci0gICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBvbGRM
aXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25l
cnJvcigpKTsKLSAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChvbGRMaXN0
ZW5lcikgewotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVuZXIg
PSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtX
b3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0
aGUgbGlzdGVuZXIuCi0gICAgICAgIHdvcmtlci0+c2V0T25lcnJvcigwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3Rl
bmVyKHdvcmtlciwgdmFsdWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAg
ICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgp
OwotICAgICAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwg
b2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdvcmtlci0+c2V0T25lcnJvcihsaXN0ZW5lcik7Ci0g
ICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBW
OEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpCi17Ci0gICAgSU5D
X1NUQVRTKEwiRE9NLldvcmtlci5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBXb3JrZXIqIHdv
cmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFz
c0luZGV4OjpXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlKTsK
LSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5W
YWx1ZSgpOwotICAgICAgICB3b3JrZXItPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIs
IHVzZUNhcHR1cmUpOwotCi0gICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xk
ZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAg
fQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChX
b3JrZXJSZW1vdmVFdmVudExpc3RlbmVyKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBh
cmdzLkhvbGRlcigpKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdl
dEV2ZW50TGlzdGVuZXIod29ya2VyLCBhcmdzWzFdLCB0cnVlKTsKLSAgICBpZiAobGlzdGVuZXIp
IHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAg
ICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICB3
b3JrZXItPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1
cmUpOwotCi0gICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJn
c1sxXSwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuY3BwIGIvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcAppbmRl
eCAxMjBmNzhhLi5hNjgwOGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNIQVJFRF9X
T1JLRVJTKQorI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiQWJzdHJhY3RXb3JrZXIu
aCIKIApAQCAtMTIyLDQgKzEyMiw0IEBAIHZvaWQgQWJzdHJhY3RXb3JrZXI6OmRpc3BhdGNoU2Ny
aXB0RXJyb3JFdmVudChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQpCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9BYnN0
cmFjdFdvcmtlci5oIGIvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKaW5kZXggODll
NDI1OC4uNWJjNWUyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2Vy
LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKQEAgLTMxLDcgKzMxLDcg
QEAKICNpZm5kZWYgQWJzdHJhY3RXb3JrZXJfaAogI2RlZmluZSBBYnN0cmFjdFdvcmtlcl9oCiAK
LSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCkBA
IC04MSw2ICs4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQogCiAjZW5kaWYgLy8gQWJzdHJhY3RXb3JrZXJfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFj
dFdvcmtlci5pZGwKaW5kZXggMTIzNGMwZC4uYWU3ZWJjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93
b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuaWRsCkBAIC0zMSw3ICszMSw3IEBACiBtb2R1bGUgdGhyZWFkcyB7CiAKICAgICBpbnRl
cmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1TSEFSRURfV09SS0VSUywKKyAgICAgICAgQ29u
ZGl0aW9uYWw9V09SS0VSUywKICAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgICAgICBD
dXN0b21Ub0pTLAogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4
IDJlMDNlM2QuLjJlOGJjODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3Bw
CisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFdvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICA6IEFj
dGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgIDogQWJzdHJhY3RXb3JrZXIoY29udGV4
dCkKICAgICAsIG1fY29udGV4dFByb3h5KFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKHRoaXMp
KQogewogICAgIG1fc2NyaXB0VVJMID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKTsKQEAgLTEx
NSw3ICsxMTUsNyBAQCBib29sIFdvcmtlcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHZv
aWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZCgpCiB7CiAgICAgaWYgKG1fc2NyaXB0TG9hZGVyLT5m
YWlsZWQoKSkKLSAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CisgICAgICAgIGRpc3BhdGNo
TG9hZEVycm9yRXZlbnQoKTsKICAgICBlbHNlCiAgICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFy
dFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNl
ckFnZW50KG1fc2NyaXB0VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIApAQCAtMTI0
LDcxICsxMjQsNiBAQCB2b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoKQogICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOwogfQogCi12b2lkIFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50
KCkKLXsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlKTsKLSAgICBpZiAobV9vbkVycm9yTGlzdGVuZXIpIHsK
LSAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRh
cmdldCh0aGlzKTsKLSAgICAgICAgbV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5n
ZXQoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlz
cGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZv
aWQgV29ya2VyOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0g
ICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVu
ZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBl
LCBsaXN0ZW5lcnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0
ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJh
dG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlz
dGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICAgICAgaWYgKCpsaXN0ZW5l
ckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0g
ICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9
ICAgIAotfQotCi12b2lkIFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsK
LSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMu
ZmluZChldmVudFR5cGUpOwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0g
aXRlci0+c2Vjb25kOwotICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxp
c3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJz
LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBl
dmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRl
ciAtIGxpc3RlbmVycy5iZWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotYm9vbCBXb3JrZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5
cGUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJ
RURfRVZFTlRfVFlQRV9FUlI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExp
c3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+
dHlwZSgpKTsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5l
ckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnND
b3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRo
aXMpOwotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlz
dGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KIHZvaWQgV29y
a2VyOjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1l
c3NhZ2VQb3J0PiBwb3J0KQogewogICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50
OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCBwb3J0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAppbmRleCAxZmNjOGJl
Li4wZmFhNmU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKKysrIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlci5oCkBAIC0yOSw4ICsyOSw5IEBACiAKICNpZiBFTkFCTEUoV09S
S0VSUykKIAotI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJBYnN0cmFj
dFdvcmtlci5oIgogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21p
Y1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC00OSwxMyArNTAsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNs
YXNzIFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01P
YmplY3QsIHByaXZhdGUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJn
ZXQgeworICAgIGNsYXNzIFdvcmtlciA6IHB1YmxpYyBBYnN0cmFjdFdvcmtlciwgcHJpdmF0ZSBX
b3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgV29ya2VyKHVybCwgY29udGV4dCwgZWMpKTsgfQogICAgICAgICB+V29ya2VyKCk7CiAKLSAg
ICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KLQogICAgICAgICB2aXJ0dWFsIFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0
aGlzOyB9CiAKICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7CkBAIC03MCwzOSArNjksMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4s
IGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1
c2VDYXB0dXJlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPEF0b21pY1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAg
ICAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50
TGlzdGVuZXJzOyB9Ci0KLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpyZWY7Ci0g
ICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyPjo6ZGVyZWY7Ci0KICAgICAgICAgdm9pZCBz
ZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1f
b25NZXNzYWdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CiAgICAgICAgIEV2ZW50TGlzdGVu
ZXIqIG9ubWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7
IH0KIAotICAgICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKSB7IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAg
ICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlz
dGVuZXIuZ2V0KCk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJp
bmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLQogICAgICAgICBLVVJMIG1fc2NyaXB0VVJMOwogICAg
ICAgICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRlcjsKIAogICAgICAg
ICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2
ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KIAogICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKLSAgICAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25FcnJvckxpc3RlbmVyOwotICAgICAgICBFdmVudExpc3RlbmVyc01h
cCBtX2V2ZW50TGlzdGVuZXJzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5pZGwKaW5kZXggZTA3OGU3Yy4uZTcwMTUyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5pZGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKQEAgLTI2LDI0
ICsyNiwxOCBAQAogCiBtb2R1bGUgdGhyZWFkcyB7CiAKLSAgICBpbnRlcmZhY2UgW0N1c3RvbU1h
cmtGdW5jdGlvbiwgQ29uZGl0aW9uYWw9V09SS0VSU10gV29ya2VyIHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAorICAgICAgICBDdXN0b21NYXJrRnVuY3Rp
b24sCisgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAorICAgICAgICBHZW5lcmF0ZVRv
SlMKKyAgICBdIFdvcmtlciA6IEFic3RyYWN0V29ya2VyIHsKIAotICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bm1lc3NhZ2U7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2Us
IGluIFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwotCi0gICAgICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBb
Q3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBs
aXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBi
b29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZl
bnQgZXZ0KQotICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKICAgICB9OwogCiB9
Cg==
</data>
<flag name="review"
          id="17242"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32909</attachid>
            <date>2009-07-16 18:14:51 -0700</date>
            <delta_ts>2009-07-17 11:08:24 -0700</delta_ts>
            <desc>Patch addressing Levin&apos;s comments</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>28828</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NDdjNDgyLi5lZTVjOTY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MTAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRvIHJlZmFjdG9yIFdvcmtlciB0
byBkZXJpdmUgZnJvbSBBYnN0cmFjdFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDgKKworICAgICAgICBBZGRlZCBjaGVja3MgdG8gbWFr
ZSBzdXJlIHRoYXQgV29ya2VycyBhcmUgcHJvcGVybHkgY29uc3RydWN0ZWQgYW5kIFdvcmtlciBh
dHRyaWJ1dGVzCisgICAgICAgIGFyZSB2aXNpYmxlIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0Lgor
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sOgorICAgICAg
ICBBZGRlZCBleHBsaWNpdCBjaGVjayBmb3IgY29ycmVjdCBjb25zdHJ1Y3Rpb24vcG9zdE1lc3Nh
Z2UgdmlzaWJpbGl0eS4KKwogMjAwOS0wNy0xNCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApp
bmRleCA5NzY3OGQxLi5kM2JlM2VmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDYgQEAK
IFRlc3QgV29ya2VyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNl
cmllcyBvZiBQQVNTIG1lc3NhZ2VzLCBmb2xsb3dlZCB3aXRoIERPTkUuCiAKK1BBU1M6IFN1Y2Nl
c3NmdWxseSBjcmVhdGVkIHdvcmtlci4KIFBBU1M6IHRvU3RyaW5nIGV4Y2VwdGlvbiBwcm9wYWdh
dGVkIGNvcnJlY3RseS4KIFBBU1M6IHRyeWluZyB0byBjcmVhdGUgd29ya2VycyByZWN1cnNpdmVs
eSByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFj
ayBzaXplIGV4Y2VlZGVkLikKIFBBU1M6IGludm9raW5nIFdvcmtlciBjb25zdHJ1Y3RvciB3aXRo
b3V0IGFyZ3VtZW50cyByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKFN5bnRheEVycm9yOiBOb3Qg
ZW5vdWdoIGFyZ3VtZW50cykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93
b3JrZXItY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXIt
Y29uc3RydWN0b3IuaHRtbAppbmRleCA4ZjhlNzIzLi4xNjMwMzBmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9yLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sCkBAIC0xMyw2ICsxMywx
NSBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiB9CiAKIHRyeSB7CisgICAg
dmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy93b3JrZXItY29tbW9uLmpzIik7Cisg
ICAgaWYgKHR5cGVvZiB3b3JrZXIucG9zdE1lc3NhZ2UgIT0gInVuZGVmaW5lZCIpCisgICAgICAg
IGxvZygiUEFTUzogU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgd29ya2VyLiIpOworICAgIGVsc2UKKyAg
ICAgICAgbG9nKCJGQUlMOiB3b3JrZXIucG9zdE1lc3NhZ2UgZGlkIG5vdCBleGlzdC4iKTsKK30g
Y2F0Y2ggKGV4KSB7CisgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoIiArIGV4
ICsgIikgdGhyb3duIHdoZW4gY3JlYXRpbmcgd29ya2VyIik7Cit9Cit0cnkgewogICAgIG5ldyBX
b3JrZXIoe3RvU3RyaW5nOmZ1bmN0aW9uKCl7dGhyb3cgImV4Y2VwdGlvbiJ9fSkKICAgICBsb2co
IkZBSUw6IHRvU3RyaW5nIGV4Y2VwdGlvbiBub3QgcHJvcGFnYXRlZC4iKTsKIH0gY2F0Y2ggKGV4
KSB7CkBAIC0zOCw3ICs0Nyw3IEBAIHRyeSB7CiB9CiAKIHRyeSB7Ci0gICAgdmFyIHdvcmtlciA9
IG5ldyBXb3JrZXIoImRvZXMtbm90LWV4aXN0LmpzIik7CisgICAgd29ya2VyID0gbmV3IFdvcmtl
cigiZG9lcy1ub3QtZXhpc3QuanMiKTsKICAgICB3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uKCkg
ewogICAgICAgICBsb2coIlBBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYSBzY3JpcHQgdGhhdCBj
b3VsZCBub3QgYmUgbG9hZGVkLiIpOwogICAgICAgICBsb2coIkRPTkUiKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODY4ODYwYS4uYjll
NzJiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0OCBAQAorMjAwOS0wNy0xNiAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5lZWQgdG8gcmVmYWN0b3IgV29ya2VyIHRvIGRlcml2ZSBmcm9tIEFic3RyYWN0V29ya2Vy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OAor
CisgICAgICAgIENoYW5nZWQgV29ya2VyIHRvIGRlcml2ZSBmcm9tIEFic3RyYWN0V29ya2VyLCB3
aGljaCBpbnZvbHZlZCBtb3ZpbmcKKyAgICAgICAgQWJzdHJhY3RXb3JrZXIgZmlsZXMgZnJvbSBi
ZWluZyB3cmFwcGVkIGJ5IEVOQUJMRV9TSEFSRURfV09SS0VSUyB0bworICAgICAgICBFTkFCTEVf
V09SS0VSUy4KKworICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGZ1bmN0aW9uYWxpdHkgZnJvbSB0
aGUgSlMvVjggYmluZGluZ3MgdGhhdCBpcyBub3cKKyAgICAgICAgaW5oZXJpdGVkIGZyb20gQWJz
dHJhY3RXb3JrZXIuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgTW92ZWQgQWJz
dHJhY3RXb3JrZXIgZmlsZXMgb3V0IG9mIFNIQVJFRF9XT1JLRVJTIHNlY3Rpb24gYW5kIGludG8g
V09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNw
cDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3cmFwcGVkIGJ5IEVOQUJMRShXT1JLRVJTKSwgbm90
IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJD
dXN0b20uY3BwOgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGV2ZW50IGxpc3RlbmVyIGNvZGUg
KG5vdyBpbiBiYXNlIGNsYXNzKQorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXI6Om1hcmspOgor
ICAgICAgICBObyBsb25nZXIgbmVlZCB0byBleHBsaWNpdGx5IG1hcmsgZXZlbnQgbGlzdGVuZXJz
IChoYW5kbGVkIGJ5IGJhc2UgY2xhc3MpLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SW5kZXgu
aDoKKyAgICAgICAgTW92ZWQgQWJzdHJhY3RXb3JrZXIgbGluZXMgb3V0IG9mIFNIQVJFRF9XT1JL
RVJTIHNlY3Rpb24gYW5kIGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIENoYW5nZWQgdG8gYmUgd3Jh
cHBlZCBieSBFTkFCTEUoV09SS0VSUyksIG5vdCBFTkFCTEUoU0hBUkVEX1dPUktFUlMpLgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAgICAgICAgTW92
ZWQgQWJzdHJhY3RXb3JrZXIgbGluZXMgb3V0IG9mIFNIQVJFRF9XT1JLRVJTIHNlY3Rpb24gYW5k
IGludG8gV09SS0VSUy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0
b20uY3BwOgorICAgICAgICBSZW1vdmVkIG9ic29sZXRlIGV2ZW50IGxpc3RlbmVyIGNvZGUgdGhh
dCBub3cgbGl2ZXMgaW4gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtl
ckNvbnN0cnVjdG9yKTogQ2xlYW5lZCB1cCBsZWdhY3kgc3R5bGUgbml0cy4KKyAgICAgICAgKiB3
b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3cmFwcGVk
IGJ5IEVOQUJMRShXT1JLRVJTKSwgbm90IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisgICAgICAg
ICogd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oOgorICAgICAgICBDaGFuZ2VkIHRvIGJlIHdyYXBw
ZWQgYnkgRU5BQkxFKFdPUktFUlMpLCBub3QgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKS4KKyAgICAg
ICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIFJlbW92ZWQgZXZlbnQgbGlzdGVuZXIg
Y29kZSAobm93IGluIGJhc2UgY2xhc3MpLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpXb3Jr
ZXIpOiBOb3cgZGVyaXZlcyBmcm9tIEFic3RyYWN0V29ya2VyLgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6IENhbGxzIGRpc3BhdGNoTG9hZEVycm9yRXZlbnQgb24g
YmFzZSBjbGFzcy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5oOgorICAgICAgICBSZW1vdmVk
IEFQSXMgdGhhdCBub3cgbGl2ZSBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKiB3b3JrZXJz
L1dvcmtlci5pZGw6CisgICAgICAgIE5vdyBkZXJpdmVzIGZyb20gQWJzdHJhY3RXb3JrZXIuCisg
ICAgICAgIFJlbW92ZWQgQVBJcyB0aGF0IGxpdmUgaW4gdGhlIGJhc2UgY2xhc3MsIGFuZCBhZGRl
ZCBhIEdlbmVyYXRlVG9KUyBmbGFnLgorCiAyMDA5LTA3LTE1ICBEcmV3IFdpbHNvbiAgPGF0d2ls
c29uQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCBiZjAzYTVmLi5iMjUwZjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTE0MTYsMTEgKzE0MTYsMTMgQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1dPUktFUlM9MSkgewogCiAgICAgSURMX0JJTkRJTkdTICs9IFwKICAgICAg
ICAgcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaWRsIFwKKyAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdv
cmtlci5pZGwgXAogICAgICAgICB3b3JrZXJzL1dvcmtlci5pZGwgXAogICAgICAgICB3b3JrZXJz
L1dvcmtlckNvbnRleHQuaWRsIFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5pZGwK
IAogICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2Vy
Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5jcHAgXAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwIFwKQEAgLTE0MjgsNiArMTQz
MCw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPTEpIHsKICAgICAgICAgYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogICAgICAgICBsb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAgXAogICAgICAgICBwYWdlL1dvcmtlck5hdmlnYXRvci5j
cHAgXAorICAgICAgICB3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCBcCiAgICAgICAgIHdvcmtl
cnMvV29ya2VyLmNwcCBcCiAgICAgICAgIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgXAogICAg
ICAgICB3b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCkBAIC0xNDQxLDE0ICsxNDQ0LDExIEBA
IGNvbnRhaW5zKERFRklORVMsIFNIQVJFRF9XT1JLRVJTPTEpIHsKICAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM9MQogCiAgICAgSURMX0JJTkRJ
TkdTICs9IFwKLSAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwgXAogICAgICAgICB3
b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwKIAogICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBiaW5k
aW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pz
L0pTU2hhcmVkV29ya2VyQ29uc3RydWN0b3IuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNT
aGFyZWRXb3JrZXJDdXN0b20uY3BwIFwKLSAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5j
cHAgXAogICAgICAgICB3b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAKIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKaW5kZXggODJlMDZlMy4uYTQz
Mzk3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20u
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJM
RShTSEFSRURfV09SS0VSUykKKyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUgIkpTQWJz
dHJhY3RXb3JrZXIuaCIKIApAQCAtOTAsNCArOTAsNCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiBleGVjLCBBYnN0cmFjdFdvcmtlciogYmFzZU9iamVjdCkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAppbmRleCA5NzA3
NTE5Li42MDEwZjgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcApAQCAt
MzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIkpTV29ya2VyLmgiCiAKICNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkpT
TWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKQEAgLTQwLDQyICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHZvaWQgSlNX
b3JrZXI6Om1hcmsoKQogewotICAgIERPTU9iamVjdDo6bWFyaygpOworICAgIEJhc2U6Om1hcmso
KTsKIAotICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7Ci0gICAgbWFya0lm
Tm90TnVsbChtX2ltcGwtPm9uZXJyb3IoKSk7Ci0KLSAgICB0eXBlZGVmIFdvcmtlcjo6RXZlbnRM
aXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7Ci0gICAgdHlwZWRlZiBXb3JrZXI6Okxpc3Rl
bmVyVmVjdG9yIExpc3RlbmVyVmVjdG9yOwotICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExp
c3RlbmVycyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKLSAgICBmb3IgKEV2ZW50TGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRl
ciAhPSBldmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7Ci0gICAgICAgIGZvciAoTGlz
dGVuZXJWZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsg
dmVjSXRlciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikKLSAgICAgICAgICAg
ICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0aW9uKCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlIEpTV29y
a2VyOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKLXsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFnbG9i
YWxPYmplY3QpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFJlZlB0cjxKU0V2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2xvYmFsT2JqZWN0LT5maW5kT3JDcmVhdGVKU0V2ZW50
TGlzdGVuZXIoYXJncy5hdCgxKSk7Ci0gICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLnJlbGVhc2UoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4o
ZXhlYykpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlIEpTV29ya2Vy
OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKLXsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKCFnbG9i
YWxPYmplY3QpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEpTRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU0V2ZW50TGlzdGVuZXIoYXJncy5h
dCgxKSk7Ci0gICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
YyksIGxpc3RlbmVyLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgbWFya0lmTm90TnVsbChzdGF0aWNfY2FzdDxXb3JrZXIqPihpbXBs
KCkpLT5vbm1lc3NhZ2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRleCAyMDZiYzJlLi44MjBiNWJlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0zODMsNiArMzgzLDEzIEBAIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKFY4Q2xh
c3NJbmRleDo6VjhXCiAgICAgfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgY2FzZSBWOENs
YXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSOiB7CisgICAgICAgIC8vIFJlc2VydmUgb25lIG1vcmUg
aW50ZXJuYWwgZmllbGQgZm9yIGtlZXBpbmcgZXZlbnQgbGlzdGVuZXJzLgorICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+
SW5zdGFuY2VUZW1wbGF0ZSgpOworICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5h
bEZpZWxkQ291bnQoVjhDdXN0b206OmtBYnN0cmFjdFdvcmtlckludGVybmFsRmllbGRDb3VudCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXT1JLRVI6
IHsKICAgICAgICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBpbnRlcm5hbCBmaWVsZCBmb3Iga2VlcGlu
ZyBldmVudCBsaXN0ZW5lcnMuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+
IGluc3RhbmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEluZGV4LmNwcAppbmRleCA3NTc1YTFlLi5hZmE4MWNiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJ
bmRleC5jcHAKQEAgLTM3MSw2ICszNzEsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV09SS0VS
UykKKyNpbmNsdWRlICJWOEFic3RyYWN0V29ya2VyLmgiCiAjaW5jbHVkZSAiVjhXb3JrZXIuaCIK
ICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJWOFdvcmtlckxvY2F0aW9u
LmgiCkBAIC0zNzgsNyArMzc5LDYgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JL
RVJTKQotI2luY2x1ZGUgIlY4QWJzdHJhY3RXb3JrZXIuaCIKICNpbmNsdWRlICJWOFNoYXJlZFdv
cmtlci5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRl
eC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKaW5kZXggNjQ3MTk0MS4uNjU4YmRh
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKQEAgLTU3LDYgKzU3LDcgQEAgdHlwZWRlZiB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9yeSko
KTsKICAgICBWKFdPUktFUiwgV29ya2VyKQogCiAjZGVmaW5lIFdPUktFUl9OT05OT0RFX1dSQVBQ
RVJfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVihBQlNU
UkFDVFdPUktFUiwgQWJzdHJhY3RXb3JrZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgVihXT1JLRVJDT05URVhULCBXb3JrZXJDb250ZXh0KSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihXT1JLRVJMT0NBVElPTiwgV29ya2VyTG9j
YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVihXT1JLRVJO
QVZJR0FUT1IsIFdvcmtlck5hdmlnYXRvcikKQEAgLTY4LDkgKzY5LDcgQEAgdHlwZWRlZiB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9y
eSkoKTsKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCiAjZGVmaW5lIFNIQVJFRF9XT1JLRVJf
QUNUSVZFX09CSkVDVF9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICBcCiAgICAg
VihTSEFSRURXT1JLRVIsIFNoYXJlZFdvcmtlcikKLQotI2RlZmluZSBTSEFSRURfV09SS0VSX05P
Tk5PREVfV1JBUFBFUl9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFYo
QUJTVFJBQ1RXT1JLRVIsIEFic3RyYWN0V29ya2VyKQorI2RlZmluZSBTSEFSRURfV09SS0VSX05P
Tk5PREVfV1JBUFBFUl9UWVBFUyhWKQogI2Vsc2UKICNkZWZpbmUgU0hBUkVEX1dPUktFUl9BQ1RJ
VkVfT0JKRUNUX1dSQVBQRVJfVFlQRVMoVikKICNkZWZpbmUgU0hBUkVEX1dPUktFUl9OT05OT0RF
X1dSQVBQRVJfVFlQRVMoVikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKaW5kZXggMjg2MGRiOS4uZmVkOWJmNiAxMDA3NTUK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3RvbS5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1c3Rv
bS5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5B
QkxFKFNIQVJFRF9XT1JLRVJTKQorI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiQWJz
dHJhY3RXb3JrZXIuaCIKIApAQCAtNjMsNyArNjMsNyBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGdldEV2ZW50TGlzdGVuZXIoQWJzdHJhY3RXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2FsPHY4
OgogQUNDRVNTT1JfR0VUVEVSKEFic3RyYWN0V29ya2VyT25lcnJvcikKIHsKICAgICBJTkNfU1RB
VFMoTCJET00uQWJzdHJhY3RXb3JrZXIub25lcnJvci5fZ2V0Iik7Ci0gICAgQWJzdHJhY3RXb3Jr
ZXIqIHdvcmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtl
cj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgaW5mby5Ib2xkZXIoKSk7CisgICAgQWJz
dHJhY3RXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PEFic3RyYWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBpbmZvLkhvbGRl
cigpKTsKICAgICBpZiAod29ya2VyLT5vbmVycm9yKCkpIHsKICAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHdvcmtlci0+b25lcnJvcigpKTsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlz
dGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKQEAgLTc1LDcgKzc1LDcgQEAg
QUNDRVNTT1JfR0VUVEVSKEFic3RyYWN0V29ya2VyT25lcnJvcikKIEFDQ0VTU09SX1NFVFRFUihB
YnN0cmFjdFdvcmtlck9uZXJyb3IpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29y
a2VyLm9uZXJyb3IuX3NldCIpOwotICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOFByb3h5
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJbmRleDo6QUJT
VFJBQ1RXT1JLRVIsIGluZm8uSG9sZGVyKCkpOworICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhD
bGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgVjhPYmplY3RF
dmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0
ZW5lcio+KHdvcmtlci0+b25lcnJvcigpKTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChvbGRMaXN0ZW5lcikgewpAQCAtMTAyLDcgKzEwMiw3IEBAIEFDQ0VTU09SX1NF
VFRFUihBYnN0cmFjdFdvcmtlck9uZXJyb3IpCiBDQUxMQkFDS19GVU5DX0RFQ0woQWJzdHJhY3RX
b3JrZXJBZGRFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0cmFjdFdv
cmtlci5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0V29ya2VyPihWOENsYXNzSW5k
ZXg6OkFCU1RSQUNUV09SS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBBYnN0cmFjdFdvcmtlciog
d29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3Jr
ZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIs
IGFyZ3NbMV0sIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTExOCw3ICsxMTgsNyBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woQWJzdHJhY3RXb3JrZXJBZGRFdmVudExpc3RlbmVyKQogQ0FM
TEJBQ0tfRlVOQ19ERUNMKEFic3RyYWN0V29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcikKIHsKICAg
ICBJTkNfU1RBVFMoTCJET00uQWJzdHJhY3RXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7
Ci0gICAgQWJzdHJhY3RXb3JrZXIqIHdvcmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgYXJncy5I
b2xkZXIoKSk7CisgICAgQWJzdHJhY3RXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNU
V09SS0VSLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod29ya2VyLCBhcmdzWzFdLCB0cnVlKTsKICAgICBpZiAo
bGlzdGVuZXIpIHsKQEAgLTEzNCw0ICsxMzQsNCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQWJzdHJh
Y3RXb3JrZXJSZW1vdmVFdmVudExpc3RlbmVyKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjZW5kaWYgLy8gRU5BQkxFKFdPUktF
UlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRp
bmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCmluZGV4
IDc2MDk1MjQuLjVjZWM5MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tQmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tQmluZGluZy5oCkBAIC0xMjQsOSArMTI0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1dvcmtlckNvbnRleHRSZXF1ZXN0Q2FjaGVJbmRleCA9
IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQga1dvcmtlckNvbnRleHRJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBw
ZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwotI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0hBUkVEX1dP
UktFUlMpCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0Fic3RyYWN0V29ya2VyUmVxdWVzdENh
Y2hlSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtBYnN0cmFjdFdvcmtlckludGVybmFsRmllbGRDb3VudCA9IGtE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDE7CiAjZW5kaWYKQEAgLTQ3NSwxMSAr
NDczLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdPUktF
UlMpCisgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoQWJzdHJhY3RXb3JrZXJPbmVy
cm9yKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhBYnN0cmFjdFdvcmtlckFkZEV2ZW50TGlz
dGVuZXIpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEFic3RyYWN0V29ya2VyUmVtb3ZlRXZl
bnRMaXN0ZW5lcik7CisKICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihXb3JrZXJP
bm1lc3NhZ2UpOwotICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKFdvcmtlck9uZXJy
b3IpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFdvcmtlckNvbnN0cnVjdG9yKTsKLSAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJBZGRFdmVudExpc3RlbmVyKTsKLSAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhXb3JrZXJSZW1vdmVFdmVudExpc3RlbmVyKTsKIAogICAgICAgICBERUNM
QVJFX1BST1BFUlRZX0FDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0U2VsZik7CiAgICAgICAg
IERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoV29ya2VyQ29udGV4dE9ubWVzc2FnZSk7CkBAIC00
OTMsOSArNDkyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCi0gICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoQWJzdHJh
Y3RXb3JrZXJPbmVycm9yKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhBYnN0cmFjdFdvcmtl
ckFkZEV2ZW50TGlzdGVuZXIpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEFic3RyYWN0V29y
a2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcik7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soU2hhcmVk
V29ya2VyQ29uc3RydWN0b3IpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAppbmRleCAyOWIyZDQzLi43MDVmOWE5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCkBAIC01MCwxOSArNTAs
MTcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnN0cnVjdG9yKQogewogICAgIElOQ19T
VEFUUyhMIkRPTS5Xb3JrZXIuQ29uc3RydWN0b3IiKTsKIAotICAgIGlmICghYXJncy5Jc0NvbnN0
cnVjdENhbGwoKSkgeworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLiIpOwotICAgIH0KIAotICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDAp
IHsKKyAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKLSAgICB9CiAKICAg
ICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBzY3Jp
cHRVcmwgPSBhcmdzWzBdLT5Ub1N0cmluZygpOwotICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQo
KSkgeworICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IodHJ5Q2F0Y2guRXhjZXB0aW9uKCkpOwotICAgIH0KKwogICAgIGlmIChzY3JpcHRVcmwu
SXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCkBAIC0xNTAsNzgg
KzE0OCw2IEBAIEFDQ0VTU09SX1NFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCiAgICAgfQogfQogCi1B
Q0NFU1NPUl9HRVRURVIoV29ya2VyT25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29y
a2VyLm9uZXJyb3IuX2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5I
b2xkZXIoKSk7Ci0gICAgaWYgKHdvcmtlci0+b25lcnJvcigpKSB7Ci0gICAgICAgIFY4T2JqZWN0
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2
OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIHJldHVy
biB2OExpc3RlbmVyOwotICAgIH0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi1B
Q0NFU1NPUl9TRVRURVIoV29ya2VyT25lcnJvcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29y
a2VyLm9uZXJyb3IuX3NldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5I
b2xkZXIoKSk7Ci0gICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25lcnJvcigpKTsKLSAgICBp
ZiAodmFsdWUtPklzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChvbGRMaXN0ZW5lcikgewotICAgICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+
Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2Fj
aGVJbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXIuCi0g
ICAgICAgIHdvcmtlci0+c2V0T25lcnJvcigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgdmFs
dWUsIGZhbHNlKTsKLSAgICAgICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBpZiAob2xk
TGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhM
aXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICAgICAg
ICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwg
VjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHdvcmtlci0+c2V0T25lcnJvcihsaXN0ZW5lcik7Ci0gICAgICAgICAgICBjcmVh
dGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dvcmtl
clJlcXVlc3RDYWNoZUluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQ0FMTEJBQ0tfRlVO
Q19ERUNMKFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpCi17Ci0gICAgSU5DX1NUQVRTKEwiRE9NLldv
cmtlci5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIs
IGFyZ3MuSG9sZGVyKCkpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0g
Z2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlKTsKLSAgICBpZiAobGlzdGVu
ZXIpIHsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0g
ICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAg
ICB3b3JrZXItPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwot
Ci0gICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwg
VjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJSZW1vdmVFdmVu
dExpc3RlbmVyKQotewotICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIucmVtb3ZlRXZlbnRMaXN0
ZW5lcigpIik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBhcmdzLkhvbGRlcigpKTsK
LQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIo
d29ya2VyLCBhcmdzWzFdLCB0cnVlKTsKLSAgICBpZiAobGlzdGVuZXIpIHsKLSAgICAgICAgU3Ry
aW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgdXNlQ2Fw
dHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwotICAgICAgICB3b3JrZXItPnJlbW92ZUV2
ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOwotCi0gICAgICAg
IHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206
OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3Bw
IGIvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcAppbmRleCAxMjBmNzhhLi5hNjgw
OGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCisrKyBi
L1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2lmIEVO
QUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiQWJzdHJhY3RXb3JrZXIuaCIKIApAQCAtMTIyLDQg
KzEyMiw0IEBAIHZvaWQgQWJzdHJhY3RXb3JrZXI6OmRpc3BhdGNoU2NyaXB0RXJyb3JFdmVudChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oIGIv
V2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKaW5kZXggODllNDI1OC4uNWJjNWUyZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKKysrIGIvV2ViQ29y
ZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpZm5kZWYgQWJz
dHJhY3RXb3JrZXJfaAogI2RlZmluZSBBYnN0cmFjdFdvcmtlcl9oCiAKLSNpZiBFTkFCTEUoU0hB
UkVEX1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCkBAIC04MSw2ICs4MSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQogCiAj
ZW5kaWYgLy8gQWJzdHJhY3RXb3JrZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0Fi
c3RyYWN0V29ya2VyLmlkbCBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwKaW5k
ZXggMTIzNGMwZC4uYWU3ZWJjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0
V29ya2VyLmlkbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsCkBAIC0z
MSw3ICszMSw3IEBACiBtb2R1bGUgdGhyZWFkcyB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1TSEFSRURfV09SS0VSUywKKyAgICAgICAgQ29uZGl0aW9uYWw9V09SS0VS
UywKICAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgICAgICBDdXN0b21Ub0pTLAogICAg
ICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDJlMDNlM2QuLjJlOGJj
ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFdvcmtlcjo6V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLSAgICA6IEFjdGl2ZURPTU9iamVjdChj
b250ZXh0LCB0aGlzKQorICAgIDogQWJzdHJhY3RXb3JrZXIoY29udGV4dCkKICAgICAsIG1fY29u
dGV4dFByb3h5KFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKHRoaXMpKQogewogICAgIG1fc2Ny
aXB0VVJMID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKTsKQEAgLTExNSw3ICsxMTUsNyBAQCBi
b29sIFdvcmtlcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHZvaWQgV29ya2VyOjpub3Rp
ZnlGaW5pc2hlZCgpCiB7CiAgICAgaWYgKG1fc2NyaXB0TG9hZGVyLT5mYWlsZWQoKSkKLSAgICAg
ICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CisgICAgICAgIGRpc3BhdGNoTG9hZEVycm9yRXZlbnQo
KTsKICAgICBlbHNlCiAgICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRleHQo
bV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0
VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIApAQCAtMTI0LDcxICsxMjQsNiBAQCB2
b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoKQogICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOwogfQogCi12b2lkIFdvcmtlcjo6ZGlzcGF0Y2hFcnJvckV2ZW50KCkKLXsKLSAgICBSZWZQ
dHI8RXZlbnQ+IGV2dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlKTsKLSAgICBpZiAobV9vbkVycm9yTGlzdGVuZXIpIHsKLSAgICAgICAgZXZ0LT5z
ZXRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAg
ICAgICAgbV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5nZXQoKSwgdHJ1ZSk7Ci0g
ICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZGlzcGF0Y2hFdmVudChldnQu
cmVsZWFzZSgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci19Ci0KLXZvaWQgV29ya2VyOjphZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAgRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKLSAg
ICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7Ci0gICAgICAgIExpc3RlbmVy
VmVjdG9yIGxpc3RlbmVyczsKLSAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVy
KTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5z
ZWNvbmQ7Ci0gICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRl
ciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyAr
K2xpc3RlbmVySXRlcikgewotICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRM
aXN0ZW5lcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRM
aXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKLSAgICB9ICAgIAotfQotCi12b2lk
IFdvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKLXsKLSAgICBFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUp
OwotICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwot
ICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxp
c3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3Rl
bmVySXRlcikgewotICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7
Ci0gICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5i
ZWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9v
bCBXb3JrZXI6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9F
UlI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKLSAgICBm
b3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xp
c3RlbmVySXRlcikgewotICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQo
KS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Ci19Ci0KIHZvaWQgV29ya2VyOjpkaXNwYXRjaE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0
KQogewogICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2Fn
ZSwgIiIsICIiLCAwLCBwb3J0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIu
aCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAppbmRleCAxZmNjOGJlLi4wZmFhNmU2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5oCkBAIC0yOSw4ICsyOSw5IEBACiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotI2luY2x1
ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJBYnN0cmFjdFdvcmtlci5oIgogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCkBAIC00OSwxMyArNTAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNsYXNzIFdvcmtlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUg
V29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworICAgIGNsYXNz
IFdvcmtlciA6IHB1YmxpYyBBYnN0cmFjdFdvcmtlciwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2Vy
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyKHVybCwg
Y29udGV4dCwgZWMpKTsgfQogICAgICAgICB+V29ya2VyKCk7CiAKLSAgICAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQogICAg
ICAgICB2aXJ0dWFsIFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgICAg
ICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC03
MCwzOSArNjksMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVy
ZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAgICAgICBFdmVudExpc3Rl
bmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJzOyB9Ci0K
LSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8V29ya2VyPjo6ZGVyZWY7Ci0KICAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdlTGlzdGVu
ZXIgPSBldmVudExpc3RlbmVyOyB9CiAgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KIAotICAgICAgICB2
b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7
IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAgICBFdmVudExpc3Rl
bmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0K
LQogICAgIHByaXZhdGU6CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlGaW5pc2hlZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRl
cmVmKCk7IH0KLQogICAgICAgICBLVVJMIG1fc2NyaXB0VVJMOwogICAgICAgICBPd25QdHI8V29y
a2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRlcjsKIAogICAgICAgICBXb3JrZXJDb250ZXh0
UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0
byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KIAogICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1f
b25FcnJvckxpc3RlbmVyOwotICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVu
ZXJzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKaW5kZXgg
ZTA3OGU3Yy4uZTcwMTUyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKQEAgLTI2LDI0ICsyNiwxOCBAQAogCiBt
b2R1bGUgdGhyZWFkcyB7CiAKLSAgICBpbnRlcmZhY2UgW0N1c3RvbU1hcmtGdW5jdGlvbiwgQ29u
ZGl0aW9uYWw9V09SS0VSU10gV29ya2VyIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25k
aXRpb25hbD1XT1JLRVJTLAorICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgICAgIEdl
bmVyYXRlTmF0aXZlQ29udmVydGVyLAorICAgICAgICBHZW5lcmF0ZVRvSlMKKyAgICBdIFdvcmtl
ciA6IEFic3RyYWN0V29ya2VyIHsKIAotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CiAgICAg
ICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0g
TWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwotCi0gICAgICAgIC8vIEV2ZW50VGFyZ2V0
IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9N
U3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
RXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1
cmUpOwotICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQotICAgICAg
ICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKICAgICB9OwogCiB9Cg==
</data>
<flag name="review"
          id="17258"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32959</attachid>
            <date>2009-07-17 11:08:24 -0700</date>
            <delta_ts>2009-07-17 11:14:55 -0700</delta_ts>
            <desc>Fixed up merge errors with worker-constructor layout test.</desc>
            <filename>patch5.txt</filename>
            <type>text/plain</type>
            <size>29026</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MzdiZGQzLi5jODUzY2Q2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MTAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIHRvIHJlZmFjdG9yIFdvcmtlciB0
byBkZXJpdmUgZnJvbSBBYnN0cmFjdFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDgKKworICAgICAgICBBZGRlZCBjaGVja3MgdG8gbWFr
ZSBzdXJlIHRoYXQgV29ya2VycyBhcmUgcHJvcGVybHkgY29uc3RydWN0ZWQgYW5kIFdvcmtlciBh
dHRyaWJ1dGVzCisgICAgICAgIGFyZSB2aXNpYmxlIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0Lgor
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5odG1sOgorICAgICAg
ICBBZGRlZCBleHBsaWNpdCBjaGVjayBmb3IgY29ycmVjdCBjb25zdHJ1Y3Rpb24vcG9zdE1lc3Nh
Z2UgdmlzaWJpbGl0eS4KKwogMjAwOS0wNy0xNyAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4g
IDxrZW5uZXRoLmNocmlzdGlhbnNlbkBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3dvcmtlci1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvd29ya2VyLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAppbmRleCBhNTViM2M3Li4zMTFlMTli
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9y
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0
cnVjdG9yLWV4cGVjdGVkLnR4dApAQCAtNiw1ICs2LDYgQEAgUEFTUzogaW52b2tpbmcgV29ya2Vy
IGNvbnN0cnVjdG9yIHdpdGhvdXQgYXJndW1lbnRzIHJlc3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAo
U3kKIFBBU1M6IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gZW1wdHkgc2NyaXB0IFVSTC4KIFBBU1M6
IG9uZXJyb3IgaW52b2tlZCBmb3IgYW4gaW52YWxpZCBzY3JpcHQgVVJMLgogUEFTUzogb25lcnJv
ciBpbnZva2VkIGZvciBhIHNjcmlwdCB0aGF0IGNvdWxkIG5vdCBiZSBsb2FkZWQuCitQQVNTOiBT
dWNjZXNzZnVsbHkgY3JlYXRlZCB3b3JrZXIuCiBET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy93b3JrZXItY29uc3RydWN0b3IuaHRtbAppbmRleCAyNjQ4OTJmLi42YjY5OTI3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLWNvbnN0cnVjdG9y
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1jb25zdHJ1Y3Rvci5o
dG1sCkBAIC0xMCwxMiArMTAsMTQgQEAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCiBmdW5jdGlvbiBy
dW5OZXh0VGVzdCgpCiB7CiAgICAgdGVzdEluZGV4Kys7Ci0gICAgaWYgKHRlc3RJbmRleCA+IHRv
dGFsVGVzdHMpIHsKKyAgICAvLyBMb29wIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHRlc3RzIHRv
IHJ1bgorICAgIHZhciB0ZXN0TmFtZSA9ICd0ZXN0JyArIHRlc3RJbmRleDsKKyAgICBpZiAod2lu
ZG93W3Rlc3ROYW1lXSkgeworICAgICAgICB3aW5kb3dbdGVzdE5hbWVdKCk7CisgICAgfSBlbHNl
IHsKICAgICAgICAgbG9nKCJET05FIik7CiAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCiAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXZhbCgidGVzdCIgKyB0ZXN0SW5kZXggKyAiKCk7Iik7
CiAgICAgfQogfQogCkBAIC05OCwxMiArMTAwLDI4IEBAIGZ1bmN0aW9uIHRlc3Q2KCkKICAgICB9
CiB9CiAKK2Z1bmN0aW9uIHRlc3Q3KCkKK3sKKyAgICB0cnkgeworICAgICAgICB2YXIgd29ya2Vy
ID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL3dvcmtlci1jb21tb24uanMiKTsKKyAgICAgICAgLy8g
TWFrZSBzdXJlIGF0dHJpYnV0ZXMgZnJvbSBib3RoIFdvcmtlciBhbmQgQWJzdHJhY3RXb3JrZXIg
YXJlIHZpc2libGUuCisgICAgICAgIGlmICghd29ya2VyLnBvc3RNZXNzYWdlKQorICAgICAgICAg
ICAgbG9nKCJGQUlMOiB3b3JrZXIucG9zdE1lc3NhZ2UgZGlkIG5vdCBleGlzdC4iKTsKKyAgICAg
ICAgZWxzZSBpZiAoIXdvcmtlci5hZGRFdmVudExpc3RlbmVyKQorICAgICAgICAgICAgbG9nKCJG
QUlMOiB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lciBkaWQgbm90IGV4aXN0LiIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2coIlBBU1M6IFN1Y2Nlc3NmdWxseSBjcmVhdGVkIHdvcmtlci4i
KTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBsb2coIkZBSUw6IHVuZXhwZWN0ZWQgZXhj
ZXB0aW9uICgiICsgZXggKyAiKSB0aHJvd24gd2hlbiBjcmVhdGluZyB3b3JrZXIiKTsKKyAgICB9
CisgICAgcnVuTmV4dFRlc3QoKTsKK30KKwogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiB9CiAKLXZhciB0b3RhbFRlc3RzID0gNjsK
IHZhciB0ZXN0SW5kZXggPSAwOwogcnVuTmV4dFRlc3QoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlZWQzOGY4Li41ZDYzMjRiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ4IEBACisyMDA5LTA3LTE3ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVl
ZCB0byByZWZhY3RvciBXb3JrZXIgdG8gZGVyaXZlIGZyb20gQWJzdHJhY3RXb3JrZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTQ4CisKKyAgICAg
ICAgQ2hhbmdlZCBXb3JrZXIgdG8gZGVyaXZlIGZyb20gQWJzdHJhY3RXb3JrZXIsIHdoaWNoIGlu
dm9sdmVkIG1vdmluZworICAgICAgICBBYnN0cmFjdFdvcmtlciBmaWxlcyBmcm9tIGJlaW5nIHdy
YXBwZWQgYnkgRU5BQkxFX1NIQVJFRF9XT1JLRVJTIHRvCisgICAgICAgIEVOQUJMRV9XT1JLRVJT
LgorCisgICAgICAgIFJlbW92ZWQgb2Jzb2xldGUgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBKUy9W
OCBiaW5kaW5ncyB0aGF0IGlzIG5vdworICAgICAgICBpbmhlcml0ZWQgZnJvbSBBYnN0cmFjdFdv
cmtlci4KKworICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICBNb3ZlZCBBYnN0cmFjdFdv
cmtlciBmaWxlcyBvdXQgb2YgU0hBUkVEX1dPUktFUlMgc2VjdGlvbiBhbmQgaW50byBXT1JLRVJT
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwOgorICAg
ICAgICBDaGFuZ2VkIHRvIGJlIHdyYXBwZWQgYnkgRU5BQkxFKFdPUktFUlMpLCBub3QgRU5BQkxF
KFNIQVJFRF9XT1JLRVJTKS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5j
cHA6CisgICAgICAgIFJlbW92ZWQgb2Jzb2xldGUgZXZlbnQgbGlzdGVuZXIgY29kZSAobm93IGlu
IGJhc2UgY2xhc3MpCisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlcjo6bWFyayk6CisgICAgICAg
IE5vIGxvbmdlciBuZWVkIHRvIGV4cGxpY2l0bHkgbWFyayBldmVudCBsaXN0ZW5lcnMgKGhhbmRs
ZWQgYnkgYmFzZSBjbGFzcykuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRleC5oOgorICAg
ICAgICBNb3ZlZCBBYnN0cmFjdFdvcmtlciBsaW5lcyBvdXQgb2YgU0hBUkVEX1dPUktFUlMgc2Vj
dGlvbiBhbmQgaW50byBXT1JLRVJTLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEFi
c3RyYWN0V29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgQ2hhbmdlZCB0byBiZSB3cmFwcGVkIGJ5
IEVOQUJMRShXT1JLRVJTKSwgbm90IEVOQUJMRShTSEFSRURfV09SS0VSUykuCisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oOgorICAgICAgICBNb3ZlZCBBYnN0
cmFjdFdvcmtlciBsaW5lcyBvdXQgb2YgU0hBUkVEX1dPUktFUlMgc2VjdGlvbiBhbmQgaW50byBX
T1JLRVJTLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHA6
CisgICAgICAgIFJlbW92ZWQgb2Jzb2xldGUgZXZlbnQgbGlzdGVuZXIgY29kZSB0aGF0IG5vdyBs
aXZlcyBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29uc3Ry
dWN0b3IpOiBDbGVhbmVkIHVwIGxlZ2FjeSBzdHlsZSBuaXRzLgorICAgICAgICAqIHdvcmtlcnMv
QWJzdHJhY3RXb3JrZXIuY3BwOgorICAgICAgICBDaGFuZ2VkIHRvIGJlIHdyYXBwZWQgYnkgRU5B
QkxFKFdPUktFUlMpLCBub3QgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKS4KKyAgICAgICAgKiB3b3Jr
ZXJzL0Fic3RyYWN0V29ya2VyLmg6CisgICAgICAgIENoYW5nZWQgdG8gYmUgd3JhcHBlZCBieSBF
TkFCTEUoV09SS0VSUyksIG5vdCBFTkFCTEUoU0hBUkVEX1dPUktFUlMpLgorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgUmVtb3ZlZCBldmVudCBsaXN0ZW5lciBjb2RlIChu
b3cgaW4gYmFzZSBjbGFzcykuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Oldvcmtlcik6IE5v
dyBkZXJpdmVzIGZyb20gQWJzdHJhY3RXb3JrZXIuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6
Om5vdGlmeUZpbmlzaGVkKTogQ2FsbHMgZGlzcGF0Y2hMb2FkRXJyb3JFdmVudCBvbiBiYXNlIGNs
YXNzLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6CisgICAgICAgIFJlbW92ZWQgQVBJcyB0
aGF0IG5vdyBsaXZlIGluIHRoZSBiYXNlIGNsYXNzLgorICAgICAgICAqIHdvcmtlcnMvV29ya2Vy
LmlkbDoKKyAgICAgICAgTm93IGRlcml2ZXMgZnJvbSBBYnN0cmFjdFdvcmtlci4KKyAgICAgICAg
UmVtb3ZlZCBBUElzIHRoYXQgbGl2ZSBpbiB0aGUgYmFzZSBjbGFzcywgYW5kIGFkZGVkIGEgR2Vu
ZXJhdGVUb0pTIGZsYWcuCisKIDIwMDktMDctMTcgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3Jv
bmhhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggNmQ1YWZlZS4uMDk4NWI3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xNDE4LDExICsxNDE4LDEzIEBAIGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPTEpIHsKIAogICAgIElETF9CSU5ESU5HUyArPSBc
CiAgICAgICAgIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmlkbCBcCisgICAgICAgIHdvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuaWRsIFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXIuaWRsIFwKICAgICAgICAg
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBcCiAgICAgICAgIHdvcmtlcnMvV29ya2VyTG9jYXRp
b24uaWRsCiAKICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgYmluZGluZ3MvanMvSlNBYnN0cmFj
dFdvcmtlckN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnN0cnVj
dG9yLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwIFwK
ICAgICAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBcCkBAIC0xNDMw
LDYgKzE0MzIsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV09SS0VSUz0xKSB7CiAgICAg
ICAgIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIFwKICAgICAgICAgbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwIFwKICAgICAgICAgcGFnZS9Xb3JrZXJOYXZp
Z2F0b3IuY3BwIFwKKyAgICAgICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAgXAogICAgICAg
ICB3b3JrZXJzL1dvcmtlci5jcHAgXAogICAgICAgICB3b3JrZXJzL1dvcmtlckNvbnRleHQuY3Bw
IFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAgXApAQCAtMTQ0MywxNCArMTQ0
NiwxMSBAQCBjb250YWlucyhERUZJTkVTLCBTSEFSRURfV09SS0VSUz0xKSB7CiAgICAgRkVBVFVS
RV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1NIQVJFRF9XT1JLRVJTPTEKIAogICAgIElE
TF9CSU5ESU5HUyArPSBcCi0gICAgICAgIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIFwKICAg
ICAgICAgd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsCiAKICAgICBTT1VSQ0VTICs9IFwKLSAgICAg
ICAgYmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAgXAogICAgICAgICBiaW5k
aW5ncy9qcy9KU1NoYXJlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCBcCiAgICAgICAgIGJpbmRpbmdz
L2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBcCi0gICAgICAgIHdvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuY3BwIFwKICAgICAgICAgd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwCiB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCmluZGV4IDgyZTA2
ZTMuLmE0MzM5NzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBYnN0cmFjdFdv
cmtlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2Vy
Q3VzdG9tLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNp
ZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNsdWRl
ICJKU0Fic3RyYWN0V29ya2VyLmgiCiAKQEAgLTkwLDQgKzkwLDQgQEAgSlNWYWx1ZSB0b0pTKEV4
ZWNTdGF0ZSogZXhlYywgQWJzdHJhY3RXb3JrZXIqIGJhc2VPYmplY3QpCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKaW5k
ZXggOTcwNzUxOS4uNjAxMGY4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5j
cHAKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNs
dWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CkBAIC00MCw0MiArMzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB2
b2lkIEpTV29ya2VyOjptYXJrKCkKIHsKLSAgICBET01PYmplY3Q6Om1hcmsoKTsKKyAgICBCYXNl
OjptYXJrKCk7CiAKLSAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdlKCkpOwotICAg
IG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbmVycm9yKCkpOwotCi0gICAgdHlwZWRlZiBXb3JrZXI6
OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFwOwotICAgIHR5cGVkZWYgV29ya2Vy
OjpMaXN0ZW5lclZlY3RvciBMaXN0ZW5lclZlY3RvcjsKLSAgICBFdmVudExpc3RlbmVyc01hcCYg
ZXZlbnRMaXN0ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgZm9yIChFdmVu
dExpc3RlbmVyc01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7
IG1hcEl0ZXIgIT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgewotICAgICAgICBm
b3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vjb25kLmJl
Z2luKCk7IHZlY0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIpCi0gICAg
ICAgICAgICAoKnZlY0l0ZXIpLT5tYXJrSlNGdW5jdGlvbigpOwotICAgIH0KLX0KLQotSlNWYWx1
ZSBKU1dvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCi17Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNE
T01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBSZWZQ
dHI8SlNFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRl
SlNFdmVudExpc3RlbmVyKGFyZ3MuYXQoMSkpOwotICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lci5yZWxlYXNlKCksIGFyZ3MuYXQoMikudG9C
b29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSBK
U1dvcmtlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCi17Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNE
T01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBKU0V2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZ2xvYmFsT2JqZWN0LT5maW5kSlNFdmVudExpc3RlbmVy
KGFyZ3MuYXQoMSkpOwotICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpLCBsaXN0ZW5lciwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwotICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIG1hcmtJZk5vdE51bGwoc3RhdGljX2Nhc3Q8V29ya2Vy
Kj4oaW1wbCgpKS0+b25tZXNzYWdlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKaW5kZXggMWMyYzg2OC4uMDI3ZmMzNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMzgzLDYgKzM4MywxMyBAQCB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0
ZShWOENsYXNzSW5kZXg6OlY4VwogICAgIH0KIAogI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGNh
c2UgVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUjogeworICAgICAgICAvLyBSZXNlcnZlIG9u
ZSBtb3JlIGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KKyAgICAg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2Ny
aXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0
SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprQWJzdHJhY3RXb3JrZXJJbnRlcm5hbEZpZWxk
Q291bnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
V09SS0VSOiB7CiAgICAgICAgIC8vIFJlc2VydmUgb25lIG1vcmUgaW50ZXJuYWwgZmllbGQgZm9y
IGtlZXBpbmcgZXZlbnQgbGlzdGVuZXJzLgogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRl
bXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhJbmRleC5jcHAKaW5kZXggNzU3NWExZS4uYWZhODFjYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SW5kZXguY3BwCkBAIC0zNzEsNiArMzcxLDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFdPUktFUlMpCisjaW5jbHVkZSAiVjhBYnN0cmFjdFdvcmtlci5oIgogI2luY2x1ZGUgIlY4V29y
a2VyLmgiCiAjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhXb3JrZXJM
b2NhdGlvbi5oIgpAQCAtMzc4LDcgKzM3OSw2IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShTSEFS
RURfV09SS0VSUykKLSNpbmNsdWRlICJWOEFic3RyYWN0V29ya2VyLmgiCiAjaW5jbHVkZSAiVjhT
aGFyZWRXb3JrZXIuaCIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SW5kZXguaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCmluZGV4IDY0NzE5NDEu
LjY1OGJkYWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCkBAIC01Nyw2ICs1Nyw3IEBAIHR5cGVkZWYg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICgqRnVuY3Rpb25UZW1wbGF0ZUZh
Y3RvcnkpKCk7CiAgICAgVihXT1JLRVIsIFdvcmtlcikKIAogI2RlZmluZSBXT1JLRVJfTk9OTk9E
RV9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IFYoQUJTVFJBQ1RXT1JLRVIsIEFic3RyYWN0V29ya2VyKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIFYoV09SS0VSQ09OVEVYVCwgV29ya2VyQ29udGV4dCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoV09SS0VSTE9DQVRJT04sIFdv
cmtlckxvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYo
V09SS0VSTkFWSUdBVE9SLCBXb3JrZXJOYXZpZ2F0b3IpCkBAIC02OCw5ICs2OSw3IEBAIHR5cGVk
ZWYgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICgqRnVuY3Rpb25UZW1wbGF0
ZUZhY3RvcnkpKCk7CiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQogI2RlZmluZSBTSEFSRURf
V09SS0VSX0FDVElWRV9PQkpFQ1RfV1JBUFBFUl9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAg
XAogICAgIFYoU0hBUkVEV09SS0VSLCBTaGFyZWRXb3JrZXIpCi0KLSNkZWZpbmUgU0hBUkVEX1dP
UktFUl9OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBWKEFCU1RSQUNUV09SS0VSLCBBYnN0cmFjdFdvcmtlcikKKyNkZWZpbmUgU0hBUkVEX1dP
UktFUl9OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikKICNlbHNlCiAjZGVmaW5lIFNIQVJFRF9XT1JL
RVJfQUNUSVZFX09CSkVDVF9XUkFQUEVSX1RZUEVTKFYpCiAjZGVmaW5lIFNIQVJFRF9XT1JLRVJf
Tk9OTk9ERV9XUkFQUEVSX1RZUEVTKFYpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEFic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCmluZGV4IDI4NjBkYjkuLmZlZDliZjYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJD
dXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3Jr
ZXJDdXN0b20uY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAot
I2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1
ZGUgIkFic3RyYWN0V29ya2VyLmgiCiAKQEAgLTYzLDcgKzYzLDcgQEAgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKEFic3RyYWN0V29ya2VyKiB3b3JrZXIsIHY4OjpM
b2NhbDx2ODoKIEFDQ0VTU09SX0dFVFRFUihBYnN0cmFjdFdvcmtlck9uZXJyb3IpCiB7CiAgICAg
SU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29ya2VyLm9uZXJyb3IuX2dldCIpOwotICAgIEFic3Ry
YWN0V29ya2VyKiB3b3JrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJh
Y3RXb3JrZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwor
ICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgaW5m
by5Ib2xkZXIoKSk7CiAgICAgaWYgKHdvcmtlci0+b25lcnJvcigpKSB7CiAgICAgICAgIFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlz
dGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBAIC03NSw3ICs3
NSw3IEBAIEFDQ0VTU09SX0dFVFRFUihBYnN0cmFjdFdvcmtlck9uZXJyb3IpCiBBQ0NFU1NPUl9T
RVRURVIoQWJzdHJhY3RXb3JrZXJPbmVycm9yKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5BYnN0
cmFjdFdvcmtlci5vbmVycm9yLl9zZXQiKTsKLSAgICBBYnN0cmFjdFdvcmtlciogd29ya2VyID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3RyYWN0V29ya2VyPihWOENsYXNzSW5k
ZXg6OkFCU1RSQUNUV09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBBYnN0cmFjdFdvcmtlciog
d29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8QWJzdHJhY3RXb3Jr
ZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwogICAgIFY4
T2JqZWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2
ZW50TGlzdGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7CiAgICAgaWYgKHZhbHVlLT5Jc051bGwo
KSkgewogICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBBQ0NF
U1NPUl9TRVRURVIoQWJzdHJhY3RXb3JrZXJPbmVycm9yKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKEFi
c3RyYWN0V29ya2VyQWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoTCJET00uQWJz
dHJhY3RXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgQWJzdHJhY3RXb3JrZXIqIHdv
cmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhD
bGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgQWJzdHJhY3RX
b3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEFic3Ry
YWN0V29ya2VyPihWOENsYXNzSW5kZXg6OkFCU1RSQUNUV09SS0VSLCBhcmdzLkhvbGRlcigpKTsK
IAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIo
d29ya2VyLCBhcmdzWzFdLCBmYWxzZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CkBAIC0xMTgsNyAr
MTE4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEFic3RyYWN0V29ya2VyQWRkRXZlbnRMaXN0ZW5l
cikKIENBTExCQUNLX0ZVTkNfREVDTChBYnN0cmFjdFdvcmtlclJlbW92ZUV2ZW50TGlzdGVuZXIp
CiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLkFic3RyYWN0V29ya2VyLnJlbW92ZUV2ZW50TGlzdGVu
ZXIoKSIpOwotICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8QWJzdHJhY3RXb3JrZXI+KFY4Q2xhc3NJbmRleDo6QUJTVFJBQ1RXT1JLRVIs
IGFyZ3MuSG9sZGVyKCkpOworICAgIEFic3RyYWN0V29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxBYnN0cmFjdFdvcmtlcj4oVjhDbGFzc0luZGV4OjpB
QlNUUkFDVFdPUktFUiwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgdHJ1ZSk7CiAg
ICAgaWYgKGxpc3RlbmVyKSB7CkBAIC0xMzQsNCArMTM0LDQgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KEFic3RyYWN0V29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcikKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcu
aAppbmRleCA3NjA5NTI0Li41Y2VjOTAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtMTI0LDkgKzEyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtXb3JrZXJDb250ZXh0UmVxdWVzdENhY2hl
SW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwogICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGtXb3JrZXJDb250ZXh0SW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1
bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTsKLSNlbmRpZgogCi0jaWYgRU5BQkxFKFNI
QVJFRF9XT1JLRVJTKQogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtBYnN0cmFjdFdvcmtlclJl
cXVlc3RDYWNoZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQWJzdHJhY3RXb3JrZXJJbnRlcm5hbEZpZWxkQ291
bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwogI2VuZGlmCkBAIC00
NzUsMTEgKzQ3MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShXT1JLRVJTKQorICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKEFic3RyYWN0V29y
a2VyT25lcnJvcik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJhY3RXb3JrZXJBZGRF
dmVudExpc3RlbmVyKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhBYnN0cmFjdFdvcmtlclJl
bW92ZUV2ZW50TGlzdGVuZXIpOworCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1Io
V29ya2VyT25tZXNzYWdlKTsKLSAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihXb3Jr
ZXJPbmVycm9yKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJDb25zdHJ1Y3Rvcik7
Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyQWRkRXZlbnRMaXN0ZW5lcik7Ci0gICAg
ICAgIERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcik7CiAKICAgICAg
ICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dFNlbGYpOwog
ICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKFdvcmtlckNvbnRleHRPbm1lc3NhZ2Up
OwpAQCAtNDkzLDkgKzQ5Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09S
KEFic3RyYWN0V29ya2VyT25lcnJvcik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQWJzdHJh
Y3RXb3JrZXJBZGRFdmVudExpc3RlbmVyKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhBYnN0
cmFjdFdvcmtlclJlbW92ZUV2ZW50TGlzdGVuZXIpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNL
KFNoYXJlZFdvcmtlckNvbnN0cnVjdG9yKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKaW5kZXggN2ViNGY2MC4uMDg1NDYyOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcApAQCAtNTAs
MTkgKzUwLDE3IEBAIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKIHsKICAg
ICBJTkNfU1RBVFMoTCJET00uV29ya2VyLkNvbnN0cnVjdG9yIik7CiAKLSAgICBpZiAoIWFyZ3Mu
SXNDb25zdHJ1Y3RDYWxsKCkpIHsKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBi
ZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKLSAgICB9CiAKLSAgICBpZiAoYXJncy5MZW5ndGgo
KSA9PSAwKSB7CisgICAgaWYgKCFhcmdzLkxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7Ci0gICAg
fQogCiAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gc2NyaXB0VXJsID0gYXJnc1swXS0+VG9TdHJpbmcoKTsKLSAgICBpZiAodHJ5Q2F0Y2guSGFz
Q2F1Z2h0KCkpIHsKKyAgICBpZiAodHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKHRyeUNhdGNoLkV4Y2VwdGlvbigpKTsKLSAgICB9CisKICAgICBpZiAoc2Ny
aXB0VXJsLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIApAQCAt
MTQ2LDc4ICsxNDQsNiBAQCBBQ0NFU1NPUl9TRVRURVIoV29ya2VyT25tZXNzYWdlKQogICAgIH0K
IH0KIAotQUNDRVNTT1JfR0VUVEVSKFdvcmtlck9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKEwi
RE9NLldvcmtlci5vbmVycm9yLl9nZXQiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIs
IGluZm8uSG9sZGVyKCkpOwotICAgIGlmICh3b3JrZXItPm9uZXJyb3IoKSkgewotICAgICAgICBW
OE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVu
dExpc3RlbmVyKj4od29ya2VyLT5vbmVycm9yKCkpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAg
ICByZXR1cm4gdjhMaXN0ZW5lcjsKLSAgICB9Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LX0KLQotQUNDRVNTT1JfU0VUVEVSKFdvcmtlck9uZXJyb3IpCi17Ci0gICAgSU5DX1NUQVRTKEwi
RE9NLldvcmtlci5vbmVycm9yLl9zZXQiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIs
IGluZm8uSG9sZGVyKCkpOwotICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7
Ci0gICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewotICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsK
LSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlz
dGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBl
bmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV29ya2VyUmVx
dWVzdENhY2hlSW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3Rl
bmVyLgotICAgICAgICB3b3JrZXItPnNldE9uZXJyb3IoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3Jr
ZXIsIHZhbHVlLCBmYWxzZSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICAgICAg
aWYgKG9sZExpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICAg
ICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlz
dGVuZXIsIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB3b3JrZXItPnNldE9uZXJyb3IobGlzdGVuZXIpOwotICAgICAgICAg
ICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206
OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNBTExC
QUNLX0ZVTkNfREVDTChXb3JrZXJBZGRFdmVudExpc3RlbmVyKQotewotICAgIElOQ19TVEFUUyhM
IkRPTS5Xb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6
V09SS0VSLCBhcmdzLkhvbGRlcigpKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod29ya2VyLCBhcmdzWzFdLCBmYWxzZSk7Ci0gICAgaWYg
KGxpc3RlbmVyKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
MF0pOwotICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsK
LSAgICAgICAgd29ya2VyLT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0
dXJlKTsKLQotICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFy
Z3NbMV0sIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi1DQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyUmVt
b3ZlRXZlbnRMaXN0ZW5lcikKLXsKLSAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLnJlbW92ZUV2
ZW50TGlzdGVuZXIoKSIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgYXJncy5Ib2xk
ZXIoKSk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExp
c3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgdHJ1ZSk7Ci0gICAgaWYgKGxpc3RlbmVyKSB7Ci0gICAg
ICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgICAgICBib29s
IHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKLSAgICAgICAgd29ya2VyLT5y
ZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKLQot
ICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4
Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOwotICAgIH0KLQotICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29y
a2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKaW5kZXggMTIwZjc4
YS4uYTY4MDhmYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNw
cAorKysgYi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCkBAIC0zMCw3ICszMCw3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykK
KyNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUgIkFic3RyYWN0V29ya2VyLmgiCiAKQEAg
LTEyMiw0ICsxMjIsNCBAQCB2b2lkIEFic3RyYWN0V29ya2VyOjpkaXNwYXRjaFNjcmlwdEVycm9y
RXZlbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgaW50KQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisjZW5kaWYgLy8g
RU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuaCBiL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCmluZGV4IDg5ZTQyNTguLjVi
YzVlMmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCisrKyBi
L1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCkBAIC0zMSw3ICszMSw3IEBACiAjaWZu
ZGVmIEFic3RyYWN0V29ya2VyX2gKICNkZWZpbmUgQWJzdHJhY3RXb3JrZXJfaAogCi0jaWYgRU5B
QkxFKFNIQVJFRF9XT1JLRVJTKQorI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgpAQCAtODEsNiAr
ODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKIAogI2VuZGlmIC8vIEFic3RyYWN0V29ya2VyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29y
a2Vycy9BYnN0cmFjdFdvcmtlci5pZGwgYi9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIu
aWRsCmluZGV4IDEyMzRjMGQuLmFlN2ViYzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9B
YnN0cmFjdFdvcmtlci5pZGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlk
bApAQCAtMzEsNyArMzEsNyBAQAogbW9kdWxlIHRocmVhZHMgewogCiAgICAgaW50ZXJmYWNlIFsK
LSAgICAgICAgQ29uZGl0aW9uYWw9U0hBUkVEX1dPUktFUlMsCisgICAgICAgIENvbmRpdGlvbmFs
PVdPUktFUlMsCiAgICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKICAgICAgICAgQ3VzdG9tVG9K
UywKICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAppbmRleCBmMjhjYTQw
Li44NjY2ODdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgYi9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcApAQCAtNTEsNyArNTEsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBXb3JrZXI6Oldvcmtlcihjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlz
KQorICAgIDogQWJzdHJhY3RXb3JrZXIoY29udGV4dCkKICAgICAsIG1fY29udGV4dFByb3h5KFdv
cmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKHRoaXMpKQogewogICAgIG1fc2NyaXB0TG9hZGVyID0g
bmV3IFdvcmtlclNjcmlwdExvYWRlcigpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIGJvb2wgV29ya2Vy
OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVk
KCkKIHsKICAgICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQotICAgICAgICBkaXNwYXRj
aEVycm9yRXZlbnQoKTsKKyAgICAgICAgZGlzcGF0Y2hMb2FkRXJyb3JFdmVudCgpOwogICAgIGVs
c2UKICAgICAgICAgbV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdExv
YWRlci0+dXJsKCksIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0
TG9hZGVyLT51cmwoKSksIG1fc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKQEAgLTExMyw3MSAr
MTEzLDYgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkKICAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKIH0KIAotdm9pZCBXb3JrZXI6OmRpc3BhdGNoRXJyb3JFdmVudCgpCi17
Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgaWYgKG1fb25FcnJvckxpc3RlbmVyKSB7Ci0gICAg
ICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQo
dGhpcyk7Ci0gICAgICAgIG1fb25FcnJvckxpc3RlbmVyLT5oYW5kbGVFdmVudChldnQuZ2V0KCks
IHRydWUpOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRpc3BhdGNo
RXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotfQotCi12b2lkIFdv
cmtlcjo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBib29sKQotewotICAgIEV2ZW50
TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50
VHlwZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewotICAgICAg
ICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7Ci0gICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZl
bnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlz
dGVuZXJzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJz
ID0gaXRlci0+c2Vjb25kOwotICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBs
aXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVy
cy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVy
ID09IGV2ZW50TGlzdGVuZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAg
ICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7Ci0gICAgfSAgICAK
LX0KLQotdm9pZCBXb3JrZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCi17Ci0gICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnRUeXBlKTsKLSAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXIt
PnNlY29uZDsKLSAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5l
ckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQo
KTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRM
aXN0ZW5lcikgewotICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBs
aXN0ZW5lcnMuYmVnaW4oKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgV29ya2VyOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBlKCku
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VW
RU5UX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBMaXN0ZW5l
clZlY3RvciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUo
KSk7Ci0gICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVy
ID0gbGlzdGVuZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5l
bmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKLSAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
LSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgICAgIGxpc3RlbmVy
SXRlci0+Z2V0KCktPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwotfQotCiB2b2lkIFdvcmtlcjo6
ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdl
UG9ydD4gcG9ydCkKIHsKICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3Jl
YXRlKG1lc3NhZ2UsICIiLCAiIiwgMCwgcG9ydCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyLmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKaW5kZXggYmRlMjdlOC4uNmI4
ZWU2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCisrKyBiL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuaApAQCAtMjksOCArMjksOSBAQAogCiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAKLSNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RXb3Jr
ZXIuaCIKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJp
bmdIYXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCkBAIC00OCwxMyAr
NDksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKIAotICAgIGNsYXNzIFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1
YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LCBw
dWJsaWMgRXZlbnRUYXJnZXQgeworICAgIGNsYXNzIFdvcmtlciA6IHB1YmxpYyBBYnN0cmFjdFdv
cmtlciwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmws
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
b3JrZXIodXJsLCBjb250ZXh0KSk7IH0KICAgICAgICAgfldvcmtlcigpOwogCi0gICAgICAgIHZp
cnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9
Ci0KICAgICAgICAgdmlydHVhbCBXb3JrZXIqIHRvV29ya2VyKCkgeyByZXR1cm4gdGhpczsgfQog
CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYp
OwpAQCAtNjksMjMgKzY4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4s
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwotICAgICAgICBFdmVu
dExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJz
OyB9Ci0KLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXI+OjpyZWY7Ci0gICAgICAgIHVz
aW5nIFJlZkNvdW50ZWQ8V29ya2VyPjo6ZGVyZWY7Ci0KICAgICAgICAgdm9pZCBzZXRPbm1lc3Nh
Z2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdl
TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CiAgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVz
c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KIAotICAg
ICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKSB7IG1fb25FcnJvckxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAgICBFdmVu
dExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0
KCk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kik7CiAKQEAgLTk5LDggKzg0LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUg
cHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KIAog
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKLSAgICAg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25FcnJvckxpc3RlbmVyOwotICAgICAgICBFdmVu
dExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5pZGwKaW5kZXggZTA3OGU3Yy4uZTcwMTUyMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5p
ZGwKQEAgLTI2LDI0ICsyNiwxOCBAQAogCiBtb2R1bGUgdGhyZWFkcyB7CiAKLSAgICBpbnRlcmZh
Y2UgW0N1c3RvbU1hcmtGdW5jdGlvbiwgQ29uZGl0aW9uYWw9V09SS0VSU10gV29ya2VyIHsKKyAg
ICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAorICAgICAgICBDdXN0
b21NYXJrRnVuY3Rpb24sCisgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAorICAgICAg
ICBHZW5lcmF0ZVRvSlMKKyAgICBdIFdvcmtlciA6IEFic3RyYWN0V29ya2VyIHsKIAotICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZl
bnRMaXN0ZW5lciBvbm1lc3NhZ2U7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3Ry
aW5nIG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCiAgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgp
OwotCi0gICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAgICBbQ3VzdG9tXSB2
b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUp
OwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5n
IHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZl
bnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOwotICAgICAgICBib29sZWFuIGRpc3BhdGNo
RXZlbnQoaW4gRXZlbnQgZXZ0KQotICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsK
ICAgICB9OwogCiB9Cg==
</data>
<flag name="review"
          id="17301"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>