<?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>142293</bug_id>
          
          <creation_ts>2015-03-04 10:12:31 -0800</creation_ts>
          <short_desc>Move AxisScrollSnapAnimator logic to ScrollController</short_desc>
          <delta_ts>2015-03-05 11:32:48 -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>Layout and Rendering</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>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1074113</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-04 10:12:31 -0800</bug_when>
    <thetext>The ScrollController class encapsulates the logic related to scroll rubber band behavior. It should also be responsible for the very similar snap points scroll logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074114</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-04 10:12:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/20039867&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074323</commentid>
    <comment_count>2</comment_count>
      <attachid>247915</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-04 18:04:04 -0800</bug_when>
    <thetext>Created attachment 247915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074596</commentid>
    <comment_count>3</comment_count>
      <attachid>247915</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-03-05 11:31:25 -0800</bug_when>
    <thetext>Comment on attachment 247915
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074597</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-05 11:32:48 -0800</bug_when>
    <thetext>Committed r181087: &lt;http://trac.webkit.org/changeset/181087&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247915</attachid>
            <date>2015-03-04 18:04:04 -0800</date>
            <delta_ts>2015-03-05 11:31:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142293-20150304180345.patch</filename>
            <type>text/plain</type>
            <size>97123</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTA1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE1LTAzLTA0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgQXhpc1Njcm9sbFNu
YXBBbmltYXRvciBsb2dpYyB0byBTY3JvbGxDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyOTMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIwMDM5ODY3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbi4KKworICAgICAgICBNb3ZlIHRoZSBhbmltYXRp
b24gbG9naWMgb3V0IG9mICdBeGlzU2Nyb2xsU25hcEFuaW1hdG9yJyBpbnRvICdTY3JvbGxDb250
cm9sbGVyJy4gUmVuYW1lIHRoZSByZW1haW5pbmcKKyAgICAgICAgYml0cyBvZiAnQXhpc1Njcm9s
bFNuYXBBbmltYXRvcicgYXMgJ1Njcm9sbFNuYXBBbmltYXRvclN0YXRlJy4gUmVtb3ZlIGEgbnVt
YmVyIG9mIGRlbGVnYXRlIG1ldGhvZHMgcmVxdWlyZWQKKyAgICAgICAgYnkgJ0F4aXNTY3JvbGxT
bmFwQW5pbWF0b3JDbGllbnQnIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgICAgICAg
QWxzbywgYnJlYWsgdXAgc29tZSBvZiB0aGUgU2Nyb2xsIFNuYXAgUG9pbnQgbWF0aCB0byBiZSBh
IGxpdHRsZSBlYXNpZXIgdG8gdW5kZXJzdGFuZC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogUmVuYW1lICdwbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBB
bmltYXRvci57aCxtbX0nIC0+ICdwbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5oJworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlTWFjLmg6IE1hcmsgJ3Njcm9sbE9mZnNldE9uQXhpcycgYXMgY29uc3QuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
TWFjOjpzY3JvbGxPZmZzZXRPbkF4aXMpOiBNYWtlICdjb25zdCcKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsT2Zmc2V0T25BeGlzKTogTWFrZSAnY29uc3QnCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVy
Lmg6IE5vIGxvbmdlciBzdWJjbGFzcyBmcm9tIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQu
CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNjcm9sbFNuYXBQb2ludFN0YXRlKTogQWRkZWQg
YWNjZXNzb3JzIChjb25zdCBhbmQgbm9uLWNvbnN0KSBmb3IgdGhlIGluZGl2aWR1YWwKKyAgICAg
ICAgU2Nyb2xsIFNuYXAgU3RhdGUgb2YgZWFjaCBheGlzLgorICAgICAgICAoV2ViQ29yZTo6dG9X
aGVlbEV2ZW50U3RhdHVzKTogTW92ZWQgZnJvbSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3Jv
bGxTbmFwT25BeGlzKTogQWRkZWQgaGVscGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIHNuYXAg
d2hlZWwgaGFuZGxlciBjb2RlCisgICAgICAgIGZyb20gQXhpc1Njcm9sbFNuYXBBbmltYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNob3VsZE92ZXJyaWRlV2hlZWxF
dmVudCk6IE1vdmVkIGZyb20gQXhpc1Njcm9sbFNuYXBBbmltYXRvci4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbENvbnRyb2xsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCk6IFVw
ZGF0ZSB0byB1c2UgbmV3IG1ldGhvZHMgbW92ZWQgZnJvbSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsQW5pbWF0
b3JzQW5kVGltZXJzKTogVXBkYXRlIGZvciBuZXcgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUgY2xh
c3MuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFw
UG9pbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzdGFy
dFNjcm9sbFNuYXBUaW1lcik6IENhbGwgY2xpZW50IChkZWxlZ2F0ZSkgbWV0aG9kLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9sbFNuYXBUaW1lcik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aG9yaXpvbnRhbFNjcm9sbFNu
YXBUaW1lckZpcmVkKTogQ2FsbCBuZXcgJ3Njcm9sbFNuYXBBbmltYXRpb25VcGRhdGUnIG1ldGhv
ZCBwYXNzaW5nIHRoZQorICAgICAgICBjb3JyZWN0IGF4aXMgdG8gYW5pbWF0ZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNjcm9sbFNuYXBB
bmltYXRpb25VcGRhdGUpOiBNb3ZlZCBmcm9tIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuCisgICAg
ICAgIChXZWJDb3JlOjpwcm9qZWN0ZWRJbmVydGlhbFNjcm9sbERpc3RhbmNlKTogTW92ZWQgZnJv
bSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjplbmRTY3JvbGxTbmFwQW5pbWF0aW9u
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzbmFwUHJvZ3Jlc3MpOiBDcmVhdGVkIGEgbmV3
IGZ1bmN0aW9uIGZvciB0aGlzIGNhbGN1bGF0aW9uIHRvIG1ha2UgcmVhc29uaW5nIGFib3V0IHRo
ZSAnY29tcHV0ZVNuYXBEZWx0YScgYW5kCisgICAgICAgICdjb21wdXRlR2xpZGVEZWx0YScgZWFz
aWVyLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFNuYXBNYWduaXR1ZGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmNvbXB1dGVTbmFwRGVsdGEpOiBNb3Zl
ZCBmcm9tIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuCisgICAgICAgIChXZWJDb3JlOjpzbmFwR2xp
ZGUpOiBDcmVhdGVkIGEgbmV3IGZ1bmN0aW9uIGZvciB0aGlzIGNhbGN1bGF0aW9uIHRvIG1ha2Ug
cmVhc29uaW5nIGFib3V0IHRoZSAnY29tcHV0ZUdsaWRlRGVsdGEnIGVhc2llci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmNvbXB1dGVHbGlkZURlbHRhKTogTW92ZWQgZnJv
bSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlcjo6c2Nyb2xsT2Zmc2V0T25BeGlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbENvbnRyb2xsZXI6OmltbWVkaWF0ZVNjcm9sbE9uQXhpcyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaDogQ29waWVkIGZyb20g
cGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaC4KKyAgICAgICAgKFdlYkNvcmU6
OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQ6On5BeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xp
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbTogQ29waWVkIGZyb20gcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0
b3IubW0uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6U2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGU6OnB1c2hJbml0aWFsV2hlZWxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZTo6YXZlcmFnZUluaXRpYWxXaGVlbERlbHRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpjbGVhckluaXRpYWxXaGVlbERlbHRhV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2hlZWxFdmVudFN0YXR1cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpwcm9qZWN0ZWRJbmVydGlhbFNjcm9sbERpc3RhbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNTY3JvbGxT
bmFwQW5pbWF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBB
bmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6c2Nyb2xsU25hcEFu
aW1hdGlvblVwZGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6ZW5kU2Nyb2xsU25hcEFuaW1hdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjb21w
dXRlU25hcERlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OmNvbXB1dGVHbGlkZURlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6cHVzaEluaXRp
YWxXaGVlbERlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OmF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjbGVhckluaXRpYWxXaGVlbERlbHRhV2lu
ZG93KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmlt
YXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlvbik6IFJl
bW92ZWQuCisKIDIwMTUtMDMtMDQgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCiAgICAgICAgIDxhdHRhY2htZW50PiBpY29ucyBhcmUgbG93LXJlc29sdXRpb24g
d2hlbiB0cmFuc2Zvcm1lZCBvciB1bmRlciBwYWdlIHNjYWxlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODEw
MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTYzMjYsOCArNjMyNiw4IEBACiAJCUY0MkZGQjQ2MTk4NEI3MTYw
MEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0MkZGQjQ1MTk4NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQu
aCAqLzsgfTsKIAkJRjQ1QzIzMUQxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDVDMjMxQjE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLzsg
fTsKIAkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1QzIzMUMx
OTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUY0Nzg3NTU0MTk5ODNBRkYwMDI0
QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDc4NzU1MjE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gKi87
IH07CisJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1
NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQ3ODc1NTUxOTk4M0FG
RjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8q
IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tICovOyB9OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0
ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVT
Y3JvbGxTbmFwUG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRjQ3QTVFM0YxOTVCOEU0ODAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBv
aW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDdBNUUzQTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsg
fTsKIAkJRjUwNjY0RjcxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUy
REMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzg5OCw4ICsxMzg5
OCw4IEBACiAJCUY0MkZGQjQ1MTk4NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVuZ3RoUmVwZWF0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xs
U25hcE9mZnNldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1
QzIzMUMxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhp
c1Njcm9sbFNuYXBBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGNDc4
NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4
NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ3QTVFM0Ex
OTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwOyBwYXRo
ID0gc3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZVNjcm9sbFNuYXBQb2lu
dHMuaDsgcGF0aCA9IHN0eWxlL1N0eWxlU2Nyb2xsU25hcFBvaW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNTA2NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUNvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1NzMsOCArMTY1NzMsNiBA
QAogCQk2NTgyQTE0ODA5OTk5RDZDMDBCRUVCNkQgLyogbWFjICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlGNDc4NzU1MjE5OTgzQUZGMDAyNEEyODcgLyog
QXhpc1Njcm9sbFNuYXBBbmltYXRvci5oICovLAotCQkJCUY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4
NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tICovLAogCQkJCTY1QTY0MEYwMDUzM0JCMUYw
MDg1RTc3NyAvKiBCbG9ja0V4Y2VwdGlvbnMuaCAqLywKIAkJCQk2NUY4MDY5NzA1NEQ5Rjg2MDA4
QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovLAogCQkJCTI5MTlBMUVBMTZCMzM3ODkwMDc4
NzIxMyAvKiBDb250ZW50RmlsdGVyTWFjLm1tICovLApAQCAtMTg3MTQsNiArMTg3MTIsOCBAQAog
CQlBNUM5NzRDRTExNDg1RkRBMDA2NkYyQUIgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBT
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oICovLAorCQkJCUY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4
NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbSAqLywKIAkJCQlBMTQwOTBGQTFBQTUxRTFE
MDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0gKi8sCiAJCQkJ
NUQ4QzREQkQxNDI4MjIyQzAwMjZDRTcyIC8qIERpc3BsYXlTbGVlcERpc2FibGVyQ29jb2EuY3Bw
ICovLAogCQkJCTVEOEM0REJFMTQyODIyMkMwMDI2Q0U3MiAvKiBEaXNwbGF5U2xlZXBEaXNhYmxl
ckNvY29hLmggKi8sCkBAIC0yMzYxNSw3ICsyMzYxNSw3IEBACiAJCQkJMDcwMzYzRTQxODFBMUNE
QzAwQzA3NEE1IC8qIEFWTWVkaWFDYXB0dXJlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDMzNkY2MjE3RjlGNjQ3MDBERERDRDAgLyogQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDcwMzYzRTYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0
dXJlU291cmNlLmggaW4gSGVhZGVycyAqLywKLQkJCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcg
LyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ3ODc1NTQx
OTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUE4MTIzODBGQkI5QzFEMDA1MTAyOTMgLyogQVhPYmpl
Y3RDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NDFEMEYwQjA3MjU5QTAwRUQ0NDJDIC8q
IEJhY2tGb3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI3MzUzLDcgKzI3MzUzLDcg
QEAKIAkJCQkwNzAzNjNFNTE4MUExQ0RDMDBDMDc0QTUgLyogQVZNZWRpYUNhcHR1cmVTb3VyY2Uu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDMzNkY2MTE3RjlGNjQ3MDBERERDRDAgLyogQVZUcmFj
a1ByaXZhdGVBVkZPYmpDSW1wbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3MDM2M0U3MTgxQTFD
REMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJRjQ3ODc1NTUxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ1QzIzMUQxOTk1QjczQjAwQTZF
MkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1
N0FDRjFBNTA3MkREMDA4NzZGOTggLyogQVhPYmplY3RDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBQUE3MjhGOTE2RDFEOEJDMDBEM0JCQzYgLyogQVhPYmplY3RDYWNoZUlPUy5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yy5oCShyZXZpc2lvbiAxODEwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0FscmVhZHlQaW5uZWRJbkRpcmVj
dGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxFdmVudEF4aXMp
OwogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotICAgIExh
eW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7Cisg
ICAgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMs
IGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTgxMDAxKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIGxvZ1doZWVs
RXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKHVuCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKSAmJiBQTEFURk9STShNQUMpCi1MYXlvdXRVbml0IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWM6OnNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykKK0xh
eW91dFVuaXQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xsT2Zmc2V0
T25BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAogewogICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIGF4aXMg
PT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1
cnJlbnRQb3NpdGlvbi55KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODEwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVTY3JvbGxBbmltYXRvCiAgICAgbV9zY3JvbGxDb250
cm9sbGVyLnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycyhtX3Njcm9sbGFibGVBcmVhKTsK
IH0KIAotTGF5b3V0VW5pdCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9s
bEV2ZW50QXhpcyBheGlzKQorTGF5b3V0VW5pdCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsT2Zmc2V0
T25BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAogewogICAgIHJldHVybiBheGlzID09
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQ
b3NZOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShy
ZXZpc2lvbiAxODEwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKICAgICBib29sIHByb2Nlc3NXaGVl
bEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKICAgICB2b2lk
IHVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwotICAgIExheW91dFVuaXQgc2Nyb2xs
T2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7CisgICAgTGF5b3V0VW5pdCBz
Y3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdCBvdmVycmlkZTsKICAgICB2
b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBv
dmVycmlkZTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
Y3JvbGxDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODEwMDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiAjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgiCisjaW5j
bHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOwogCiAjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkgJiYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBz
Y3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxv
YXQgZGVsdGEpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoU2Ny
b2xsRXZlbnRBeGlzKQogICAgIHsKQEAgLTkxLDExICs5MSw3IEBAIHB1YmxpYzoKICNlbmRpZgog
fTsKIAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1BQykKLWNsYXNz
IFNjcm9sbENvbnRyb2xsZXIgOiBwdWJsaWMgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCB7
Ci0jZWxzZQogY2xhc3MgU2Nyb2xsQ29udHJvbGxlciB7Ci0jZW5kaWYKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTY3JvbGxDb250cm9sbGVyKTsKIAogcHVibGljOgpAQCAtMTIyLDExICsxMTgs
MjMgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShN
QUMpCiAgICAgdm9pZCBob3Jpem9udGFsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKICAgICB2b2lk
IHZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHN0YXJ0U2Nyb2xsU25h
cFRpbWVyKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wU2Nyb2xsU25h
cFRpbWVyKFNjcm9sbEV2ZW50QXhpcykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGFydFNjcm9sbFNu
YXBUaW1lcihTY3JvbGxFdmVudEF4aXMpOworICAgIHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcihT
Y3JvbGxFdmVudEF4aXMpOworCisgICAgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Ny
b2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xs
U25hcE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwor
ICAgIGJvb2wgc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KFNjcm9sbEV2ZW50QXhpcywgY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Q7CisKKyAgICB2b2lkIGJlZ2luU2Nyb2xsU25hcEFu
aW1hdGlvbihTY3JvbGxFdmVudEF4aXMsIFNjcm9sbFNuYXBTdGF0ZSk7CisgICAgdm9pZCBzY3Jv
bGxTbmFwQW5pbWF0aW9uVXBkYXRlKFNjcm9sbEV2ZW50QXhpcyk7CisgICAgdm9pZCBlbmRTY3Jv
bGxTbmFwQW5pbWF0aW9uKFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsU25hcFN0YXRlKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhTY3JvbGxFdmVudEF4aXMsIGJvb2wpOwor
ICAgIGZsb2F0IGNvbXB1dGVTbmFwRGVsdGEoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICBm
bG9hdCBjb21wdXRlR2xpZGVEZWx0YShTY3JvbGxFdmVudEF4aXMpIGNvbnN0OwogCi0gICAgTGF5
b3V0VW5pdCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRh
KSBvdmVycmlkZTsKKyAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc2Nyb2xsU25hcFBvaW50
U3RhdGUoU2Nyb2xsRXZlbnRBeGlzKTsKKyAgICBjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZSYgc2Nyb2xsU25hcFBvaW50U3RhdGUoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKICNlbmRpZgog
CiAgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CkBAIC0xNDUsOCArMTUzLDgg
QEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRGT1JNKE1B
QykKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjb25zb2xpZGF0ZSBib3RoIHRpbWVycyBp
bnRvIG9uZSB2YXJpYWJsZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QXhpc1Njcm9sbFNuYXBBbmlt
YXRvcj4gbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBeGlzU2Nyb2xsU25hcEFuaW1hdG9yPiBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZT4gbV9ob3Jpem9udGFs
U2Nyb2xsU25hcFN0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZT4gbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZTsKICAgICBSdW5Mb29wOjpUaW1lcjxTY3Jv
bGxDb250cm9sbGVyPiBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXI7CiAgICAgUnVuTG9vcDo6
VGltZXI8U2Nyb2xsQ29udHJvbGxlcj4gbV92ZXJ0aWNhbFNjcm9sbFNuYXBUaW1lcjsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLm1tCShyZXZpc2lvbiAxODEwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0j
aW5jbHVkZSAiQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBB
bmltYXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNlbmRpZgogCkBA
IC02OCw2ICs2OCwzMSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5n
CiBzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8g
PSAxOwogc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJl
Zm9yZVN0cmV0Y2ggPSAxMDsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYmIFBMQVRG
T1JNKE1BQykKK3N0YXRpYyBjb25zdCBmbG9hdCBzbmFwTWFnbml0dWRlTWF4ID0gMjU7CitzdGF0
aWMgY29uc3QgZmxvYXQgc25hcE1hZ25pdHVkZU1pbiA9IDU7CitzdGF0aWMgY29uc3QgZmxvYXQg
c25hcFRocmVzaG9sZEhpZ2ggPSAxMDAwOworc3RhdGljIGNvbnN0IGZsb2F0IHNuYXBUaHJlc2hv
bGRMb3cgPSA1MDsKKworc3RhdGljIGNvbnN0IGZsb2F0IGluZXJ0aWFsU2Nyb2xsUHJlZGljdGlv
bkZhY3RvciA9IDE2Ljc7CitzdGF0aWMgY29uc3QgZmxvYXQgaW5pdGlhbFRvRmluYWxNb21lbnR1
bUZhY3RvciA9IDEuMCAvIDQwLjA7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnbGlkZUJvb3N0TXVs
dGlwbGllciA9IDMuNTsKKworc3RhdGljIGNvbnN0IGZsb2F0IG1heFRhcmdldFdoZWVsRGVsdGEg
PSA3Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pblRhcmdldFdoZWVsRGVsdGEgPSAzLjU7CisjZW5k
aWYKKworZW51bSBjbGFzcyBXaGVlbEV2ZW50U3RhdHVzIHsKKyAgICBVc2VyU2Nyb2xsQmVnaW4s
CisgICAgVXNlclNjcm9sbGluZywKKyAgICBVc2VyU2Nyb2xsRW5kLAorICAgIEluZXJ0aWFsU2Ny
b2xsQmVnaW4sCisgICAgSW5lcnRpYWxTY3JvbGxpbmcsCisgICAgSW5lcnRpYWxTY3JvbGxFbmQs
CisgICAgVW5rbm93bgorfTsKKwogc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0
YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0eSwgZmxvYXQgZWxh
cHNlZFRpbWUpCiB7CiAgICAgcmV0dXJuIHdrTlNFbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoaW5p
dGlhbFBvc2l0aW9uLCBpbml0aWFsVmVsb2NpdHksIGVsYXBzZWRUaW1lKTsKQEAgLTQyMywxNiAr
NDQ4LDEyMyBAQCBib29sIFNjcm9sbENvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJCiB9CiAK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCitTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZSYgU2Nyb2xsQ29udHJvbGxlcjo6c2Nyb2xsU25hcFBvaW50U3RhdGUoU2Ny
b2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgQVNTRVJUKGF4aXMgIT0gU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsIHx8IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBTdGF0ZSk7CisgICAgQVNTRVJU
KGF4aXMgIT0gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCB8fCBtX3ZlcnRpY2FsU2Nyb2xsU25h
cFN0YXRlKTsKKworICAgIHJldHVybiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwpID8gKm1faG9yaXpvbnRhbFNjcm9sbFNuYXBTdGF0ZSA6ICptX3ZlcnRpY2FsU2Nyb2xsU25h
cFN0YXRlOworfQorCitjb25zdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgU2Nyb2xsQ29udHJv
bGxlcjo6c2Nyb2xsU25hcFBvaW50U3RhdGUoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGF4aXMgIT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsIHx8IG1faG9y
aXpvbnRhbFNjcm9sbFNuYXBTdGF0ZSk7CisgICAgQVNTRVJUKGF4aXMgIT0gU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCB8fCBtX3ZlcnRpY2FsU2Nyb2xsU25hcFN0YXRlKTsKKyAgICAKKyAgICBy
ZXR1cm4gKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA/ICptX2hvcml6b250
YWxTY3JvbGxTbmFwU3RhdGUgOiAqbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZTsKK30KKworc3Rh
dGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFz
ZSkKK3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB7Cisg
ICAgICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6
SW5lcnRpYWxTY3JvbGxCZWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVu
dFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVl
bEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbEVuZDsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3du
OworICAgICAgICB9CisgICAgfQorICAgIGlmIChtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlTm9uZSkgeworICAgICAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgICAgIGNh
c2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjoKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZU1heUJlZ2luOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxCZWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVu
dFN0YXR1czo6VXNlclNjcm9sbGluZzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQ2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6
OlVzZXJTY3JvbGxFbmQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKK30KKwordm9pZCBTY3Jv
bGxDb250cm9sbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXBPbkF4aXMoU2Nyb2xs
RXZlbnRBeGlzIGF4aXMsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAg
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRl
KGF4aXMpOworCisgICAgZmxvYXQgd2hlZWxEZWx0YSA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsID8gLWV2ZW50LmRlbHRhWCgpIDogLWV2ZW50LmRlbHRhWSgpOworICAgIFdo
ZWVsRXZlbnRTdGF0dXMgd2hlZWxTdGF0dXMgPSB0b1doZWVsRXZlbnRTdGF0dXMoZXZlbnQucGhh
c2UoKSwgZXZlbnQubW9tZW50dW1QaGFzZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHdoZWVsU3Rh
dHVzKSB7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW46CisgICAg
Y2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOgorICAgICAgICBlbmRTY3JvbGxT
bmFwQW5pbWF0aW9uKGF4aXMsIFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVz
ZXJTY3JvbGxFbmQ6CisgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihheGlzLCBTY3Jv
bGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjoKKyAgICAgICAgLy8gQmVn
aW4gdHJhY2tpbmcgd2hlZWwgZGVsdGFzIGZvciBnbGlkZSBwcmVkaWN0aW9uLgorICAgICAgICBl
bmRTY3JvbGxTbmFwQW5pbWF0aW9uKGF4aXMsIFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0
aW9uKTsKKyAgICAgICAgc25hcFN0YXRlLnB1c2hJbml0aWFsV2hlZWxEZWx0YSh3aGVlbERlbHRh
KTsKKyAgICAgICAgc25hcFN0YXRlLm1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgPSBt
X2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKGF4aXMpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc6Cisg
ICAgICAgIC8vIFRoaXMgY2hlY2sgZm9yIERlc3RpbmF0aW9uUmVhY2hlZCBlbnN1cmVzIHRoYXQg
d2UgZG9uJ3QgcmVjZWl2ZSBhbm90aGVyIHNldCBvZiBtb21lbnR1bSBldmVudHMgYWZ0ZXIgZW5k
aW5nIHRoZSBsYXN0IGdsaWRlLgorICAgICAgICBpZiAoc25hcFN0YXRlLm1fY3VycmVudFN0YXRl
ICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyAmJiBzbmFwU3RhdGUubV9jdXJyZW50U3RhdGUg
IT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpIHsKKyAgICAgICAgICAgIGlm
IChzbmFwU3RhdGUubV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPCBzbmFwU3RhdGUud2hlZWxEZWx0
YVdpbmRvd1NpemUpCisgICAgICAgICAgICAgICAgc25hcFN0YXRlLnB1c2hJbml0aWFsV2hlZWxE
ZWx0YSh3aGVlbERlbHRhKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNuYXBTdGF0
ZS5tX251bVdoZWVsRGVsdGFzVHJhY2tlZCA9PSBzbmFwU3RhdGUud2hlZWxEZWx0YVdpbmRvd1Np
emUpCisgICAgICAgICAgICAgICAgYmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKGF4aXMsIFNjcm9s
bFNuYXBTdGF0ZTo6R2xpZGluZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ6CisgICAgICAg
IGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihheGlzLCBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5n
KTsKKyAgICAgICAgc25hcFN0YXRlLmNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKKyAg
ICAgICAgc25hcFN0YXRlLm1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50ID0gZmFsc2U7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KSBjb25zdAor
eworICAgIGNvbnN0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSBzY3JvbGxT
bmFwUG9pbnRTdGF0ZShheGlzKTsKKworICAgIHJldHVybiBzbmFwU3RhdGUubV9zaG91bGRPdmVy
cmlkZVdoZWVsRXZlbnQgJiYgdG9XaGVlbEV2ZW50U3RhdHVzKGV2ZW50LnBoYXNlKCksIGV2ZW50
Lm1vbWVudHVtUGhhc2UoKSkgPT0gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc7
Cit9CisKIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKLSAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25h
cEFuaW1hdG9yLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvci0+c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpKQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcFN0YXRlKSB7CisgICAgICAgIHBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcE9uQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgaWYgKHNob3VsZE92ZXJyaWRlV2hlZWxFdmVudChT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB3aGVlbEV2ZW50KSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbFNuYXBBbmltYXRvcikg
ewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPmhhbmRsZVdoZWVsRXZl
bnQod2hlZWxFdmVudCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0
b3ItPnNob3VsZE92ZXJyaWRlV2hlZWxFdmVudCh3aGVlbEV2ZW50KSkKKyAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsU25hcFN0YXRlKSB7CisgICAgICAgIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Ny
b2xsU25hcE9uQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHdoZWVsRXZlbnQpOwor
ICAgICAgICBpZiAoc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCwgd2hlZWxFdmVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC00NDMsNTkgKzU3NSwyMjMgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3Jv
bGxBbmltYQogewogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHNjcm9sbCBzbmFwIGFuaW1hdG9y
cyBhcmUgcmVjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZSBzbmFwIG9mZnNldHMgYWxvbmUgY2FuIGJl
IHVwZGF0ZWQuCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFwT2Zmc2V0cygp
KQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IgPSBzdGQ6Om1ha2VfdW5p
cXVlPEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I+KHRoaXMsICpzY3JvbGxhYmxlQXJlYS5ob3Jpem9u
dGFsU25hcE9mZnNldHMoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKLSAgICBlbHNl
IGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3IpCi0gICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbFNuYXBBbmltYXRvciA9IG51bGxwdHI7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bFNuYXBTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+KFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgKnNjcm9sbGFibGVBcmVhLmhvcml6b250YWxTbmFw
T2Zmc2V0cygpKTsKKyAgICBlbHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7CiAKICAgICBpZiAo
c2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpKQotICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yPih0aGlzLCAqc2Nyb2xsYWJsZUFyZWEudmVydGljYWxTbmFwT2Zmc2V0cygpLCBTY3JvbGxF
dmVudEF4aXM6OlZlcnRpY2FsKTsKLSAgICBlbHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xsU25hcEFu
aW1hdG9yKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsU25hcEFuaW1hdG9yID0gbnVsbHB0cjsK
KyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGU+KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsICpzY3JvbGxh
YmxlQXJlYS52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpOworICAgIGVsc2UgaWYgKG1fdmVydGljYWxT
Y3JvbGxTbmFwU3RhdGUpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGUgPSBudWxs
cHRyOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMo
U2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcFBvaW50
cykKIHsKICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBzY3JvbGwgc25hcCBhbmltYXRvcnMgYXJl
IHJlY3JlYXRlZCBldmVuIHRob3VnaCB0aGUgc25hcCBvZmZzZXRzIGFsb25lIGNhbiBiZSB1cGRh
dGVkLgogICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKLSAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yPih0aGlzLCBzbmFwUG9pbnRzLCBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPihTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwsIHNuYXBQb2ludHMpOwogCiAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCkKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbFNuYXBBbmltYXRvciA9IHN0ZDo6bWFr
ZV91bmlxdWU8QXhpc1Njcm9sbFNuYXBBbmltYXRvcj4odGhpcywgc25hcFBvaW50cywgU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbFNuYXBBbmltYXRvclN0YXRlPihTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCBzbmFwUG9pbnRzKTsKIH0KIAogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpz
dGFydFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKIHsKICAgICBSdW5Mb29w
OjpUaW1lcjxTY3JvbGxDb250cm9sbGVyPiYgc2Nyb2xsU25hcFRpbWVyID0gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgOiBt
X3ZlcnRpY2FsU2Nyb2xsU25hcFRpbWVyOwotICAgIGlmICghc2Nyb2xsU25hcFRpbWVyLmlzQWN0
aXZlKCkpCisgICAgaWYgKCFzY3JvbGxTbmFwVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBt
X2NsaWVudC0+c3RhcnRTY3JvbGxTbmFwVGltZXIoYXhpcyk7CiAgICAgICAgIHNjcm9sbFNuYXBU
aW1lci5zdGFydFJlcGVhdGluZygxLjAgLyA2MC4wKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6c3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMgYXhpcykKIHsK
KyAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBUaW1lcihheGlzKTsKICAgICBSdW5Mb29wOjpU
aW1lcjxTY3JvbGxDb250cm9sbGVyPiYgc2Nyb2xsU25hcFRpbWVyID0gYXhpcyA9PSBTY3JvbGxF
dmVudEF4aXM6Okhvcml6b250YWwgPyBtX2hvcml6b250YWxTY3JvbGxTbmFwVGltZXIgOiBtX3Zl
cnRpY2FsU2Nyb2xsU25hcFRpbWVyOwogICAgIHNjcm9sbFNuYXBUaW1lci5zdG9wKCk7CiB9CiAK
IHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6aG9yaXpvbnRhbFNjcm9sbFNuYXBUaW1lckZpcmVkKCkK
IHsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsU25hcEFuaW1hdG9yKQotICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxTbmFwQW5pbWF0b3ItPnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKTsK
KyAgICBzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCk7CiB9CiAKIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dmVydGljYWxTY3JvbGxTbmFwVGltZXJG
aXJlZCgpCiB7Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3IpCi0gICAgICAg
IG1fdmVydGljYWxTY3JvbGxTbmFwQW5pbWF0b3ItPnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUo
KTsKKyAgICBzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwpOwogfQogCi1MYXlvdXRVbml0IFNjcm9sbENvbnRyb2xsZXI6OnNjcm9sbE9mZnNldE9uQXhp
cyhTY3JvbGxFdmVudEF4aXMgYXhpcykKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2Nyb2xsU25h
cEFuaW1hdGlvblVwZGF0ZShTY3JvbGxFdmVudEF4aXMgYXhpcykKIHsKLSAgICByZXR1cm4gbV9j
bGllbnQtPnNjcm9sbE9mZnNldE9uQXhpcyhheGlzKTsKKyAgICBpZiAoYXhpcyA9PSBTY3JvbGxF
dmVudEF4aXM6Okhvcml6b250YWwgJiYgIW1faG9yaXpvbnRhbFNjcm9sbFNuYXBTdGF0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCAmJiAhbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRl
KGF4aXMpOworICAgIGlmIChzbmFwU3RhdGUubV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NF
UlQoc25hcFN0YXRlLm1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8
fCBzbmFwU3RhdGUubV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7
CisgICAgZmxvYXQgZGVsdGEgPSBzbmFwU3RhdGUubV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25h
cFN0YXRlOjpTbmFwcGluZyA/IGNvbXB1dGVTbmFwRGVsdGEoYXhpcykgOiBjb21wdXRlR2xpZGVE
ZWx0YShheGlzKTsKKyAgICBpZiAoZGVsdGEpCisgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVT
Y3JvbGxPbkF4aXMoYXhpcywgZGVsdGEpOworICAgIGVsc2UKKyAgICAgICAgZW5kU2Nyb2xsU25h
cEFuaW1hdGlvbihheGlzLCBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hlZCk7CiB9
CiAKLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBmbG9hdCBkZWx0YSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcHJvamVjdGVk
SW5lcnRpYWxTY3JvbGxEaXN0YW5jZShmbG9hdCBpbml0aWFsV2hlZWxEZWx0YSkKIHsKLSAgICBt
X2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xsT25BeGlzKGF4aXMsIGRlbHRhKTsKKyAgICAvLyBGSVhN
RTogRXhwZXJpbWVudHMgd2l0aCBpbmVydGlhbCBzY3JvbGxpbmcgc2hvdyBhIGZhaXJseSBjb25z
aXN0ZW50IGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBpbml0aWFsIHdoZWVsIGRlbHRhIGFu
ZCB0b3RhbCBkaXN0YW5jZSBzY3JvbGxlZC4KKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSdsbCB3
YW50IHRvIGZpbmQgYSBtb3JlIGFjY3VyYXRlIHdheSBvZiBpbmVydGlhbCBzY3JvbGwgcHJlZGlj
dGlvbi4KKyAgICByZXR1cm4gaW5lcnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yICogaW5pdGlh
bFdoZWVsRGVsdGE7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6aW5pdGlhbGl6ZUdsaWRl
UGFyYW1ldGVycyhTY3JvbGxFdmVudEF4aXMgYXhpcywgYm9vbCBzaG91bGRJbmNyZWFzZUluaXRp
YWxXaGVlbERlbHRhKQoreworICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUg
PSBzY3JvbGxTbmFwUG9pbnRTdGF0ZShheGlzKTsKKyAgICAKKyAgICAvLyBGSVhNRTogR2xpZGUg
Ym9vc3QgaXMgYSBoYWNreSB3YXkgdG8gc3BlZWQgdXAgbmF0dXJhbCBzY3JvbGxpbmcgdmVsb2Np
dHkuIFdlIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBhY2NvbXBsaXNoIHRoaXMuCisgICAg
aWYgKHNob3VsZEluY3JlYXNlSW5pdGlhbFdoZWVsRGVsdGEpCisgICAgICAgIHNuYXBTdGF0ZS5t
X2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKj0gZ2xpZGVCb29zdE11bHRpcGxpZXI7CisgICAgCisg
ICAgLy8gRklYTUU6IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRldGVybWluZSBhIGdv
b2QgdGFyZ2V0IGRlbHRhIHRoYW4gbXVsdGlwbHlpbmcgYnkgYSBmYWN0b3IgYW5kIGNsYW1waW5n
IHRvIG1pbi9tYXggdmFsdWVzLgorICAgIGZsb2F0IHRhcmdldEZpbmFsV2hlZWxEZWx0YSA9IGlu
aXRpYWxUb0ZpbmFsTW9tZW50dW1GYWN0b3IgKiAoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hl
ZWxEZWx0YSA8IDAgPyAtc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA6IHNuYXBT
dGF0ZS5tX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEpOworICAgIHRhcmdldEZpbmFsV2hlZWxEZWx0
YSA9IChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhID4gMCA/IDEgOiAtMSkgKiBz
dGQ6Om1pbihzdGQ6Om1heCh0YXJnZXRGaW5hbFdoZWVsRGVsdGEsIG1pblRhcmdldFdoZWVsRGVs
dGEpLCBtYXhUYXJnZXRXaGVlbERlbHRhKTsKKyAgICBzbmFwU3RhdGUubV9nbGlkZU1hZ25pdHVk
ZSA9IChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhICsgdGFyZ2V0RmluYWxXaGVl
bERlbHRhKSAvIDI7CisgICAgc25hcFN0YXRlLm1fZ2xpZGVQaGFzZVNoaWZ0ID0gYWNvcygoc25h
cFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAtIHRhcmdldEZpbmFsV2hlZWxEZWx0YSkg
LyAoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdldEZpbmFsV2hlZWxE
ZWx0YSkpOworfQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmJlZ2luU2Nyb2xsU25hcEFuaW1h
dGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgU2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRlKQorewor
ICAgIEFTU0VSVChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbmV3U3Rh
dGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgCisgICAgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRlKGF4aXMpOworCisg
ICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKGF4aXMp
OworICAgIGZsb2F0IGluaXRpYWxXaGVlbERlbHRhID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpHbGlkaW5nID8gc25hcFN0YXRlLmF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIDogMDsK
KyAgICBMYXlvdXRVbml0IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUgPT0g
U2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gc25hcFN0YXRlLm1fYmVnaW5UcmFja2luZ1doZWVs
RGVsdGFPZmZzZXQgKyBMYXlvdXRVbml0KHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2Uo
aW5pdGlhbFdoZWVsRGVsdGEpKSA6IG9mZnNldDsKKyAgICBpZiAoc25hcFN0YXRlLm1fc25hcE9m
ZnNldHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9u
LCBzbmFwU3RhdGUubV9zbmFwT2Zmc2V0cy5maXJzdCgpKSwgc25hcFN0YXRlLm1fc25hcE9mZnNl
dHMubGFzdCgpKTsKKyAgICBzbmFwU3RhdGUubV9pbml0aWFsT2Zmc2V0ID0gb2Zmc2V0OworICAg
IHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQs
IGZsb2F0PihzbmFwU3RhdGUubV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRp
b24sIGluaXRpYWxXaGVlbERlbHRhKTsKKyAgICBpZiAoc25hcFN0YXRlLm1faW5pdGlhbE9mZnNl
dCA9PSBzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBzbmFwU3RhdGUubV9jdXJyZW50U3RhdGUgPSBuZXdTdGF0ZTsKKyAgICBpZiAobmV3U3RhdGUg
PT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKSB7CisgICAgICAgIHNuYXBTdGF0ZS5tX3Nob3Vs
ZE92ZXJyaWRlV2hlZWxFdmVudCA9IHRydWU7CisgICAgICAgIHNuYXBTdGF0ZS5tX2dsaWRlSW5p
dGlhbFdoZWVsRGVsdGEgPSBpbml0aWFsV2hlZWxEZWx0YTsKKyAgICAgICAgYm9vbCBnbGlkZVJl
cXVpcmVzQm9vc3Q7CisgICAgICAgIGlmIChpbml0aWFsV2hlZWxEZWx0YSA+IDApCisgICAgICAg
ICAgICBnbGlkZVJlcXVpcmVzQm9vc3QgPSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAtIG9m
ZnNldCA8IHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCAtIHByb2plY3RlZFNjcm9sbERlc3RpbmF0
aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnbGlkZVJlcXVpcmVzQm9vc3QgPSBvZmZz
ZXQgLSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA8IHByb2plY3RlZFNjcm9sbERlc3RpbmF0
aW9uIC0gc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0OworICAgICAgICAKKyAgICAgICAgaW5pdGlh
bGl6ZUdsaWRlUGFyYW1ldGVycyhheGlzLCBnbGlkZVJlcXVpcmVzQm9vc3QpOworICAgICAgICBz
bmFwU3RhdGUuY2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworICAgIH0KKyAgICBzdGFy
dFNjcm9sbFNuYXBUaW1lcihheGlzKTsKK30KKwordm9pZCBTY3JvbGxDb250cm9sbGVyOjplbmRT
Y3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBTY3JvbGxTbmFwU3RhdGUg
bmV3U3RhdGUpCit7CisgICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6RGVz
dGluYXRpb25SZWFjaGVkIHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVy
YWN0aW9uKTsKKworICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSBzY3Jv
bGxTbmFwUG9pbnRTdGF0ZShheGlzKTsKKworICAgIGlmIChzbmFwU3RhdGUubV9jdXJyZW50U3Rh
dGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKQorICAgICAgICBzbmFwU3RhdGUuY2xlYXJJ
bml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworICAgIAorICAgIHNuYXBTdGF0ZS5tX2N1cnJlbnRT
dGF0ZSA9IG5ld1N0YXRlOworICAgIHN0b3BTY3JvbGxTbmFwVGltZXIoYXhpcyk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgc25hcFByb2dyZXNzKGNvbnN0IExheW91dFVuaXQmIG9mZnNldCwg
Y29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSkKK3sKKyAgICBjb25zdCBm
bG9hdCBkaXN0YW5jZVRyYXZlbGVkID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldCAtIHNuYXBT
dGF0ZS5tX2luaXRpYWxPZmZzZXQpOworICAgIGNvbnN0IGZsb2F0IHRvdGFsRGlzdGFuY2UgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0IC0gc25hcFN0YXRlLm1f
aW5pdGlhbE9mZnNldCk7CisKKyAgICByZXR1cm4gZGlzdGFuY2VUcmF2ZWxlZCAvIHRvdGFsRGlz
dGFuY2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY2xhbXBlZFNuYXBNYWduaXR1ZGUoZmxv
YXQgdGhyZXNob2xkZWREaXN0YW5jZSkKK3sKKyAgICByZXR1cm4gc25hcE1hZ25pdHVkZU1pbiAr
IChzbmFwTWFnbml0dWRlTWF4IC0gc25hcE1hZ25pdHVkZU1pbikgKiAodGhyZXNob2xkZWREaXN0
YW5jZSAtIHNuYXBUaHJlc2hvbGRMb3cpIC8gKHNuYXBUaHJlc2hvbGRIaWdoIC0gc25hcFRocmVz
aG9sZExvdyk7Cit9CisKKy8vIENvbXB1dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xsIGJ5IHdoZW4g
cGVyZm9ybWluZyBhICJzbmFwIiBvcGVyYXRpb24sIGkuZS4gd2hlbiBhIHVzZXIgcmVsZWFzZXMg
dGhlIHRyYWNrcGFkIHdpdGhvdXQgZmxpY2tpbmcuIFRoZSBzbmFwIGRlbHRhCisvLyBpcyBhIGZ1
bmN0aW9uIG9mIHByb2dyZXNzIHQsIHdoZXJlIHQgaXMgZXF1YWwgdG8gRElTVEFOQ0VfVFJBVkVM
RUQgLyBUT1RBTF9ESVNUQU5DRSwgRElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3RhbmNlIGZy
b20gdGhlIGluaXRpYWxPZmZzZXQKKy8vIHRvIHRoZSBjdXJyZW50IG9mZnNldCwgYW5kIFRPVEFM
X0RJU1RBTkNFIGlzIHRoZSBkaXN0YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFyZ2V0T2Zm
c2V0LiBUaGUgc25hcHBpbmcgZXF1YXRpb24gaXMgYXMgZm9sbG93czoKKy8vIGRlbHRhKHQpID0g
TUFHTklUVURFICogc2luKFBJICogdCkuIE1BR05JVFVERSBpbmRpY2F0ZXMgdGhlIHRvcCBzcGVl
ZCByZWFjaGVkIG5lYXIgdGhlIG1pZGRsZSBvZiB0aGUgYW5pbWF0aW9uICh0ID0gMC41KSwgYW5k
IGlzIGEgbGluZWFyCisvLyByZWxhdGlvbnNoaXAgb2YgdGhlIGRpc3RhbmNlIHRyYXZlbGVkLCBj
bGFtcGVkIGJ5IGFyYml0cmFyeSBtaW4gYW5kIG1heCB2YWx1ZXMuCitmbG9hdCBTY3JvbGxDb250
cm9sbGVyOjpjb21wdXRlU25hcERlbHRhKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAorewor
ICAgIGNvbnN0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSBzY3JvbGxTbmFw
UG9pbnRTdGF0ZShheGlzKTsKKworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNj
cm9sbE9mZnNldE9uQXhpcyhheGlzKTsKKyAgICBib29sIGNhbkNvbXB1dGVTbmFwID0gIChzbmFw
U3RhdGUubV9pbml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBzbmFwU3RhdGUubV90
YXJnZXRPZmZzZXQpIHx8IChzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zm
c2V0IDw9IHNuYXBTdGF0ZS5tX2luaXRpYWxPZmZzZXQpOworICAgIGlmIChzbmFwU3RhdGUubV9j
dXJyZW50U3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyB8fCAhY2FuQ29tcHV0ZVNu
YXApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGZsb2F0IHByb2dyZXNzID0gc25hcFBy
b2dyZXNzKG9mZnNldCwgc25hcFN0YXRlKTsKKworICAgIC8vIFRocmVzaG9sZCB0aGUgZGlzdGFu
Y2UgYmVmb3JlIGNvbXB1dGluZyBtYWduaXR1ZGUsIHNvIG9ubHkgZGlzdGFuY2VzIHdpdGhpbiBh
IGNlcnRhaW4gcmFuZ2UgYXJlIGNvbnNpZGVyZWQuCisgICAgaW50IHNpZ24gPSBzbmFwU3RhdGUu
bV9pbml0aWFsT2Zmc2V0IDwgc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0ID8gMSA6IC0xOworICAg
IGZsb2F0IHRocmVzaG9sZGVkRGlzdGFuY2UgPSBzdGQ6Om1pbihzdGQ6Om1heDxmbG9hdD4oKHNu
YXBTdGF0ZS5tX3RhcmdldE9mZnNldCAtIHNuYXBTdGF0ZS5tX2luaXRpYWxPZmZzZXQpICogc2ln
biwgc25hcFRocmVzaG9sZExvdyksIHNuYXBUaHJlc2hvbGRIaWdoKTsKKworICAgIGZsb2F0IG1h
Z25pdHVkZSA9IGNsYW1wZWRTbmFwTWFnbml0dWRlKHRocmVzaG9sZGVkRGlzdGFuY2UpOworCisg
ICAgZmxvYXQgcmF3U25hcERlbHRhID0gc3RkOjptYXg8ZmxvYXQ+KDEsIG1hZ25pdHVkZSAqIHN0
ZDo6c2luKHBpRmxvYXQgKiBwcm9ncmVzcykpOworICAgIGlmICgoc25hcFN0YXRlLm1fdGFyZ2V0
T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCAtIHJhd1NuYXBEZWx0YSA8IHNuYXBTdGF0ZS5tX3Rh
cmdldE9mZnNldCkgfHwgKHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCA+IG9mZnNldCAmJiBvZmZz
ZXQgKyByYXdTbmFwRGVsdGEgPiBzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OworICAgIAorICAgIHJldHVy
biBzaWduICogcmF3U25hcERlbHRhOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHNuYXBHbGlk
ZShmbG9hdCBwcm9ncmVzcywgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNuYXBTdGF0
ZSkKK3sKKyAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBpbnZlc3RpZ2F0ZSB3aHkgLW1f
Z2xpZGVQaGFzZVNoaWZ0IHJlc3VsdHMgaW4gdGhlIGJlaGF2aW9yIHdlIHdhbnQuCisgICAgcmV0
dXJuIGNlaWwoc25hcFN0YXRlLm1fZ2xpZGVNYWduaXR1ZGUgKiAoMS4wZiArIHN0ZDo6Y29zKHBp
RmxvYXQgKiBwcm9ncmVzcyAtIHNuYXBTdGF0ZS5tX2dsaWRlUGhhc2VTaGlmdCkpKTsKK30KKwor
Ly8gQ29tcHV0ZXMgdGhlIGFtb3VudCB0byBzY3JvbGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEgImds
aWRlIiBvcGVyYXRpb24sIGkuZS4gd2hlbiBhIHVzZXIgcmVsZWFzZXMgdGhlIHRyYWNrcGFkIHdp
dGggYW4gaW5pdGlhbCB2ZWxvY2l0eS4gSGVyZSwKKy8vIHdlIHdhbnQgdGhlIHNjcm9sbCBvZmZz
ZXQgdG8gYW5pbWF0ZSBkaXJlY3RseSB0byB0aGUgc25hcCBwb2ludC4KKy8vCisvLyBUaGUgc25h
cCBkZWx0YSBpcyBhIGZ1bmN0aW9uIG9mIHByb2dyZXNzIHQsIHdoZXJlOiAoMSkgdCBpcyBlcXVh
bCB0byBESVNUQU5DRV9UUkFWRUxFRCAvIFRPVEFMX0RJU1RBTkNFLCAoMikgRElTVEFOQ0VfVFJB
VkVMRUQgaXMgdGhlIGRpc3RhbmNlCisvLyBmcm9tIHRoZSBpbml0aWFsT2Zmc2V0IHRvIHRoZSBj
dXJyZW50IG9mZnNldCwgYW5kICgzKSBUT1RBTF9ESVNUQU5DRSBpcyB0aGUgZGlzdGFuY2UgZnJv
bSBpbml0aWFsT2Zmc2V0IHRvIHRhcmdldE9mZnNldC4KKy8vCisvLyBUaGUgZ2VuZXJhbCBtb2Rl
bCBvZiBvdXIgZ2xpZGluZyBlcXVhdGlvbiBpcyBkZWx0YSh0KSA9IE1BR05JVFVERSAqICgxICsg
Y29zKFBJICogdCArIFBIQVNFX1NISUZUKSkuIFRoaXMgd2FzIGRldGVybWluZWQgYWZ0ZXIgZXhh
bWluaW5nIHRoZQorLy8gbW9tZW50dW0gdmVsb2NpdHkgY3VydmUgYXMgYSBmdW5jdGlvbiBvZiBw
cm9ncmVzcy4gVG8gY29tcHV0ZSBNQUdOSVRVREUgYW5kIFBIQVNFX1NISUZULCB3ZSB1c2UgaW5p
dGlhbCB2ZWxvY2l0eSBWMCBhbmQgdGhlIGZpbmFsIHZlbG9jaXR5IFZGLAorLy8gYm90aCBhcyB3
aGVlbCBkZWx0YXMgKHBpeGVscyBwZXIgdGltZXN0ZXApLiBWRiBzaG91bGQgYmUgYSBzbWFsbCB2
YWx1ZSAoPCAxMCkgY2hvc2VuIGJhc2VkIG9uIHRoZSBpbml0aWFsIHZlbG9jaXR5IGFuZCBUT1RB
TF9ESVNUQU5DRS4KKy8vIFdlIGFsc28gZW5mb3JjZSB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRz
IGZvciB0aGUgZ2xpZGluZyBlcXVhdGlvbjoKKy8vICAgMS4gZGVsdGEoMCkgPSBWMCwgc2luY2Ug
d2Ugd2FudCB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBvZiB0aGUgZ2xpZGluZyBhbmltYXRpb24gdG8g
bWF0Y2ggdGhlIHVzZXIncyBzY3JvbGwgdmVsb2NpdHkuIFRoZSBleGNlcHRpb24gdG8gdGhpcyBp
cworLy8gICAgICB3aGVuIHRoZSBnbGlkZSB2ZWxvY2l0eSBpcyBub3QgZW5vdWdoIHRvIG5hdHVy
YWxseSByZWFjaCB0aGUgbmV4dCBzbmFwIHBvaW50LCBhbmQgdGh1cyByZXF1aXJlcyBhIGJvb3N0
IChzZWUgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycykKKy8vICAgMi4gZGVsdGEoMSkgPSBWRiwg
c2luY2UgYXQgdD0xLCB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQgYW5kIHdlIHdhbnQgdGhl
IGxhc3Qgd2hlZWwgZGVsdGEgdG8gbWF0Y2ggdGhlIGZpbmFsIHZlbG9jaXR5IFZGLiBOb3RlIHRo
YXQgdGhpcworLy8gICAgICBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBmaW5hbCB2ZWxvY2l0
eSB3aWxsIGJlIGV4YWN0bHkgVkYuIEhvd2V2ZXIsIGFzc3VtaW5nIHRoYXQgdGhlIGluaXRpYWwg
dmVsb2NpdHkgaXMgbXVjaCBsZXNzIHRoYW4gVE9UQUxfRElTVEFOQ0UsCisvLyAgICAgIHRoZSBs
YXN0IHdoZWVsIGRlbHRhIHdpbGwgYmUgdmVyeSBjbG9zZSwgaWYgbm90IHRoZSBzYW1lLCBhcyBW
Ri4KKy8vIEZvciBNQUdOSVRVREUgPSAoVjAgKyBWRikgLyAyIGFuZCBQSEFTRV9TSElGVCA9IGFy
Y2NvcygoVjAgLSBWRikgLyAoVjAgKyBWRikpLCBvYnNlcnZlIHRoYXQgZGVsdGEoMCkgYW5kIGRl
bHRhKDEpIGV2YWx1YXRlIHJlc3BlY3RpdmVseSB0byBWMAorLy8gYW5kIFZGLiBUaHVzLCB3ZSBj
YW4gZXhwcmVzcyBvdXIgZ2xpZGluZyBlcXVhdGlvbiBhbGwgaW4gdGVybXMgb2YgVjAsIFZGIGFu
ZCB0LgorZmxvYXQgU2Nyb2xsQ29udHJvbGxlcjo6Y29tcHV0ZUdsaWRlRGVsdGEoU2Nyb2xsRXZl
bnRBeGlzIGF4aXMpIGNvbnN0Cit7CisgICAgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUm
IHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRlKGF4aXMpOworCisgICAgTGF5b3V0VW5p
dCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKGF4aXMpOworICAgIGJvb2wg
Y2FuQ29tcHV0ZUdsaWRlID0gKHNuYXBTdGF0ZS5tX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYm
IG9mZnNldCA8IHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCkgfHwgKHNuYXBTdGF0ZS5tX3Rhcmdl
dE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0gc25hcFN0YXRlLm1faW5pdGlhbE9mZnNldCk7
CisgICAgaWYgKHNuYXBTdGF0ZS5tX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6Okds
aWRpbmcgfHwgIWNhbkNvbXB1dGVHbGlkZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25z
dCBmbG9hdCBwcm9ncmVzcyA9IHNuYXBQcm9ncmVzcyhvZmZzZXQsIHNuYXBTdGF0ZSk7CisgICAg
Y29uc3QgZmxvYXQgcmF3R2xpZGVEZWx0YSA9IHNuYXBHbGlkZShwcm9ncmVzcywgc25hcFN0YXRl
KTsKKworICAgIGZsb2F0IGdsaWRlRGVsdGEgPSBzbmFwU3RhdGUubV9pbml0aWFsT2Zmc2V0IDwg
c25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0ID8gc3RkOjptYXg8ZmxvYXQ+KHJhd0dsaWRlRGVsdGEs
IDEpIDogc3RkOjptaW48ZmxvYXQ+KHJhd0dsaWRlRGVsdGEsIC0xKTsKKyAgICBpZiAoKHNuYXBT
dGF0ZS5tX2luaXRpYWxPZmZzZXQgPCBzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0
ICsgZ2xpZGVEZWx0YSA+IHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCkgfHwgKHNuYXBTdGF0ZS5t
X2luaXRpYWxPZmZzZXQgPiBzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0ICsgZ2xp
ZGVEZWx0YSA8IHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCkpCisgICAgICAgIHJldHVybiBzbmFw
U3RhdGUubV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7CisgICAgCisgICAgcmV0dXJuIGdsaWRlRGVs
dGE7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCShyZXZpc2lvbiAxODEwMDEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmg6
MTgxMDAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKyNkZWZpbmUgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCisjaW5jbHVk
ZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBTY3JvbGxTbmFwU3RhdGUgeworICAg
IFNuYXBwaW5nLAorICAgIEdsaWRpbmcsCisgICAgRGVzdGluYXRpb25SZWFjaGVkLAorICAgIFVz
ZXJJbnRlcmFjdGlvbgorfTsKKworZW51bSBjbGFzcyBXaGVlbEV2ZW50U3RhdHVzIHsKKyAgICBV
c2VyU2Nyb2xsQmVnaW4sCisgICAgVXNlclNjcm9sbGluZywKKyAgICBVc2VyU2Nyb2xsRW5kLAor
ICAgIEluZXJ0aWFsU2Nyb2xsQmVnaW4sCisgICAgSW5lcnRpYWxTY3JvbGxpbmcsCisgICAgSW5l
cnRpYWxTY3JvbGxFbmQsCisgICAgVW5rbm93bgorfTsKKworY2xhc3MgQXhpc1Njcm9sbFNuYXBB
bmltYXRvckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+QXhpc1Njcm9sbFNuYXBB
bmltYXRvckNsaWVudCgpIHsgfQorCitwdWJsaWM6CisgICAgdmlydHVhbCBMYXlvdXRVbml0IHNj
cm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
aW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgdmVsb2NpdHkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRBeGlz
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoU2Nyb2xsRXZlbnRB
eGlzKSA9IDA7Cit9OworCitjbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yIHsKK3B1YmxpYzoK
KyAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQq
LCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mLCBTY3JvbGxFdmVudEF4aXMpOworICAgIHZvaWQg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICBib29sIHNo
b3VsZE92ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsK
KyAgICB2b2lkIHNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUpOworICAgIHZvaWQg
ZW5kU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUpOworCisgICAgZmxvYXQgY29t
cHV0ZVNuYXBEZWx0YSgpIGNvbnN0OworICAgIGZsb2F0IGNvbXB1dGVHbGlkZURlbHRhKCkgY29u
c3Q7CisKKyAgICB2b2lkIGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoYm9vbCk7CisgICAgdm9p
ZCBwdXNoSW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQpOworICAgIGZsb2F0IGF2ZXJhZ2VJbml0aWFs
V2hlZWxEZWx0YSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRv
dygpOworCisgICAgc3RhdGljIGNvbnN0IGludCB3aGVlbERlbHRhV2luZG93U2l6ZSA9IDM7CisK
KyAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBWZWN0b3I8
TGF5b3V0VW5pdD4gbV9zbmFwT2Zmc2V0czsKKyAgICBTY3JvbGxFdmVudEF4aXMgbV9heGlzOwor
ICAgIC8vIFVzZWQgdG8gdHJhY2sgYm90aCBzbmFwcGluZyBhbmQgZ2xpZGluZyBiZWhhdmlvcnMu
CisgICAgU2Nyb2xsU25hcFN0YXRlIG1fY3VycmVudFN0YXRlOworICAgIExheW91dFVuaXQgbV9p
bml0aWFsT2Zmc2V0OworICAgIExheW91dFVuaXQgbV90YXJnZXRPZmZzZXQ7CisgICAgLy8gVXNl
ZCB0byB0cmFjayBnbGlkaW5nIGJlaGF2aW9yLgorICAgIExheW91dFVuaXQgbV9iZWdpblRyYWNr
aW5nV2hlZWxEZWx0YU9mZnNldDsKKyAgICBpbnQgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQ7Cisg
ICAgZmxvYXQgbV93aGVlbERlbHRhV2luZG93W3doZWVsRGVsdGFXaW5kb3dTaXplXTsKKyAgICBm
bG9hdCBtX2dsaWRlTWFnbml0dWRlOworICAgIGZsb2F0IG1fZ2xpZGVQaGFzZVNoaWZ0OworICAg
IGZsb2F0IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YTsKKyAgICBib29sIG1fc2hvdWxkT3ZlcnJp
ZGVXaGVlbEV2ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworI2VuZGlmIC8vIEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKLSNkZWZpbmUgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcl9oCisjaWZuZGVmIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlX2gKKyNkZWZp
bmUgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGVfaAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKIApAQCAtNDIsNDkgKzQyLDE1IEBAIGVudW0gY2xhc3MgU2Nyb2xsU25hcFN0YXRlIHsKICAg
ICBVc2VySW50ZXJhY3Rpb24KIH07CiAKLWVudW0gY2xhc3MgV2hlZWxFdmVudFN0YXR1cyB7Ci0g
ICAgVXNlclNjcm9sbEJlZ2luLAotICAgIFVzZXJTY3JvbGxpbmcsCi0gICAgVXNlclNjcm9sbEVu
ZCwKLSAgICBJbmVydGlhbFNjcm9sbEJlZ2luLAotICAgIEluZXJ0aWFsU2Nyb2xsaW5nLAotICAg
IEluZXJ0aWFsU2Nyb2xsRW5kLAotICAgIFVua25vd24KLX07Ci0KLWNsYXNzIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3JDbGllbnQgewotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkF4aXNTY3JvbGxT
bmFwQW5pbWF0b3JDbGllbnQoKSB7IH0KLQotcHVibGljOgotICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHZlbG9jaXR5
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2ZW50
QXhpcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKFNjcm9sbEV2
ZW50QXhpcykgPSAwOwotfTsKLQotY2xhc3MgQXhpc1Njcm9sbFNuYXBBbmltYXRvciB7Ci1wdWJs
aWM6Ci0gICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xp
ZW50KiwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiwgU2Nyb2xsRXZlbnRBeGlzKTsKLSAgICB2
b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgYm9v
bCBzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29u
c3Q7Ci0gICAgdm9pZCBzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlKTsKLSAgICB2
b2lkIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlKTsKLQotICAgIGZsb2F0
IGNvbXB1dGVTbmFwRGVsdGEoKSBjb25zdDsKLSAgICBmbG9hdCBjb21wdXRlR2xpZGVEZWx0YSgp
IGNvbnN0Oworc3RydWN0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlIHsKKyAgICBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZShTY3JvbGxFdmVudEF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYp
OwogCi0gICAgdm9pZCBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGJvb2wpOwogICAgIHZvaWQg
cHVzaEluaXRpYWxXaGVlbERlbHRhKGZsb2F0KTsKICAgICBmbG9hdCBhdmVyYWdlSW5pdGlhbFdo
ZWVsRGVsdGEoKSBjb25zdDsKICAgICB2b2lkIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3co
KTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgd2hlZWxEZWx0YVdpbmRvd1NpemUgPSAzOwogCi0g
ICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgVmVjdG9yPExh
eW91dFVuaXQ+IG1fc25hcE9mZnNldHM7CiAgICAgU2Nyb2xsRXZlbnRBeGlzIG1fYXhpczsKICAg
ICAvLyBVc2VkIHRvIHRyYWNrIGJvdGggc25hcHBpbmcgYW5kIGdsaWRpbmcgYmVoYXZpb3JzLgpA
QCAtMTA1LDQgKzcxLDQgQEAgcHJpdmF0ZToKIAogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCiAKLSNlbmRpZiAvLyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKyNlbmRpZiAvLyBT
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQkocmV2aXNpb24g
MTgxMDAxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBB
bmltYXRvci5tbToxODEwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgZmxvYXQgaW5lcnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFj
dG9yID0gMTYuNzsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNYXggPSAyNTsKK2NvbnN0IGZs
b2F0IHNuYXBNYWduaXR1ZGVNaW4gPSA1OworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZEhpZ2gg
PSAxMDAwOworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZExvdyA9IDUwOworY29uc3QgZmxvYXQg
Z2xpZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Citjb25zdCBmbG9hdCBtYXhUYXJnZXRXaGVlbERl
bHRhID0gNzsKK2NvbnN0IGZsb2F0IG1pblRhcmdldFdoZWVsRGVsdGEgPSAzLjU7Citjb25zdCBm
bG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yID0gMS4wIC8gNDAuMDsKKworc3RhdGlj
IGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkK
K3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB7CisgICAg
ICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5l
cnRpYWxTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Q2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNj
cm9sbGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpV
bmtub3duOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW9tZW50dW1QaGFzZSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChwaGFzZSkgeworICAg
ICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgIGNhc2UgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbjoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2
ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW47CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6
VXNlclNjcm9sbGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5k
ZWQ6CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQ6CisgICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247
Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcHJvamVjdGVkSW5lcnRpYWxTY3JvbGxEaXN0YW5j
ZShmbG9hdCBpbml0aWFsV2hlZWxEZWx0YSkKK3sKKyAgICAvLyBGSVhNRTogRXhwZXJpbWVudHMg
d2l0aCBpbmVydGlhbCBzY3JvbGxpbmcgc2hvdyBhIGZhaXJseSBjb25zaXN0ZW50IGxpbmVhciBy
ZWxhdGlvbnNoaXAgYmV0d2VlbiBpbml0aWFsIHdoZWVsIGRlbHRhIGFuZCB0b3RhbCBkaXN0YW5j
ZSBzY3JvbGxlZC4KKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSdsbCB3YW50IHRvIGZpbmQgYSBt
b3JlIGFjY3VyYXRlIHdheSBvZiBpbmVydGlhbCBzY3JvbGwgcHJlZGljdGlvbi4KKyAgICByZXR1
cm4gaW5lcnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yICogaW5pdGlhbFdoZWVsRGVsdGE7Cit9
CisKK0F4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Nj
cm9sbFNuYXBBbmltYXRvckNsaWVudCogY2xpZW50LCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4m
IHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMgYXhpcykKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKKyAgICAsIG1fc25hcE9mZnNldHMoc25hcE9mZnNldHMpCisgICAgLCBtX2F4aXMoYXhpcykK
KyAgICAsIG1fY3VycmVudFN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVk
KQorICAgICwgbV9pbml0aWFsT2Zmc2V0KDApCisgICAgLCBtX3RhcmdldE9mZnNldCgwKQorICAg
ICwgbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCgwKQorICAgICwgbV9udW1XaGVlbERl
bHRhc1RyYWNrZWQoMCkKKyAgICAsIG1fZ2xpZGVNYWduaXR1ZGUoMCkKKyAgICAsIG1fZ2xpZGVQ
aGFzZVNoaWZ0KDApCisgICAgLCBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEoMCkKKyAgICAsIG1f
c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGZhbHNlKQoreworfQorCit2b2lkIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBl
dmVudCkKK3sKKyAgICBmbG9hdCB3aGVlbERlbHRhID0gbV9heGlzID09IFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCA/IC1ldmVudC5kZWx0YVgoKSA6IC1ldmVudC5kZWx0YVkoKTsKKyAgICBX
aGVlbEV2ZW50U3RhdHVzIHdoZWVsU3RhdHVzID0gdG9XaGVlbEV2ZW50U3RhdHVzKGV2ZW50LnBo
YXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisKKyAgICBzd2l0Y2ggKHdoZWVsU3RhdHVz
KSB7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW46CisgICAgY2Fz
ZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOgorICAgICAgICBlbmRTY3JvbGxTbmFw
QW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6CisgICAgICAg
IGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xs
QmVnaW46CisgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdoZWVsIGRlbHRhcyBmb3IgZ2xpZGUg
cHJlZGljdGlvbi4KKyAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3Rh
dGU6OlVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIHB1c2hJbml0aWFsV2hlZWxEZWx0YSh3aGVl
bERlbHRhKTsKKyAgICAgICAgbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCA9IG1fY2xp
ZW50LT5zY3JvbGxPZmZzZXRPbkF4aXMobV9heGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOgorICAgICAgICAvLyBUaGlz
IGNoZWNrIGZvciBEZXN0aW5hdGlvblJlYWNoZWQgZW5zdXJlcyB0aGF0IHdlIGRvbid0IHJlY2Vp
dmUgYW5vdGhlciBzZXQgb2YgbW9tZW50dW0gZXZlbnRzIGFmdGVyIGVuZGluZyB0aGUgbGFzdCBn
bGlkZS4KKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xp
ZGluZyAmJiBtX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVh
Y2hlZCkgeworICAgICAgICAgICAgaWYgKG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkIDwgd2hlZWxE
ZWx0YVdpbmRvd1NpemUpCisgICAgICAgICAgICAgICAgcHVzaEluaXRpYWxXaGVlbERlbHRhKHdo
ZWVsRGVsdGEpOworCisgICAgICAgICAgICBpZiAobV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPT0g
d2hlZWxEZWx0YVdpbmRvd1NpemUpCisgICAgICAgICAgICAgICAgYmVnaW5TY3JvbGxTbmFwQW5p
bWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsRW5kOgorICAg
ICAgICBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7
CisgICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKKyAgICAgICAgbV9zaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgQXhpc1Njcm9sbFNuYXBBbmltYXRv
cjo6c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZl
bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50ICYmIHRv
V2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNlKCkpID09
IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworfQorCit2b2lkIEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQoreworICAgIGlmICht
X2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBT
dGF0ZTo6R2xpZGluZyB8fCBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBw
aW5nKTsKKyAgICBmbG9hdCBkZWx0YSA9IG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0
ZTo6U25hcHBpbmcgPyBjb21wdXRlU25hcERlbHRhKCkgOiBjb21wdXRlR2xpZGVEZWx0YSgpOwor
ICAgIGlmIChkZWx0YSkKKyAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbE9uQXhpcyht
X2F4aXMsIGRlbHRhKTsKKyAgICBlbHNlCisgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24o
U2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpOworfQorCit2b2lkIEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I6OmJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUg
bmV3U3RhdGUpCit7CisgICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xp
ZGluZyB8fCBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICBMYXlv
dXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRPbkF4aXMobV9heGlzKTsKKyAg
ICBmbG9hdCBpbml0aWFsV2hlZWxEZWx0YSA9IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6
R2xpZGluZyA/IGF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIDogMDsKKyAgICBMYXlvdXRVbml0
IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRl
OjpHbGlkaW5nID8gbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCArIExheW91dFVuaXQo
cHJvamVjdGVkSW5lcnRpYWxTY3JvbGxEaXN0YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDogb2Zm
c2V0OworICAgIGlmIChtX3NuYXBPZmZzZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChwcm9q
ZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgbV9zbmFwT2Zmc2V0cy5maXJzdCgpKSwgbV9zbmFwT2Zm
c2V0cy5sYXN0KCkpOworICAgIG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3Rhcmdl
dE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQsIGZsb2F0PihtX3NuYXBPZmZz
ZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAg
IGlmIChtX2luaXRpYWxPZmZzZXQgPT0gbV90YXJnZXRPZmZzZXQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY3VycmVudFN0YXRlID0gbmV3U3RhdGU7CisgICAgaWYgKG5ld1N0YXRlID09IFNj
cm9sbFNuYXBTdGF0ZTo6R2xpZGluZykgeworICAgICAgICBtX3Nob3VsZE92ZXJyaWRlV2hlZWxF
dmVudCA9IHRydWU7CisgICAgICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA9IGluaXRpYWxX
aGVlbERlbHRhOworICAgICAgICBib29sIGdsaWRlUmVxdWlyZXNCb29zdDsKKyAgICAgICAgaWYg
KGluaXRpYWxXaGVlbERlbHRhID4gMCkKKyAgICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9
IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uIC0gb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgLSBw
cm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xp
ZGVSZXF1aXJlc0Jvb3N0ID0gb2Zmc2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPCBw
cm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAtIG1fdGFyZ2V0T2Zmc2V0OworCisgICAgICAgIGlu
aXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoZ2xpZGVSZXF1aXJlc0Jvb3N0KTsKKyAgICAgICAgY2xl
YXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworICAgIH0KKyAgICBtX2NsaWVudC0+c3RhcnRT
Y3JvbGxTbmFwVGltZXIobV9heGlzKTsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
OjplbmRTY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAg
ICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQg
fHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rpb24pOworICAgIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpCisgICAgICAgIGNs
ZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKKworICAgIG1fY3VycmVudFN0YXRlID0gbmV3
U3RhdGU7CisgICAgbV9jbGllbnQtPnN0b3BTY3JvbGxTbmFwVGltZXIobV9heGlzKTsKK30KKwor
Ly8gQ29tcHV0ZXMgdGhlIGFtb3VudCB0byBzY3JvbGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEgInNu
YXAiIG9wZXJhdGlvbiwgaS5lLiB3aGVuIGEgdXNlciByZWxlYXNlcyB0aGUgdHJhY2twYWQgd2l0
aG91dCBmbGlja2luZy4gVGhlIHNuYXAgZGVsdGEKKy8vIGlzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jl
c3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0byBESVNUQU5DRV9UUkFWRUxFRCAvIFRPVEFMX0RJU1RB
TkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgaW5pdGlhbE9m
ZnNldAorLy8gdG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9UQUxfRElTVEFOQ0UgaXMgdGhl
IGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNldCB0byB0YXJnZXRPZmZzZXQuIFRoZSBzbmFwcGlu
ZyBlcXVhdGlvbiBpcyBhcyBmb2xsb3dzOgorLy8gZGVsdGEodCkgPSBNQUdOSVRVREUgKiBzaW4o
UEkgKiB0KS4gTUFHTklUVURFIGluZGljYXRlcyB0aGUgdG9wIHNwZWVkIHJlYWNoZWQgbmVhciB0
aGUgbWlkZGxlIG9mIHRoZSBhbmltYXRpb24gKHQgPSAwLjUpLCBhbmQgaXMgYSBsaW5lYXIKKy8v
IHJlbGF0aW9uc2hpcCBvZiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQsIGNsYW1wZWQgYnkgYXJiaXRy
YXJ5IG1pbiBhbmQgbWF4IHZhbHVlcy4KK2Zsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNv
bXB1dGVTbmFwRGVsdGEoKSBjb25zdAoreworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGll
bnQtPnNjcm9sbE9mZnNldE9uQXhpcyhtX2F4aXMpOworICAgIGJvb2wgY2FuQ29tcHV0ZVNuYXAg
PSAgKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQp
IHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0gbV9pbml0aWFsT2Zmc2V0
KTsKKyAgICBpZiAobV9jdXJyZW50U3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyB8
fCAhY2FuQ29tcHV0ZVNuYXApCisgICAgICAgIHJldHVybiAwOworCisgICAgaW50IHNpZ24gPSBt
X2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNldCA/IDEgOiAtMTsKKyAgICBmbG9hdCBwcm9n
cmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zm
c2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICAvLyBUaHJlc2hvbGQgdGhlIGRpc3RhbmNlIGJl
Zm9yZSBjb21wdXRpbmcgbWFnbml0dWRlLCBzbyBvbmx5IGRpc3RhbmNlcyB3aXRoaW4gYSBjZXJ0
YWluIHJhbmdlIGFyZSBjb25zaWRlcmVkLgorICAgIGZsb2F0IHRocmVzaG9sZGVkRGlzdGFuY2Ug
PSBzdGQ6Om1pbihzdGQ6Om1heDxmbG9hdD4oKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zm
c2V0KSAqIHNpZ24sIHNuYXBUaHJlc2hvbGRMb3cpLCBzbmFwVGhyZXNob2xkSGlnaCk7CisgICAg
ZmxvYXQgbWFnbml0dWRlID0gc25hcE1hZ25pdHVkZU1pbiArIChzbmFwTWFnbml0dWRlTWF4IC0g
c25hcE1hZ25pdHVkZU1pbikgKiAodGhyZXNob2xkZWREaXN0YW5jZSAtIHNuYXBUaHJlc2hvbGRM
b3cpIC8gKHNuYXBUaHJlc2hvbGRIaWdoIC0gc25hcFRocmVzaG9sZExvdyk7CisgICAgZmxvYXQg
cmF3U25hcEFtb3VudCA9IHN0ZDo6bWF4PGZsb2F0PigxLCBtYWduaXR1ZGUgKiBzaW4ocGlGbG9h
dCAqIHByb2dyZXNzKSk7CisgICAgaWYgKChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZz
ZXQgLSByYXdTbmFwQW1vdW50IDwgbV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA+
IG9mZnNldCAmJiBvZmZzZXQgKyByYXdTbmFwQW1vdW50ID4gbV90YXJnZXRPZmZzZXQpKQorICAg
ICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7CisKKyAgICByZXR1cm4gc2lnbiAq
IHJhd1NuYXBBbW91bnQ7Cit9CisKKy8vIENvbXB1dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xsIGJ5
IHdoZW4gcGVyZm9ybWluZyBhICJnbGlkZSIgb3BlcmF0aW9uLCBpLmUuIHdoZW4gYSB1c2VyIHJl
bGVhc2VzIHRoZSB0cmFja3BhZCB3aXRoIGFuIGluaXRpYWwgdmVsb2NpdHkuIEhlcmUsCisvLyB3
ZSB3YW50IHRoZSBzY3JvbGwgb2Zmc2V0IHRvIGFuaW1hdGUgZGlyZWN0bHkgdG8gdGhlIHNuYXAg
cG9pbnQuIFRoZSBzbmFwIGRlbHRhIGlzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hlcmUg
dCBpcyBlcXVhbCB0bworLy8gRElTVEFOQ0VfVFJBVkVMRUQgLyBUT1RBTF9ESVNUQU5DRSwgRElT
VEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGluaXRpYWxPZmZzZXQgdG8g
dGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9UQUxfRElTVEFOQ0UgaXMKKy8vIHRoZSBkaXN0YW5j
ZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFyZ2V0T2Zmc2V0LgorLy8gVGhlIGdlbmVyYWwgbW9k
ZWwgb2Ygb3VyIGdsaWRpbmcgZXF1YXRpb24gaXMgZGVsdGEodCkgPSBNQUdOSVRVREUgKiAoMSAr
IGNvcyhQSSAqIHQgKyBQSEFTRV9TSElGVCkpLiBUaGlzIHdhcyBkZXRlcm1pbmVkIGFmdGVyIGV4
YW1pbmluZyB0aGUKKy8vIG1vbWVudHVtIHZlbG9jaXR5IGN1cnZlIGFzIGEgZnVuY3Rpb24gb2Yg
cHJvZ3Jlc3MuIFRvIGNvbXB1dGUgTUFHTklUVURFIGFuZCBQSEFTRV9TSElGVCwgd2UgdXNlIGlu
aXRpYWwgdmVsb2NpdHkgVjAgYW5kIHRoZSBmaW5hbCB2ZWxvY2l0eSBWRiwKKy8vIGJvdGggYXMg
d2hlZWwgZGVsdGFzIChwaXhlbHMgcGVyIHRpbWVzdGVwKS4gVkYgc2hvdWxkIGJlIGEgc21hbGwg
dmFsdWUgKDwgMTApIGNob3NlbiBiYXNlZCBvbiB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBhbmQgVE9U
QUxfRElTVEFOQ0UuCisvLyBXZSBhbHNvIGVuZm9yY2UgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50
cyBmb3IgdGhlIGdsaWRpbmcgZXF1YXRpb246CisvLyAgIDEuIGRlbHRhKDApID0gVjAsIHNpbmNl
IHdlIHdhbnQgdGhlIGluaXRpYWwgdmVsb2NpdHkgb2YgdGhlIGdsaWRpbmcgYW5pbWF0aW9uIHRv
IG1hdGNoIHRoZSB1c2VyJ3Mgc2Nyb2xsIHZlbG9jaXR5LiBUaGUgZXhjZXB0aW9uIHRvIHRoaXMg
aXMKKy8vICAgICAgd2hlbiB0aGUgZ2xpZGUgdmVsb2NpdHkgaXMgbm90IGVub3VnaCB0byBuYXR1
cmFsbHkgcmVhY2ggdGhlIG5leHQgc25hcCBwb2ludCwgYW5kIHRodXMgcmVxdWlyZXMgYSBib29z
dCAoc2VlIGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMpCisvLyAgIDIuIGRlbHRhKDEpID0gVkYs
IHNpbmNlIGF0IHQ9MSwgdGhlIGFuaW1hdGlvbiBoYXMgY29tcGxldGVkIGFuZCB3ZSB3YW50IHRo
ZSBsYXN0IHdoZWVsIGRlbHRhIHRvIG1hdGNoIHRoZSBmaW5hbCB2ZWxvY2l0eSBWRi4gTm90ZSB0
aGF0IHRoaXMKKy8vICAgICAgZG9lc24ndCBndWFyYW50ZWUgdGhhdCB0aGUgZmluYWwgdmVsb2Np
dHkgd2lsbCBiZSBleGFjdGx5IFZGLiBIb3dldmVyLCBhc3N1bWluZyB0aGF0IHRoZSBpbml0aWFs
IHZlbG9jaXR5IGlzIG11Y2ggbGVzcyB0aGFuIFRPVEFMX0RJU1RBTkNFLAorLy8gICAgICB0aGUg
bGFzdCB3aGVlbCBkZWx0YSB3aWxsIGJlIHZlcnkgY2xvc2UsIGlmIG5vdCB0aGUgc2FtZSwgYXMg
VkYuCisvLyBGb3IgTUFHTklUVURFID0gKFYwICsgVkYpIC8gMiBhbmQgUEhBU0VfU0hJRlQgPSBh
cmNjb3MoKFYwIC0gVkYpIC8gKFYwICsgVkYpKSwgb2JzZXJ2ZSB0aGF0IGRlbHRhKDApIGFuZCBk
ZWx0YSgxKSBldmFsdWF0ZSByZXNwZWN0aXZlbHkgdG8gVjAKKy8vIGFuZCBWRi4gVGh1cywgd2Ug
Y2FuIGV4cHJlc3Mgb3VyIGdsaWRpbmcgZXF1YXRpb24gYWxsIGluIHRlcm1zIG9mIFYwLCBWRiBh
bmQgdC4KK2Zsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVHbGlkZURlbHRhKCkg
Y29uc3QKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRP
bkF4aXMobV9heGlzKTsKKyAgICBib29sIGNhbkNvbXB1dGVHbGlkZSA9IChtX2luaXRpYWxPZmZz
ZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZz
ZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1faW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3Vy
cmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCAhY2FuQ29tcHV0ZUdsaWRl
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHByb2dyZXNzID0gKChmbG9hdCkob2Zm
c2V0IC0gbV9pbml0aWFsT2Zmc2V0KSkgLyAobV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZz
ZXQpOworICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGludmVzdGlnYXRlIHdoeSAtbV9n
bGlkZVBoYXNlU2hpZnQgcmVzdWx0cyBpbiB0aGUgYmVoYXZpb3Igd2Ugd2FudC4KKyAgICBmbG9h
dCBzaGlmdCA9IGNlaWwobV9nbGlkZU1hZ25pdHVkZSAqICgxICsgY29zKHBpRmxvYXQgKiBwcm9n
cmVzcyAtIG1fZ2xpZGVQaGFzZVNoaWZ0KSkpOworICAgIHNoaWZ0ID0gbV9pbml0aWFsT2Zmc2V0
IDwgbV90YXJnZXRPZmZzZXQgPyBzdGQ6Om1heDxmbG9hdD4oc2hpZnQsIDEpIDogc3RkOjptaW48
ZmxvYXQ+KHNoaWZ0LCAtMSk7CisgICAgaWYgKChtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9m
ZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA+IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV9pbml0aWFsT2Zm
c2V0ID4gbV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0ICsgc2hpZnQgPCBtX3RhcmdldE9mZnNldCkp
CisgICAgICAgIHJldHVybiBtX3RhcmdldE9mZnNldCAtIG9mZnNldDsKKworICAgIHJldHVybiBz
aGlmdDsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjppbml0aWFsaXplR2xpZGVQ
YXJhbWV0ZXJzKGJvb2wgc2hvdWxkSW5jcmVhc2VJbml0aWFsV2hlZWxEZWx0YSkKK3sKKyAgICAv
LyBGSVhNRTogR2xpZGUgYm9vc3QgaXMgYSBoYWNreSB3YXkgdG8gc3BlZWQgdXAgbmF0dXJhbCBz
Y3JvbGxpbmcgdmVsb2NpdHkuIFdlIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBhY2NvbXBs
aXNoIHRoaXMuCisgICAgaWYgKHNob3VsZEluY3JlYXNlSW5pdGlhbFdoZWVsRGVsdGEpCisgICAg
ICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAqPSBnbGlkZUJvb3N0TXVsdGlwbGllcjsKKwor
ICAgIC8vIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkZXRlcm1pbmUgYSBn
b29kIHRhcmdldCBkZWx0YSB0aGFuIG11bHRpcGx5aW5nIGJ5IGEgZmFjdG9yIGFuZCBjbGFtcGlu
ZyB0byBtaW4vbWF4IHZhbHVlcy4KKyAgICBmbG9hdCB0YXJnZXRGaW5hbFdoZWVsRGVsdGEgPSBp
bml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yICogKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA8
IDAgPyAtbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIDogbV9nbGlkZUluaXRpYWxXaGVlbERlbHRh
KTsKKyAgICB0YXJnZXRGaW5hbFdoZWVsRGVsdGEgPSAobV9nbGlkZUluaXRpYWxXaGVlbERlbHRh
ID4gMCA/IDEgOiAtMSkgKiBzdGQ6Om1pbihzdGQ6Om1heCh0YXJnZXRGaW5hbFdoZWVsRGVsdGEs
IG1pblRhcmdldFdoZWVsRGVsdGEpLCBtYXhUYXJnZXRXaGVlbERlbHRhKTsKKyAgICBtX2dsaWRl
TWFnbml0dWRlID0gKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdldEZpbmFsV2hlZWxE
ZWx0YSkgLyAyOworICAgIG1fZ2xpZGVQaGFzZVNoaWZ0ID0gYWNvcygobV9nbGlkZUluaXRpYWxX
aGVlbERlbHRhIC0gdGFyZ2V0RmluYWxXaGVlbERlbHRhKSAvIChtX2dsaWRlSW5pdGlhbFdoZWVs
RGVsdGEgKyB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpKTsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yOjpwdXNoSW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQgd2hlZWxEZWx0YSkKK3sKKyAg
ICBpZiAobV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPCB3aGVlbERlbHRhV2luZG93U2l6ZSkKKyAg
ICAgICAgbV93aGVlbERlbHRhV2luZG93W21fbnVtV2hlZWxEZWx0YXNUcmFja2VkKytdID0gd2hl
ZWxEZWx0YTsKK30KKworZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YXZlcmFnZUluaXRp
YWxXaGVlbERlbHRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbnVtV2hlZWxEZWx0YXNUcmFja2Vk
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHN1bSA9IDA7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsgaSsrKQorICAgICAgICBzdW0gKz0g
bV93aGVlbERlbHRhV2luZG93W2ldOworCisgICAgcmV0dXJuIHN1bSAvIG1fbnVtV2hlZWxEZWx0
YXNUcmFja2VkOworfQorCit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNsZWFySW5pdGlh
bFdoZWVsRGVsdGFXaW5kb3coKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1XaGVl
bERlbHRhc1RyYWNrZWQ7IGkrKykKKyAgICAgICAgbV93aGVlbERlbHRhV2luZG93W2ldID0gMDsK
KworICAgIG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5t
bQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDY5ICsyNCwxNCBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKIAogI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZmxvYXQg
aW5lcnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yID0gMTYuNzsKLWNvbnN0IGZsb2F0IHNuYXBN
YWduaXR1ZGVNYXggPSAyNTsKLWNvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNaW4gPSA1OwotY29u
c3QgZmxvYXQgc25hcFRocmVzaG9sZEhpZ2ggPSAxMDAwOwotY29uc3QgZmxvYXQgc25hcFRocmVz
aG9sZExvdyA9IDUwOwotY29uc3QgZmxvYXQgZ2xpZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Ci1j
b25zdCBmbG9hdCBtYXhUYXJnZXRXaGVlbERlbHRhID0gNzsKLWNvbnN0IGZsb2F0IG1pblRhcmdl
dFdoZWVsRGVsdGEgPSAzLjU7Ci1jb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFj
dG9yID0gMS4wIC8gNDAuMDsKLQotc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hl
ZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkKLXsKLSAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgewot
ICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46Ci0gICAgICAgICAgICBy
ZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjsKLQotICAgICAgICBj
YXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDoKLSAgICAgICAgICAgIHJldHVybiBX
aGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzsKLQotICAgICAgICBjYXNlIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0
YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOyAKLSAgICAgICAgfQotICAgIH0KLSAg
ICBpZiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKLSAg
ICAgICAgc3dpdGNoIChwaGFzZSkgewotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlQmVnYW46Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbjoK
LSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW47Ci0K
LSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6Ci0gICAgICAgICAg
ICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzsKLQotICAgICAgICBjYXNl
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VDYW5jZWxsZWQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1
czo6VXNlclNjcm9sbEVuZDsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgcHJv
amVjdGVkSW5lcnRpYWxTY3JvbGxEaXN0YW5jZShmbG9hdCBpbml0aWFsV2hlZWxEZWx0YSkKLXsK
LSAgICAvLyBGSVhNRTogRXhwZXJpbWVudHMgd2l0aCBpbmVydGlhbCBzY3JvbGxpbmcgc2hvdyBh
IGZhaXJseSBjb25zaXN0ZW50IGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBpbml0aWFsIHdo
ZWVsIGRlbHRhIGFuZCB0b3RhbCBkaXN0YW5jZSBzY3JvbGxlZC4KLSAgICAvLyBJbiB0aGUgZnV0
dXJlLCB3ZSdsbCB3YW50IHRvIGZpbmQgYSBtb3JlIGFjY3VyYXRlIHdheSBvZiBpbmVydGlhbCBz
Y3JvbGwgcHJlZGljdGlvbi4KLSAgICByZXR1cm4gaW5lcnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFj
dG9yICogaW5pdGlhbFdoZWVsRGVsdGE7Ci19Ci0KLUF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4
aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogY2xpZW50
LCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMg
YXhpcykKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fc25hcE9mZnNldHMoc25hcE9m
ZnNldHMpCitTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUo
U2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNl
dHMpCisgICAgOiBtX3NuYXBPZmZzZXRzKHNuYXBPZmZzZXRzKQogICAgICwgbV9heGlzKGF4aXMp
CiAgICAgLCBtX2N1cnJlbnRTdGF0ZShTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hl
ZCkKICAgICAsIG1faW5pdGlhbE9mZnNldCgwKQpAQCAtMTAwLDE4NiArNDUsMTMgQEAgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvcjo6QXhpc1Njcm9sbFNuYXBBbgogewogfQogCi12b2lkIEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBldmVudCkKLXsKLSAgICBmbG9hdCB3aGVlbERlbHRhID0gbV9heGlzID09IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCA/IC1ldmVudC5kZWx0YVgoKSA6IC1ldmVudC5kZWx0YVkoKTsKLSAg
ICBXaGVlbEV2ZW50U3RhdHVzIHdoZWVsU3RhdHVzID0gdG9XaGVlbEV2ZW50U3RhdHVzKGV2ZW50
LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7Ci0KLSAgICBzd2l0Y2ggKHdoZWVsU3Rh
dHVzKSB7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW46Ci0gICAg
Y2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOgotICAgICAgICBlbmRTY3JvbGxT
bmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9uKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6Ci0gICAg
ICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Ny
b2xsQmVnaW46Ci0gICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdoZWVsIGRlbHRhcyBmb3IgZ2xp
ZGUgcHJlZGljdGlvbi4KLSAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFw
U3RhdGU6OlVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIHB1c2hJbml0aWFsV2hlZWxEZWx0YSh3
aGVlbERlbHRhKTsKLSAgICAgICAgbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCA9IG1f
Y2xpZW50LT5zY3JvbGxPZmZzZXRPbkF4aXMobV9heGlzKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOgotICAgICAgICAvLyBU
aGlzIGNoZWNrIGZvciBEZXN0aW5hdGlvblJlYWNoZWQgZW5zdXJlcyB0aGF0IHdlIGRvbid0IHJl
Y2VpdmUgYW5vdGhlciBzZXQgb2YgbW9tZW50dW0gZXZlbnRzIGFmdGVyIGVuZGluZyB0aGUgbGFz
dCBnbGlkZS4KLSAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6
R2xpZGluZyAmJiBtX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9u
UmVhY2hlZCkgewotICAgICAgICAgICAgaWYgKG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkIDwgd2hl
ZWxEZWx0YVdpbmRvd1NpemUpCi0gICAgICAgICAgICAgICAgcHVzaEluaXRpYWxXaGVlbERlbHRh
KHdoZWVsRGVsdGEpOwotCi0gICAgICAgICAgICBpZiAobV9udW1XaGVlbERlbHRhc1RyYWNrZWQg
PT0gd2hlZWxEZWx0YVdpbmRvd1NpemUpCi0gICAgICAgICAgICAgICAgYmVnaW5TY3JvbGxTbmFw
QW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsRW5kOgot
ICAgICAgICBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGlu
Zyk7Ci0gICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKLSAgICAgICAgbV9z
aG91bGRPdmVycmlkZVdoZWVsRXZlbnQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgQXhpc1Njcm9sbFNuYXBBbmlt
YXRvcjo6c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
ZXZlbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50ICYm
IHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNlKCkp
ID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOwotfQotCi12b2lkIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQotewotICAgIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNu
YXBTdGF0ZTo6R2xpZGluZyB8fCBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNu
YXBwaW5nKTsKLSAgICBmbG9hdCBkZWx0YSA9IG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBT
dGF0ZTo6U25hcHBpbmcgPyBjb21wdXRlU25hcERlbHRhKCkgOiBjb21wdXRlR2xpZGVEZWx0YSgp
OwotICAgIGlmIChkZWx0YSkKLSAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbE9uQXhp
cyhtX2F4aXMsIGRlbHRhKTsKLSAgICBlbHNlCi0gICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRp
b24oU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNoZWQpOwotfQotCi12b2lkIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OmJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3Rh
dGUgbmV3U3RhdGUpCi17Ci0gICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6
R2xpZGluZyB8fCBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKLSAgICBM
YXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRPbkF4aXMobV9heGlzKTsK
LSAgICBmbG9hdCBpbml0aWFsV2hlZWxEZWx0YSA9IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0
ZTo6R2xpZGluZyA/IGF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIDogMDsKLSAgICBMYXlvdXRV
bml0IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpHbGlkaW5nID8gbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCArIExheW91dFVu
aXQocHJvamVjdGVkSW5lcnRpYWxTY3JvbGxEaXN0YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDog
b2Zmc2V0OwotICAgIGlmIChtX3NuYXBPZmZzZXRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChw
cm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgbV9zbmFwT2Zmc2V0cy5maXJzdCgpKSwgbV9zbmFw
T2Zmc2V0cy5sYXN0KCkpOwotICAgIG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKLSAgICBtX3Rh
cmdldE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQsIGZsb2F0PihtX3NuYXBP
ZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOwot
ICAgIGlmIChtX2luaXRpYWxPZmZzZXQgPT0gbV90YXJnZXRPZmZzZXQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbmV3U3RhdGU7Ci0gICAgaWYgKG5ld1N0YXRlID09
IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZykgewotICAgICAgICBtX3Nob3VsZE92ZXJyaWRlV2hl
ZWxFdmVudCA9IHRydWU7Ci0gICAgICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA9IGluaXRp
YWxXaGVlbERlbHRhOwotICAgICAgICBib29sIGdsaWRlUmVxdWlyZXNCb29zdDsKLSAgICAgICAg
aWYgKGluaXRpYWxXaGVlbERlbHRhID4gMCkKLSAgICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29z
dCA9IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uIC0gb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQg
LSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Z2xpZGVSZXF1aXJlc0Jvb3N0ID0gb2Zmc2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24g
PCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAtIG1fdGFyZ2V0T2Zmc2V0OwotCi0gICAgICAg
IGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoZ2xpZGVSZXF1aXJlc0Jvb3N0KTsKLSAgICAgICAg
Y2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOwotICAgIH0KLSAgICBtX2NsaWVudC0+c3Rh
cnRTY3JvbGxTbmFwVGltZXIobV9heGlzKTsKLX0KLQotdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yOjplbmRTY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKLXsK
LSAgICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJlYWNo
ZWQgfHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rpb24pOwotICAg
IGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpCi0gICAgICAg
IGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKLQotICAgIG1fY3VycmVudFN0YXRlID0g
bmV3U3RhdGU7Ci0gICAgbV9jbGllbnQtPnN0b3BTY3JvbGxTbmFwVGltZXIobV9heGlzKTsKLX0K
LQotLy8gQ29tcHV0ZXMgdGhlIGFtb3VudCB0byBzY3JvbGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEg
InNuYXAiIG9wZXJhdGlvbiwgaS5lLiB3aGVuIGEgdXNlciByZWxlYXNlcyB0aGUgdHJhY2twYWQg
d2l0aG91dCBmbGlja2luZy4gVGhlIHNuYXAgZGVsdGEKLS8vIGlzIGEgZnVuY3Rpb24gb2YgcHJv
Z3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0byBESVNUQU5DRV9UUkFWRUxFRCAvIFRPVEFMX0RJ
U1RBTkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgaW5pdGlh
bE9mZnNldAotLy8gdG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9UQUxfRElTVEFOQ0UgaXMg
dGhlIGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNldCB0byB0YXJnZXRPZmZzZXQuIFRoZSBzbmFw
cGluZyBlcXVhdGlvbiBpcyBhcyBmb2xsb3dzOgotLy8gZGVsdGEodCkgPSBNQUdOSVRVREUgKiBz
aW4oUEkgKiB0KS4gTUFHTklUVURFIGluZGljYXRlcyB0aGUgdG9wIHNwZWVkIHJlYWNoZWQgbmVh
ciB0aGUgbWlkZGxlIG9mIHRoZSBhbmltYXRpb24gKHQgPSAwLjUpLCBhbmQgaXMgYSBsaW5lYXIK
LS8vIHJlbGF0aW9uc2hpcCBvZiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQsIGNsYW1wZWQgYnkgYXJi
aXRyYXJ5IG1pbiBhbmQgbWF4IHZhbHVlcy4KLWZsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6
OmNvbXB1dGVTbmFwRGVsdGEoKSBjb25zdAotewotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9j
bGllbnQtPnNjcm9sbE9mZnNldE9uQXhpcyhtX2F4aXMpOwotICAgIGJvb2wgY2FuQ29tcHV0ZVNu
YXAgPSAgKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgbV90YXJnZXRPZmZz
ZXQpIHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0gbV9pbml0aWFsT2Zm
c2V0KTsKLSAgICBpZiAobV9jdXJyZW50U3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGlu
ZyB8fCAhY2FuQ29tcHV0ZVNuYXApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHNpZ24g
PSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNldCA/IDEgOiAtMTsKLSAgICBmbG9hdCBw
cm9ncmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0
T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKLSAgICAvLyBUaHJlc2hvbGQgdGhlIGRpc3RhbmNl
IGJlZm9yZSBjb21wdXRpbmcgbWFnbml0dWRlLCBzbyBvbmx5IGRpc3RhbmNlcyB3aXRoaW4gYSBj
ZXJ0YWluIHJhbmdlIGFyZSBjb25zaWRlcmVkLgotICAgIGZsb2F0IHRocmVzaG9sZGVkRGlzdGFu
Y2UgPSBzdGQ6Om1pbihzdGQ6Om1heDxmbG9hdD4oKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFs
T2Zmc2V0KSAqIHNpZ24sIHNuYXBUaHJlc2hvbGRMb3cpLCBzbmFwVGhyZXNob2xkSGlnaCk7Ci0g
ICAgZmxvYXQgbWFnbml0dWRlID0gc25hcE1hZ25pdHVkZU1pbiArIChzbmFwTWFnbml0dWRlTWF4
IC0gc25hcE1hZ25pdHVkZU1pbikgKiAodGhyZXNob2xkZWREaXN0YW5jZSAtIHNuYXBUaHJlc2hv
bGRMb3cpIC8gKHNuYXBUaHJlc2hvbGRIaWdoIC0gc25hcFRocmVzaG9sZExvdyk7Ci0gICAgZmxv
YXQgcmF3U25hcEFtb3VudCA9IHN0ZDo6bWF4PGZsb2F0PigxLCBtYWduaXR1ZGUgKiBzaW4ocGlG
bG9hdCAqIHByb2dyZXNzKSk7Ci0gICAgaWYgKChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBv
ZmZzZXQgLSByYXdTbmFwQW1vdW50IDwgbV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNl
dCA+IG9mZnNldCAmJiBvZmZzZXQgKyByYXdTbmFwQW1vdW50ID4gbV90YXJnZXRPZmZzZXQpKQot
ICAgICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7Ci0KLSAgICByZXR1cm4gc2ln
biAqIHJhd1NuYXBBbW91bnQ7Ci19Ci0KLS8vIENvbXB1dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xs
IGJ5IHdoZW4gcGVyZm9ybWluZyBhICJnbGlkZSIgb3BlcmF0aW9uLCBpLmUuIHdoZW4gYSB1c2Vy
IHJlbGVhc2VzIHRoZSB0cmFja3BhZCB3aXRoIGFuIGluaXRpYWwgdmVsb2NpdHkuIEhlcmUsCi0v
LyB3ZSB3YW50IHRoZSBzY3JvbGwgb2Zmc2V0IHRvIGFuaW1hdGUgZGlyZWN0bHkgdG8gdGhlIHNu
YXAgcG9pbnQuIFRoZSBzbmFwIGRlbHRhIGlzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hl
cmUgdCBpcyBlcXVhbCB0bwotLy8gRElTVEFOQ0VfVFJBVkVMRUQgLyBUT1RBTF9ESVNUQU5DRSwg
RElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGluaXRpYWxPZmZzZXQg
dG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9UQUxfRElTVEFOQ0UgaXMKLS8vIHRoZSBkaXN0
YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFyZ2V0T2Zmc2V0LgotLy8gVGhlIGdlbmVyYWwg
bW9kZWwgb2Ygb3VyIGdsaWRpbmcgZXF1YXRpb24gaXMgZGVsdGEodCkgPSBNQUdOSVRVREUgKiAo
MSArIGNvcyhQSSAqIHQgKyBQSEFTRV9TSElGVCkpLiBUaGlzIHdhcyBkZXRlcm1pbmVkIGFmdGVy
IGV4YW1pbmluZyB0aGUKLS8vIG1vbWVudHVtIHZlbG9jaXR5IGN1cnZlIGFzIGEgZnVuY3Rpb24g
b2YgcHJvZ3Jlc3MuIFRvIGNvbXB1dGUgTUFHTklUVURFIGFuZCBQSEFTRV9TSElGVCwgd2UgdXNl
IGluaXRpYWwgdmVsb2NpdHkgVjAgYW5kIHRoZSBmaW5hbCB2ZWxvY2l0eSBWRiwKLS8vIGJvdGgg
YXMgd2hlZWwgZGVsdGFzIChwaXhlbHMgcGVyIHRpbWVzdGVwKS4gVkYgc2hvdWxkIGJlIGEgc21h
bGwgdmFsdWUgKDwgMTApIGNob3NlbiBiYXNlZCBvbiB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBhbmQg
VE9UQUxfRElTVEFOQ0UuCi0vLyBXZSBhbHNvIGVuZm9yY2UgdGhlIGZvbGxvd2luZyBjb25zdHJh
aW50cyBmb3IgdGhlIGdsaWRpbmcgZXF1YXRpb246Ci0vLyAgIDEuIGRlbHRhKDApID0gVjAsIHNp
bmNlIHdlIHdhbnQgdGhlIGluaXRpYWwgdmVsb2NpdHkgb2YgdGhlIGdsaWRpbmcgYW5pbWF0aW9u
IHRvIG1hdGNoIHRoZSB1c2VyJ3Mgc2Nyb2xsIHZlbG9jaXR5LiBUaGUgZXhjZXB0aW9uIHRvIHRo
aXMgaXMKLS8vICAgICAgd2hlbiB0aGUgZ2xpZGUgdmVsb2NpdHkgaXMgbm90IGVub3VnaCB0byBu
YXR1cmFsbHkgcmVhY2ggdGhlIG5leHQgc25hcCBwb2ludCwgYW5kIHRodXMgcmVxdWlyZXMgYSBi
b29zdCAoc2VlIGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMpCi0vLyAgIDIuIGRlbHRhKDEpID0g
VkYsIHNpbmNlIGF0IHQ9MSwgdGhlIGFuaW1hdGlvbiBoYXMgY29tcGxldGVkIGFuZCB3ZSB3YW50
IHRoZSBsYXN0IHdoZWVsIGRlbHRhIHRvIG1hdGNoIHRoZSBmaW5hbCB2ZWxvY2l0eSBWRi4gTm90
ZSB0aGF0IHRoaXMKLS8vICAgICAgZG9lc24ndCBndWFyYW50ZWUgdGhhdCB0aGUgZmluYWwgdmVs
b2NpdHkgd2lsbCBiZSBleGFjdGx5IFZGLiBIb3dldmVyLCBhc3N1bWluZyB0aGF0IHRoZSBpbml0
aWFsIHZlbG9jaXR5IGlzIG11Y2ggbGVzcyB0aGFuIFRPVEFMX0RJU1RBTkNFLAotLy8gICAgICB0
aGUgbGFzdCB3aGVlbCBkZWx0YSB3aWxsIGJlIHZlcnkgY2xvc2UsIGlmIG5vdCB0aGUgc2FtZSwg
YXMgVkYuCi0vLyBGb3IgTUFHTklUVURFID0gKFYwICsgVkYpIC8gMiBhbmQgUEhBU0VfU0hJRlQg
PSBhcmNjb3MoKFYwIC0gVkYpIC8gKFYwICsgVkYpKSwgb2JzZXJ2ZSB0aGF0IGRlbHRhKDApIGFu
ZCBkZWx0YSgxKSBldmFsdWF0ZSByZXNwZWN0aXZlbHkgdG8gVjAKLS8vIGFuZCBWRi4gVGh1cywg
d2UgY2FuIGV4cHJlc3Mgb3VyIGdsaWRpbmcgZXF1YXRpb24gYWxsIGluIHRlcm1zIG9mIFYwLCBW
RiBhbmQgdC4KLWZsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVHbGlkZURlbHRh
KCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZz
ZXRPbkF4aXMobV9heGlzKTsKLSAgICBib29sIGNhbkNvbXB1dGVHbGlkZSA9IChtX2luaXRpYWxP
ZmZzZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRP
ZmZzZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1faW5pdGlhbE9mZnNldCk7Ci0gICAgaWYgKG1f
Y3VycmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCAhY2FuQ29tcHV0ZUds
aWRlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IHByb2dyZXNzID0gKChmbG9hdCko
b2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSkgLyAobV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxP
ZmZzZXQpOwotICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIGludmVzdGlnYXRlIHdoeSAt
bV9nbGlkZVBoYXNlU2hpZnQgcmVzdWx0cyBpbiB0aGUgYmVoYXZpb3Igd2Ugd2FudC4KLSAgICBm
bG9hdCBzaGlmdCA9IGNlaWwobV9nbGlkZU1hZ25pdHVkZSAqICgxICsgY29zKHBpRmxvYXQgKiBw
cm9ncmVzcyAtIG1fZ2xpZGVQaGFzZVNoaWZ0KSkpOwotICAgIHNoaWZ0ID0gbV9pbml0aWFsT2Zm
c2V0IDwgbV90YXJnZXRPZmZzZXQgPyBzdGQ6Om1heDxmbG9hdD4oc2hpZnQsIDEpIDogc3RkOjpt
aW48ZmxvYXQ+KHNoaWZ0LCAtMSk7Ci0gICAgaWYgKChtX2luaXRpYWxPZmZzZXQgPCBtX3Rhcmdl
dE9mZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA+IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV9pbml0aWFs
T2Zmc2V0ID4gbV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0ICsgc2hpZnQgPCBtX3RhcmdldE9mZnNl
dCkpCi0gICAgICAgIHJldHVybiBtX3RhcmdldE9mZnNldCAtIG9mZnNldDsKLQotICAgIHJldHVy
biBzaGlmdDsKLX0KLQotdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjppbml0aWFsaXplR2xp
ZGVQYXJhbWV0ZXJzKGJvb2wgc2hvdWxkSW5jcmVhc2VJbml0aWFsV2hlZWxEZWx0YSkKLXsKLSAg
ICAvLyBGSVhNRTogR2xpZGUgYm9vc3QgaXMgYSBoYWNreSB3YXkgdG8gc3BlZWQgdXAgbmF0dXJh
bCBzY3JvbGxpbmcgdmVsb2NpdHkuIFdlIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBhY2Nv
bXBsaXNoIHRoaXMuCi0gICAgaWYgKHNob3VsZEluY3JlYXNlSW5pdGlhbFdoZWVsRGVsdGEpCi0g
ICAgICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAqPSBnbGlkZUJvb3N0TXVsdGlwbGllcjsK
LQotICAgIC8vIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheSB0byBkZXRlcm1pbmUg
YSBnb29kIHRhcmdldCBkZWx0YSB0aGFuIG11bHRpcGx5aW5nIGJ5IGEgZmFjdG9yIGFuZCBjbGFt
cGluZyB0byBtaW4vbWF4IHZhbHVlcy4KLSAgICBmbG9hdCB0YXJnZXRGaW5hbFdoZWVsRGVsdGEg
PSBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yICogKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0
YSA8IDAgPyAtbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIDogbV9nbGlkZUluaXRpYWxXaGVlbERl
bHRhKTsKLSAgICB0YXJnZXRGaW5hbFdoZWVsRGVsdGEgPSAobV9nbGlkZUluaXRpYWxXaGVlbERl
bHRhID4gMCA/IDEgOiAtMSkgKiBzdGQ6Om1pbihzdGQ6Om1heCh0YXJnZXRGaW5hbFdoZWVsRGVs
dGEsIG1pblRhcmdldFdoZWVsRGVsdGEpLCBtYXhUYXJnZXRXaGVlbERlbHRhKTsKLSAgICBtX2ds
aWRlTWFnbml0dWRlID0gKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdldEZpbmFsV2hl
ZWxEZWx0YSkgLyAyOwotICAgIG1fZ2xpZGVQaGFzZVNoaWZ0ID0gYWNvcygobV9nbGlkZUluaXRp
YWxXaGVlbERlbHRhIC0gdGFyZ2V0RmluYWxXaGVlbERlbHRhKSAvIChtX2dsaWRlSW5pdGlhbFdo
ZWVsRGVsdGEgKyB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpKTsKLX0KLQotdm9pZCBBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yOjpwdXNoSW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQgd2hlZWxEZWx0YSkKK3Zv
aWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnB1c2hJbml0aWFsV2hlZWxEZWx0YShmbG9hdCB3
aGVlbERlbHRhKQogewogICAgIGlmIChtX251bVdoZWVsRGVsdGFzVHJhY2tlZCA8IHdoZWVsRGVs
dGFXaW5kb3dTaXplKQogICAgICAgICBtX3doZWVsRGVsdGFXaW5kb3dbbV9udW1XaGVlbERlbHRh
c1RyYWNrZWQrK10gPSB3aGVlbERlbHRhOwogfQogCi1mbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yOjphdmVyYWdlSW5pdGlhbFdoZWVsRGVsdGEoKSBjb25zdAorZmxvYXQgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGU6OmF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX251bVdoZWVsRGVsdGFzVHJhY2tlZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yOTEsNyAr
NjMsNyBAQCBmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjphdmVyYWdlSW5pCiAgICAgcmV0
dXJuIHN1bSAvIG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOwogfQogCi12b2lkIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3I6OmNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKQordm9pZCBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZTo6Y2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpCiB7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsgaSsrKQogICAgICAg
ICBtX3doZWVsRGVsdGFXaW5kb3dbaV0gPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCShyZXZpc2lvbiAxODEw
MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JfaAotI2RlZmluZSBBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yX2gKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0KLSNpbmNsdWRlICJBeGlz
U2Nyb2xsU25hcE9mZnNldHMuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIFNjcm9sbFNuYXBTdGF0ZSB7Ci0gICAgU25hcHBp
bmcsCi0gICAgR2xpZGluZywKLSAgICBEZXN0aW5hdGlvblJlYWNoZWQsCi0gICAgVXNlckludGVy
YWN0aW9uCi19OwotCi1lbnVtIGNsYXNzIFdoZWVsRXZlbnRTdGF0dXMgewotICAgIFVzZXJTY3Jv
bGxCZWdpbiwKLSAgICBVc2VyU2Nyb2xsaW5nLAotICAgIFVzZXJTY3JvbGxFbmQsCi0gICAgSW5l
cnRpYWxTY3JvbGxCZWdpbiwKLSAgICBJbmVydGlhbFNjcm9sbGluZywKLSAgICBJbmVydGlhbFNj
cm9sbEVuZCwKLSAgICBVbmtub3duCi19OwotCi1jbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
Q2xpZW50IHsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5BeGlzU2Nyb2xsU25hcEFuaW1hdG9y
Q2xpZW50KCkgeyB9Ci0KLXB1YmxpYzoKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zm
c2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlh
dGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCB2ZWxvY2l0eSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzdGFydFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcihTY3JvbGxFdmVudEF4aXMpID0g
MDsKLX07Ci0KLWNsYXNzIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IgewotcHVibGljOgotICAgIEF4
aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCosIGNvbnN0
IFZlY3RvcjxMYXlvdXRVbml0PiYsIFNjcm9sbEV2ZW50QXhpcyk7Ci0gICAgdm9pZCBoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIGJvb2wgc2hvdWxkT3Zl
cnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwotICAgIHZv
aWQgc2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVn
aW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZSk7Ci0gICAgdm9pZCBlbmRTY3Jv
bGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZSk7Ci0KLSAgICBmbG9hdCBjb21wdXRlU25h
cERlbHRhKCkgY29uc3Q7Ci0gICAgZmxvYXQgY29tcHV0ZUdsaWRlRGVsdGEoKSBjb25zdDsKLQot
ICAgIHZvaWQgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhib29sKTsKLSAgICB2b2lkIHB1c2hJ
bml0aWFsV2hlZWxEZWx0YShmbG9hdCk7Ci0gICAgZmxvYXQgYXZlcmFnZUluaXRpYWxXaGVlbERl
bHRhKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IHdoZWVsRGVsdGFXaW5kb3dTaXplID0gMzsKLQotICAgIEF4
aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIG1fY2xpZW50OwotICAgIFZlY3RvcjxMYXlvdXRV
bml0PiBtX3NuYXBPZmZzZXRzOwotICAgIFNjcm9sbEV2ZW50QXhpcyBtX2F4aXM7Ci0gICAgLy8g
VXNlZCB0byB0cmFjayBib3RoIHNuYXBwaW5nIGFuZCBnbGlkaW5nIGJlaGF2aW9ycy4KLSAgICBT
Y3JvbGxTbmFwU3RhdGUgbV9jdXJyZW50U3RhdGU7Ci0gICAgTGF5b3V0VW5pdCBtX2luaXRpYWxP
ZmZzZXQ7Ci0gICAgTGF5b3V0VW5pdCBtX3RhcmdldE9mZnNldDsKLSAgICAvLyBVc2VkIHRvIHRy
YWNrIGdsaWRpbmcgYmVoYXZpb3IuCi0gICAgTGF5b3V0VW5pdCBtX2JlZ2luVHJhY2tpbmdXaGVl
bERlbHRhT2Zmc2V0OwotICAgIGludCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsKLSAgICBmbG9h
dCBtX3doZWVsRGVsdGFXaW5kb3dbd2hlZWxEZWx0YVdpbmRvd1NpemVdOwotICAgIGZsb2F0IG1f
Z2xpZGVNYWduaXR1ZGU7Ci0gICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQ7Ci0gICAgZmxvYXQg
bV9nbGlkZUluaXRpYWxXaGVlbERlbHRhOwotICAgIGJvb2wgbV9zaG91bGRPdmVycmlkZVdoZWVs
RXZlbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQotCi0jZW5kaWYgLy8gQXhpc1Njcm9sbFNuYXBBbmltYXRvcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5tbQkocmV2aXNpb24gMTgxMDAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMzA0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgiCi0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGZsb2F0IGluZXJ0aWFsU2Nyb2xsUHJl
ZGljdGlvbkZhY3RvciA9IDE2Ljc7Ci1jb25zdCBmbG9hdCBzbmFwTWFnbml0dWRlTWF4ID0gMjU7
Ci1jb25zdCBmbG9hdCBzbmFwTWFnbml0dWRlTWluID0gNTsKLWNvbnN0IGZsb2F0IHNuYXBUaHJl
c2hvbGRIaWdoID0gMTAwMDsKLWNvbnN0IGZsb2F0IHNuYXBUaHJlc2hvbGRMb3cgPSA1MDsKLWNv
bnN0IGZsb2F0IGdsaWRlQm9vc3RNdWx0aXBsaWVyID0gMy41OwotY29uc3QgZmxvYXQgbWF4VGFy
Z2V0V2hlZWxEZWx0YSA9IDc7Ci1jb25zdCBmbG9hdCBtaW5UYXJnZXRXaGVlbERlbHRhID0gMy41
OwotY29uc3QgZmxvYXQgaW5pdGlhbFRvRmluYWxNb21lbnR1bUZhY3RvciA9IDEuMCAvIDQwLjA7
Ci0KLXN0YXRpYyBpbmxpbmUgV2hlZWxFdmVudFN0YXR1cyB0b1doZWVsRXZlbnRTdGF0dXMoUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UsIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVu
dHVtUGhhc2UpCi17Ci0gICAgaWYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9u
ZSkgewotICAgICAgICBzd2l0Y2ggKG1vbWVudHVtUGhhc2UpIHsKLSAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRT
dGF0dXM6OkluZXJ0aWFsU2Nyb2xsQmVnaW47Ci0KLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUNoYW5nZWQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6
SW5lcnRpYWxTY3JvbGxpbmc7Ci0KLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZUVuZGVkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Ny
b2xsRW5kOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVu
dFN0YXR1czo6VW5rbm93bjsgCi0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1vbWVudHVtUGhh
c2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAocGhh
c2UpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOgotICAgICAg
ICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5QmVnaW46Ci0gICAgICAgICAgICByZXR1
cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOwotCi0gICAgICAgIGNhc2UgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7Ci0KLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZUVuZGVkOgotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2FuY2Vs
bGVkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ7
Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IHByb2plY3RlZEluZXJ0aWFsU2Ny
b2xsRGlzdGFuY2UoZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEpCi17Ci0gICAgLy8gRklYTUU6IEV4
cGVyaW1lbnRzIHdpdGggaW5lcnRpYWwgc2Nyb2xsaW5nIHNob3cgYSBmYWlybHkgY29uc2lzdGVu
dCBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5pdGlhbCB3aGVlbCBkZWx0YSBhbmQgdG90
YWwgZGlzdGFuY2Ugc2Nyb2xsZWQuCi0gICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UnbGwgd2FudCB0
byBmaW5kIGEgbW9yZSBhY2N1cmF0ZSB3YXkgb2YgaW5lcnRpYWwgc2Nyb2xsIHByZWRpY3Rpb24u
Ci0gICAgcmV0dXJuIGluZXJ0aWFsU2Nyb2xsUHJlZGljdGlvbkZhY3RvciAqIGluaXRpYWxXaGVl
bERlbHRhOwotfQotCi1BeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIGNsaWVudCwgY29uc3QgVmVjdG9yPExh
eW91dFVuaXQ+JiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCi0gICAgOiBtX2Ns
aWVudChjbGllbnQpCi0gICAgLCBtX3NuYXBPZmZzZXRzKHNuYXBPZmZzZXRzKQotICAgICwgbV9h
eGlzKGF4aXMpCi0gICAgLCBtX2N1cnJlbnRTdGF0ZShTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0
aW9uUmVhY2hlZCkKLSAgICAsIG1faW5pdGlhbE9mZnNldCgwKQotICAgICwgbV90YXJnZXRPZmZz
ZXQoMCkKLSAgICAsIG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQoMCkKLSAgICAsIG1f
bnVtV2hlZWxEZWx0YXNUcmFja2VkKDApCi0gICAgLCBtX2dsaWRlTWFnbml0dWRlKDApCi0gICAg
LCBtX2dsaWRlUGhhc2VTaGlmdCgwKQotICAgICwgbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhKDAp
Ci0gICAgLCBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudChmYWxzZSkKLXsKLX0KLQotdm9pZCBB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgZXZlbnQpCi17Ci0gICAgZmxvYXQgd2hlZWxEZWx0YSA9IG1fYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyAtZXZlbnQuZGVsdGFYKCkgOiAtZXZlbnQuZGVsdGFZ
KCk7Ci0gICAgV2hlZWxFdmVudFN0YXR1cyB3aGVlbFN0YXR1cyA9IHRvV2hlZWxFdmVudFN0YXR1
cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNlKCkpOwotCi0gICAgc3dpdGNoICh3
aGVlbFN0YXR1cykgewotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2lu
OgotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzoKLSAgICAgICAgZW5k
U2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OlVzZXJJbnRlcmFjdGlvbik7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5k
OgotICAgICAgICBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpTbmFw
cGluZyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVy
dGlhbFNjcm9sbEJlZ2luOgotICAgICAgICAvLyBCZWdpbiB0cmFja2luZyB3aGVlbCBkZWx0YXMg
Zm9yIGdsaWRlIHByZWRpY3Rpb24uCi0gICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oU2Ny
b2xsU25hcFN0YXRlOjpVc2VySW50ZXJhY3Rpb24pOwotICAgICAgICBwdXNoSW5pdGlhbFdoZWVs
RGVsdGEod2hlZWxEZWx0YSk7Ci0gICAgICAgIG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZz
ZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKG1fYXhpcyk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzoKLSAgICAg
ICAgLy8gVGhpcyBjaGVjayBmb3IgRGVzdGluYXRpb25SZWFjaGVkIGVuc3VyZXMgdGhhdCB3ZSBk
b24ndCByZWNlaXZlIGFub3RoZXIgc2V0IG9mIG1vbWVudHVtIGV2ZW50cyBhZnRlciBlbmRpbmcg
dGhlIGxhc3QgZ2xpZGUuCi0gICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFw
U3RhdGU6OkdsaWRpbmcgJiYgbV9jdXJyZW50U3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0
aW5hdGlvblJlYWNoZWQpIHsKLSAgICAgICAgICAgIGlmIChtX251bVdoZWVsRGVsdGFzVHJhY2tl
ZCA8IHdoZWVsRGVsdGFXaW5kb3dTaXplKQotICAgICAgICAgICAgICAgIHB1c2hJbml0aWFsV2hl
ZWxEZWx0YSh3aGVlbERlbHRhKTsKLQotICAgICAgICAgICAgaWYgKG1fbnVtV2hlZWxEZWx0YXNU
cmFja2VkID09IHdoZWVsRGVsdGFXaW5kb3dTaXplKQotICAgICAgICAgICAgICAgIGJlZ2luU2Ny
b2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9s
bEVuZDoKLSAgICAgICAgYmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6
U25hcHBpbmcpOwotICAgICAgICBjbGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCk7Ci0gICAg
ICAgIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3I6OnNob3VsZE92ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIGV2ZW50KSBjb25zdAotewotICAgIHJldHVybiBtX3Nob3VsZE92ZXJyaWRlV2hlZWxF
dmVudCAmJiB0b1doZWVsRXZlbnRTdGF0dXMoZXZlbnQucGhhc2UoKSwgZXZlbnQubW9tZW50dW1Q
aGFzZSgpKSA9PSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzsKLX0KLQotdm9p
ZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCkKLXsK
LSAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5hdGlvblJl
YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpTbmFwcGluZyk7Ci0gICAgZmxvYXQgZGVsdGEgPSBtX2N1cnJlbnRTdGF0ZSA9PSBTY3Jv
bGxTbmFwU3RhdGU6OlNuYXBwaW5nID8gY29tcHV0ZVNuYXBEZWx0YSgpIDogY29tcHV0ZUdsaWRl
RGVsdGEoKTsKLSAgICBpZiAoZGVsdGEpCi0gICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3Jv
bGxPbkF4aXMobV9heGlzLCBkZWx0YSk7Ci0gICAgZWxzZQotICAgICAgICBlbmRTY3JvbGxTbmFw
QW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRpb25SZWFjaGVkKTsKLX0KLQotdm9p
ZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xs
U25hcFN0YXRlIG5ld1N0YXRlKQotewotICAgIEFTU0VSVChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFw
U3RhdGU6OkdsaWRpbmcgfHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7
Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0T25BeGlzKG1f
YXhpcyk7Ci0gICAgZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEgPSBuZXdTdGF0ZSA9PSBTY3JvbGxT
bmFwU3RhdGU6OkdsaWRpbmcgPyBhdmVyYWdlSW5pdGlhbFdoZWVsRGVsdGEoKSA6IDA7Ci0gICAg
TGF5b3V0VW5pdCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IG5ld1N0YXRlID09IFNjcm9s
bFNuYXBTdGF0ZTo6R2xpZGluZyA/IG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgKyBM
YXlvdXRVbml0KHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UoaW5pdGlhbFdoZWVsRGVs
dGEpKSA6IG9mZnNldDsKLSAgICBpZiAobV9zbmFwT2Zmc2V0cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3Rk
OjptYXgocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIG1fc25hcE9mZnNldHMuZmlyc3QoKSks
IG1fc25hcE9mZnNldHMubGFzdCgpKTsKLSAgICBtX2luaXRpYWxPZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgbV90YXJnZXRPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldDxMYXlvdXRVbml0LCBmbG9hdD4o
bV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIGluaXRpYWxXaGVlbERl
bHRhKTsKLSAgICBpZiAobV9pbml0aWFsT2Zmc2V0ID09IG1fdGFyZ2V0T2Zmc2V0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZSA9IG5ld1N0YXRlOwotICAgIGlmIChuZXdT
dGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKLSAgICAgICAgbV9zaG91bGRPdmVy
cmlkZVdoZWVsRXZlbnQgPSB0cnVlOwotICAgICAgICBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEg
PSBpbml0aWFsV2hlZWxEZWx0YTsKLSAgICAgICAgYm9vbCBnbGlkZVJlcXVpcmVzQm9vc3Q7Ci0g
ICAgICAgIGlmIChpbml0aWFsV2hlZWxEZWx0YSA+IDApCi0gICAgICAgICAgICBnbGlkZVJlcXVp
cmVzQm9vc3QgPSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAtIG9mZnNldCA8IG1fdGFyZ2V0
T2Zmc2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb247Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9IG9mZnNldCAtIHByb2plY3RlZFNjcm9sbERlc3Rp
bmF0aW9uIDwgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gLSBtX3RhcmdldE9mZnNldDsKLQot
ICAgICAgICBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGdsaWRlUmVxdWlyZXNCb29zdCk7Ci0g
ICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKLSAgICB9Ci0gICAgbV9jbGll
bnQtPnN0YXJ0U2Nyb2xsU25hcFRpbWVyKG1fYXhpcyk7Ci19Ci0KLXZvaWQgQXhpc1Njcm9sbFNu
YXBBbmltYXRvcjo6ZW5kU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUgbmV3U3Rh
dGUpCi17Ci0gICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRp
b25SZWFjaGVkIHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6VXNlckludGVyYWN0aW9u
KTsKLSAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKQot
ICAgICAgICBjbGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCk7Ci0KLSAgICBtX2N1cnJlbnRT
dGF0ZSA9IG5ld1N0YXRlOwotICAgIG1fY2xpZW50LT5zdG9wU2Nyb2xsU25hcFRpbWVyKG1fYXhp
cyk7Ci19Ci0KLS8vIENvbXB1dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xsIGJ5IHdoZW4gcGVyZm9y
bWluZyBhICJzbmFwIiBvcGVyYXRpb24sIGkuZS4gd2hlbiBhIHVzZXIgcmVsZWFzZXMgdGhlIHRy
YWNrcGFkIHdpdGhvdXQgZmxpY2tpbmcuIFRoZSBzbmFwIGRlbHRhCi0vLyBpcyBhIGZ1bmN0aW9u
IG9mIHByb2dyZXNzIHQsIHdoZXJlIHQgaXMgZXF1YWwgdG8gRElTVEFOQ0VfVFJBVkVMRUQgLyBU
T1RBTF9ESVNUQU5DRSwgRElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhl
IGluaXRpYWxPZmZzZXQKLS8vIHRvIHRoZSBjdXJyZW50IG9mZnNldCwgYW5kIFRPVEFMX0RJU1RB
TkNFIGlzIHRoZSBkaXN0YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFyZ2V0T2Zmc2V0LiBU
aGUgc25hcHBpbmcgZXF1YXRpb24gaXMgYXMgZm9sbG93czoKLS8vIGRlbHRhKHQpID0gTUFHTklU
VURFICogc2luKFBJICogdCkuIE1BR05JVFVERSBpbmRpY2F0ZXMgdGhlIHRvcCBzcGVlZCByZWFj
aGVkIG5lYXIgdGhlIG1pZGRsZSBvZiB0aGUgYW5pbWF0aW9uICh0ID0gMC41KSwgYW5kIGlzIGEg
bGluZWFyCi0vLyByZWxhdGlvbnNoaXAgb2YgdGhlIGRpc3RhbmNlIHRyYXZlbGVkLCBjbGFtcGVk
IGJ5IGFyYml0cmFyeSBtaW4gYW5kIG1heCB2YWx1ZXMuCi1mbG9hdCBBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yOjpjb21wdXRlU25hcERlbHRhKCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IG9mZnNl
dCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRPbkF4aXMobV9heGlzKTsKLSAgICBib29sIGNhbkNv
bXB1dGVTbmFwID0gIChtX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1fdGFy
Z2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1faW5p
dGlhbE9mZnNldCk7Ci0gICAgaWYgKG1fY3VycmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6
U25hcHBpbmcgfHwgIWNhbkNvbXB1dGVTbmFwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlu
dCBzaWduID0gbV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgPyAxIDogLTE7Ci0gICAg
ZmxvYXQgcHJvZ3Jlc3MgPSAoKGZsb2F0KShvZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpKSAvICht
X3RhcmdldE9mZnNldCAtIG1faW5pdGlhbE9mZnNldCk7Ci0gICAgLy8gVGhyZXNob2xkIHRoZSBk
aXN0YW5jZSBiZWZvcmUgY29tcHV0aW5nIG1hZ25pdHVkZSwgc28gb25seSBkaXN0YW5jZXMgd2l0
aGluIGEgY2VydGFpbiByYW5nZSBhcmUgY29uc2lkZXJlZC4KLSAgICBmbG9hdCB0aHJlc2hvbGRl
ZERpc3RhbmNlID0gc3RkOjptaW4oc3RkOjptYXg8ZmxvYXQ+KChtX3RhcmdldE9mZnNldCAtIG1f
aW5pdGlhbE9mZnNldCkgKiBzaWduLCBzbmFwVGhyZXNob2xkTG93KSwgc25hcFRocmVzaG9sZEhp
Z2gpOwotICAgIGZsb2F0IG1hZ25pdHVkZSA9IHNuYXBNYWduaXR1ZGVNaW4gKyAoc25hcE1hZ25p
dHVkZU1heCAtIHNuYXBNYWduaXR1ZGVNaW4pICogKHRocmVzaG9sZGVkRGlzdGFuY2UgLSBzbmFw
VGhyZXNob2xkTG93KSAvIChzbmFwVGhyZXNob2xkSGlnaCAtIHNuYXBUaHJlc2hvbGRMb3cpOwot
ICAgIGZsb2F0IHJhd1NuYXBBbW91bnQgPSBzdGQ6Om1heDxmbG9hdD4oMSwgbWFnbml0dWRlICog
c2luKHBpRmxvYXQgKiBwcm9ncmVzcykpOwotICAgIGlmICgobV90YXJnZXRPZmZzZXQgPCBvZmZz
ZXQgJiYgb2Zmc2V0IC0gcmF3U25hcEFtb3VudCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJn
ZXRPZmZzZXQgPiBvZmZzZXQgJiYgb2Zmc2V0ICsgcmF3U25hcEFtb3VudCA+IG1fdGFyZ2V0T2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OwotCi0gICAgcmV0
dXJuIHNpZ24gKiByYXdTbmFwQW1vdW50OwotfQotCi0vLyBDb21wdXRlcyB0aGUgYW1vdW50IHRv
IHNjcm9sbCBieSB3aGVuIHBlcmZvcm1pbmcgYSAiZ2xpZGUiIG9wZXJhdGlvbiwgaS5lLiB3aGVu
IGEgdXNlciByZWxlYXNlcyB0aGUgdHJhY2twYWQgd2l0aCBhbiBpbml0aWFsIHZlbG9jaXR5LiBI
ZXJlLAotLy8gd2Ugd2FudCB0aGUgc2Nyb2xsIG9mZnNldCB0byBhbmltYXRlIGRpcmVjdGx5IHRv
IHRoZSBzbmFwIHBvaW50LiBUaGUgc25hcCBkZWx0YSBpcyBhIGZ1bmN0aW9uIG9mIHByb2dyZXNz
IHQsIHdoZXJlIHQgaXMgZXF1YWwgdG8KLS8vIERJU1RBTkNFX1RSQVZFTEVEIC8gVE9UQUxfRElT
VEFOQ0UsIERJU1RBTkNFX1RSQVZFTEVEIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBpbml0aWFs
T2Zmc2V0IHRvIHRoZSBjdXJyZW50IG9mZnNldCwgYW5kIFRPVEFMX0RJU1RBTkNFIGlzCi0vLyB0
aGUgZGlzdGFuY2UgZnJvbSBpbml0aWFsT2Zmc2V0IHRvIHRhcmdldE9mZnNldC4KLS8vIFRoZSBn
ZW5lcmFsIG1vZGVsIG9mIG91ciBnbGlkaW5nIGVxdWF0aW9uIGlzIGRlbHRhKHQpID0gTUFHTklU
VURFICogKDEgKyBjb3MoUEkgKiB0ICsgUEhBU0VfU0hJRlQpKS4gVGhpcyB3YXMgZGV0ZXJtaW5l
ZCBhZnRlciBleGFtaW5pbmcgdGhlCi0vLyBtb21lbnR1bSB2ZWxvY2l0eSBjdXJ2ZSBhcyBhIGZ1
bmN0aW9uIG9mIHByb2dyZXNzLiBUbyBjb21wdXRlIE1BR05JVFVERSBhbmQgUEhBU0VfU0hJRlQs
IHdlIHVzZSBpbml0aWFsIHZlbG9jaXR5IFYwIGFuZCB0aGUgZmluYWwgdmVsb2NpdHkgVkYsCi0v
LyBib3RoIGFzIHdoZWVsIGRlbHRhcyAocGl4ZWxzIHBlciB0aW1lc3RlcCkuIFZGIHNob3VsZCBi
ZSBhIHNtYWxsIHZhbHVlICg8IDEwKSBjaG9zZW4gYmFzZWQgb24gdGhlIGluaXRpYWwgdmVsb2Np
dHkgYW5kIFRPVEFMX0RJU1RBTkNFLgotLy8gV2UgYWxzbyBlbmZvcmNlIHRoZSBmb2xsb3dpbmcg
Y29uc3RyYWludHMgZm9yIHRoZSBnbGlkaW5nIGVxdWF0aW9uOgotLy8gICAxLiBkZWx0YSgwKSA9
IFYwLCBzaW5jZSB3ZSB3YW50IHRoZSBpbml0aWFsIHZlbG9jaXR5IG9mIHRoZSBnbGlkaW5nIGFu
aW1hdGlvbiB0byBtYXRjaCB0aGUgdXNlcidzIHNjcm9sbCB2ZWxvY2l0eS4gVGhlIGV4Y2VwdGlv
biB0byB0aGlzIGlzCi0vLyAgICAgIHdoZW4gdGhlIGdsaWRlIHZlbG9jaXR5IGlzIG5vdCBlbm91
Z2ggdG8gbmF0dXJhbGx5IHJlYWNoIHRoZSBuZXh0IHNuYXAgcG9pbnQsIGFuZCB0aHVzIHJlcXVp
cmVzIGEgYm9vc3QgKHNlZSBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKQotLy8gICAyLiBkZWx0
YSgxKSA9IFZGLCBzaW5jZSBhdCB0PTEsIHRoZSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZCBhbmQg
d2Ugd2FudCB0aGUgbGFzdCB3aGVlbCBkZWx0YSB0byBtYXRjaCB0aGUgZmluYWwgdmVsb2NpdHkg
VkYuIE5vdGUgdGhhdCB0aGlzCi0vLyAgICAgIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGZp
bmFsIHZlbG9jaXR5IHdpbGwgYmUgZXhhY3RseSBWRi4gSG93ZXZlciwgYXNzdW1pbmcgdGhhdCB0
aGUgaW5pdGlhbCB2ZWxvY2l0eSBpcyBtdWNoIGxlc3MgdGhhbiBUT1RBTF9ESVNUQU5DRSwKLS8v
ICAgICAgdGhlIGxhc3Qgd2hlZWwgZGVsdGEgd2lsbCBiZSB2ZXJ5IGNsb3NlLCBpZiBub3QgdGhl
IHNhbWUsIGFzIFZGLgotLy8gRm9yIE1BR05JVFVERSA9IChWMCArIFZGKSAvIDIgYW5kIFBIQVNF
X1NISUZUID0gYXJjY29zKChWMCAtIFZGKSAvIChWMCArIFZGKSksIG9ic2VydmUgdGhhdCBkZWx0
YSgwKSBhbmQgZGVsdGEoMSkgZXZhbHVhdGUgcmVzcGVjdGl2ZWx5IHRvIFYwCi0vLyBhbmQgVkYu
IFRodXMsIHdlIGNhbiBleHByZXNzIG91ciBnbGlkaW5nIGVxdWF0aW9uIGFsbCBpbiB0ZXJtcyBv
ZiBWMCwgVkYgYW5kIHQuCi1mbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjb21wdXRlR2xp
ZGVEZWx0YSgpIGNvbnN0Ci17Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Ny
b2xsT2Zmc2V0T25BeGlzKG1fYXhpcyk7Ci0gICAgYm9vbCBjYW5Db21wdXRlR2xpZGUgPSAobV9p
bml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1f
dGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOwotICAg
IGlmIChtX2N1cnJlbnRTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgIWNhbkNv
bXB1dGVHbGlkZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBwcm9ncmVzcyA9ICgo
ZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9p
bml0aWFsT2Zmc2V0KTsKLSAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBpbnZlc3RpZ2F0
ZSB3aHkgLW1fZ2xpZGVQaGFzZVNoaWZ0IHJlc3VsdHMgaW4gdGhlIGJlaGF2aW9yIHdlIHdhbnQu
Ci0gICAgZmxvYXQgc2hpZnQgPSBjZWlsKG1fZ2xpZGVNYWduaXR1ZGUgKiAoMSArIGNvcyhwaUZs
b2F0ICogcHJvZ3Jlc3MgLSBtX2dsaWRlUGhhc2VTaGlmdCkpKTsKLSAgICBzaGlmdCA9IG1faW5p
dGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0ID8gc3RkOjptYXg8ZmxvYXQ+KHNoaWZ0LCAxKSA6
IHN0ZDo6bWluPGZsb2F0PihzaGlmdCwgLTEpOwotICAgIGlmICgobV9pbml0aWFsT2Zmc2V0IDwg
bV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0ICsgc2hpZnQgPiBtX3RhcmdldE9mZnNldCkgfHwgKG1f
aW5pdGlhbE9mZnNldCA+IG1fdGFyZ2V0T2Zmc2V0ICYmIG9mZnNldCArIHNoaWZ0IDwgbV90YXJn
ZXRPZmZzZXQpKQotICAgICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7Ci0KLSAg
ICByZXR1cm4gc2hpZnQ7Ci19Ci0KLXZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aW5pdGlh
bGl6ZUdsaWRlUGFyYW1ldGVycyhib29sIHNob3VsZEluY3JlYXNlSW5pdGlhbFdoZWVsRGVsdGEp
Ci17Ci0gICAgLy8gRklYTUU6IEdsaWRlIGJvb3N0IGlzIGEgaGFja3kgd2F5IHRvIHNwZWVkIHVw
IG5hdHVyYWwgc2Nyb2xsaW5nIHZlbG9jaXR5LiBXZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkg
dG8gYWNjb21wbGlzaCB0aGlzLgotICAgIGlmIChzaG91bGRJbmNyZWFzZUluaXRpYWxXaGVlbERl
bHRhKQotICAgICAgICBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKj0gZ2xpZGVCb29zdE11bHRp
cGxpZXI7Ci0KLSAgICAvLyBGSVhNRTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZGV0
ZXJtaW5lIGEgZ29vZCB0YXJnZXQgZGVsdGEgdGhhbiBtdWx0aXBseWluZyBieSBhIGZhY3RvciBh
bmQgY2xhbXBpbmcgdG8gbWluL21heCB2YWx1ZXMuCi0gICAgZmxvYXQgdGFyZ2V0RmluYWxXaGVl
bERlbHRhID0gaW5pdGlhbFRvRmluYWxNb21lbnR1bUZhY3RvciAqIChtX2dsaWRlSW5pdGlhbFdo
ZWVsRGVsdGEgPCAwID8gLW1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA6IG1fZ2xpZGVJbml0aWFs
V2hlZWxEZWx0YSk7Ci0gICAgdGFyZ2V0RmluYWxXaGVlbERlbHRhID0gKG1fZ2xpZGVJbml0aWFs
V2hlZWxEZWx0YSA+IDAgPyAxIDogLTEpICogc3RkOjptaW4oc3RkOjptYXgodGFyZ2V0RmluYWxX
aGVlbERlbHRhLCBtaW5UYXJnZXRXaGVlbERlbHRhKSwgbWF4VGFyZ2V0V2hlZWxEZWx0YSk7Ci0g
ICAgbV9nbGlkZU1hZ25pdHVkZSA9IChtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKyB0YXJnZXRG
aW5hbFdoZWVsRGVsdGEpIC8gMjsKLSAgICBtX2dsaWRlUGhhc2VTaGlmdCA9IGFjb3MoKG1fZ2xp
ZGVJbml0aWFsV2hlZWxEZWx0YSAtIHRhcmdldEZpbmFsV2hlZWxEZWx0YSkgLyAobV9nbGlkZUlu
aXRpYWxXaGVlbERlbHRhICsgdGFyZ2V0RmluYWxXaGVlbERlbHRhKSk7Ci19Ci0KLXZvaWQgQXhp
c1Njcm9sbFNuYXBBbmltYXRvcjo6cHVzaEluaXRpYWxXaGVlbERlbHRhKGZsb2F0IHdoZWVsRGVs
dGEpCi17Ci0gICAgaWYgKG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkIDwgd2hlZWxEZWx0YVdpbmRv
d1NpemUpCi0gICAgICAgIG1fd2hlZWxEZWx0YVdpbmRvd1ttX251bVdoZWVsRGVsdGFzVHJhY2tl
ZCsrXSA9IHdoZWVsRGVsdGE7Ci19Ci0KLWZsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmF2
ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX251bVdoZWVsRGVs
dGFzVHJhY2tlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBzdW0gPSAwOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQ7IGkrKykKLSAgICAg
ICAgc3VtICs9IG1fd2hlZWxEZWx0YVdpbmRvd1tpXTsKLQotICAgIHJldHVybiBzdW0gLyBtX251
bVdoZWVsRGVsdGFzVHJhY2tlZDsKLX0KLQotdm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpj
bGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOyBpKyspCi0gICAgICAgIG1fd2hlZWxEZWx0YVdpbmRv
d1tpXSA9IDA7Ci0KLSAgICBtX251bVdoZWVsRGVsdGFzVHJhY2tlZCA9IDA7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENTU19TQ1JPTExfU05BUApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlz
aW9uIDE4MTAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsOCArMTQ3LDYgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2Fy
eSgpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihmbG9hdCBkZWx0YVgs
IGZsb2F0IGRlbHRhWSk7Ci0KICAgICBib29sIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZH
ZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFNjcm9sbEV2ZW50QXhpcyk7CiAjZW5k
aWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbQkocmV2aXNpb24gMTgxMDAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAyLDE5ICsxMTAy
LDE5IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKICAgICByZXR1
cm4gZGlkSGFuZGxlRXZlbnQ7CiB9CiAKLWJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZElu
RGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQorYm9vbCBTY3JvbGxBbmltYXRv
ck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkaXJlY3Rpb24pCiB7CiAg
ICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7Ci0gICAgaWYgKHN0ZDo6ZmFic2YoZGVsdGFZKSA+PSBm
YWJzZihkZWx0YVgpKSB7Ci0gICAgICAgIGlmIChkZWx0YVkgPCAwKSB7CisgICAgaWYgKGZhYnNm
KGRpcmVjdGlvbi5oZWlnaHQoKSkgPj0gZmFic2YoZGlyZWN0aW9uLndpZHRoKCkpKSB7CisgICAg
ICAgIGlmIChkaXJlY3Rpb24uaGVpZ2h0KCkgPCAwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUg
dHJ5aW5nIHRvIHNjcm9sbCB1cC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUg
dG9wCiAgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtX3Njcm9sbGFibGVBcmVhLnZp
c2libGVDb250ZW50UmVjdCgpLnkoKSArIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCku
eSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8g
c2Nyb2xsIGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQog
ICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS50b3RhbENv
bnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gKG1fc2Nyb2xsYWJsZUFyZWEudmlzaWJsZUNvbnRlbnRS
ZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKS55KCkpKTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVsdGFYICE9IDApIHsKLSAgICAgICAgaWYgKGRlbHRh
WCA8IDApIHsKKyAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbi53aWR0aCgpKSB7CisgICAgICAgIGlm
IChkaXJlY3Rpb24ud2lkdGgoKSA8IDApIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcg
dG8gc2Nyb2xsIGxlZnQuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGxlZnQK
ICAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJlYS52aXNpYmxl
Q29udGVudFJlY3QoKS54KCkgKyBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigpLngoKSk7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMTIzLDcgKzExMjMsNyBAQCBib29sIFNjcm9sbEFuaW1h
dG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYg
KChkZWx0YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEg
JiYgbGltaXREZWx0YS5oZWlnaHQoKSA8IDEpKQorICAgIGlmICgoZGlyZWN0aW9uLndpZHRoKCkg
fHwgZGlyZWN0aW9uLmhlaWdodCgpKSAmJiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1p
dERlbHRhLmhlaWdodCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTEyMTYsMTEgKzEyMTYsNiBAQCBJbnRTaXplIFNjcm9sbEFuaW1hdG9yTWFj
OjpzdHJldGNoQW1vdW50CiAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEub3ZlcmhhbmdBbW91
bnQoKTsKIH0KIAotYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29u
c3QgRmxvYXRTaXplJiBkaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIHBpbm5lZEluRGlyZWN0aW9u
KGRpcmVjdGlvbi53aWR0aCgpLCBkaXJlY3Rpb24uaGVpZ2h0KCkpOwotfQotCiBib29sIFNjcm9s
bEFuaW1hdG9yTWFjOjpjYW5TY3JvbGxIb3Jpem9udGFsbHkoKQogewogICAgIFNjcm9sbGJhciog
c2Nyb2xsYmFyID0gbV9zY3JvbGxhYmxlQXJlYS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7Cg==
</data>
<flag name="review"
          id="272836"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>