<?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>22719</bug_id>
          
          <creation_ts>2008-12-07 03:16:09 -0800</creation_ts>
          <short_desc>Implement Navigator object in Workers</short_desc>
          <delta_ts>2008-12-14 02:08:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101724</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-07 03:16:09 -0800</bug_when>
    <thetext>This method of user agent detection was requested multiple times, and draft spec has it: &lt;http://www.whatwg.org/specs/web-workers/current-work/#navigator0&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101736</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-07 03:57:48 -0800</bug_when>
    <thetext>&lt;rdar://problem/6425805&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101980</commentid>
    <comment_count>2</comment_count>
      <attachid>25888</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-09 08:57:24 -0800</bug_when>
    <thetext>Created attachment 25888
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101982</commentid>
    <comment_count>3</comment_count>
      <attachid>25888</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-09 09:11:10 -0800</bug_when>
    <thetext>Comment on attachment 25888
proposed patch

&gt; +JSValue* jsWorkerContextNavigator(JSC::ExecState* exec, const Identifier&amp;, const PropertySlot&amp; slot)
&gt; +{
&gt; +    WorkerContext* imp = static_cast&lt;WorkerContext*&gt;(static_cast&lt;JSWorkerContext*&gt;(asObject(slot.slotBase()))-&gt;impl());
&gt; +    return toJS(exec, imp-&gt;navigator());
&gt; +}

It&apos;s always irritating when we have to add a new DOM binding written by hand. I trust there&apos;s a good reason, and I will settle for just complaining about it rather than asking you to do something.

&gt; +2008-12-09  Alexey Proskuryakov  &lt;ap@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=22719
&gt; +        Implement Navigator object in Workers
&gt; +
&gt; +        * fast/workers/worker-navigator-expected.txt: Added.
&gt; +        * fast/workers/worker-navigator.html: Added.
&gt; +
&gt; +2008-12-09  Alexey Proskuryakov  &lt;ap@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        &lt;rdar://problem/5959165&gt; Crash in a number of iExploder tests in WebCore::CachedImage::notifyObservers
&gt; +
&gt; +        Add a test for a crash that is no longer reproducible.
&gt; +
&gt; +        * fast/css/mask-missing-image-crash-expected.txt: Added.
&gt; +        * fast/css/mask-missing-image-crash.html: Added.
&gt; +

Change log entry here from the other bug fix.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101986</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-09 09:59:22 -0800</bug_when>
    <thetext>Committed revision 39138.

I will look into auto-generating JSWorkerContext in the future - I couldn&apos;t find any way to do it before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102465</commentid>
    <comment_count>5</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2008-12-13 15:34:35 -0800</bug_when>
    <thetext>&gt; +worker.postMessage(&quot;eval navigator.platform.length &gt; 0&quot;);

This is failing on the Gtk+ buildbot and according to my version of the HTML5 draft platform may be the zero length. Maybe you should check the type to be a string?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102486</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-14 02:08:00 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; This is failing on the Gtk+ buildbot and according to my version of the HTML5
&gt; draft platform may be the zero length. Maybe you should check the type to be a
&gt; string?

Done, r39290.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25888</attachid>
            <date>2008-12-09 08:57:24 -0800</date>
            <delta_ts>2008-12-09 09:11:10 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>Navigator.txt</filename>
            <type>text/plain</type>
            <size>44701</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTEzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDgtMTItMDkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxOQorICAgICAgICBJ
bXBsZW1lbnQgTmF2aWdhdG9yIG9iamVjdCBpbiBXb3JrZXJzCisKKyAgICAgICAgVGVzdDogZmFz
dC93b3JrZXJzL3dvcmtlci1uYXZpZ2F0b3IuaHRtbAorCisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZGVkIFdvcmtlck5h
dmlnYXRvciBzb3VyY2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0
LmNwcDogKFdlYkNvcmU6OmpzV29ya2VyQ29udGV4dE5hdmlnYXRvcik6CisgICAgICAgIFdvcmtl
ci5uYXZpZ2F0b3IgcmV0dXJucyBhIFdvZXJrZXJOYXZpZ2F0b3Igb2JqZWN0IChpdCBpcyBuYW1l
ZCBqdXN0IE5hdmlnYXRvciBpbiB0aGUgc3BlYywKKyAgICAgICAgYnV0IGl0IGlzIG5vdCB0aGUg
c2FtZSBpbnRlcmZhY2UgdGhhdCBpcyBhdmFpbGFibGUgb24gV2luZG93cykuCisKKyAgICAgICAg
KiBkb20vV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6bm90aWZ5RmluaXNo
ZWQpOgorICAgICAgICAqIGRvbS9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnRleHQ6OldvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dDo6bmF2aWdhdG9yKToKKyAgICAgICAgKiBkb20vV29ya2VyQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vV29y
a2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKToKKyAgICAgICAgKiBkb20vV29y
a2VyVGhyZWFkLmg6CisgICAgICAgIFBhc3MgYSBwcmUtY29tcHV0ZWQgdXNlciBhZ2VudCBzdHJp
bmcgaW50byB3b3JrZXIsIGJlY2F1c2UgaXQgY2Fubm90IGNhbGwgYSBjbGllbnQgbWV0aG9kCisg
ICAgICAgIGRpcmVjdGx5LCBhbmQgcHJlLWNvbXB1dGluZyBpcyBlYXNpZXIgdGhhbiBzZW5kaW5n
IGEgc3luY2hyb25vdXMgbWVzc2FnZSB0byB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgKiBw
YWdlL05hdmlnYXRvci5jcHA6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAg
KiBwYWdlL05hdmlnYXRvckJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL05hdmlnYXRv
ckJhc2UuaDogQWRkZWQuCisgICAgICAgIEZhY3RvciBvdXQgY29tbW9uIChhbmQgdW5jb21tb24s
IGJ1dCB2ZXJ5IHNpbWlsYXIpIGZ1bmN0aW9uYWxpdHkgaW50byBhIGJhc2UgY2xhc3MuCisKKyAg
ICAgICAgKiBwYWdlL1dvcmtlck5hdmlnYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uv
V29ya2VyTmF2aWdhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvV29ya2VyTmF2aWdhdG9y
LmlkbDogQWRkZWQuCisgICAgICAgIFBlciBXZWIgV29ya2VycyBhbmQgSFRNTDUsIGltcGxlbWVu
dCBhIHNtYWxsIHN1YnNldCBvZiB3aGF0IHdlIGN1cnJlbnRseSBoYXZlIGluIFdpbmRvdy5OYXZp
Z2F0b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVy
LmNwcDogKFdlYkNvcmU6Om5ldHdvcmtTdGF0ZU5vdGlmaWVyKToKKyAgICAgICAgTWFrZSBuZXR3
b3JrU3RhdGVOb3RpZmllcigpIHN0YXRpYyBjb25zdHJ1Y3RvciB0aHJlYWQgc2FmZS4gVGhlIG9i
amVjdCBpcyBjcmVhdGVkIG9uIHRoZQorICAgICAgICB0aHJlYWQgaXQgaXMgZmlyc3QgY2FsbGVk
IGZyb20sIHdoaWxlIGNhbGxiYWNrcyBhcmUgcmVnaXN0ZXJlZCBvbiB0aGUgbWFpbiB0aHJlYWQu
IENhbGxzIHRvCisgICAgICAgIG9uTGluZSgpIGZyb20gb3RoZXIgdGhyZWFkcyBhcmUgc2FmZSwg
YmVjYXVzZSBpdCBpcyBqdXN0IGxvYWRpbmcgYSBib29sZWFuLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9tYWMvTmV0d29ya1N0YXRlTm90aWZpZXJNYWMuY3BwOiAoV2ViQ29yZTo6TmV0
d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyKToKKyAgICAgICAgU2NoZWR1
bGUgbm90aWZpY2F0aW9ucyBvbiBtYWluIGV2ZW50IGxvb3AsIG5vdCB0aGUgY3VycmVudCBvbmUu
CisKIDIwMDgtMTItMDkgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0
b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQWxleGV5IFByb3Nr
dXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDM5MTMxKQorKysgV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAg
RE9NX0NMQVNTRVMgPSBcCiAgICAgV2hlZWxFdmVudCBcCiAgICAgV29ya2VyIFwKICAgICBXb3Jr
ZXJMb2NhdGlvbiBcCisgICAgV29ya2VyTmF2aWdhdG9yIFwKICAgICBYTUxIdHRwUmVxdWVzdCBc
CiAgICAgWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24gXAogICAgIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudCBcCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM5MTMxKQorKysgV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw3IEBAIElETF9CSU5ESU5HUyAr
PSBcCiAJV2ViQ29yZS9wYWdlL1Bvc2l0aW9uRXJyb3IuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvUG9z
aXRpb25PcHRpb25zLmlkbCBcCiAJV2ViQ29yZS9wYWdlL1NjcmVlbi5pZGwgXAorCVdlYkNvcmUv
cGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaWRsIFwKIAlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRs
IFwKIAlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAogCVdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW4uaWRsIFwKQEAgLTIxNDQsNyArMjE0NSw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9kb20vV29ya2VyVGFzay5jcHAgXAogCVdlYkNvcmUvZG9tL1dvcmtlclRhc2su
aCBcCiAJV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNwcCBcCi0JV2ViQ29yZS9kb20vV29ya2Vy
VGhyZWFkLmgKKwlXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuaCBcCisJV2ViQ29yZS9wYWdlL1dv
cmtlck5hdmlnYXRvci5jcHAgXAorCVdlYkNvcmUvcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaAogZW5k
aWYKIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDM5MTMxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMzU1LDYgKzM1NSw3IEBAIElETF9CSU5ESU5HUyArPSBcCiAg
ICAgcGFnZS9Qb3NpdGlvbkVycm9yLmlkbCBcCiAgICAgcGFnZS9Qb3NpdGlvbk9wdGlvbnMuaWRs
IFwKICAgICBwYWdlL1NjcmVlbi5pZGwgXAorICAgIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmlkbCBc
CiAgICAgcGx1Z2lucy9QbHVnaW4uaWRsIFwKICAgICBwbHVnaW5zL01pbWVUeXBlLmlkbCBcCiAg
ICAgcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiAzOTEzMSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3NTYsNiArMTc1NiwxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91
dHB1dERpcilcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXb3JrZXJOYXZpZ2F0b3IuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iJChX
ZWJLaXRPdXRwdXREaXIpXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV29ya2VyTmF2aWdh
dG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRo
PSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpT
WE1MSHR0cFJlcXVlc3QuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNTQzLDYgKzI1NTEs
MjIgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcV2luZG93RmVhdHVyZXMuaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcV29y
a2VyTmF2aWdhdG9yLmNwcCINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJ
CU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0i
dHJ1ZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxXb3JrZXJOYXZpZ2F0b3IuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCiAJCQk8RmlsdGVyDQogCQkJCU5hbWU9IndpbiINCiAJCQkJ
Pg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAzOTEzMSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00MjA0LDYgKzQyMDQsMTMgQEAKIAkJRTEwQjlDQ0QwQjc0N0E0
NDAwM0VEODkwIC8qIERPTUN1c3RvbVhQYXRoTlNSZXNvbHZlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMEI5Q0NCMEI3NDdBNDQwMDNFRDg5MCAv
KiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIubW0gKi87IH07CiAJCUUxMUM5RDlCMEVCMzY4MTIw
MEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTFDOUQ5QTBFQjM2ODEyMDBFNDA5REIgLyogU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUUxMUM5REIwMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxMUM5REFGMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmNw
cCAqLzsgfTsKKwkJRTEyNzE5QzcwRUVFQzE2ODAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxOUM2MEVF
RUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggKi87IH07CisJCUUxMjcxOUNBMEVFRUMy
MTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxOUM5MEVFRUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0
b3JCYXNlLmNwcCAqLzsgfTsKKwkJRTEyNzFBMEIwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtlck5h
dmlnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEyNzFBMEEwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5oICovOyB9OworCQlF
MTI3MUExNDBFRUVDODA0MDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxQTEzMEVFRUM4MDQwMEY2
MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuY3BwICovOyB9OworCQlFMTI3MUE1MjBFRUVDRDFDMDBG
NjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzFBNTEwRUVFQ0QxQzAwRjYxMjEzIC8qIFdvcmtlck5h
dmlnYXRvci5pZGwgKi87IH07CisJCUUxMjcxQTU4MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dvcmtl
ck5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEyNzFBNTYwRUVFQ0RFNDAwRjYxMjEzIC8qIEpTV29ya2VyTmF2aWdhdG9yLmggKi87IH07
CisJCUUxMjcxQTU5MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dvcmtlck5hdmlnYXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI3MUE1NzBFRUVD
REU0MDBGNjEyMTMgLyogSlNXb3JrZXJOYXZpZ2F0b3IuY3BwICovOyB9OwogCQlFMTJFREI3QjBC
MzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMkVEQjdBMEIzMDhBNzgwMDI3MDRCNiAvKiBFdmVudFRh
cmdldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxMkVEQkVBMEIzMDhFMEIwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTJFREJFOTBCMzA4RTBCMDAyNzA0
QjYgLyogRXZlbnRUYXJnZXQuY3BwICovOyB9OwogCQlFMTQ3OTlBNzBFQ0RFM0E0MDAyOTJCRjMg
LyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNDc5OUE2MEVDREUzQTQwMDI5MkJGMyAvKiBXb3JrZXJNZXNzYWdp
bmdQcm94eS5oICovOyB9OwpAQCAtODg5Nyw2ICs4OTA0LDEzIEBACiAJCUUxMEI5Q0NCMEI3NDdB
NDQwMDNFRDg5MCAvKiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMUM5RDlBMEVCMzY4MTIwMEU0MDlEQiAvKiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTExQzlEQUYwRUIzNjk5NTAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjcxOUM2MEVFRUMxNjgwMEY2
MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5hdmlnYXRvckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNzE5Qzkw
RUVFQzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxMjcxQTBBMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyTmF2aWdhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjcxQTEzMEVFRUM4MDQwMEY2MTIxMyAvKiBXb3Jr
ZXJOYXZpZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29y
a2VyTmF2aWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNzFBNTEw
RUVFQ0QxQzAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV29ya2VyTmF2aWdhdG9yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTEyNzFBNTYwRUVFQ0RFNDAwRjYxMjEzIC8qIEpTV29ya2VyTmF2aWdhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2VyTmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxMjcxQTU3MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dvcmtlck5h
dmlnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtl
ck5hdmlnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMkVEQjdBMEIz
MDhBNzgwMDI3MDRCNiAvKiBFdmVudFRhcmdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFdmVudFRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTJF
REJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRUYXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMTQ3OTlBNjBFQ0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyTWVzc2FnaW5nUHJv
eHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5MjAsNiArOTkzNCw4IEBACiAJ
CQkJQTlDNkU1QTMwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgKi8sCiAJCQkJQTlD
NkU1QTQwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5oICovLAogCQkJCUE5QzZFNjVEMEQ3
NDY2OTQwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuaWRsICovLAorCQkJCUUxMjcxOUM5MEVFRUMyMTMw
MEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCAqLywKKwkJCQlFMTI3MTlDNjBFRUVDMTY4MDBG
NjEyMTMgLyogTmF2aWdhdG9yQmFzZS5oICovLAogCQkJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRB
QiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5o
ICovLAogCQkJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovLApA
QCAtOTk0Miw2ICs5OTU4LDkgQEAKIAkJCQlGNTg3ODYzQTAyREUzQTE0MDFFQTQxMjIgLyogU2V0
dGluZ3MuaCAqLywKIAkJCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVy
ZXMuY3BwICovLAogCQkJCUJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJl
cy5oICovLAorCQkJCUUxMjcxQTEzMEVFRUM4MDQwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3Iu
Y3BwICovLAorCQkJCUUxMjcxQTBBMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3Iu
aCAqLywKKwkJCQlFMTI3MUE1MTBFRUVDRDFDMDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmlk
bCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcGFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0xMzQ5NCw2ICsxMzUxMyw4IEBACiAJCQkJRTFDQUE1QzUwRThCRDIzNjAwQTczRUNBIC8q
IEpTV29ya2VyLmggKi8sCiAJCQkJRTFDMzYyRUUwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2Vy
TG9jYXRpb24uY3BwICovLAogCQkJCUUxQzM2MkVEMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtl
ckxvY2F0aW9uLmggKi8sCisJCQkJRTEyNzFBNTcwRUVFQ0RFNDAwRjYxMjEzIC8qIEpTV29ya2Vy
TmF2aWdhdG9yLmNwcCAqLywKKwkJCQlFMTI3MUE1NjBFRUVDREU0MDBGNjEyMTMgLyogSlNXb3Jr
ZXJOYXZpZ2F0b3IuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gVGhyZWFkczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0xNjM1NCw2ICsxNjM3NSw5IEBACiAJCQkJMUE1NjlEMjMwRDdF
MkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2
OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTEyNzE5QzcwRUVFQzE2ODAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUUxMjcxQTBCMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjcxQTU4MEVFRUNERTQwMEY2MTIxMyAvKiBKU1dv
cmtlck5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNjQ3MSw2ICsxNjQ5NSw3IEBACiAJ
CQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJl
c291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29y
LnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpv
b21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQlFMTI3MUE1MjBFRUVDRDFDMDBG
NjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODI5MSw2
ICsxODMxNiw5IEBACiAJCQkJMUE1NjlEMjIwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4MyAvKiBy
dW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZF
NTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTEyNzE5Q0EwRUVF
QzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTEy
NzFBMTQwRUVFQzgwNDAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFMTI3MUE1OTBFRUVDREU0MDBGNjEyMTMgLyogSlNXb3JrZXJOYXZpZ2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQu
Y3BwCShyZXZpc2lvbiAzOTEzMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTTWVz
c2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIkpTV29y
a2VyTG9jYXRpb24uaCIKKyNpbmNsdWRlICJKU1dvcmtlck5hdmlnYXRvci5oIgogI2luY2x1ZGUg
IldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgogCkBAIC00OSw2
ICs1MCw3IEBAIHN0YXRpYyBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRQcm90b3R5cGUKIHN0YXRp
YyBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlz
dGVuZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwog
c3RhdGljIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hF
dmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBK
U1ZhbHVlKiBqc1dvcmtlckNvbnRleHRMb2NhdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHROYXZp
Z2F0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OwogSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0T25tZXNzYWdlKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIHZvaWQgc2V0SlNXb3JrZXJDb250ZXh0
T25tZXNzYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwogdm9pZCBzZXRKU1dv
cmtlckNvbnRleHRNZXNzYWdlRXZlbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7
CkBAIC02OSw3ICs3MSw4IEBAIHZvaWQgc2V0SlNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24o
RXgKIAogLyoKIEBiZWdpbiBKU1dvcmtlckNvbnRleHRUYWJsZQotICBsb2NhdGlvbiAgICAgICAg
ICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRMb2NhdGlvbiAgICAgICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKKyAgbG9jYXRpb24gICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250
ZXh0TG9jYXRpb24gICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorICBu
YXZpZ2F0b3IgICAgICAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHROYXZpZ2F0b3IgICAg
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIG9ubWVzc2FnZSAgICAgICAg
ICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dE9ubWVzc2FnZSAgICAgICAgICAgICAgICAgICAg
IERvbnREZWxldGUKICAgTWVzc2FnZUV2ZW50ICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250
ZXh0TWVzc2FnZUV2ZW50ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBXb3JrZXJMb2Nh
dGlvbiAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRXb3JrZXJMb2NhdGlvbiAgICAgICAg
ICAgICAgICBEb250RGVsZXRlCkBAIC0yMDgsNiArMjExLDEyIEBAIEpTVmFsdWUqIGpzV29ya2Vy
Q29udGV4dExvY2F0aW9uKEpTQzo6RXgKICAgICByZXR1cm4gdG9KUyhleGVjLCBpbXAtPmxvY2F0
aW9uKCkpOwogfQogCitKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHROYXZpZ2F0b3IoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgV29ya2VyQ29udGV4dCogaW1wID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+
KHN0YXRpY19jYXN0PEpTV29ya2VyQ29udGV4dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkp
LT5pbXBsKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcC0+bmF2aWdhdG9yKCkpOworfQor
CiBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRPbm1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgV29y
a2VyQ29udGV4dCogaW1wID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHN0YXRpY19jYXN0
PEpTV29ya2VyQ29udGV4dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpOwpJ
bmRleDogV2ViQ29yZS9kb20vV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9X
b3JrZXIuY3BwCShyZXZpc2lvbiAzOTEzMSkKKysrIFdlYkNvcmUvZG9tL1dvcmtlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTExOSw3ICsxMjAs
OCBAQCB2b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyCiAgICAgaWYgKG1f
Y2FjaGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVu
dCgpOwogICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiB0aHJlYWQgPSBX
b3JrZXJUaHJlYWQ6OmNyZWF0ZShtX3NjcmlwdFVSTCwgbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgp
LCBtX21lc3NhZ2luZ1Byb3h5KTsKKyAgICAgICAgU3RyaW5nIHVzZXJBZ2VudCA9IGRvY3VtZW50
KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXNlckFnZW50KG1f
c2NyaXB0VVJMKSA6IFN0cmluZygpOworICAgICAgICBSZWZQdHI8V29ya2VyVGhyZWFkPiB0aHJl
YWQgPSBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShtX3NjcmlwdFVSTCwgdXNlckFnZW50LCBtX2NhY2hl
ZFNjcmlwdC0+c2NyaXB0KCksIG1fbWVzc2FnaW5nUHJveHkpOwogICAgICAgICBtX21lc3NhZ2lu
Z1Byb3h5LT53b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7CiAgICAgICAgIHRocmVhZC0+c3Rh
cnQoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gMzkxMzEpCisr
KyBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMg
KzM3LDE1IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5LmgiCisjaW5jbHVkZSAi
V29ya2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiV29ya2VyVGFzay5oIgogI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdvcmtlckNvbnRleHQ6Oldv
cmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBXb3JrZXJUaHJlYWQqIHRocmVhZCkKK1dvcmtl
ckNvbnRleHQ6OldvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgV29ya2VyVGhyZWFkKiB0aHJlYWQpCiAgICAgOiBtX3VybCh1cmwpCisgICAgLCBt
X3VzZXJBZ2VudCh1c2VyQWdlbnQpCiAgICAgLCBtX2xvY2F0aW9uKFdvcmtlckxvY2F0aW9uOjpj
cmVhdGUodXJsKSkKICAgICAsIG1fc2NyaXB0KG5ldyBXb3JrZXJTY3JpcHRDb250cm9sbGVyKHRo
aXMpKQogICAgICwgbV90aHJlYWQodGhyZWFkKQpAQCAtNzksNiArODEsMTMgQEAgS1VSTCBXb3Jr
ZXJDb250ZXh0Ojpjb21wbGV0ZVVSTChjb25zdCBTdAogICAgIHJldHVybiBLVVJMKG1fbG9jYXRp
b24tPnVybCgpLCB1cmwpOwogfQogCitXb3JrZXJOYXZpZ2F0b3IqIFdvcmtlckNvbnRleHQ6Om5h
dmlnYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX25hdmlnYXRvcikKKyAgICAgICAgbV9uYXZp
Z2F0b3IgPSBXb3JrZXJOYXZpZ2F0b3I6OmNyZWF0ZShtX3VzZXJBZ2VudCk7CisgICAgcmV0dXJu
IG1fbmF2aWdhdG9yLmdldCgpOworfQorCiBib29sIFdvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0CiB7CiAgICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0aXZlT2JqZWN0
cyA9IGFjdGl2ZURPTU9iamVjdHMoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDM5
MTMxKQorKysgV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNCArNDMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdvcmtlckxv
Y2F0aW9uOworICAgIGNsYXNzIFdvcmtlck5hdmlnYXRvcjsKICAgICBjbGFzcyBXb3JrZXJUYXNr
OwogICAgIGNsYXNzIFdvcmtlclRocmVhZDsKIAogICAgIGNsYXNzIFdvcmtlckNvbnRleHQgOiBw
dWJsaWMgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIHB1YmxpYyBFdmVudFRhcmdldCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBXb3JrZXJU
aHJlYWQqIHRocmVhZCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4g
Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRo
cmVhZCogdGhyZWFkKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdvcmtlckNvbnRleHQodXJsLCB0aHJlYWQpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV29ya2VyQ29udGV4dCh1cmwsIHVzZXJBZ2VudCwgdGhyZWFkKSk7CiAgICAgICAgIH0K
IAogICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJDb250ZXh0KCk7CkBAIC02Myw2ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwogCiAgICAgICAgIFdvcmtlckxvY2F0aW9uKiBsb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYXRpb24uZ2V0KCk7IH0KKyAgICAgICAgV29ya2VyTmF2aWdhdG9y
KiBuYXZpZ2F0b3IoKSBjb25zdDsKIAogICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBz
Y3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdC5nZXQoKTsgfQogICAgICAgICB2b2lkIGNsZWFyU2Ny
aXB0KCkgeyByZXR1cm4gbV9zY3JpcHQuY2xlYXIoKTsgfQpAQCAtOTcsMTIgKzk5LDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkg
eyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVy
ZWYoKTsgfQogCi0gICAgICAgIFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIFdvcmtlclRocmVh
ZCopOworICAgICAgICBXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBX
b3JrZXJUaHJlYWQqKTsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEtVUkwmIHZpcnR1YWxVUkwo
KSBjb25zdDsKIAogICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBTdHJpbmcgbV91c2VyQWdl
bnQ7CiAgICAgICAgIFJlZlB0cjxXb3JrZXJMb2NhdGlvbj4gbV9sb2NhdGlvbjsKKyAgICAgICAg
bXV0YWJsZSBSZWZQdHI8V29ya2VyTmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKIAogICAgICAgICBP
d25QdHI8V29ya2VyU2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7CiAgICAgICAgIFdvcmtlclRo
cmVhZCogbV90aHJlYWQ7CkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5jcHAJKHJldmlzaW9uIDM5MTMxKQor
KysgV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTQg
KzM5LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXb3JrZXJUaHJl
YWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCitQ
YXNzUmVmUHRyPFdvcmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYg
c2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VD
b2RlLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCBzb3VyY2VDb2RlLCBtZXNzYWdp
bmdQcm94eSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkKHNjcmlwdFVS
TCwgdXNlckFnZW50LCBzb3VyY2VDb2RlLCBtZXNzYWdpbmdQcm94eSkpOwogfQogCi1Xb3JrZXJU
aHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYg
c291cmNlQ29kZSwgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorV29ya2Vy
VGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJNZXNzYWdpbmdQcm94
eSogbWVzc2FnaW5nUHJveHkpCiAgICAgOiBtX3RocmVhZElEKDApCiAgICAgLCBtX3NjcmlwdFVS
TChzY3JpcHRVUkwuY29weSgpKQorICAgICwgbV91c2VyQWdlbnQodXNlckFnZW50LmNvcHkoKSkK
ICAgICAsIG1fc291cmNlQ29kZShzb3VyY2VDb2RlLmNvcHkoKSkKICAgICAsIG1fbWVzc2FnaW5n
UHJveHkobWVzc2FnaW5nUHJveHkpCiB7CkBAIC03OCw3ICs3OSw3IEBAIHZvaWQqIFdvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkKCkKIHsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2so
bV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICAgICAgbV93b3JrZXJDb250ZXh0ID0gV29ya2Vy
Q29udGV4dDo6Y3JlYXRlKG1fc2NyaXB0VVJMLCB0aGlzKTsKKyAgICAgICAgbV93b3JrZXJDb250
ZXh0ID0gV29ya2VyQ29udGV4dDo6Y3JlYXRlKG1fc2NyaXB0VVJMLCBtX3VzZXJBZ2VudCwgdGhp
cyk7CiAgICAgfQogCiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gbV93b3Jr
ZXJDb250ZXh0LT5zY3JpcHQoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5oCShyZXZpc2lvbiAzOTEzMSkK
KysrIFdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1
YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJM
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck1lc3NhZ2luZ1Byb3h5Kik7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4gY3JlYXRlKGNvbnN0IEtVUkwmIHNj
cmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29k
ZSwgV29ya2VyTWVzc2FnaW5nUHJveHkqKTsKICAgICAgICAgfldvcmtlclRocmVhZCgpOwogCiAg
ICAgICAgIGJvb2wgc3RhcnQoKTsKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkoKSBjb25zdCB7
IHJldHVybiBtX21lc3NhZ2luZ1Byb3h5OyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXb3Jr
ZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTWVz
c2FnaW5nUHJveHkqKTsKKyAgICAgICAgV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJNZXNzYWdp
bmdQcm94eSopOwogCiAgICAgICAgIHN0YXRpYyB2b2lkKiB3b3JrZXJUaHJlYWRTdGFydCh2b2lk
Kik7CiAgICAgICAgIHZvaWQqIHdvcmtlclRocmVhZCgpOwpAQCAtNjEsNiArNjEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKIAog
ICAgICAgICBLVVJMIG1fc2NyaXB0VVJMOworICAgICAgICBTdHJpbmcgbV91c2VyQWdlbnQ7CiAg
ICAgICAgIFN0cmluZyBtX3NvdXJjZUNvZGU7CiAgICAgICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5
KiBtX21lc3NhZ2luZ1Byb3h5OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gMzkxMzEp
CisrKyBXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIK
ICNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZp
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJQbHVnaW5BcnJheS5oIgpAQCAtMzgsMzUgKzM3LDYgQEAKICNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAotI2lmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9QTEFURk9STQotI2lmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oUFBDKQot
I2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiTWFjUFBDIgotI2VsaWYgUExBVEZP
Uk0oTUFDKSAmJiBQTEFURk9STShYODYpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRG
T1JNICJNYWNJbnRlbCIKLSNlbGlmIFBMQVRGT1JNKFdJTl9PUykKLSNkZWZpbmUgV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk0gIldpbjMyIgotI2Vsc2UKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FU
T1JfUExBVEZPUk0gIiIKLSNlbmRpZgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRP
Ul9QTEFURk9STQotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKLSNkZWZpbmUg
V0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVCAiR2Vja28iCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNP
UkVfTkFWSUdBVE9SX1BST0RVQ1QKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNU
X1NVQgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQiAiMjAwMzAxMDciCi0j
ZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCCi0KLSNpZm5kZWYg
V0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRP
UiAiQXBwbGUgQ29tcHV0ZXIsIEluYy4iCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdB
VE9SX1ZFTkRPUgotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKLSNkZWZp
bmUgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQiAiIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJD
T1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCi0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXZp
Z2F0b3I6Ok5hdmlnYXRvcihGcmFtZSogZnJhbWUpCkBAIC05NiwxNiArNjYsNiBAQCB2b2lkIE5h
dmlnYXRvcjo6ZGlzY29ubmVjdEZyYW1lKCkKICAgICBtX2ZyYW1lID0gMDsKIH0KIAotU3RyaW5n
IE5hdmlnYXRvcjo6YXBwQ29kZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiTW96aWxsYSI7
Ci19Ci0KLVN0cmluZyBOYXZpZ2F0b3I6OmFwcE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAi
TmV0c2NhcGUiOwotfQotCiAvLyBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgd2UgbmVl
ZCB0byBoaWRlIHRoZSBzdWJzdHJpbmcgIjQuIiB0aGF0IHdvdWxkIG90aGVyd2lzZQogLy8gYXBw
ZWFyIGluIHRoZSBhcHBWZXJzaW9uIHN0cmluZy4gVGhpcyBpcyB0byBhdm9pZCBwcm9ibGVtcyB3
aXRoIG9sZCB2ZXJzaW9ucyBvZiBhCiAvLyBsaWJyYXJ5IGNhbGxlZCBPcGVuQ3ViZSBRdWlja01l
bnUsIHdoaWNoIGFzIG9mIHRoaXMgd3JpdGluZyBpcyBzdGlsbCBiZWluZyB1c2VkIG9uCkBAIC0x
MjcsOSArODcsNyBAQCBTdHJpbmcgTmF2aWdhdG9yOjphcHBWZXJzaW9uKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAvLyBWZXJzaW9u
IGlzIGV2ZXJ5dGhpbmcgaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHBhc3QgdGhlICJNb3ppbGxh
LyIgcHJlZml4LgotICAgIGNvbnN0IFN0cmluZyYgdXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVy
KCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkgOiBLVVJMKCkpOwotICAgIFN0cmluZyBhcHBWZXJzaW9uID0gdXNlckFnZW50LnN1YnN0
cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSk7CisgICAgU3RyaW5nIGFwcFZlcnNpb24gPSBO
YXZpZ2F0b3JCYXNlOjphcHBWZXJzaW9uKCk7CiAgICAgaWYgKHNob3VsZEhpZGVGb3VyRG90KG1f
ZnJhbWUpKQogICAgICAgICBhcHBWZXJzaW9uLnJlcGxhY2UoIjQuIiwgIjRfIik7CiAgICAgcmV0
dXJuIGFwcFZlcnNpb247CkBAIC0xNDcsMTEgKzEwNSw2IEBAIFN0cmluZyBOYXZpZ2F0b3I6OnVz
ZXJBZ2VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgp
KTsKIH0KIAotU3RyaW5nIE5hdmlnYXRvcjo6cGxhdGZvcm0oKSBjb25zdAotewotICAgIHJldHVy
biBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STTsKLX0KLQogUGx1Z2luQXJyYXkqIE5hdmlnYXRv
cjo6cGx1Z2lucygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BsdWdpbnMpCkBAIC0xNjYsMjYgKzEx
OSw2IEBAIE1pbWVUeXBlQXJyYXkqIE5hdmlnYXRvcjo6bWltZVR5cGVzKCkgY28KICAgICByZXR1
cm4gbV9taW1lVHlwZXMuZ2V0KCk7CiB9CiAKLVN0cmluZyBOYXZpZ2F0b3I6OnByb2R1Y3QoKSBj
b25zdAotewotICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUOwotfQotCi1TdHJp
bmcgTmF2aWdhdG9yOjpwcm9kdWN0U3ViKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV0VCQ09SRV9O
QVZJR0FUT1JfUFJPRFVDVF9TVUI7Ci19Ci0KLVN0cmluZyBOYXZpZ2F0b3I6OnZlbmRvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUjsKLX0KLQotU3RyaW5n
IE5hdmlnYXRvcjo6dmVuZG9yU3ViKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SX1NVQjsKLX0KLQogYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBj
b25zdAogewogICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2UoKS0+Y29v
a2llRW5hYmxlZCgpKQpAQCAtMjAwLDExICsxMzMsNiBAQCBib29sIE5hdmlnYXRvcjo6amF2YUVu
YWJsZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fZnJhbWUt
PnNldHRpbmdzKCktPmlzSmF2YUVuYWJsZWQoKTsKIH0KLSAgICAKLWJvb2wgTmF2aWdhdG9yOjpv
bkxpbmUoKSBjb25zdAotewotICAgIHJldHVybiBuZXR3b3JrU3RhdGVOb3RpZmllcigpLm9uTGlu
ZSgpOwotfQogCiBHZW9sb2NhdGlvbiogTmF2aWdhdG9yOjpnZW9sb2NhdGlvbigpIGNvbnN0CiB7
CkluZGV4OiBXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL05hdmlnYXRvci5oCShyZXZpc2lvbiAzOTEzMSkKKysrIFdlYkNvcmUvcGFnZS9OYXZpZ2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBOYXZpZ2F0b3Jf
aAogI2RlZmluZSBOYXZpZ2F0b3JfaAogCisjaW5jbHVkZSAiTmF2aWdhdG9yQmFzZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0zMyw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBQbHVnaW5BcnJheTsKICAgICBjbGFzcyBTdHJpbmc7CiAKLSAgICBjbGFz
cyBOYXZpZ2F0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxOYXZpZ2F0b3I+IHsKKyAgICBjbGFzcyBO
YXZpZ2F0b3IgOiBwdWJsaWMgTmF2aWdhdG9yQmFzZSwgcHVibGljIFJlZkNvdW50ZWQ8TmF2aWdh
dG9yPiB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYXZpZ2F0b3I+
IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBOYXZpZ2F0b3IoZnJh
bWUpKTsgfQogICAgICAgICB+TmF2aWdhdG9yKCk7CkBAIC00MSwyMiArNDIsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOwogICAgICAgICBG
cmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKLSAgICAgICAgU3RyaW5n
IGFwcENvZGVOYW1lKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBhcHBOYW1lKCkgY29uc3Q7CiAg
ICAgICAgIFN0cmluZyBhcHBWZXJzaW9uKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBsYW5ndWFn
ZSgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7Ci0gICAgICAgIFN0
cmluZyBwbGF0Zm9ybSgpIGNvbnN0OwogICAgICAgICBQbHVnaW5BcnJheSogcGx1Z2lucygpIGNv
bnN0OwogICAgICAgICBNaW1lVHlwZUFycmF5KiBtaW1lVHlwZXMoKSBjb25zdDsKLSAgICAgICAg
U3RyaW5nIHByb2R1Y3QoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHByb2R1Y3RTdWIoKSBjb25z
dDsKLSAgICAgICAgU3RyaW5nIHZlbmRvcigpIGNvbnN0OwotICAgICAgICBTdHJpbmcgdmVuZG9y
U3ViKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgY29va2llRW5hYmxlZCgpIGNvbnN0OwogICAgICAg
ICBib29sIGphdmFFbmFibGVkKCkgY29uc3Q7CiAKLSAgICAgICAgYm9vbCBvbkxpbmUoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CisKICAgICAgICAg
R2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKCkgY29uc3Q7CiAgICAgICAgIC8vIFRoaXMgaXMgdXNl
ZCBmb3IgR0MgbWFya2luZy4KICAgICAgICAgR2VvbG9jYXRpb24qIG9wdGlvbmFsR2VvbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2dlb2xvY2F0aW9uLmdldCgpOyB9CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL05hdmln
YXRvckJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL05hdmlnYXRvckJhc2Uu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yQmFzZS5oIgorCisjaW5jbHVkZSAiTmV0
d29ya1N0YXRlTm90aWZpZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaWZu
ZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFU
Rk9STShQUEMpCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNQUEMiCisj
ZWxpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFg4NikKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfUExBVEZPUk0gIk1hY0ludGVsIgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorI2RlZmlu
ZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiV2luMzIiCisjZWxzZQorI2RlZmluZSBXRUJD
T1JFX05BVklHQVRPUl9QTEFURk9STSAiIgorI2VuZGlmCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNP
UkVfTkFWSUdBVE9SX1BMQVRGT1JNCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVD
VAorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUICJHZWNrbyIKKyNlbmRpZiAvLyBp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVAorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdB
VE9SX1BST0RVQ1RfU1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCICIy
MDAzMDEwNyIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIK
KworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SICJBcHBsZSBDb21wdXRlciwgSW5jLiIKKyNlbmRpZiAvLyBpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfVkVORE9SCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9S
X1NVQgorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCisjZW5kaWYgLy8g
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK05hdmlnYXRvckJhc2U6On5OYXZpZ2F0b3JCYXNlKCkKK3sKK30KKworU3RyaW5nIE5h
dmlnYXRvckJhc2U6OmFwcE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTmV0c2NhcGUiOwor
fQorCitTdHJpbmcgTmF2aWdhdG9yQmFzZTo6YXBwVmVyc2lvbigpIGNvbnN0Cit7CisgICAgLy8g
VmVyc2lvbiBpcyBldmVyeXRoaW5nIGluIHRoZSB1c2VyIGFnZW50IHN0cmluZyBwYXN0IHRoZSAi
TW96aWxsYS8iIHByZWZpeC4KKyAgICBjb25zdCBTdHJpbmcmIGFnZW50ID0gdXNlckFnZW50KCk7
CisgICAgcmV0dXJuIGFnZW50LnN1YnN0cmluZyhhZ2VudC5maW5kKCcvJykgKyAxKTsKK30KKwor
U3RyaW5nIE5hdmlnYXRvckJhc2U6OnBsYXRmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VC
Q09SRV9OQVZJR0FUT1JfUExBVEZPUk07Cit9CisKK1N0cmluZyBOYXZpZ2F0b3JCYXNlOjphcHBD
b2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJNb3ppbGxhIjsKK30KKworU3RyaW5nIE5h
dmlnYXRvckJhc2U6OnByb2R1Y3QoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklH
QVRPUl9QUk9EVUNUOworfQorCitTdHJpbmcgTmF2aWdhdG9yQmFzZTo6cHJvZHVjdFN1YigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCOworfQorCitT
dHJpbmcgTmF2aWdhdG9yQmFzZTo6dmVuZG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09S
RV9OQVZJR0FUT1JfVkVORE9SOworfQorCitTdHJpbmcgTmF2aWdhdG9yQmFzZTo6dmVuZG9yU3Vi
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQjsKK30K
KworYm9vbCBOYXZpZ2F0b3JCYXNlOjpvbkxpbmUoKSBjb25zdAoreworICAgIHJldHVybiBuZXR3
b3JrU3RhdGVOb3RpZmllcigpLm9uTGluZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yQmFzZS5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9w
YWdlL05hdmlnYXRvckJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvTmF2aWdhdG9y
QmFzZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL05hdmlnYXRvckJhc2UuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKworI2lmbmRlZiBOYXZpZ2F0b3JCYXNl
X2gKKyNkZWZpbmUgTmF2aWdhdG9yQmFzZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGNsYXNzIFN0cmluZzsKKworICAgIGNsYXNzIE5hdmlnYXRvckJhc2UgeworICAgIHB1YmxpYzoK
KyAgICAgICAgU3RyaW5nIGFwcE5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGFwcFZlcnNp
b24oKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KCkgY29uc3QgPSAw
OworICAgICAgICBTdHJpbmcgcGxhdGZvcm0oKSBjb25zdDsKKworICAgICAgICBTdHJpbmcgYXBw
Q29kZU5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHByb2R1Y3QoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIHByb2R1Y3RTdWIoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHZlbmRvcigpIGNv
bnN0OworICAgICAgICBTdHJpbmcgdmVuZG9yU3ViKCkgY29uc3Q7CisKKyAgICAgICAgYm9vbCBv
bkxpbmUoKSBjb25zdDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB+TmF2aWdh
dG9yQmFzZSgpOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IE5hdmlnYXRvckJhc2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wYWdlL05hdmln
YXRvckJhc2UuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFn
ZS9Xb3JrZXJOYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrZXJOYXZpZ2F0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXb3JrZXJOYXZpZ2F0b3I6Oldvcmtlck5hdmln
YXRvcihjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKKyAgICA6IG1fdXNlckFnZW50KHVzZXJBZ2Vu
dCkKK3sKK30KKworV29ya2VyTmF2aWdhdG9yOjp+V29ya2VyTmF2aWdhdG9yKCkKK3sKK30KKwor
U3RyaW5nIFdvcmtlck5hdmlnYXRvcjo6dXNlckFnZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV91c2VyQWdlbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvcGFnZS9Xb3JrZXJOYXZp
Z2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvV29ya2VyTmF2aWdhdG9yLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvV29ya2VyTmF2aWdhdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyovCisKKyNpZm5kZWYgV29ya2VyTmF2aWdhdG9yX2gKKyNk
ZWZpbmUgV29ya2VyTmF2aWdhdG9yX2gKKworI2luY2x1ZGUgIk5hdmlnYXRvckJhc2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFdvcmtlck5hdmlnYXRvciA6IHB1YmxpYyBO
YXZpZ2F0b3JCYXNlLCBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJOYXZpZ2F0b3I+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlck5hdmlnYXRvcj4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyTmF2
aWdhdG9yKHVzZXJBZ2VudCkpOyB9CisgICAgICAgIHZpcnR1YWwgfldvcmtlck5hdmlnYXRvcigp
OworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgV29ya2VyTmF2aWdhdG9yKGNvbnN0IFN0cmluZyYpOworCisgICAgICAg
IFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBXb3JrZXJOYXZpZ2F0b3JfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9wYWdlL1dvcmtlck5hdmlnYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuaWRsCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wYWdlL1dvcmtlck5hdmlnYXRvci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgdGhyZWFkcyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1XT1JLRVJTLAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gV29y
a2VyTmF2aWdhdG9yIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhcHBO
YW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFwcFZlcnNpb247Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcGxhdGZvcm07CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdXNlckFnZW50OworCisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBib29sZWFuIG9uTGluZTsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAJKHJldmlzaW9u
IDM5MTMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE1IEBACiAKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmV0d29ya1N0YXRlTm90
aWZpZXImIG5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KE5ldHdvcmtTdGF0ZU5vdGlmaWVyLCBuZXR3b3JrU3RhdGVOb3RpZmllciwgKCkpOworICAgIEF0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhOZXR3b3JrU3RhdGVOb3RpZmllciosIG5ldHdvcmtT
dGF0ZU5vdGlmaWVyID0gbmV3IE5ldHdvcmtTdGF0ZU5vdGlmaWVyKTsKICAgICAKLSAgICByZXR1
cm4gbmV0d29ya1N0YXRlTm90aWZpZXI7CisgICAgcmV0dXJuICpuZXR3b3JrU3RhdGVOb3RpZmll
cjsKIH0KIAogdm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2V0TmV0d29ya1N0YXRlQ2hhbmdl
ZEZ1bmN0aW9uKHZvaWQoKmZ1bmN0aW9uKSgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9OZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9OZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAJKHJldmlz
aW9uIDM5MTMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9OZXR3b3JrU3RhdGVO
b3RpZmllck1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBOZXR3b3Jr
U3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRlTm90aWZpCiAgICAgaWYgKCFjb25maWdTb3VyY2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGNvbmZpZ1NvdXJjZS5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAg
ICBDRlJ1bkxvb3BBZGRTb3VyY2UoQ0ZSdW5Mb29wR2V0TWFpbigpLCBjb25maWdTb3VyY2UuZ2V0
KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CiAgICAgCiAgICAgUmV0YWluUHRyPENGTXV0YWJs
ZUFycmF5UmVmPiBrZXlzKEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZU
eXBlQXJyYXlDYWxsQmFja3MpKTsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IHBh
dHRlcm5zKEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlQXJyYXlD
YWxsQmFja3MpKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5MTM1KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDgtMTItMDkgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjcxOQorICAgICAgICBJbXBsZW1lbnQgTmF2aWdhdG9yIG9iamVjdCBpbiBXb3Jr
ZXJzCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvd29ya2VyLW5hdmlnYXRvci1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItbmF2aWdhdG9yLmh0bWw6
IEFkZGVkLgorCisyMDA4LTEyLTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTk1OTE2NT4gQ3Jhc2ggaW4gYSBudW1iZXIgb2YgaUV4cGxvZGVyIHRlc3Rz
IGluIFdlYkNvcmU6OkNhY2hlZEltYWdlOjpub3RpZnlPYnNlcnZlcnMKKworICAgICAgICBBZGQg
YSB0ZXN0IGZvciBhIGNyYXNoIHRoYXQgaXMgbm8gbG9uZ2VyIHJlcHJvZHVjaWJsZS4KKworICAg
ICAgICAqIGZhc3QvY3NzL21hc2stbWlzc2luZy1pbWFnZS1jcmFzaC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY3NzL21hc2stbWlzc2luZy1pbWFnZS1jcmFzaC5odG1sOiBB
ZGRlZC4KKwogMjAwOC0xMi0wOSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bmlrb2xhcy56aW1tZXJt
YW5uQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1
cnlha292LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1uYXZpZ2F0b3It
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3Jr
ZXItbmF2aWdhdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy93b3JrZXItbmF2aWdhdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMSBAQAorVGVzdCBOYXZpZ2F0b3IgcHJvcGVydGllcy4KKwordHlwZW9mIG5hdmln
YXRvcjogb2JqZWN0CituYXZpZ2F0b3I6IFtvYmplY3QgV29ya2VyTmF2aWdhdG9yXQorbmF2aWdh
dG9yLmFwcE5hbWU6IE5ldHNjYXBlCituYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdXZWJL
aXQnKSAhPSAwOiB0cnVlCituYXZpZ2F0b3IucGxhdGZvcm0ubGVuZ3RoID4gMDogdHJ1ZQorbmF2
aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdXZWJLaXQnKSAhPSAwOiB0cnVlCit0eXBlb2YgbmF2
aWdhdG9yLm9uTGluZTogYm9vbGVhbgorRE9ORQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLW5hdmlnYXRvci1leHBlY3RlZC50eHQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0
eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1u
YXZpZ2F0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29y
a2VyLW5hdmlnYXRvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3dvcmtlci1uYXZpZ2F0b3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAor
PGJvZHk+Cis8cD5UZXN0IE5hdmlnYXRvciBwcm9wZXJ0aWVzLjwvcD4KKzxkaXYgaWQ9cmVzdWx0
PjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsK
K30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCdyZXNvdXJjZXMvd29ya2Vy
LWNvbW1vbi5qcycpOword29ya2VyLnBvc3RNZXNzYWdlKCJldmFsIHR5cGVvZiBuYXZpZ2F0b3Ii
KTsKK3dvcmtlci5wb3N0TWVzc2FnZSgiZXZhbCBuYXZpZ2F0b3IiKTsKK3dvcmtlci5wb3N0TWVz
c2FnZSgiZXZhbCBuYXZpZ2F0b3IuYXBwTmFtZSIpOword29ya2VyLnBvc3RNZXNzYWdlKCJldmFs
IG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoJ1dlYktpdCcpICE9IDAiKTsKK3dvcmtlci5w
b3N0TWVzc2FnZSgiZXZhbCBuYXZpZ2F0b3IucGxhdGZvcm0ubGVuZ3RoID4gMCIpOword29ya2Vy
LnBvc3RNZXNzYWdlKCJldmFsIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignV2ViS2l0Jykg
IT0gMCIpOword29ya2VyLnBvc3RNZXNzYWdlKCJldmFsIHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5l
Iik7Cit3b3JrZXIucG9zdE1lc3NhZ2UoImV2YWwgZm9vLy9iYXIiKTsKKword29ya2VyLm9ubWVz
c2FnZSA9IGZ1bmN0aW9uKGV2dCkgeworICAgIGlmICghL2Zvb1wvXC9iYXIvLnRlc3QoZXZ0LmRh
dGEpKQorICAgICAgICBsb2coZXZ0LmRhdGEucmVwbGFjZShuZXcgUmVnRXhwKCIvLipMYXlvdXRU
ZXN0cyIpLCAiPC4uLj4iKSk7CisgICAgZWxzZSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3dvcmtlci1uYXZpZ2F0b3IuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAg
KyB0ZXh0L2h0bWwKCg==
</data>
<flag name="review"
          id="12150"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>