<?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>130532</bug_id>
          
          <creation_ts>2014-03-20 13:14:03 -0700</creation_ts>
          <short_desc>Add a flushing mechanism for the WebVTTParser</short_desc>
          <delta_ts>2014-03-20 14:00:22 -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>Media</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>bunhere</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>992677</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-20 13:14:03 -0700</bug_when>
    <thetext>1. Use TextResourceDecoder for the WebVTTParser
	1ac2b3081492ab8661429230004013a9a3623f0f
	https://codereview.chromium.org/54203003
	
	fs@opera.com
	
2. Add a flushing mechanism for the WebVTTParser
	24343d32bc36d20d59ef3e10040faddde65929e6
	https://codereview.chromium.org/59453002
	
	fs@opera.com

3. Don&apos;t find(&apos;:&apos;) twice in WebVTTParser::collectMetadataHeader
	ef2793f1d9d207389589ecf9a136ea5c7170b4af
	https://codereview.chromium.org/75233002
	
	fs@opera.com

4. Decouple tokenizer/tree builder state from WebVTTParser
	a29f2f8324abcd4826b41e7dc34373dee2ec57a9
	https://codereview.chromium.org/52713005
	
	fs@opera.com

5. Handle buffer boundaries in the WebVTT parser
	7ce003c8d47b39f116f1f2a592a5dfb4a9e77228
	https://codereview.chromium.org/64303004
	
	fs@opera.com

6. Fix tag closing issues in the WebVTT tree builder
	18f896b3498478311e880f782813d5dfc8c0c7d1
	https://codereview.chromium.org/96933004
	
	fs@opera.com

7. WebVTT only allows &lt;rt&gt; if the currently innermost node is &lt;ruby&gt;
	8670e8ecb13254a651f5493ec83f4484d18c154e
	https://codereview.chromium.org/98783005
	
	fs@opera.com

8. Use the return value to signal success for VTTParser helpers
	4ac55780a6af3d76e0159c1d145330964ad56647
	https://codereview.chromium.org/104713002
	
	fs@opera.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992679</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-03-20 13:14:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/16382589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992693</commentid>
    <comment_count>2</comment_count>
      <attachid>227326</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-20 13:38:30 -0700</bug_when>
    <thetext>Created attachment 227326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992707</commentid>
    <comment_count>3</comment_count>
      <attachid>227326</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-03-20 13:54:35 -0700</bug_when>
    <thetext>Comment on attachment 227326
Patch

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

&gt; Source/WebCore/ChangeLog:64
&gt; +2014-03-20  Brent Fulgham  &lt;bfulgham@apple.com&gt;
&gt; +
&gt; +        Need a short description (OOPS!).
&gt; +        Need the bug URL (OOPS!).
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Tests: http/tests/media/track/track-webvtt-slow-loading-2.html
&gt; +               http/tests/media/track/track-webvtt-slow-loading.html
&gt; +
&gt; +        * CMakeLists.txt:
&gt; +        * Configurations/FeatureDefines.xcconfig:
&gt; +        * GNUmakefile.list.am:
&gt; +        * WebCore.vcxproj/WebCore.vcxproj:
&gt; +        * WebCore.vcxproj/WebCore.vcxproj.filters:
&gt; +        * WebCore.xcodeproj/project.pbxproj:
&gt; +        * html/track/BufferedLineReader.cpp: Added.
&gt; +        * html/track/BufferedLineReader.h: Added.
&gt; +        * html/track/TextTrackRegion.cpp:
&gt; +        * html/track/VTTCue.cpp:
&gt; +        * html/track/WebVTTParser.cpp:
&gt; +        * html/track/WebVTTParser.h:
&gt; +        * loader/TextTrackLoader.cpp:

Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992710</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-20 14:00:22 -0700</bug_when>
    <thetext>Committed r165997: &lt;http://trac.webkit.org/changeset/165997&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227326</attachid>
            <date>2014-03-20 13:38:30 -0700</date>
            <delta_ts>2014-03-20 13:54:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130532-20140320133809.patch</filename>
            <type>text/plain</type>
            <size>54530</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE0LTAzLTIwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIGZsdXNoaW5nIG1l
Y2hhbmlzbSBmb3IgdGhlIFdlYlZUVFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwNTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTWVyZ2VkIGZyb20gQmxpbmsgKHBhdGNoIGJ5IHZjYXJidW5l
QGNocm9taXVtLm9yZyk6CisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9ibGluay8rLzFhYzJiMzA4MTQ5MmFiODY2MTQyOTIzMDAwNDAxM2E5YTM2MjNm
MGYKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS81NDIwMzAwMworICAgICAgICBodHRwczovL2No
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy8yNDM0M2QzMmJjMzZkMjBk
NTllZjNlMTAwNDBmYWRkZGU2NTkyOWU2CisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20vNTk0NTMw
MDIKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2Js
aW5rLysvZWYyNzkzZjFkOWQyMDczODk1ODllY2Y5YTEzNmVhNWM3MTcwYjRhZgorICAgICAgICBo
dHRwOi8vY3JidWcuY29tLzc1MjMzMDAyCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL2EyOWYyZjgzMjRhYmNkNDgyNmI0MWU3ZGMzNDM3
M2RlZTJlYzU3YTkKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS81MjcxMzAwNQorICAgICAgICBo
dHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy83Y2UwMDNj
OGQ0N2IzOWYxMTZmMWYyYTU5MmE1ZGZiNGE5ZTc3MjI4CisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5j
b20vNjQzMDMwMDQKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL2JsaW5rLysvMThmODk2YjM0OTg0NzgzMTFlODgwZjc4MjgxM2Q1ZGZjOGMwYzdkMQor
ICAgICAgICBodHRwOi8vY3JidWcuY29tLzk2OTMzMDA0CisgICAgICAgIGh0dHBzOi8vY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzg2NzBlOGVjYjEzMjU0YTY1MWY1
NDkzZWM4M2Y0NDg0ZDE4YzE1NGUKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS85ODc4MzAwNQor
ICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsv
Ky80YWM1NTc4MGE2YWYzZDc2ZTAxNTljMWQxNDUzMzA5NjRhZDU2NjQ3CisgICAgICAgIGh0dHA6
Ly9jcmJ1Zy5jb20vMTA0NzEzMDAyCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbWVkaWEv
dHJhY2svdHJhY2std2VidnR0LXNsb3ctbG9hZGluZy0yLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMvbWVkaWEvdHJhY2svdHJhY2std2VidnR0LXNsb3ctbG9hZGluZy5odG1sCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2Vi
Q29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL3RyYWNrL0J1ZmZlcmVk
TGluZVJlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvdHJhY2svQnVmZmVyZWRMaW5l
UmVhZGVyLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNw
cDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5jcHA6CisgICAgICAgICogaHRtbC90cmFj
ay9XZWJWVFRQYXJzZXIuY3BwOgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmg6
CisgICAgICAgICogbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHA6CisKKzIwMTQtMDMtMjAgIEJy
ZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0
IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czog
aHR0cC90ZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1sb2FkaW5nLTIuaHRtbAor
ICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1s
b2FkaW5nLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIENvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvdHJh
Y2svQnVmZmVyZWRMaW5lUmVhZGVyLmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC90cmFjay9C
dWZmZXJlZExpbmVSZWFkZXIuaDogQWRkZWQuCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJh
Y2tSZWdpb24uY3BwOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmNwcDoKKyAgICAgICAg
KiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6CisgICAgICAgICogaHRtbC90cmFjay9XZWJW
VFRQYXJzZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcDoKKwogMjAx
NC0wMy0yMCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUHJl
c2VydmUgb3JpZ2luYWwgZG9jdW1lbnQgVVJMIGZvciBYU1NBdWRpdG9yIHJlcG9ydHMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjU5NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjcyNSw2ICsyNzI1LDcgQEAgaWYgKEVO
QUJMRV9WSURFT19UUkFDSykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAg
ICAgaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcAogICAgICAgICBodG1sL3RyYWNrL0F1ZGlvVHJh
Y2tMaXN0LmNwcAorICAgICAgICBodG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5jcHAKICAg
ICAgICAgaHRtbC90cmFjay9EYXRhQ3VlLmNwcAogICAgICAgICBodG1sL3RyYWNrL0luYmFuZEdl
bmVyaWNUZXh0VHJhY2suY3BwCiAgICAgICAgIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNw
cApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjU5NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjgyLDYgKzM2ODIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svQXVkaW9UcmFjay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlv
VHJhY2tMaXN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlz
dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQnVmZmVyZWRMaW5lUmVhZGVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svRGF0YUN1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZEdl
bmVyaWNUZXh0VHJhY2suY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTY1OTY2KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU2
NzYsNiArMTU2NzYsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxzaGFkb3dc
U2xpZGVyVGh1bWJFbGVtZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0
bWxcc2hhZG93XFNwaW5CdXR0b25FbGVtZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGh0bWxcc2hhZG93XFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXEJ1ZmZlcmVkTGluZVJlYWRlci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXERhdGFDdWUuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xJbmJhbmRHZW5lcmljVGV4
dFRyYWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcSW5i
YW5kVGV4dFRyYWNrLmNwcCIgLz4KQEAgLTIwNDEzLDYgKzIwNDE0LDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcc2hhZG93XFNsaWRlclRodW1iRWxlbWVudC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxzaGFkb3dcU3BpbkJ1dHRvbkVsZW1lbnQuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcc2hhZG93XFRleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xC
dWZmZXJlZExpbmVSZWFkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxc
dHJhY2tcRGF0YUN1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFj
a1xJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxodG1sXHRyYWNrXEluYmFuZFRleHRUcmFjay5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2
aXNpb24gMTY1OTY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC00MTU4LDYgKzQxNTgsOSBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxzaGFkb3dcVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcCI+CiAgICAgICA8RmlsdGVyPmh0bWxcc2hhZG93PC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXEJ1ZmZlcmVkTGlu
ZVJlYWRlci5jcHAiPgorICAgICAgPEZpbHRlcj5odG1sXHRyYWNrPC9GaWx0ZXI+CisgICAgPC9D
bENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXERhdGFDdWUu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgpAQCAtMTExNzAsNiArMTExNzMsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxzaGFkb3dcVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiPgogICAgICAgPEZpbHRlcj5odG1s
XHNoYWRvdzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFx0cmFja1xCdWZmZXJlZExpbmVSZWFkZXIuaCI+CisgICAgICA8RmlsdGVyPmh0
bWxcdHJhY2s8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGh0bWxcdHJhY2tcRGF0YUN1ZS5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbFx0cmFjazwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY1OTY2KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjgwLDYgKzIyODAsOCBAQAogCQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyog
SW5zcGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBMjQ1ODdBMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdBMjlC
QTZBMTg3QjdDMUQwMEYyOUNFQiAvKiBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMjlCQTY5MTg3Qjc4MUMw
MEYyOUNFQiAvKiBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCAqLzsgfTsKIAkJN0EyOUY1NzIx
OEM2OTUxNDAwNEQwRjgxIC8qIE91dE9mQmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMjlGNTcxMThDNjk1MTQw
MDREMEY4MSAvKiBPdXRPZkJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmggKi87IH07CisJCTdBNDUw
MzJGMThEQjcxNzIwMDM3N0IzNCAvKiBCdWZmZXJlZExpbmVSZWFkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E0NTAzMkQxOERCNzE3MjAwMzc3
QjM0IC8qIEJ1ZmZlcmVkTGluZVJlYWRlci5jcHAgKi87IH07CisJCTdBNDUwMzMwMThEQjcxNzIw
MDM3N0IzNCAvKiBCdWZmZXJlZExpbmVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNDUwMzJFMThEQjcxNzIwMDM3N0IzNCAvKiBCdWZmZXJl
ZExpbmVSZWFkZXIuaCAqLzsgfTsKIAkJN0E1NDg1N0YxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3Bl
Y3Rvckhpc3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0E1NDg1N0QxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuY3BwICov
OyB9OwogCQk3QTU0ODU4MDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg1N0UxNEUw
MkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCAqLzsgfTsKIAkJN0E1NDg4MTcxNEU0
MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBh
dGNoU3VwcG9ydC5oICovOyB9OwpAQCAtOTI3NSw2ICs5Mjc3LDggQEAKIAkJN0EyOUJBNjcxODdC
NzMyMjAwRjI5Q0VCIC8qIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTI5QkE2OTE4N0I3ODFDMDBGMjlDRUIgLyogVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1w
b3JhcnlPcGVuR0xTZXR0aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ey
OUY1NzExOEM2OTUxNDAwNEQwRjgxIC8qIE91dE9mQmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT3V0T2ZCYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRi5oOyBwYXRoID0gb2JqYy9PdXRPZkJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNDUwMzJEMThEQjcxNzIwMDM3N0IzNCAvKiBCdWZm
ZXJlZExpbmVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QnVmZmVyZWRMaW5lUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0E0
NTAzMkUxOERCNzE3MjAwMzc3QjM0IC8qIEJ1ZmZlcmVkTGluZVJlYWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWZmZXJlZExpbmVSZWFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0E1NDg1N0QxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhp
c3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9y
SGlzdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNTQ4NTdFMTRFMDJE
NTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluc3BlY3Rvckhpc3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0E1NDg4MTUxNEU0MzJBMTAwNkFFMDVBIC8qIERPTVBhdGNoU3VwcG9ydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01QYXRjaFN1cHBvcnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MjMxLDYgKzE5MjM1LDggQEAKIAkJQjFBRDRFNzcxM0ExMkE3
MjAwODQ2QjI3IC8qIHRyYWNrICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk3QTQ1MDMyRDE4REI3MTcyMDAzNzdCMzQgLyogQnVmZmVyZWRMaW5lUmVhZGVy
LmNwcCAqLywKKwkJCQk3QTQ1MDMyRTE4REI3MTcyMDAzNzdCMzQgLyogQnVmZmVyZWRMaW5lUmVh
ZGVyLmggKi8sCiAJCQkJQkU4OEUwQ0MxNzE1RDJBMjAwNjU4RDk4IC8qIEF1ZGlvVHJhY2suY3Bw
ICovLAogCQkJCUJFODhFMENEMTcxNUQyQTIwMDY1OEQ5OCAvKiBBdWRpb1RyYWNrLmggKi8sCiAJ
CQkJQkU4OEUwQ0UxNzE1RDJBMjAwNjU4RDk4IC8qIEF1ZGlvVHJhY2suaWRsICovLApAQCAtMjMx
NjMsNiArMjMxNjksNyBAQAogCQkJCUE4MEU2RDBDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHls
ZVJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE4MDA3MEExOTUxNkUwMEE4RUY1RiAvKiBD
U1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGQzU0RDA1NzE2QTc2NzMxMDA1NzVF
NEQgLyogQ1NTU3VwcG9ydHNSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTQ1MDMzMDE4REI3
MTcyMDAzNzdCMzQgLyogQnVmZmVyZWRMaW5lUmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzgwQzk4ODBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg4MkRBMjMxNTkzODQ4RDAwMDExNUVEIC8qIENTU1RvU3R5bGVNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY1M0U5MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmlj
b2RlUmFuZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODAzMyw2ICsyODA0MCw3IEBACiAJ
CQkJQjJGQTNEQ0UwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0xpbmV0b0Ficy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0REMDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbEFicy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0REMjBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk3QTQ1MDMyRjE4REI3MTcyMDAzNzdCMzQgLyogQnVmZmVyZWRMaW5l
UmVhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREQ0MEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR1BhdGhTZWdMaW5ldG9SZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNERDYw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyRkEzREQ4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svQnVmZmVyZWRMaW5lUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIE9w
ZXJhIFNvZnR3YXJlIEFTQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQnVmZmVyZWRMaW5lUmVhZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9D
aGFyYWN0ZXJOYW1lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgQnVmZmVyZWRM
aW5lUmVhZGVyOjpnZXRMaW5lKFN0cmluZyYgbGluZSkKK3sKKyAgICBpZiAobV9tYXliZVNraXBM
RikgeworICAgICAgICAvLyBXZSByYW4gb3V0IG9mIGRhdGEgYWZ0ZXIgYSBDUiAoVSswMDBEKSwg
d2hpY2ggbWVhbnMgdGhhdCB3ZSBtYXkgYmUKKyAgICAgICAgLy8gaW4gdGhlIG1pZGRsZSBvZiBh
IENSTEYgcGFpci4gSWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgTEYgKFUrMDAwQSkKKyAgICAg
ICAgLy8gdGhlbiBza2lwIGl0LCBhbmQgdGhlbiAodW5jb25kaXRpb25hbGx5KSByZXR1cm4gdGhl
IGJ1ZmZlcmVkIGxpbmUuCisgICAgICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBzY2FuQ2hhcmFjdGVyKG5ld2xpbmVDaGFyYWN0ZXIpOworICAgICAgICAgICAgbV9t
YXliZVNraXBMRiA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZXJlIHdhcyBu
byAobmV3KSBkYXRhIGF2YWlsYWJsZSwgdGhlbiBrZWVwIG1fbWF5YmVTa2lwTEYgc2V0LAorICAg
ICAgICAvLyBhbmQgZmFsbCB0aHJvdWdoIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIEVPUyBjaGVj
ayBhdCB0aGUgZW5kIG9mCisgICAgICAgIC8vIHRoZSBtZXRob2QuCisgICAgfQorCisgICAgYm9v
bCBzaG91bGRSZXR1cm5MaW5lID0gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZvckxGID0gZmFsc2U7
CisgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgVUNoYXIgYyA9IG1f
YnVmZmVyLmN1cnJlbnRDaGFyKCk7CisgICAgICAgIG1fYnVmZmVyLmFkdmFuY2UoKTsKKworICAg
ICAgICBpZiAoYyA9PSBuZXdsaW5lQ2hhcmFjdGVyIHx8IGMgPT0gY2FycmlhZ2VSZXR1cm4pIHsK
KyAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgbGluZSBlbmRpbmcuIFJldHVybiB0aGUgYWNjdW11
bGF0ZWQgbGluZS4KKyAgICAgICAgICAgIHNob3VsZFJldHVybkxpbmUgPSB0cnVlOworICAgICAg
ICAgICAgY2hlY2tGb3JMRiA9IChjID09IGNhcnJpYWdlUmV0dXJuKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gTlVMcyBhcmUgdHJhbnNmb3JtZWQgaW50byBV
K0ZGRkQgKFJFUExBQ0VNRU5UIENIQVIuKSBpbiBzdGVwIDEgb2YKKyAgICAgICAgLy8gdGhlIFdl
YlZUVCBwYXJzZXIgYWxnb3JpdGhtLgorICAgICAgICBpZiAoYyA9PSAnXDAnKQorICAgICAgICAg
ICAgYyA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOworCisgICAgICAgIG1fbGluZUJ1ZmZlci5hcHBl
bmQoYyk7CisgICAgfQorCisgICAgaWYgKGNoZWNrRm9yTEYpIHsKKyAgICAgICAgLy8gTWF5IGJl
IGluIHRoZSBtaWRkbGUgb2YgYSBDUkxGIHBhaXIuCisgICAgICAgIGlmICghbV9idWZmZXIuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAvLyBTY2FuIGEgcG90ZW50aWFsIG5ld2xpbmUgY2hhcmFj
dGVyLgorICAgICAgICAgICAgc2NhbkNoYXJhY3RlcihuZXdsaW5lQ2hhcmFjdGVyKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciB0aGUgTEYgb24gdGhlIG5leHQg
Y2FsbCAodW5sZXNzIHdlIHJlYWNoZWQgRU9TLCBpbgorICAgICAgICAgICAgLy8gd2hpY2ggY2Fz
ZSB3ZSdsbCByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBsaW5lIGJ1ZmZlciwgYW5kCisgICAg
ICAgICAgICAvLyByZXNldCBzdGF0ZSBmb3IgdGhlIG5leHQgbGluZS4pCisgICAgICAgICAgICBt
X21heWJlU2tpcExGID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpc0F0RW5k
T2ZTdHJlYW0oKSkgeworICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0
cmVhbSBwcm9wZXIuIEVtaXQgYSBsaW5lIGlmIHRoZQorICAgICAgICAvLyBjdXJyZW50IGxpbmUg
YnVmZmVyIGlzIG5vbi1lbXB0eS4gKE5vdGUgdGhhdCBpZiBzaG91bGRSZXR1cm5MaW5lIGlzCisg
ICAgICAgIC8vIHNldCBhbHJlYWR5LCB3ZSB3YW50IHRvIHJldHVybiBhIGxpbmUgbm9uZXRoZWxl
c3MuKQorICAgICAgICBzaG91bGRSZXR1cm5MaW5lIHw9ICFtX2xpbmVCdWZmZXIuaXNFbXB0eSgp
OworICAgIH0KKworICAgIGlmIChzaG91bGRSZXR1cm5MaW5lKSB7CisgICAgICAgIGxpbmUgPSBt
X2xpbmVCdWZmZXIudG9TdHJpbmcoKTsKKyAgICAgICAgbV9saW5lQnVmZmVyLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFTU0VSVChtX2J1ZmZlci5pc0VtcHR5
KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJlZExpbmVSZWFkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0J1ZmZlcmVkTGluZVJlYWRlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9CdWZmZXJlZExpbmVSZWFk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCBPcGVyYSBTb2Z0d2FyZSBBU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCdWZm
ZXJlZExpbmVSZWFkZXJfaAorI2RlZmluZSBCdWZmZXJlZExpbmVSZWFkZXJfaAorCisjaW5jbHVk
ZSAiU2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIExpbmUgY29sbGVjdGlvbiBoZWxwZXIgZm9y
IHRoZSBXZWJWVFQgUGFyc2VyLgorLy8KKy8vIENvbnZlcnRzIGEgc3RyZWFtIG9mIGRhdGEgKD09
IGEgc2VxdWVuY2Ugb2YgU3RyaW5ncykgaW50byBhIHNldCBvZgorLy8gbGluZXMuIENSLCBMUiBv
ciBDUkxGIGFyZSBjb25zaWRlcmVkIGxpbmVicmVha3MuIE5vcm1hbGl6ZXMgTlVMcyAoVSswMDAw
KQorLy8gdG8gJ1JFUExBQ0VNRU5UIENIQVJBQ1RFUicgKFUrRkZGRCkgYW5kIGRvZXMgbm90IHJl
dHVybiB0aGUgbGluZWJyZWFrcyBhcworLy8gcGFydCBvZiB0aGUgcmVzdWx0LgorY2xhc3MgQnVm
ZmVyZWRMaW5lUmVhZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdWZmZXJlZExpbmVS
ZWFkZXIpOworcHVibGljOgorICAgIEJ1ZmZlcmVkTGluZVJlYWRlcigpCisgICAgICAgIDogbV9l
bmRPZlN0cmVhbShmYWxzZSkKKyAgICAgICAgLCBtX21heWJlU2tpcExGKGZhbHNlKSB7IH0KKwor
ICAgIC8vIEFwcGVuZCBkYXRhIHRvIHRoZSBpbnRlcm5hbCBidWZmZXIuCisgICAgdm9pZCBhcHBl
bmQoY29uc3QgU3RyaW5nJiBkYXRhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2VuZE9mU3Ry
ZWFtKTsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKFNlZ21lbnRlZFN0cmluZyhkYXRhKSk7Cisg
ICAgfQorCisgICAgLy8gSW5kaWNhdGUgdGhhdCBubyBtb3JlIGRhdGEgd2lsbCBiZSBhcHBlbmRl
ZC4gVGhpcyB3aWxsIGNhdXNlIGFueQorICAgIC8vIHBvdGVudGlhbGx5ICJ1bnRlcm1pbmF0ZWQi
IGxpbmUgdG8gYmUgcmV0dXJuZWQgZnJvbSBnZXRMaW5lLgorICAgIHZvaWQgc2V0RW5kT2ZTdHJl
YW0oKSB7IG1fZW5kT2ZTdHJlYW0gPSB0cnVlOyB9CisKKyAgICAvLyBBdHRlbXB0IHRvIHJlYWQg
YSBsaW5lIGZyb20gdGhlIGludGVybmFsIGJ1ZmZlciAoZmVkIHZpYSBhcHBlbmQpLgorICAgIC8v
IElmIHN1Y2Nlc3NmdWwsIHRydWUgaXMgcmV0dXJuZWQgYW5kIHxsaW5lfCBpcyBzZXQgdG8gdGhl
IGxpbmUgdGhhdCB3YXMKKyAgICAvLyByZWFkLiBJZiBubyBsaW5lIGNvdWxkIGJlIHJlYWQgZmFs
c2UgaXMgcmV0dXJuZWQuCisgICAgYm9vbCBnZXRMaW5lKFN0cmluZyYgbGluZSk7CisKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgRU9TIGhhcyBiZWVuIHJlYWNoZWQgcHJvcGVyLgorICAgIGJvb2wg
aXNBdEVuZE9mU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZlN0cmVhbSAmJiBtX2J1ZmZl
ci5pc0VtcHR5KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBDb25zdW1lIHRoZSBuZXh0IGNoYXJh
Y3RlciB0aGUgYnVmZmVyIGlmIGl0IGlzIHRoZSBjaGFyYWN0ZXIgfGN8LgorICAgIHZvaWQgc2Nh
bkNoYXJhY3RlcihVQ2hhciBjKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2J1ZmZlci5pc0Vt
cHR5KCkpOworICAgICAgICBpZiAobV9idWZmZXIuY3VycmVudENoYXIoKSA9PSBjKQorICAgICAg
ICAgICAgbV9idWZmZXIuYWR2YW5jZSgpOworICAgIH0KKworICAgIFNlZ21lbnRlZFN0cmluZyBt
X2J1ZmZlcjsKKyAgICBTdHJpbmdCdWlsZGVyIG1fbGluZUJ1ZmZlcjsKKyAgICBib29sIG1fZW5k
T2ZTdHJlYW07CisgICAgYm9vbCBtX21heWJlU2tpcExGOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja1JlZ2lvbi5jcHAJKHJldmlzaW9uIDE2NTk2NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDI1ICsy
NjIsMjIgQEAgdm9pZCBUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlKAogewogICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHNjcm9s
bFVwVmFsdWVLZXl3b3JkLCAoInVwIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwogCi0gICAgYm9vbCBpc1ZhbGlkU2V0dGluZzsKLSAgICBTdHJpbmcgbnVtYmVyQXNTdHJp
bmc7Ci0gICAgaW50IG51bWJlcjsKLSAgICBGbG9hdFBvaW50IGFuY2hvclBvc2l0aW9uOwotCiAg
ICAgc3dpdGNoIChzZXR0aW5nKSB7CiAgICAgY2FzZSBJZDoKICAgICAgICAgaWYgKHZhbHVlLmZp
bmQoIi0tPiIpID09IG5vdEZvdW5kKQogICAgICAgICAgICAgbV9pZCA9IHZhbHVlOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdpZHRoOgotICAgICAgICBudW1iZXIgPSBXZWJWVFRQYXJzZXI6
OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFsdWUsIGlzVmFsaWRTZXR0aW5nKTsKLSAgICAg
ICAgaWYgKGlzVmFsaWRTZXR0aW5nKQotICAgICAgICAgICAgbV93aWR0aCA9IG51bWJlcjsKKyAg
ICBjYXNlIFdpZHRoOiB7CisgICAgICAgIGZsb2F0IGZsb2F0V2lkdGg7CisgICAgICAgIGlmIChX
ZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFsdWUsIGZsb2F0V2lkdGgp
KQorICAgICAgICAgICAgbV93aWR0aCA9IGZsb2F0V2lkdGg7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIExPRyhNZWRpYSwgIlRleHRUcmFja1JlZ2lvbjo6cGFyc2VTZXR0aW5nVmFsdWUsIGlu
dmFsaWQgV2lkdGgiKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgSGVpZ2h0OiB7
CiAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICAgICAgaW50IG51bWJlcjsKICAg
ICAgICAgaWYgKFdlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0c1RvSW50KHZhbHVlLCAmcG9zaXRp
b24sIG51bWJlcikgJiYgcG9zaXRpb24gPT0gdmFsdWUubGVuZ3RoKCkpCiAgICAgICAgICAgICBt
X2hlaWdodEluTGluZXMgPSBudW1iZXI7CiAgICAgICAgIGVsc2UKQEAgLTI4OCwxNyArMjg1LDEx
IEBAIHZvaWQgVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZSgKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgUmVnaW9uQW5jaG9yOgotICAgICAgICBhbmNob3JQb3NpdGlv
biA9IFdlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIodmFsdWUsICcs
JywgaXNWYWxpZFNldHRpbmcpOwotICAgICAgICBpZiAoaXNWYWxpZFNldHRpbmcpCi0gICAgICAg
ICAgICBtX3JlZ2lvbkFuY2hvciA9IGFuY2hvclBvc2l0aW9uOwotICAgICAgICBlbHNlCisgICAg
ICAgIGlmICghV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcih2YWx1
ZSwgJywnLCBtX3JlZ2lvbkFuY2hvcikpCiAgICAgICAgICAgICBMT0coTWVkaWEsICJUZXh0VHJh
Y2tSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlLCBpbnZhbGlkIFJlZ2lvbkFuY2hvciIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFZpZXdwb3J0QW5jaG9yOgotICAgICAgICBhbmNob3JQb3Np
dGlvbiA9IFdlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIodmFsdWUs
ICcsJywgaXNWYWxpZFNldHRpbmcpOwotICAgICAgICBpZiAoaXNWYWxpZFNldHRpbmcpCi0gICAg
ICAgICAgICBtX3ZpZXdwb3J0QW5jaG9yID0gYW5jaG9yUG9zaXRpb247Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgaWYgKCFXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWly
KHZhbHVlLCAnLCcsIG1fdmlld3BvcnRBbmNob3IpKQogICAgICAgICAgICAgTE9HKE1lZGlhLCAi
VGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZSwgaW52YWxpZCBWaWV3cG9ydEFuY2hv
ciIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNjcm9sbDoKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZUVEN1ZS5jcHAJKHJldmlzaW9uIDE2NTk2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVlRUQ3VlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3IEBA
IHZvaWQgVlRUQ3VlOjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHZvaWQgVlRUQ3VlOjpj
cmVhdGVXZWJWVFROb2RlVHJlZSgpCiB7CiAgICAgaWYgKCFtX3dlYlZUVE5vZGVUcmVlKQotICAg
ICAgICBtX3dlYlZUVE5vZGVUcmVlID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJWVFRQYXJzZXI+KG51
bGxwdHIsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPmNyZWF0ZURvY3VtZW50RnJhZ21lbnRG
cm9tQ3VlVGV4dChtX2NvbnRlbnQpOworICAgICAgICBtX3dlYlZUVE5vZGVUcmVlID0gV2ViVlRU
UGFyc2VyOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50RnJvbUN1ZVRleHQob3duZXJEb2N1bWVudCgp
LCBtX2NvbnRlbnQpOwogfQogCiB2b2lkIFZUVEN1ZTo6Y29weVdlYlZUVE5vZGVUb0RPTVRyZWUo
Q29udGFpbmVyTm9kZSogd2ViVlRUTm9kZSwgQ29udGFpbmVyTm9kZSogcGFyZW50KQpAQCAtNjk2
LDggKzY5Niw5IEBAIHZvaWQgVlRUQ3VlOjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKENvbnQKICAg
ICAgICAgaWYgKGNoaWxkLT5ub2RlTmFtZSgpID09IHRpbWVzdGFtcFRhZykgewogICAgICAgICAg
ICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwogICAgICAgICAgICAgU3RyaW5nIHRpbWVzdGFtcCA9
IGNoaWxkLT5ub2RlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZXN0YW1w
ID0gV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKHRpbWVzdGFtcCwgJnBvc2l0aW9uKTsK
LSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50VGltZXN0YW1wICE9IC0xKTsKKyAgICAgICAgICAg
IGRvdWJsZSBjdXJyZW50VGltZXN0YW1wOworICAgICAgICAgICAgYm9vbCBjaGVjayA9IFdlYlZU
VFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcCh0aW1lc3RhbXAsIHBvc2l0aW9uLCBjdXJyZW50VGlt
ZXN0YW1wKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2hlY2ssIGNoZWNrKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lc3RhbXAgPiBtb3ZpZVRpbWUpCiAg
ICAgICAgICAgICAgICAgaXNQYXN0Tm9kZSA9IGZhbHNlOwpAQCAtOTg2LDcgKzk4Nyw2IEBAIHZv
aWQgVlRUQ3VlOjpzZXRDdWVTZXR0aW5ncyhjb25zdCBTdHJpbmcKIAogICAgICAgICAgICAgLy8g
NS4gSWdub3JpbmcgdGhlIHRyYWlsaW5nIHBlcmNlbnQgc2lnbiwgaW50ZXJwcmV0IHZhbHVlIGFz
IGFuIGludGVnZXIsIGFuZCBsZXQgbnVtYmVyIGJlIHRoYXQgbnVtYmVyLgogICAgICAgICAgICAg
Ly8gNi4gSWYgbnVtYmVyIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMCDiiaQgbnVtYmVyIOKJpCAxMDAs
IHRoZW4ganVtcCB0byB0aGUgc3RlcCBsYWJlbGVkIG5leHQgc2V0dGluZy4KLSAgICAgICAgICAg
IC8vIE5PVEU6IHRvSW50IGlnbm9yZXMgdHJhaWxpbmcgbm9uLWRpZ2l0IGNoYXJhY3RlcnMsIHN1
Y2ggYXMgJyUnLgogICAgICAgICAgICAgaWYgKG51bWJlciA8IDAgfHwgbnVtYmVyID4gMTAwKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1dlYlZUVFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9XZWJWVFRQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjU5NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIyICs0NSwy
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjb25zdCBkb3VibGUgc2Vjb25kc1BlckhvdXIgPSAz
NjAwOwogY29uc3QgZG91YmxlIHNlY29uZHNQZXJNaW51dGUgPSA2MDsKIGNvbnN0IGRvdWJsZSBz
ZWNvbmRzUGVyTWlsbGlzZWNvbmQgPSAwLjAwMTsKLWNvbnN0IGRvdWJsZSBtYWxmb3JtZWRUaW1l
ID0gLTE7Ci1jb25zdCBVQ2hhciBib20gPSAweEZFRkY7CiBjb25zdCBjaGFyKiBmaWxlSWRlbnRp
ZmllciA9ICJXRUJWVFQiOwogY29uc3QgdW5zaWduZWQgZmlsZUlkZW50aWZpZXJMZW5ndGggPSA2
OwogCi1zdGF0aWMgdW5zaWduZWQgc2NhbkRpZ2l0cyhjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNp
Z25lZCogcG9zaXRpb24pCitzdGF0aWMgdW5zaWduZWQgc2NhbkRpZ2l0cyhjb25zdCBTdHJpbmcm
IGlucHV0LCB1bnNpZ25lZCYgcG9zaXRpb24pCiB7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlv
biA9ICpwb3NpdGlvbjsKLSAgICB3aGlsZSAoKnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkgJiYg
aXNBU0NJSURpZ2l0KGlucHV0Wypwb3NpdGlvbl0pKQotICAgICAgICAoKnBvc2l0aW9uKSsrOwot
ICAgIHJldHVybiAqcG9zaXRpb24gLSBzdGFydFBvc2l0aW9uOworICAgIHVuc2lnbmVkIHN0YXJ0
UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgo
KSAmJiBpc0FTQ0lJRGlnaXQoaW5wdXRbcG9zaXRpb25dKSkKKyAgICAgICAgcG9zaXRpb24rKzsK
KyAgICByZXR1cm4gcG9zaXRpb24gLSBzdGFydFBvc2l0aW9uOwogfQogICAgIAotdW5zaWduZWQg
V2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzVG9JbnQoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5z
aWduZWQqIHBvc2l0aW9uLCBpbnQmIG51bWJlcikKK3Vuc2lnbmVkIFdlYlZUVFBhcnNlcjo6Y29s
bGVjdERpZ2l0c1RvSW50KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkJiBwb3NpdGlvbiwg
aW50JiBudW1iZXIpCiB7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9ICpwb3NpdGlvbjsK
KyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgdW5zaWduZWQgbnVt
RGlnaXRzID0gc2NhbkRpZ2l0cyhpbnB1dCwgcG9zaXRpb24pOwogICAgIGlmICghbnVtRGlnaXRz
KSB7CiAgICAgICAgIG51bWJlciA9IDA7CkBAIC05MSwxMyArODksMTEgQEAgU3RyaW5nIFdlYlZU
VFBhcnNlcjo6Y29sbGVjdFdvcmQoY29uc3QgUwogfQogCiAjaWYgRU5BQkxFKFdFQlZUVF9SRUdJ
T05TKQotZmxvYXQgV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wmIGlzVmFsaWRTZXR0aW5nKQorYm9vbCBXZWJWVFRQYXJzZXI6
OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgZmxvYXQmIHBl
cmNlbnRhZ2UpCiB7CiAgICAgLy8gJyUnIG11c3QgYmUgcHJlc2VudCBhbmQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2V0dGluZyB2YWx1ZS4KLSAgICBpZiAodmFsdWUuZmluZCgnJScsIDEpICE9IHZhbHVl
Lmxlbmd0aCgpIC0gMSkgewotICAgICAgICBpc1ZhbGlkU2V0dGluZyA9IGZhbHNlOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZVt2YWx1
ZS5sZW5ndGgoKSAtIDFdICE9ICclJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5z
aWduZWQgcG9zaXRpb24gPSAwOwogICAgIHVuc2lnbmVkIGRpZ2l0c0JlZm9yZURvdCA9IHNjYW5E
aWdpdHModmFsdWUsICZwb3NpdGlvbik7CkBAIC0xMDksNDQgKzEwNSw0NSBAQCBmbG9hdCBXZWJW
VFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlCiAgICAgfQogCiAgICAgLy8gQXQgbGVhc3Qg
b25lIGRpZ2l0IGlzIHJlcXVpcmVkCi0gICAgaWYgKCFkaWdpdHNCZWZvcmVEb3QgJiYgIWRpZ2l0
c0FmdGVyRG90KSB7Ci0gICAgICAgIGlzVmFsaWRTZXR0aW5nID0gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KKyAgICBpZiAoIWRpZ2l0c0JlZm9yZURvdCAmJiAhZGlnaXRzQWZ0ZXJE
b3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZsb2F0IG51bWJlciA9IHZhbHVlLnRv
RmxvYXQoKTsKLSAgICBpc1ZhbGlkU2V0dGluZyA9IG51bWJlciA+PSAwICYmIG51bWJlciA8PSAx
MDA7Ci0gICAgcmV0dXJuIG51bWJlcjsKKyAgICBpZiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAx
MDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBlcmNlbnRhZ2UgPSBudW1iZXI7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0UG9pbnQgV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0
UGVyY2VudGFnZVZhbHVlUGFpcihjb25zdCBTdHJpbmcmIHZhbHVlLCBjaGFyIGRlbGltaXRlciwg
Ym9vbCYgaXNWYWxpZFNldHRpbmcpCitib29sIFdlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNl
bnRhZ2VWYWx1ZVBhaXIoY29uc3QgU3RyaW5nJiB2YWx1ZSwgY2hhciBkZWxpbWl0ZXIsIEZsb2F0
UG9pbnQmIHZhbHVlUGFpcikKIHsKICAgICAvLyBUaGUgZGVsaW1pdGVyIGNhbid0IGJlIHRoZSBm
aXJzdCBvciBzZWNvbmQgdmFsdWUgYmVjYXVzZSBhIHBhaXIgb2YKICAgICAvLyBwZXJjZW50YWdl
cyAoeCUseSUpIGltcGxpZXMgdGhhdCBhdCBsZWFzdCB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMK
ICAgICAvLyBhcmUgdGhlIGZpcnN0IHBlcmNlbnRhZ2UgdmFsdWUuCiAgICAgc2l6ZV90IGRlbGlt
aXRlck9mZnNldCA9IHZhbHVlLmZpbmQoZGVsaW1pdGVyLCAyKTsKLSAgICBpZiAoZGVsaW1pdGVy
T2Zmc2V0ID09IG5vdEZvdW5kIHx8IGRlbGltaXRlck9mZnNldCA9PSB2YWx1ZS5sZW5ndGgoKSAt
IDEpIHsKLSAgICAgICAgaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIEZs
b2F0UG9pbnQoMCwgMCk7Ci0gICAgfQorICAgIGlmIChkZWxpbWl0ZXJPZmZzZXQgPT0gbm90Rm91
bmQgfHwgZGVsaW1pdGVyT2Zmc2V0ID09IHZhbHVlLmxlbmd0aCgpIC0gMSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpc0ZpcnN0VmFsdWVWYWxpZDsKLSAgICBmbG9hdCBmaXJz
dENvb3JkID0gcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSh2YWx1ZS5zdWJzdHJpbmcoMCwgZGVs
aW1pdGVyT2Zmc2V0KSwgaXNGaXJzdFZhbHVlVmFsaWQpOworICAgIGZsb2F0IGZpcnN0Q29vcmQ7
CisgICAgaWYgKCFwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKHZhbHVlLnN1YnN0cmluZygwLCBk
ZWxpbWl0ZXJPZmZzZXQpLCBmaXJzdENvb3JkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYm9vbCBpc1NlY29uZFZhbHVlVmFsaWQ7Ci0gICAgZmxvYXQgc2Vjb25kQ29vcmQgPSBwYXJz
ZUZsb2F0UGVyY2VudGFnZVZhbHVlKHZhbHVlLnN1YnN0cmluZyhkZWxpbWl0ZXJPZmZzZXQgKyAx
LCB2YWx1ZS5sZW5ndGgoKSAtIDEpLCBpc1NlY29uZFZhbHVlVmFsaWQpOworICAgIGZsb2F0IHNl
Y29uZENvb3JkOworICAgIGlmICghcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSh2YWx1ZS5zdWJz
dHJpbmcoZGVsaW1pdGVyT2Zmc2V0ICsgMSwgdmFsdWUubGVuZ3RoKCkgLSAxKSwgc2Vjb25kQ29v
cmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpc1ZhbGlkU2V0dGluZyA9IGlzRmly
c3RWYWx1ZVZhbGlkICYmIGlzU2Vjb25kVmFsdWVWYWxpZDsKLSAgICByZXR1cm4gRmxvYXRQb2lu
dChmaXJzdENvb3JkLCBzZWNvbmRDb29yZCk7CisgICAgdmFsdWVQYWlyID0gRmxvYXRQb2ludChm
aXJzdENvb3JkLCBzZWNvbmRDb29yZCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAog
V2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoV2ViVlRUUGFyc2VyQ2xpZW50KiBjbGllbnQsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkKICAgICAsIG1fc3RhdGUoSW5pdGlhbCkKKyAgICAsIG1fZGVjb2RlcihU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBVVEY4RW5jb2RpbmcoKSkp
CiAgICAgLCBtX2N1cnJlbnRTdGFydFRpbWUoMCkKICAgICAsIG1fY3VycmVudEVuZFRpbWUoMCkK
LSAgICAsIG1fdG9rZW5pemVyKHN0ZDo6bWFrZV91bmlxdWU8V2ViVlRUVG9rZW5pemVyPigpKQog
ICAgICwgbV9jbGllbnQoY2xpZW50KQogewogfQpAQCAtMTY3LDE2ICsxNjQsMjggQEAgdm9pZCBX
ZWJWVFRQYXJzZXI6OmdldE5ld1JlZ2lvbnMoVmVjdG9yPAogCiB2b2lkIFdlYlZUVFBhcnNlcjo6
cGFyc2VCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgU3Ry
aW5nIHRleHREYXRhID0gbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuZ3RoKTsKKyAgICBtX2xp
bmVSZWFkZXIuYXBwZW5kKHRleHREYXRhKTsKKyAgICBwYXJzZSgpOworfQorCit2b2lkIFdlYlZU
VFBhcnNlcjo6Zmx1c2goKQoreworICAgIFN0cmluZyB0ZXh0RGF0YSA9IG1fZGVjb2Rlci0+Zmx1
c2goKTsKKyAgICBtX2xpbmVSZWFkZXIuYXBwZW5kKHRleHREYXRhKTsKKyAgICBtX2xpbmVSZWFk
ZXIuc2V0RW5kT2ZTdHJlYW0oKTsKKyAgICBwYXJzZSgpOworICAgIGZsdXNoUGVuZGluZ0N1ZSgp
OworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2UoKQoreyAgICAKICAgICAvLyBXZWJWVFQg
cGFyc2VyIGFsZ29yaXRobS4gKDUuMSBXZWJWVFQgZmlsZSBwYXJzaW5nLikKICAgICAvLyBTdGVw
cyAxIC0gMyAtIEluaXRpYWwgc2V0dXAuCi0gICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotCi0g
ICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7Ci0gICAgICAgIFN0cmluZyBsaW5lID0gY29s
bGVjdE5leHRMaW5lKGRhdGEsIGxlbmd0aCwgJnBvc2l0aW9uKTsKLSAgICAgICAgaWYgKGxpbmUu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZChkYXRhICsgcG9zaXRpb24s
IGxlbmd0aCAtIHBvc2l0aW9uKTsKKyAgICBTdHJpbmcgbGluZTsKKyAgICB3aGlsZSAobV9saW5l
UmVhZGVyLmdldExpbmUobGluZSkpIHsKKyAgICAgICAgaWYgKGxpbmUuaXNOdWxsKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
ICAgICAgICAgY2FzZSBJbml0aWFsOgpAQCAtMjA2LDcgKzIxNSw3IEBAIHZvaWQgV2ViVlRUUGFy
c2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgSWQ6Ci0gICAgICAgICAgICAvLyBTdGVwIDE3LTIwIC0gQWxsb3cgYW55IG51bWJlciBv
ZiBsaW5lIHRlcm1pbmF0b3JzLCB0aGVuIGluaXRpYWxpemUgbmV3IGN1ZSB2YWx1ZXMuCisgICAg
ICAgICAgICAvLyBTdGVwcyAxNyAtIDIwIC0gQWxsb3cgYW55IG51bWJlciBvZiBsaW5lIHRlcm1p
bmF0b3JzLCB0aGVuIGluaXRpYWxpemUgbmV3IGN1ZSB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAo
bGluZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTI1MiwyOCArMjYx
LDI2IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpmaWxlRmluaXNoZWQoKQogICAgIG1fc3RhdGUgPSBG
aW5pc2hlZDsKIH0KIAordm9pZCBXZWJWVFRQYXJzZXI6OmZsdXNoUGVuZGluZ0N1ZSgpCit7Cisg
ICAgQVNTRVJUKG1fbGluZVJlYWRlci5pc0F0RW5kT2ZTdHJlYW0oKSk7CisgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIEN1ZVRleHQgc3RhdGUgd2hlbiB3ZSBydW4gb3V0IG9mIGRhdGEsIHdlIGVtaXQg
dGhlIHBlbmRpbmcgY3VlLgorICAgIGlmIChtX3N0YXRlID09IEN1ZVRleHQpCisgICAgICAgIGNy
ZWF0ZU5ld0N1ZSgpOworfQorCiBib29sIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWlyZWRGaWxlSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGxpbmUpCiB7CiAgICAgLy8gQSBXZWJWVFQgZmlsZSBpZGVu
dGlmaWVyIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIEJPTSBjaGFyYWN0ZXIsCiAgICAgLy8gdGhl
IHN0cmluZyAiV0VCVlRUIiBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBzcGFjZSBvciB0YWIgY2hh
cmFjdGVyLAogICAgIC8vIGFuZCBhbnkgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90
IGxpbmUgdGVybWluYXRvcnMgLi4uCi0gICAgdW5zaWduZWQgbGluZVBvcyA9IDA7Ci0KICAgICBp
ZiAobGluZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChsaW5l
WzBdID09IGJvbSkKLSAgICAgICAgKytsaW5lUG9zOwotCi0gICAgaWYgKGxpbmUubGVuZ3RoKCkg
PCBmaWxlSWRlbnRpZmllckxlbmd0aCArIGxpbmVQb3MpCisgICAgaWYgKCFsaW5lLnN0YXJ0c1dp
dGgoZmlsZUlkZW50aWZpZXIsIGZpbGVJZGVudGlmaWVyTGVuZ3RoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbGVJZGVudGlmaWVyTGVu
Z3RoOyArK2ksICsrbGluZVBvcykgewotICAgICAgICBpZiAobGluZVtsaW5lUG9zXSAhPSBmaWxl
SWRlbnRpZmllcltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAobGluZVBvcyA8IGxpbmUubGVuZ3RoKCkgJiYgbGluZVtsaW5lUG9zXSAhPSAnICcgJiYgbGlu
ZVtsaW5lUG9zXSAhPSAnXHQnKQorICAgIGlmIChsaW5lLmxlbmd0aCgpID4gZmlsZUlkZW50aWZp
ZXJMZW5ndGggJiYgIWlzQVNwYWNlKGxpbmVbZmlsZUlkZW50aWZpZXJMZW5ndGhdKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjg3LDEwICsyOTQsMTAg
QEAgdm9pZCBXZWJWVFRQYXJzZXI6OmNvbGxlY3RNZXRhZGF0YUhlYWRlcgogICAgIC8vIFN0ZXAg
MTIuNCBJZiBsaW5lIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIgIjoiIChBIFUrMDAzQSBDT0xPTiks
IHRoZW4gc2V0IG1ldGFkYXRhJ3MKICAgICAvLyBuYW1lIHRvIHRoZSBzdWJzdHJpbmcgb2YgbGlu
ZSBiZWZvcmUgdGhlIGZpcnN0ICI6IiBjaGFyYWN0ZXIgYW5kCiAgICAgLy8gbWV0YWRhdGEncyB2
YWx1ZSB0byB0aGUgc3Vic3RyaW5nIGFmdGVyIHRoaXMgY2hhcmFjdGVyLgotICAgIGlmICghbGlu
ZS5jb250YWlucygiOiIpKQorICAgIHNpemVfdCBjb2xvblBvc2l0aW9uID0gbGluZS5maW5kKCc6
Jyk7CisgICAgaWYgKGNvbG9uUG9zaXRpb24gPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHVuc2lnbmVkIGNvbG9uUG9zaXRpb24gPSBsaW5lLmZpbmQoIjoiKTsKICAgICBTdHJp
bmcgaGVhZGVyTmFtZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGNvbG9uUG9zaXRpb24pOwogCiAgICAg
Ly8gU3RlcCAxMi41IElmIG1ldGFkYXRhJ3MgbmFtZSBlcXVhbHMgIlJlZ2lvbiI6CkBAIC0zMTcs
MTYgKzMyNCwxNSBAQCBXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjCiAg
ICAgLy8gQ29sbGVjdCBXZWJWVFQgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLiAoNS4zIFdlYlZU
VCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MgcGFyc2luZy4pCiAgICAgLy8gU3RlcHMgMSAtIDMg
LSBMZXQgaW5wdXQgYmUgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQgYW5kIHBvc2l0aW9uIGJlIGEg
cG9pbnRlciBpbnRvIGlucHV0CiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIHNraXBX
aGl0ZVNwYWNlKGxpbmUsICZwb3NpdGlvbik7CisgICAgc2tpcFdoaXRlU3BhY2UobGluZSwgcG9z
aXRpb24pOwogCiAgICAgLy8gU3RlcHMgNCAtIDUgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFt
cC4gSWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lz
ZSwgbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIHN0YXJ0IHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0
aW1lLgotICAgIG1fY3VycmVudFN0YXJ0VGltZSA9IGNvbGxlY3RUaW1lU3RhbXAobGluZSwgJnBv
c2l0aW9uKTsKLSAgICBpZiAobV9jdXJyZW50U3RhcnRUaW1lID09IG1hbGZvcm1lZFRpbWUpCisg
ICAgaWYgKCFjb2xsZWN0VGltZVN0YW1wKGxpbmUsIHBvc2l0aW9uLCBtX2N1cnJlbnRTdGFydFRp
bWUpKQogICAgICAgICByZXR1cm4gQmFkQ3VlOwogICAgIGlmIChwb3NpdGlvbiA+PSBsaW5lLmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gQmFkQ3VlOwogICAgIAotICAgIHNraXBXaGl0ZVNwYWNl
KGxpbmUsICZwb3NpdGlvbik7CisgICAgc2tpcFdoaXRlU3BhY2UobGluZSwgcG9zaXRpb24pOwog
CiAgICAgLy8gU3RlcHMgNiAtIDkgLSBJZiB0aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBu
b3QgIi0tPiIsIGFib3J0IGFuZCByZXR1cm4gZmFpbHVyZS4KICAgICBpZiAobGluZS5maW5kKCIt
LT4iLCBwb3NpdGlvbikgPT0gbm90Rm91bmQpCkBAIC0zMzUsMTMgKzM0MSwxMiBAQCBXZWJWVFRQ
YXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjCiAgICAgaWYgKHBvc2l0aW9uID49IGxp
bmUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBCYWRDdWU7CiAgICAgCi0gICAgc2tpcFdoaXRl
U3BhY2UobGluZSwgJnBvc2l0aW9uKTsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCBwb3NpdGlv
bik7CiAKICAgICAvLyBTdGVwcyAxMCAtIDExIC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAu
IElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2Us
IGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBlbmQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUu
Ci0gICAgbV9jdXJyZW50RW5kVGltZSA9IGNvbGxlY3RUaW1lU3RhbXAobGluZSwgJnBvc2l0aW9u
KTsKLSAgICBpZiAobV9jdXJyZW50RW5kVGltZSA9PSBtYWxmb3JtZWRUaW1lKQorICAgIGlmICgh
Y29sbGVjdFRpbWVTdGFtcChsaW5lLCBwb3NpdGlvbiwgbV9jdXJyZW50RW5kVGltZSkpCiAgICAg
ICAgIHJldHVybiBCYWRDdWU7Ci0gICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBvc2l0aW9uKTsK
KyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCBwb3NpdGlvbik7CiAKICAgICAvLyBTdGVwIDEyIC0g
UGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncyBmb3IgdGhlIGN1ZSAoY29uZHVjdGVkIGluIFRleHRU
cmFja0N1ZSkuCiAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBsaW5lLnN1YnN0cmluZyhwb3NpdGlv
biwgbGluZS5sZW5ndGgoKS0xKTsKQEAgLTM1Nyw3ICszNjIsNyBAQCBXZWJWVFRQYXJzZXI6OlBh
cnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjCiAgICAgaWYgKCFtX2N1cnJlbnRDb250ZW50LmlzRW1w
dHkoKSkKICAgICAgICAgbV9jdXJyZW50Q29udGVudC5hcHBlbmQoIlxuIik7CiAgICAgbV9jdXJy
ZW50Q29udGVudC5hcHBlbmQobGluZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICByZXR1cm4g
Q3VlVGV4dDsKIH0KIApAQCAtMzY4LDM0ICszNzMsNTQgQEAgV2ViVlRUUGFyc2VyOjpQYXJzZVN0
YXRlIFdlYlZUVFBhcnNlcjo6aQogICAgIHJldHVybiBJZDsKIH0KIAotUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBXZWJWVFRQYXJzZXI6OmNyZWF0ZURvY3VtZW50RnJhZ21lbnRGcm9tQ3Vl
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCisvLyBBIGhlbHBlciBjbGFzcyBmb3IgdGhlIGNvbnN0
cnVjdGlvbiBvZiBhICJjdWUgZnJhZ21lbnQiIGZyb20gdGhlIGN1ZSB0ZXh0LgorY2xhc3MgV2Vi
VlRUVHJlZUJ1aWxkZXIgeworcHVibGljOgorICAgIFdlYlZUVFRyZWVCdWlsZGVyKERvY3VtZW50
JiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KSB7IH0KKworICAgIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gYnVpbGRGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
Y3VlVGV4dCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKERv
Y3VtZW50Jik7CisKKyAgICBXZWJWVFRUb2tlbiBtX3Rva2VuOworICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiBtX2N1cnJlbnROb2RlOworICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IG1fbGFuZ3Vh
Z2VTdGFjazsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKK307CisKK1Bhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gV2ViVlRUVHJlZUJ1aWxkZXI6OmJ1aWxkRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIGN1ZVRleHQpCiB7CiAgICAgLy8gQ3VlIHRleHQgcHJvY2Vzc2luZyBiYXNlZCBvbgog
ICAgIC8vIDUuNCBXZWJWVFQgY3VlIHRleHQgcGFyc2luZyBydWxlcywgYW5kCiAgICAgLy8gNS41
IFdlYlZUVCBjdWUgdGV4dCBET00gY29uc3RydWN0aW9uIHJ1bGVzLgorICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShtX2RvY3Vt
ZW50KTsKIAotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQo
KSk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdG9Eb2N1bWVudChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOwotICAgIAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOwotCi0gICAgaWYgKHRleHQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGZyYWdtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChUZXh0OjpjcmVh
dGUoKmRvY3VtZW50LCBlbXB0eVN0cmluZygpKSk7CisgICAgaWYgKGN1ZVRleHQuaXNFbXB0eSgp
KSB7CisgICAgICAgIGZyYWdtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUobV9k
b2N1bWVudCwgZW1wdHlTdHJpbmcoKSkpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFz
ZSgpOwogICAgIH0KIAogICAgIG1fY3VycmVudE5vZGUgPSBmcmFnbWVudDsKLSAgICBtX3Rva2Vu
aXplci0+cmVzZXQoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJWVFRUb2tlbml6ZXI+IHRv
a2VuaXplcihzdGQ6Om1ha2VfdW5pcXVlPFdlYlZUVFRva2VuaXplcj4oKSk7CiAgICAgbV90b2tl
bi5jbGVhcigpOwotICAgIAogICAgIG1fbGFuZ3VhZ2VTdGFjay5jbGVhcigpOwotICAgIFNlZ21l
bnRlZFN0cmluZyBjb250ZW50KHRleHQpOwotICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRv
a2VuKGNvbnRlbnQsIG1fdG9rZW4pKQotICAgICAgICBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKGRv
Y3VtZW50KTsKKworICAgIFNlZ21lbnRlZFN0cmluZyBjb250ZW50KGN1ZVRleHQpOworICAgIHdo
aWxlICh0b2tlbml6ZXItPm5leHRUb2tlbihjb250ZW50LCBtX3Rva2VuKSkKKyAgICAgICAgY29u
c3RydWN0VHJlZUZyb21Ub2tlbihtX2RvY3VtZW50KTsKICAgICAKICAgICByZXR1cm4gZnJhZ21l
bnQucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFdlYlZUVFBh
cnNlcjo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZyb21DdWVUZXh0KERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiBjdWVUZXh0KQoreworICAgIFdlYlZUVFRyZWVCdWlsZGVyIHRyZWVC
dWlsZGVyKGRvY3VtZW50KTsKKyAgICByZXR1cm4gdHJlZUJ1aWxkZXIuYnVpbGRGcm9tU3RyaW5n
KGN1ZVRleHQpOworfQorCiB2b2lkIFdlYlZUVFBhcnNlcjo6Y3JlYXRlTmV3Q3VlKCkKIHsKICAg
ICBSZWZQdHI8V2ViVlRUQ3VlRGF0YT4gY3VlID0gV2ViVlRUQ3VlRGF0YTo6Y3JlYXRlKCk7CkBA
IC00NDIsNyArNDY3LDcgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OmNyZWF0ZU5ld1JlZ2lvbihjb25z
dAogfQogI2VuZGlmCiAKLWRvdWJsZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY29u
c3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCogcG9zaXRpb24pCitib29sIFdlYlZUVFBhcnNlcjo6
Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIHVuc2lnbmVkJiBwb3NpdGlvbiwg
ZG91YmxlJiB0aW1lU3RhbXApCiB7CiAgICAgLy8gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAg
KDUuMyBXZWJWVFQgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzIHBhcnNpbmcuKQogICAgIC8vIFN0
ZXBzIDEgLSA0IC0gSW5pdGlhbCBjaGVja3MsIGxldCBtb3N0IHNpZ25pZmljYW50IHVuaXRzIGJl
IG1pbnV0ZXMuCkBAIC00NTQsMjQgKzQ3OSwyNCBAQCBkb3VibGUgV2ViVlRUUGFyc2VyOjpjb2xs
ZWN0VGltZVN0YW1wKGNvCiAgICAgaW50IHZhbHVlMTsKICAgICB1bnNpZ25lZCB2YWx1ZTFEaWdp
dHMgPSBjb2xsZWN0RGlnaXRzVG9JbnQobGluZSwgcG9zaXRpb24sIHZhbHVlMSk7CiAgICAgaWYg
KCF2YWx1ZTFEaWdpdHMpCi0gICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKHZhbHVlMURpZ2l0cyAhPSAyIHx8IHZhbHVlMSA+IDU5KQog
ICAgICAgICBtb2RlID0gaG91cnM7CiAKICAgICAvLyBTdGVwcyA4IC0gMTEgLSBDb2xsZWN0IHRo
ZSBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnOicgKG11c3QgYmUgMiBjaGFycykuCi0gICAg
aWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0g
JzonKQotICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBpZiAocG9zaXRpb24gPj0g
bGluZS5sZW5ndGgoKSB8fCBsaW5lW3Bvc2l0aW9uKytdICE9ICc6JykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGludCB2YWx1ZTI7CiAgICAgaWYgKGNvbGxlY3REaWdpdHNUb0ludChsaW5l
LCBwb3NpdGlvbiwgdmFsdWUyKSAhPSAyKQotICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU3RlcCAxMiAtIERldGVjdCB3aGV0aGVy
IHRoaXMgdGltZXN0YW1wIGluY2x1ZGVzIGhvdXJzLgogICAgIGludCB2YWx1ZTM7Ci0gICAgaWYg
KG1vZGUgPT0gaG91cnMgfHwgKCpwb3NpdGlvbiA8IGxpbmUubGVuZ3RoKCkgJiYgbGluZVsqcG9z
aXRpb25dID09ICc6JykpIHsKLSAgICAgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgp
IHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0gJzonKQotICAgICAgICAgICAgcmV0dXJuIG1hbGZv
cm1lZFRpbWU7CisgICAgaWYgKG1vZGUgPT0gaG91cnMgfHwgKHBvc2l0aW9uIDwgbGluZS5sZW5n
dGgoKSAmJiBsaW5lW3Bvc2l0aW9uXSA9PSAnOicpKSB7CisgICAgICAgIGlmIChwb3NpdGlvbiA+
PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbcG9zaXRpb24rK10gIT0gJzonKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoY29sbGVjdERpZ2l0c1RvSW50KGxpbmUsIHBvc2l0
aW9uLCB2YWx1ZTMpICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICB2YWx1ZTMgPSB2
YWx1ZTI7CiAgICAgICAgIHZhbHVlMiA9IHZhbHVlMTsKQEAgLTQ3OSwxNiArNTA0LDE3IEBAIGRv
dWJsZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAoY28KICAgICB9CiAKICAgICAvLyBT
dGVwcyAxMyAtIDE3IC0gQ29sbGVjdCBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAnLicgKG11
c3QgYmUgMyBjaGFycykuCi0gICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxp
bmVbKCpwb3NpdGlvbikrK10gIT0gJy4nKQotICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsK
KyAgICBpZiAocG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lW3Bvc2l0aW9uKytdICE9
ICcuJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCB2YWx1ZTQ7CiAgICAgaWYgKGNv
bGxlY3REaWdpdHNUb0ludChsaW5lLCBwb3NpdGlvbiwgdmFsdWU0KSAhPSAzKQotICAgICAgICBy
ZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh2YWx1
ZTIgPiA1OSB8fCB2YWx1ZTMgPiA1OSkKLSAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXBzIDE4IC0gMTkgLSBDYWxjdWxhdGUg
cmVzdWx0LgotICAgIHJldHVybiAodmFsdWUxICogc2Vjb25kc1BlckhvdXIpICsgKHZhbHVlMiAq
IHNlY29uZHNQZXJNaW51dGUpICsgdmFsdWUzICsgKHZhbHVlNCAqIHNlY29uZHNQZXJNaWxsaXNl
Y29uZCk7CisgICAgdGltZVN0YW1wID0gKHZhbHVlMSAqIHNlY29uZHNQZXJIb3VyKSArICh2YWx1
ZTIgKiBzZWNvbmRzUGVyTWludXRlKSArIHZhbHVlMyArICh2YWx1ZTQgKiBzZWNvbmRzUGVyTWls
bGlzZWNvbmQpOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgV2ViVlRUTm9kZVR5cGUg
dG9rZW5Ub05vZGVUeXBlKFdlYlZUVFRva2VuJiB0b2tlbikKQEAgLTUyMCw1NSArNTQ2LDc1IEBA
IHN0YXRpYyBXZWJWVFROb2RlVHlwZSB0b2tlblRvTm9kZVR5cGUoV2UKICAgICByZXR1cm4gV2Vi
VlRUTm9kZVR5cGVOb25lOwogfQogCi12b2lkIFdlYlZUVFBhcnNlcjo6Y29uc3RydWN0VHJlZUZy
b21Ub2tlbihEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIFdlYlZUVFRyZWVCdWlsZGVyOjpjb25z
dHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICAvLyBodHRwOi8v
ZGV2LnczLm9yZy9odG1sNS93ZWJ2dHQvI3dlYnZ0dC1jdWUtdGV4dC1kb20tY29uc3RydWN0aW9u
LXJ1bGVzCiAKICAgICBzd2l0Y2ggKG1fdG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBXZWJWVFRU
b2tlblR5cGVzOjpDaGFyYWN0ZXI6IHsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBtX3Rva2Vu
LmNoYXJhY3RlcnMoKS50b1N0cmluZygpOwotICAgICAgICBSZWZQdHI8VGV4dD4gY2hpbGQgPSBU
ZXh0OjpjcmVhdGUoKmRvY3VtZW50LCBjb250ZW50KTsKKyAgICAgICAgUmVmUHRyPFRleHQ+IGNo
aWxkID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCBjb250ZW50KTsKICAgICAgICAgbV9jdXJyZW50
Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQoY2hpbGQpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpTdGFydFRhZzogewotICAgICAgICBSZWZQdHI8V2Vi
VlRURWxlbWVudD4gY2hpbGQ7CiAgICAgICAgIFdlYlZUVE5vZGVUeXBlIG5vZGVUeXBlID0gdG9r
ZW5Ub05vZGVUeXBlKG1fdG9rZW4pOwotICAgICAgICBpZiAobm9kZVR5cGUgIT0gV2ViVlRUTm9k
ZVR5cGVOb25lKQotICAgICAgICAgICAgY2hpbGQgPSBXZWJWVFRFbGVtZW50OjpjcmVhdGUobm9k
ZVR5cGUsICpkb2N1bWVudCk7Ci0gICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgaWYg
KCFtX3Rva2VuLmNsYXNzZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY2hpbGQtPnNl
dEF0dHJpYnV0ZShjbGFzc0F0dHIsIG1fdG9rZW4uY2xhc3NlcygpLnRvQXRvbWljU3RyaW5nKCkp
OwotCi0gICAgICAgICAgICBpZiAoY2hpbGQtPndlYlZUVE5vZGVUeXBlKCkgPT0gV2ViVlRUTm9k
ZVR5cGVWb2ljZSkKLSAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlKFdlYlZUVEVs
ZW1lbnQ6OnZvaWNlQXR0cmlidXRlTmFtZSgpLCBtX3Rva2VuLmFubm90YXRpb24oKS50b0F0b21p
Y1N0cmluZygpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT53ZWJWVFROb2RlVHlwZSgp
ID09IFdlYlZUVE5vZGVUeXBlTGFuZ3VhZ2UpIHsKLSAgICAgICAgICAgICAgICBtX2xhbmd1YWdl
U3RhY2suYXBwZW5kKG1fdG9rZW4uYW5ub3RhdGlvbigpLnRvQXRvbWljU3RyaW5nKCkpOwotICAg
ICAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1dGUoV2ViVlRURWxlbWVudDo6bGFuZ0F0dHJp
YnV0ZU5hbWUoKSwgbV9sYW5ndWFnZVN0YWNrLmxhc3QoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoIW1fbGFuZ3VhZ2VTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
Y2hpbGQtPnNldExhbmd1YWdlKG1fbGFuZ3VhZ2VTdGFjay5sYXN0KCkpOwotICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQoY2hpbGQpOwotICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZSA9IGNoaWxkOworICAgICAgICBpZiAobm9kZVR5cGUgPT0gV2ViVlRUTm9kZVR5
cGVOb25lKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV2ViVlRUTm9kZVR5cGUgY3Vy
cmVudFR5cGUgPSBtX2N1cnJlbnROb2RlLT5pc1dlYlZUVEVsZW1lbnQoKSA/IHRvV2ViVlRURWxl
bWVudChtX2N1cnJlbnROb2RlLmdldCgpKS0+d2ViVlRUTm9kZVR5cGUoKSA6IFdlYlZUVE5vZGVU
eXBlTm9uZTsKKyAgICAgICAgLy8gPHJ0PiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIGN1cnJlbnQg
bm9kZSBpcyA8cnVieT4uCisgICAgICAgIGlmIChub2RlVHlwZSA9PSBXZWJWVFROb2RlVHlwZVJ1
YnlUZXh0ICYmIGN1cnJlbnRUeXBlICE9IFdlYlZUVE5vZGVUeXBlUnVieSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFJlZlB0cjxXZWJWVFRFbGVtZW50PiBjaGlsZCA9IFdlYlZUVEVs
ZW1lbnQ6OmNyZWF0ZShub2RlVHlwZSwgZG9jdW1lbnQpOworICAgICAgICBpZiAoIW1fdG9rZW4u
Y2xhc3NlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyLCBtX3Rva2VuLmNsYXNzZXMoKS50b0F0b21pY1N0cmluZygpKTsKKworICAgICAgICBp
ZiAobm9kZVR5cGUgPT0gV2ViVlRUTm9kZVR5cGVWb2ljZSkKKyAgICAgICAgICAgIGNoaWxkLT5z
ZXRBdHRyaWJ1dGUoV2ViVlRURWxlbWVudDo6dm9pY2VBdHRyaWJ1dGVOYW1lKCksIG1fdG9rZW4u
YW5ub3RhdGlvbigpLnRvQXRvbWljU3RyaW5nKCkpOworICAgICAgICBlbHNlIGlmIChub2RlVHlw
ZSA9PSBXZWJWVFROb2RlVHlwZUxhbmd1YWdlKSB7CisgICAgICAgICAgICBtX2xhbmd1YWdlU3Rh
Y2suYXBwZW5kKG1fdG9rZW4uYW5ub3RhdGlvbigpLnRvQXRvbWljU3RyaW5nKCkpOworICAgICAg
ICAgICAgY2hpbGQtPnNldEF0dHJpYnV0ZShXZWJWVFRFbGVtZW50OjpsYW5nQXR0cmlidXRlTmFt
ZSgpLCBtX2xhbmd1YWdlU3RhY2subGFzdCgpKTsKICAgICAgICAgfQorICAgICAgICBpZiAoIW1f
bGFuZ3VhZ2VTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICBjaGlsZC0+c2V0TGFuZ3VhZ2Uo
bV9sYW5ndWFnZVN0YWNrLmxhc3QoKSk7CisgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFw
cGVuZENoaWxkKGNoaWxkKTsKKyAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGNoaWxkOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpFbmRUYWc6IHsKICAg
ICAgICAgV2ViVlRUTm9kZVR5cGUgbm9kZVR5cGUgPSB0b2tlblRvTm9kZVR5cGUobV90b2tlbik7
Ci0gICAgICAgIGlmIChub2RlVHlwZSAhPSBXZWJWVFROb2RlVHlwZU5vbmUpIHsKLSAgICAgICAg
ICAgIGlmIChub2RlVHlwZSA9PSBXZWJWVFROb2RlVHlwZUxhbmd1YWdlICYmIG1fY3VycmVudE5v
ZGUtPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxlbWVudChtX2N1cnJlbnROb2RlLmdl
dCgpKS0+d2ViVlRUTm9kZVR5cGUoKSA9PSBXZWJWVFROb2RlVHlwZUxhbmd1YWdlKQotICAgICAg
ICAgICAgICAgIG1fbGFuZ3VhZ2VTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBpZiAo
bV9jdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUgPSBtX2N1cnJlbnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmIChub2RlVHlwZSA9
PSBXZWJWVFROb2RlVHlwZU5vbmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZSBvbmx5IG5vbi1WVFRFbGVtZW50IHdvdWxkIGJlIHRoZSBEb2N1bWVudEZyYWdt
ZW50IHJvb3QuIChUZXh0CisgICAgICAgIC8vIG5vZGVzIGFuZCBQSXMgd2lsbCBuZXZlciBhcHBl
YXIgYXMgbV9jdXJyZW50Tm9kZS4pCisgICAgICAgIGlmICghbV9jdXJyZW50Tm9kZS0+aXNXZWJW
VFRFbGVtZW50KCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBXZWJWVFROb2RlVHlw
ZSBjdXJyZW50VHlwZSA9IHRvV2ViVlRURWxlbWVudChtX2N1cnJlbnROb2RlLmdldCgpKS0+d2Vi
VlRUTm9kZVR5cGUoKTsKKyAgICAgICAgYm9vbCBtYXRjaGVzQ3VycmVudCA9IG5vZGVUeXBlID09
IGN1cnJlbnRUeXBlOworICAgICAgICBpZiAoIW1hdGNoZXNDdXJyZW50KSB7CisgICAgICAgICAg
ICAvLyA8L3J1Ynk+IGF1dG8tY2xvc2VzIDxydD4KKyAgICAgICAgICAgIGlmIChjdXJyZW50VHlw
ZSA9PSBXZWJWVFROb2RlVHlwZVJ1YnlUZXh0ICYmIG5vZGVUeXBlID09IFdlYlZUVE5vZGVUeXBl
UnVieSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJlbnROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBpZiAobm9kZVR5cGUgPT0gV2ViVlRUTm9kZVR5cGVMYW5ndWFnZSkK
KyAgICAgICAgICAgIG1fbGFuZ3VhZ2VTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIGlmICht
X2N1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0g
bV9jdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBXZWJWVFRUb2tlblR5cGVzOjpUaW1lc3RhbXBUYWc6IHsKICAgICAgICAgdW5zaWduZWQg
cG9zaXRpb24gPSAwOwogICAgICAgICBTdHJpbmcgY2hhcmFjdGVyc1N0cmluZyA9IG1fdG9rZW4u
Y2hhcmFjdGVycygpLnRvU3RyaW5nKCk7Ci0gICAgICAgIGRvdWJsZSB0aW1lID0gY29sbGVjdFRp
bWVTdGFtcChjaGFyYWN0ZXJzU3RyaW5nLCAmcG9zaXRpb24pOwotICAgICAgICBpZiAodGltZSAh
PSBtYWxmb3JtZWRUaW1lKQotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5k
Q2hpbGQoUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjcmVhdGUoKmRvY3VtZW50LCAidGltZXN0YW1w
IiwgY2hhcmFjdGVyc1N0cmluZykpOworICAgICAgICBkb3VibGUgcGFyc2VkVGltZVN0YW1wOwor
ICAgICAgICBpZiAoV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNoYXJhY3RlcnNTdHJp
bmcsIHBvc2l0aW9uLCBwYXJzZWRUaW1lU3RhbXApKQorICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+cGFyc2VyQXBwZW5kQ2hpbGQoUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjcmVhdGUoZG9jdW1l
bnQsICJ0aW1lc3RhbXAiLCBjaGFyYWN0ZXJzU3RyaW5nKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBkZWZhdWx0OgpAQCAtNTc3LDMyICs2MjMsMTAgQEAgdm9pZCBXZWJWVFRQYXJzZXI6
OmNvbnN0cnVjdFRyZWVGcm9tVG9rZQogICAgIG1fdG9rZW4uY2xlYXIoKTsKIH0KIAotdm9pZCBX
ZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQq
IHBvc2l0aW9uKQordm9pZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNwYWNlKGNvbnN0IFN0cmlu
ZyYgbGluZSwgdW5zaWduZWQmIHBvc2l0aW9uKQogewotICAgIHdoaWxlICgqcG9zaXRpb24gPCBs
aW5lLmxlbmd0aCgpICYmIGlzQVNwYWNlKGxpbmVbKnBvc2l0aW9uXSkpCi0gICAgICAgICgqcG9z
aXRpb24pKys7Ci19Ci0KLVN0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3ROZXh0TGluZShjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKLXsKLSAg
ICB1bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSAqcG9zaXRpb247Ci0gICAgd2hpbGUgKGN1cnJl
bnRQb3NpdGlvbiA8IGxlbmd0aCAmJiBkYXRhW2N1cnJlbnRQb3NpdGlvbl0gIT0gJ1xyJyAmJiBk
YXRhW2N1cnJlbnRQb3NpdGlvbl0gIT0gJ1xuJykKLSAgICAgICAgY3VycmVudFBvc2l0aW9uKys7
Ci0gICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA+PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICBTdHJpbmcgbGluZSA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSArICpwb3NpdGlv
biAsIGN1cnJlbnRQb3NpdGlvbiAtICpwb3NpdGlvbik7Ci0gICAgaWYgKGRhdGFbY3VycmVudFBv
c2l0aW9uXSA9PSAnXHInKQotICAgICAgICBjdXJyZW50UG9zaXRpb24rKzsKLSAgICBpZiAoY3Vy
cmVudFBvc2l0aW9uIDwgbGVuZ3RoICYmIGRhdGFbY3VycmVudFBvc2l0aW9uXSA9PSAnXG4nKQot
ICAgICAgICBjdXJyZW50UG9zaXRpb24rKzsKLSAgICAqcG9zaXRpb24gPSBjdXJyZW50UG9zaXRp
b247Ci0gICAgaWYgKG1fYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGxpbmU7Ci0K
LSAgICBTdHJpbmcgbGluZVdpdGhCdWZmZXIgPSBTdHJpbmc6OmZyb21VVEY4KG1fYnVmZmVyLmRh
dGEoKSwgbV9idWZmZXIuc2l6ZSgpKTsKLSAgICBsaW5lV2l0aEJ1ZmZlci5hcHBlbmQobGluZSk7
Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICByZXR1cm4gbGluZVdpdGhCdWZmZXI7CisgICAg
d2hpbGUgKHBvc2l0aW9uIDwgbGluZS5sZW5ndGgoKSAmJiBpc0FTcGFjZShsaW5lW3Bvc2l0aW9u
XSkpCisgICAgICAgIHBvc2l0aW9uKys7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9XZWJWVFRQYXJzZXIuaAkocmV2aXNpb24gMTY1OTY2KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUs
MTAgQEAKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAorI2luY2x1ZGUgIkJ1ZmZlcmVkTGlu
ZVJlYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGV4
dFRyYWNrUmVnaW9uLmgiCiAjaW5jbHVkZSAiV2ViVlRUVG9rZW5pemVyLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgpAQCAtMTI4LDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgICAgICAvLyBVKzAwMjAg
U1BBQ0UgY2hhcmFjdGVycyBvciBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYikgY2hh
cmFjdGVycy4KICAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JzsKICAgICB9Ci0g
ICAgc3RhdGljIHVuc2lnbmVkIGNvbGxlY3REaWdpdHNUb0ludChjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCogcG9zaXRpb24sIGludCYgbnVtYmVyKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29sbGVj
dERpZ2l0c1RvSW50KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkJiBwb3NpdGlvbiwgaW50JiBudW1i
ZXIpOwogICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdFdvcmQoY29uc3QgU3RyaW5nJiwgdW5zaWdu
ZWQqKTsKLSAgICBzdGF0aWMgZG91YmxlIGNvbGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQqKTsKKyAgICBzdGF0aWMgYm9vbCBjb2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkJiwgZG91YmxlJik7CiAKICNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCiAg
ICAgLy8gVXNlZnVsIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBwZXJjZW50YWdlIHNldHRpbmdzLgot
ICAgIHN0YXRpYyBmbG9hdCBwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKGNvbnN0IFN0cmluZyYs
IGJvb2wmKTsKLSAgICBzdGF0aWMgRmxvYXRQb2ludCBwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVl
UGFpcihjb25zdCBTdHJpbmcmLCBjaGFyLCBib29sJik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VG
bG9hdFBlcmNlbnRhZ2VWYWx1ZShjb25zdCBTdHJpbmcmLCBmbG9hdCYpOworICAgIHN0YXRpYyBi
b29sIHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKGNvbnN0IFN0cmluZyYsIGNoYXIsIEZs
b2F0UG9pbnQmKTsKICNlbmRpZgogCiAgICAgLy8gSW5wdXQgZGF0YSB0byB0aGUgcGFyc2VyIHRv
IHBhcnNlLgogICAgIHZvaWQgcGFyc2VCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgZmx1c2goKTsKICAgICB2b2lkIGZpbGVGaW5pc2hlZCgpOwogCiAg
ICAgLy8gVHJhbnNmZXJzIG93bmVyc2hpcCBvZiBsYXN0IHBhcnNlZCBjdWVzIHRvIGNhbGxlci4K
QEAgLTE0OCwxMyArMTUxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldE5ld1JlZ2lvbnMoVmVj
dG9yPFJlZlB0cjxUZXh0VHJhY2tSZWdpb24+PiYpOwogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRGcm9tQ3VlVGV4dChjb25z
dCBTdHJpbmcmKTsKKyAgICAvLyBDcmVhdGUgdGhlIERvY3VtZW50RnJhZ21lbnQgcmVwcmVzZW50
YXRpb24gb2YgdGhlIFdlYlZUVCBjdWUgdGV4dC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVEb2N1bWVudEZyYWdtZW50RnJvbUN1ZVRleHQoRG9jdW1lbnQm
LCBjb25zdCBTdHJpbmcmKTsKIAogcHJvdGVjdGVkOgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBQYXJzZVN0YXRlIG1fc3RhdGU7CiAK
IHByaXZhdGU6CisgICAgdm9pZCBwYXJzZSgpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nQ3VlKCk7
CiAgICAgYm9vbCBoYXNSZXF1aXJlZEZpbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAg
IFBhcnNlU3RhdGUgY29sbGVjdEN1ZUlkKGNvbnN0IFN0cmluZyYpOwogICAgIFBhcnNlU3RhdGUg
Y29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKQEAgLTE2OSwyNyArMTc1
LDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVOZXdSZWdpb24oY29uc3QgU3RyaW5nJiBo
ZWFkZXJWYWx1ZSk7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIHNraXBXaGl0ZVNwYWNlKGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CisgICAgc3RhdGljIHZvaWQgc2tpcFdoaXRlU3BhY2Uo
Y29uc3QgU3RyaW5nJiwgdW5zaWduZWQmKTsKIAotICAgIFN0cmluZyBjb2xsZWN0TmV4dExpbmUo
Y29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCopOwotCi0gICAgdm9p
ZCBjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKERvY3VtZW50Kik7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
bV9idWZmZXI7CisgICAgQnVmZmVyZWRMaW5lUmVhZGVyIG1fbGluZVJlYWRlcjsKKyAgICBSZWZQ
dHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwogICAgIFN0cmluZyBtX2N1cnJlbnRJ
ZDsKICAgICBkb3VibGUgbV9jdXJyZW50U3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJlbnRF
bmRUaW1lOwogICAgIFN0cmluZ0J1aWxkZXIgbV9jdXJyZW50Q29udGVudDsKICAgICBTdHJpbmcg
bV9jdXJyZW50U2V0dGluZ3M7CiAgICAgCi0gICAgV2ViVlRUVG9rZW4gbV90b2tlbjsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViVlRUVG9rZW5pemVyPiBtX3Rva2VuaXplcjsKLQotICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBtX2N1cnJlbnROb2RlOwotCiAgICAgV2ViVlRUUGFyc2VyQ2xpZW50
KiBtX2NsaWVudDsKIAotICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IG1fbGFuZ3VhZ2VTdGFjazsK
ICAgICBWZWN0b3I8UmVmUHRyPFdlYlZUVEN1ZURhdGE+PiBtX2N1ZWxpc3Q7CiAKICNpZiBFTkFC
TEUoV0VCVlRUX1JFR0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNr
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNr
TG9hZGVyLmNwcAkocmV2aXNpb24gMTY1OTY2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Rl
eHRUcmFja0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOSBAQCB2b2lk
IFRleHRUcmFja0xvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAgICAgICAgICAgICBtX3N0YXRl
ID0gcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSA/IEZhaWxlZCA6IEZpbmlzaGVkOwogICAgIH0K
IAorICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkICYmIG1fY3VlUGFyc2VyKQorICAgICAgICBt
X2N1ZVBhcnNlci0+Zmx1c2goKTsKKwogICAgIGlmICghbV9jdWVMb2FkVGltZXIuaXNBY3RpdmUo
KSkKICAgICAgICAgbV9jdWVMb2FkVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIApJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTY1OTkwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTQtMDMtMjAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgZmx1c2hpbmcgbWVjaGFuaXNtIGZvciB0aGUg
V2ViVlRUUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzA1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNZXJnZWQgZnJvbSBCbGluayAocGF0Y2ggYnkgdmNhcmJ1bmVAY2hyb21pdW0ub3JnKToK
KyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5r
LysvMWFjMmIzMDgxNDkyYWI4NjYxNDI5MjMwMDA0MDEzYTlhMzYyM2YwZgorICAgICAgICBodHRw
Oi8vY3JidWcuY29tLzU0MjAzMDAzCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzI0MzQzZDMyYmMzNmQyMGQ1OWVmM2UxMDA0MGZhZGRk
ZTY1OTI5ZTYKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS81OTQ1MzAwMgorICAgICAgICBodHRw
czovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9lZjI3OTNmMWQ5
ZDIwNzM4OTU4OWVjZjlhMTM2ZWE1YzcxNzBiNGFmCisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20v
NzUyMzMwMDIKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL2JsaW5rLysvYTI5ZjJmODMyNGFiY2Q0ODI2YjQxZTdkYzM0MzczZGVlMmVjNTdhOQorICAg
ICAgICBodHRwOi8vY3JidWcuY29tLzUyNzEzMDA1CisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzdjZTAwM2M4ZDQ3YjM5ZjExNmYxZjJh
NTkyYTVkZmI0YTllNzcyMjgKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS82NDMwMzAwNAorICAg
ICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy8x
OGY4OTZiMzQ5ODQ3ODMxMWU4ODBmNzgyODEzZDVkZmM4YzBjN2QxCisgICAgICAgIGh0dHA6Ly9j
cmJ1Zy5jb20vOTY5MzMwMDQKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL2JsaW5rLysvODY3MGU4ZWNiMTMyNTRhNjUxZjU0OTNlYzgzZjQ0ODRkMThj
MTU0ZQorICAgICAgICBodHRwOi8vY3JidWcuY29tLzk4NzgzMDA1CisgICAgICAgIGh0dHBzOi8v
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzRhYzU1NzgwYTZhZjNk
NzZlMDE1OWMxZDE0NTMzMDk2NGFkNTY2NDcKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS8xMDQ3
MTMwMDIKKworICAgICAgICAqIGh0dHAvdGVzdHMvbWVkaWEvdHJhY2s6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbWVkaWEvdHJhY2svdHJhY2std2VidnR0LXNsb3ctbG9hZGluZy0yLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS90cmFjay90cmFj
ay13ZWJ2dHQtc2xvdy1sb2FkaW5nLTIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1sb2FkaW5nLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIG1lZGlhL3RyYWNrL2NhcHRpb25zLXdlYnZ0dC9jYXB0aW9ucy1tdWx0aWxpbmUtbGYu
dnR0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90cmFjay90cmFjay13ZWJ2dHQtdGMwMjMtbWFy
a3VwLmh0bWw6CisKIDIwMTQtMDMtMTkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBJbmNvcnJlY3QgYmVoYXZpb3Igd2hlbiBtdXRhdGluZyBhIHR5cGVkIGFycmF5
IGR1cmluZyBzZXQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3RyYWNrL3Ry
YWNrLXdlYnZ0dC1zbG93LWxvYWRpbmctMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1sb2FkaW5n
LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9t
ZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1sb2FkaW5nLTItZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorU2xvdyBsb2FkaW5nIFdlYlZUVCBmaWxlIGludGVy
cnVwdGVkIGluIHRoZSBtaWRkbGUgb2YgYSB0aW1lc3RhbXAgbGluZS4KKworRVhQRUNURUQgKHRy
YWNrLnRyYWNrLmN1ZXMubGVuZ3RoID09PSAnMicpIE9LCitFWFBFQ1RFRCAodHJhY2sudHJhY2su
Y3Vlc1swXS50ZXh0ID09PSAnTG9yZW0gaXBzdW0nKSBPSworRU5EIE9GIFRFU1QKKwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1sb2Fk
aW5nLTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Ry
YWNrL3RyYWNrLXdlYnZ0dC1zbG93LWxvYWRpbmctMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtc2xvdy1sb2FkaW5n
LTIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACis8IWRvY3R5cGUgaHRtbD4K
Kzx0aXRsZT5TbG93IGxvYWRpbmcgV2ViVlRUIGZpbGUgaW50ZXJydXB0ZWQgaW4gdGhlIG1pZGRs
ZSBvZiBhIHRpbWVzdGFtcCBsaW5lPC90aXRsZT4KKzxzY3JpcHQgc3JjPS9tZWRpYS1yZXNvdXJj
ZXMvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2FkQW5kU3Rh
bGwoKQoreworICAgIHJldHVybiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9sb2Fk
LWFuZC1zdGFsbC5waHAiOworfQorCitmdW5jdGlvbiB2dHRUcmFjaygpCit7CisgICAgcmV0dXJu
ICI/bmFtZT0uLi8uLi8uLi9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtbXVs
dGlsaW5lLWxmLnZ0dCZtaW1lVHlwZT10ZXh0JTJGdnR0IjsKK30KKword2luZG93Lm9ubG9hZCA9
IGZ1bmN0aW9uKCkKK3sKKyAgICB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVv
Jyk7CisgICAgdHJhY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cmFjaycpOworICAgIHZp
ZGVvLmFwcGVuZENoaWxkKHRyYWNrKTsKKyAgICB0cmFjay5vbmxvYWQgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjay50cmFjay5jdWVzLmxlbmd0aCIsIDIsICI9PT0i
KTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjay50cmFjay5jdWVzWzBdLnRleHQiLCAnTG9y
ZW1cdTAwMGFpcHN1bScsICI9PT0iKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH07CisgICAg
dHJhY2sub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBmYWlsVGVzdCgpOworICAgIH07
CisgICAgdHJhY2suc3JjID0gbG9hZEFuZFN0YWxsKCkgKyB2dHRUcmFjaygpICsgIiZzdGFsbEF0
PTMyJnN0YWxsRm9yPTEiOworICAgIHRyYWNrLnRyYWNrLm1vZGUgPSAiaGlkZGVuIjsKK30KKzwv
c2NyaXB0PgorPHA+U2xvdyBsb2FkaW5nIFdlYlZUVCBmaWxlIGludGVycnVwdGVkIGluIHRoZSBt
aWRkbGUgb2YgYSB0aW1lc3RhbXAgbGluZS48L3A+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0dC1zbG93LWxvYWRpbmcuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0dC1zbG93
LWxvYWRpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVk
aWEvdHJhY2svdHJhY2std2VidnR0LXNsb3ctbG9hZGluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzIgQEAKKzwhZG9jdHlwZSBodG1sPgorPHRpdGxlPlNsb3cgbG9hZGluZyBXZWJW
VFQgZmlsZSBpbnRlcnJ1cHRlZCBqdXN0IGFmdGVyIGEgY3VlIHRleHQgbGluZWJyZWFrPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPS9tZWRpYS1yZXNvdXJjZXMvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4K
KzxzY3JpcHQ+CitmdW5jdGlvbiBsb2FkQW5kU3RhbGwoKQoreworICAgIHJldHVybiAiaHR0cDov
LzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy9sb2FkLWFuZC1zdGFsbC5waHAiOworfQorCitmdW5j
dGlvbiB2dHRUcmFjaygpCit7CisgICAgcmV0dXJuICI/bmFtZT0uLi8uLi8uLi9tZWRpYS90cmFj
ay9jYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtbXVsdGlsaW5lLWxmLnZ0dCZtaW1lVHlwZT10ZXh0
JTJGdnR0IjsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2aWRlbyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7CisgICAgdHJhY2sgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCd0cmFjaycpOworICAgIHZpZGVvLmFwcGVuZENoaWxkKHRyYWNrKTsKKyAg
ICB0cmFjay5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFj
ay50cmFjay5jdWVzLmxlbmd0aCIsIDIsICI9PT0iKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCJ0
cmFjay50cmFjay5jdWVzWzBdLnRleHQiLCAnTG9yZW1cdTAwMGFpcHN1bScsICI9PT0iKTsKKyAg
ICAgICAgZW5kVGVzdCgpOworICAgIH07CisgICAgdHJhY2sub25lcnJvciA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBmYWlsVGVzdCgpOworICAgIH07CisgICAgdHJhY2suc3JjID0gbG9hZEFuZFN0
YWxsKCkgKyB2dHRUcmFjaygpICsgIiZzdGFsbEF0PTQ5JnN0YWxsRm9yPTEiOworICAgIHRyYWNr
LnRyYWNrLm1vZGUgPSAiaGlkZGVuIjsKK30KKzwvc2NyaXB0PgorPHA+U2xvdyBsb2FkaW5nIFdl
YlZUVCBmaWxlIGludGVycnVwdGVkIGp1c3QgYWZ0ZXIgYSBjdWUgdGV4dCBsaW5lYnJlYWsuPC9w
PgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2std2VidnR0LXRjMDIzLW1hcmt1
cC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0
dC10YzAyMy1tYXJrdXAuaHRtbAkocmV2aXNpb24gMTY1OTY2KQorKysgTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svdHJhY2std2VidnR0LXRjMDIzLW1hcmt1cC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw5ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlRoZSBmb2xsb3dpbmcgYmVhciBpcyBub3QgcnVi
eSBhbm5vdGF0ZWQgYW5kIG1hcmt1cCBpcyByZW1vdmVkOlxuSSBzYWlkICIpKTsKICAgICAgICAg
ICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQmVh
ciIpKTsKLSAgICAgICAgICAgICAgICB2YXIgcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJy
dCIpOwotICAgICAgICAgICAgICAgIHJ0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCJiZWFyIHdpdGggbWUiKSk7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hp
bGQocnQpOworICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJiZWFyIHdpdGggbWUiKSk7CiAgICAgICAgICAgICAgICAgZnJhZ21lbnQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiBpcyBjb21pbmchISEhIikpOwog
CiAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKGZyYWdtZW50LmlzRXF1YWxOb2RlKHZpZGVv
LnRleHRUcmFja3NbaV0uY3Vlc1szXS5nZXRDdWVBc0hUTUwoKSksIHRydWUpOwpJbmRleDogTGF5
b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L2NhcHRpb25zLW11bHRpbGluZS1s
Zi52dHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2Vi
dnR0L2NhcHRpb25zLW11bHRpbGluZS1sZi52dHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvY2FwdGlvbnMtbXVsdGlsaW5lLWxmLnZ0dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitXRUJWVFQKKworMQorMDA6MDA6MDAuMDAw
IC0tPiAwMDowMDowMC4zMDAKK0xvcmVtCitpcHN1bQorCisyCiswMDowMDowMS4yMDAgLS0+IDAw
OjAwOjAxLjUwMAorZG9sb3IgYW5kIGxpdGVyYWwgTlVMID4APAo=
</data>
<flag name="review"
          id="251581"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>