<?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>142589</bug_id>
          
          <creation_ts>2015-03-11 12:45:07 -0700</creation_ts>
          <short_desc>Refactored the JSC::Heap extra cost API for clarity and to make some known bugs more obvious</short_desc>
          <delta_ts>2015-03-11 14:30:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>kling</cc>
    
    <cc>mhahnenb</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076406</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-11 12:45:07 -0700</bug_when>
    <thetext>Refactored the JSC::Heap extra cost API for clarity and to make some known bugs more obvious</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076410</commentid>
    <comment_count>1</comment_count>
      <attachid>248443</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-11 13:03:07 -0700</bug_when>
    <thetext>Created attachment 248443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076420</commentid>
    <comment_count>2</comment_count>
      <attachid>248443</attachid>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2015-03-11 13:22:55 -0700</bug_when>
    <thetext>Comment on attachment 248443
Patch

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

Is there a bugzilla bug filed somewhere for fixing all of these broken instances? Might be worth it to paste the link next to the FIXME.

&gt; Source/WebCore/ChangeLog:11
&gt; +        canvas, which is the causde of https://bugs.webkit.org/show_bug.cgi?id=142457.

s/causde/cause</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076421</commentid>
    <comment_count>3</comment_count>
      <attachid>248443</attachid>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2015-03-11 13:27:39 -0700</bug_when>
    <thetext>Comment on attachment 248443
Patch

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

&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:257
&gt; +    heap()-&gt;reportExtraMemoryVisited(owner, size);

Not to prematurely optimize, but I wonder if it might make sense to keep private counters in each of the SlotVisitors and then to add them all up at the end of the collection (kind of like we do with other counters)? This could reduce contention during parallel collections that have to report great numbers of DOM elements with extra cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076432</commentid>
    <comment_count>4</comment_count>
      <attachid>248443</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-11 14:16:30 -0700</bug_when>
    <thetext>Comment on attachment 248443
Patch

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

&gt;&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:257
&gt;&gt; +    heap()-&gt;reportExtraMemoryVisited(owner, size);
&gt; 
&gt; Not to prematurely optimize, but I wonder if it might make sense to keep private counters in each of the SlotVisitors and then to add them all up at the end of the collection (kind of like we do with other counters)? This could reduce contention during parallel collections that have to report great numbers of DOM elements with extra cost.

Seems like a good idea. Probably makes the code a little simpler, too. Probably best as a separate patch, since this patch hopes to only rename and document things.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        canvas, which is the causde of https://bugs.webkit.org/show_bug.cgi?id=142457.
&gt; 
&gt; s/causde/cause

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076433</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-11 14:16:47 -0700</bug_when>
    <thetext>&gt; Is there a bugzilla bug filed somewhere for fixing all of these broken
&gt; instances? Might be worth it to paste the link next to the FIXME.

Bokay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076434</commentid>
    <comment_count>6</comment_count>
      <attachid>248446</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-11 14:17:21 -0700</bug_when>
    <thetext>Created attachment 248446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076440</commentid>
    <comment_count>7</comment_count>
      <attachid>248446</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-03-11 14:28:35 -0700</bug_when>
    <thetext>Comment on attachment 248446
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076441</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-11 14:30:24 -0700</bug_when>
    <thetext>Committed r181407: &lt;http://trac.webkit.org/changeset/181407&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248443</attachid>
            <date>2015-03-11 13:03:07 -0700</date>
            <delta_ts>2015-03-11 14:17:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142589-20150311130241.patch</filename>
            <type>text/plain</type>
            <size>34266</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE1LTAzLTExICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVmYWN0b3JlZCB0aGUgSlNDOjpIZWFwIGV4dHJhIGNvc3QgQVBJIGZvciBjbGFyaXR5IGFu
ZCB0byBtYWtlIHNvbWUga25vd24gYnVncyBtb3JlIG9idmlvdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU4OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAgICAg
IChKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdCk6IEFkZGVkIGEgRklYTUUgdG8gYW5ub3RhdGUgYSBr
bm93biBidWcuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlz
aXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOiB1cGRhdGVkIGZvciByZW5hbWUuCisKKyAgICAg
ICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeVNsb3dDYXNlKTogUmVuYW1l
ZCBvdXIgcmVwb3J0aW5nCisgICAgICAgIEFQSXMgdG8gY2xhcmlmeSB0aGVpciByZWxhdGlvbnNo
aXAgdG8gZWFjaCBvdGhlcjogT25lIG11c3QgcmVwb3J0IGV4dHJhCisgICAgICAgIG1lbW9yeSBh
dCB0aGUgdGltZSBvZiBhbGxvY2F0aW9uLCBhbmQgYXQgdGhlIHRpbWUgdGhlIEdDIHZpc2l0cyBp
dC4KKworICAgICAgICAoSlNDOjpIZWFwOjpleHRyYU1lbW9yeVNpemUpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y2FwYWNpdHkpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzaXplQWZ0ZXJDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbFN0
YXJ0Q29sbGVjdGlvbik6IFVwZGF0ZWQgZm9yIHJlbmFtZXMuIEFkZGVkIGV4cGxpY2l0CisgICAg
ICAgIEFQSSBmb3IgZGVwcmVjYXRlZCB1c2VycyB3aG8gY2FuJ3QgdXNlIG91ciBiZXN0IEFQSS4K
KyAKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpleHRyYVNpemUpOiBEZWxldGVkLgorCisgICAg
ICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCk6CisgICAgICAgIChKU0M6
OkhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRl
cHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydEV4
dHJhTWVtb3J5Q29zdCk6IERlbGV0ZWQuIERpdHRvLgorCisgICAgICAgICogaGVhcC9TbG90Vmlz
aXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlVc2FnZSk6IERlbGV0ZWQuIE1vdmVkIHRo
aXMKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBIZWFwIHNpbmNlIGl0J3MgcHJldHR5
IGRldGFpbGVkIGluIGl0cyBhY2Nlc3MKKyAgICAgICAgdG8gdGhlIGhlYXAuCisKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKTog
VXBkYXRlZCBmb3IKKyAgICAgICAgcmVuYW1lcy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVUb0F0b21pY1N0cmluZyk6CisgICAgICAg
IChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKTogVXBkYXRl
ZCBmb3IgcmVuYW1lcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZCk6IEFkZGVkIEZJWE1F
LgorCisgICAgICAgICogcnVudGltZS9XZWFrTWFwRGF0YS5jcHA6CisgICAgICAgIChKU0M6Oldl
YWtNYXBEYXRhOjp2aXNpdENoaWxkcmVuKTogVXBkYXRlZCBmb3IgcmVuYW1lLgorCiAyMDE1LTAz
LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIGV2ZW50
IGhhbmRsZXIgZml4ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJl
dmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw5IEBAIHZvaWQgSlNSZXBvcnRFeHRyYU1lbW9y
eUNvc3QoSlNDb250ZXh0UmUKICAgICB9CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgZXhlYy0+dm0oKS5oZWFwLnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChzaXplKTsKKworICAgIC8vIEZJWE1FOiBzd2l0Y2ggdG8gZGVw
cmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5LgorICAgIGV4ZWMtPnZtKCkuaGVhcC5yZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChzaXplKTsKIH0KIAogZXh0ZXJuICJDIiBKU19FWFBPUlQgdm9pZCBK
U1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxODEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgIH0KICAgICAKICAgICBtX2hlYXAtPm1fY29k
ZUJsb2Nrcy5hZGQodGhpcyk7Ci0gICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6
ZW9mKENvZGVCbG9jaykpOworICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQo
c2l6ZW9mKENvZGVCbG9jaykpOwogfQogCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKQEAgLTIxMzEsNyArMjEzMSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG8KICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7CiAgICAgCiAgICAgbV9oZWFwLT5t
X2NvZGVCbG9ja3MuYWRkKHRoaXMpOwotICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3Ry
dWN0aW9uKSk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2Yo
Q29kZUJsb2NrKSArIG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikp
OwogfQogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQpAQCAtMjIyMywxNSArMjIyMywxNSBAQCB2
b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgaWYgKENvZGVCbG9j
ayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCiAgICAgICAgIG90
aGVyQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogCi0gICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVVzYWdlKG93bmVyRXhlY3V0YWJsZSgpLCBzaXplb2YoQ29kZUJsb2NrKSk7Cisg
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJFeGVjdXRhYmxlKCksIHNp
emVvZihDb2RlQmxvY2spKTsKICAgICBpZiAobV9qaXRDb2RlKQotICAgICAgICB2aXNpdG9yLnJl
cG9ydEV4dHJhTWVtb3J5VXNhZ2Uob3duZXJFeGVjdXRhYmxlKCksIG1faml0Q29kZS0+c2l6ZSgp
KTsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJFeGVjdXRh
YmxlKCksIG1faml0Q29kZS0+c2l6ZSgpKTsKICAgICBpZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgp
KSB7CiAgICAgICAgIC8vIERpdmlkZSBieSByZWZDb3VudCgpIGJlY2F1c2UgbV9pbnN0cnVjdGlv
bnMgcG9pbnRzIHRvIHNvbWV0aGluZyB0aGF0IGlzIHNoYXJlZAogICAgICAgICAvLyBieSBtdWx0
aXBsZSBDb2RlQmxvY2tzLCBhbmQgd2Ugb25seSB3YW50IHRvIGNvdW50IGl0IHRvd2FyZHMgdGhl
IGhlYXAgc2l6ZSBvbmNlLgogICAgICAgICAvLyBIYXZpbmcgZWFjaCBDb2RlQmxvY2sgcmVwb3J0
IG9ubHkgaXRzIHByb3BvcnRpb25hbCBzaGFyZSBvZiB0aGUgc2l6ZSBpcyBvbmUgd2F5CiAgICAg
ICAgIC8vIG9mIGFjY29tcGxpc2hpbmcgdGhpcy4KLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRy
YU1lbW9yeVVzYWdlKG93bmVyRXhlY3V0YWJsZSgpLCBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBz
aXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVmQ291bnQoKSk7CisgICAgICAg
IHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBtX2lu
c3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMu
cmVmQ291bnQoKSk7CiAgICAgfQogCiAgICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2Rl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3QoY29kZS0+c2l6ZSgpKTsKKyAgICAgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9y
eUFsbG9jYXRlZChjb2RlLT5zaXplKCkpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlz
IHByb2JhYmx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRo
aW5nIHNpbWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAgICAgICAgIG1faml0
Q29kZSA9IGNvZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gMTgxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwOSw3ICszMDksOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MoTm9PcGVyYXRpb24pCiAgICAg
LCBtX29iamVjdFNwYWNlKHRoaXMpCiAgICAgLCBtX3N0b3JhZ2VTcGFjZSh0aGlzKQotICAgICwg
bV9leHRyYU1lbW9yeVVzYWdlKDApCisgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQorICAgICwg
bV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRo
aXMpCiAgICAgLCBtX3NoYXJlZERhdGEodm0pCiAgICAgLCBtX3Nsb3RWaXNpdG9yKG1fc2hhcmVk
RGF0YSkKQEAgLTM5MiwyMyArMzkzLDE4IEBAIHZvaWQgSGVhcDo6cmVsZWFzZURlbGF5ZWRSZWxl
YXNlZE9iamVjdHMKICNlbmRpZgogfQogCi12b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29z
dFNsb3dDYXNlKHNpemVfdCBjb3N0KQordm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZFNsb3dDYXNlKHNpemVfdCBzaXplKQogewotICAgIC8vIE91ciBmcmVxdWVuY3kgb2YgZ2Fy
YmFnZSBjb2xsZWN0aW9uIHRyaWVzIHRvIGJhbGFuY2UgbWVtb3J5IHVzZSBhZ2FpbnN0IHNwZWVk
Ci0gICAgLy8gYnkgY29sbGVjdGluZyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIG5ld2x5IGNyZWF0
ZWQgdmFsdWVzLiBIb3dldmVyLCBmb3IgdmFsdWVzCi0gICAgLy8gdGhhdCBob2xkIG9uIHRvIGEg
Z3JlYXQgZGVhbCBvZiBtZW1vcnkgdGhhdCdzIG5vdCBpbiB0aGUgZm9ybSBvZiBvdGhlciBKUyB2
YWx1ZXMsCi0gICAgLy8gdGhhdCBpcyBub3QgZ29vZCBlbm91Z2ggLSBpbiBzb21lIGNhc2VzIGEg
bG90IG9mIHRob3NlIG9iamVjdHMgY2FuIHBpbGUgdXAgYW5kCi0gICAgLy8gdXNlIGNyYXp5IGFt
b3VudHMgb2YgbWVtb3J5IHdpdGhvdXQgYSBHQyBoYXBwZW5pbmcuIFNvIHdlIHRyYWNrIHRoZXNl
IGV4dHJhCi0gICAgLy8gbWVtb3J5IGNvc3RzLiBPbmx5IHVudXN1YWxseSBsYXJnZSBvYmplY3Rz
IGFyZSBub3RlZCwgYW5kIHdlIG9ubHkga2VlcCB0cmFjawotICAgIC8vIG9mIHRoaXMgZXh0cmEg
Y29zdCB1bnRpbCB0aGUgbmV4dCBHQy4gSW4gZ2FyYmFnZSBjb2xsZWN0ZWQgbGFuZ3VhZ2VzLCBt
b3N0IHZhbHVlcwotICAgIC8vIGFyZSBlaXRoZXIgdmVyeSBzaG9ydCBsaXZlZCB0ZW1wb3Jhcmll
cywgb3IgaGF2ZSBleHRyZW1lbHkgbG9uZyBsaWZldGltZXMuIFNvCi0gICAgLy8gaWYgYSBsYXJn
ZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGVyZSBpcyBub3QgbXVj
aCBwb2ludCB0bwotICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBmcmVxdWVudGx5IGFzIGxvbmcgYXMg
aXQgc3RheXMgYWxpdmUuCi0KLSAgICBkaWRBbGxvY2F0ZShjb3N0KTsKKyAgICBkaWRBbGxvY2F0
ZShzaXplKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKK3ZvaWQgSGVh
cDo6ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uoc2l6ZV90IHNpemUpCit7Cisg
ICAgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplICs9IHNpemU7CisgICAgcmVwb3J0RXh0cmFN
ZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplKTsKK30KKwogdm9pZCBIZWFwOjpyZXBvcnRBYmFu
ZG9uZWRPYmplY3RHcmFwaCgpCiB7CiAgICAgLy8gT3VyIGNsaWVudHMgZG9uJ3Qga25vdyBleGFj
dGx5IGhvdyBtdWNoIG1lbW9yeSB0aGV5CkBAIC04NTQsMTkgKzg1MCwxOSBAQCBzaXplX3QgSGVh
cDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7
CiB9CiAKLXNpemVfdCBIZWFwOjpleHRyYVNpemUoKQorc2l6ZV90IEhlYXA6OmV4dHJhTWVtb3J5
U2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlCdWZmZXJz
LnNpemUoKTsKKyAgICByZXR1cm4gbV9leHRyYU1lbW9yeVNpemUgKyBtX2RlcHJlY2F0ZWRFeHRy
YU1lbW9yeVNpemUgKyBtX2FycmF5QnVmZmVycy5zaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpz
aXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFj
ZS5zaXplKCkgKyBleHRyYVNpemUoKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkg
KyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYU1lbW9yeVNpemUoKTsKIH0KIAogc2l6ZV90
IEhlYXA6OmNhcGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgp
ICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgpOworICAgIHJldHVybiBt
X29iamVjdFNwYWNlLmNhcGFjaXR5KCkgKyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpICsgZXh0
cmFNZW1vcnlTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpzaXplQWZ0ZXJDb2xsZWN0KCkKQEAg
LTg3Niw3ICs4NzIsNyBAQCBzaXplX3QgSGVhcDo6c2l6ZUFmdGVyQ29sbGVjdCgpCiAgICAgLy8g
cmF0aGVyIHRoYW4gYWxsIHVzZWQgKGluY2x1ZGluZyBkZWFkKSBjb3BpZWQgYnl0ZXMsIHRodXMg
aXQncyAKICAgICAvLyBhbHdheXMgdGhlIGNhc2UgdGhhdCBtX3RvdGFsQnl0ZXNDb3BpZWQgPD0g
bV9zdG9yYWdlU3BhY2Uuc2l6ZSgpLiAKICAgICBBU1NFUlQobV90b3RhbEJ5dGVzQ29waWVkIDw9
IG1fc3RvcmFnZVNwYWNlLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fdG90YWxCeXRlc1Zpc2l0ZWQg
KyBtX3RvdGFsQnl0ZXNDb3BpZWQgKyBleHRyYVNpemUoKTsKKyAgICByZXR1cm4gbV90b3RhbEJ5
dGVzVmlzaXRlZCArIG1fdG90YWxCeXRlc0NvcGllZCArIGV4dHJhTWVtb3J5U2l6ZSgpOwogfQog
CiBzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtMTEyNCw3ICsx
MTIwLDggQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKEhlYXBPcGVyYQogICAgIH0K
ICAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKSB7CiAgICAg
ICAgIG1fc2l6ZUJlZm9yZUxhc3RGdWxsQ29sbGVjdCA9IG1fc2l6ZUFmdGVyTGFzdENvbGxlY3Qg
KyBtX2J5dGVzQWxsb2NhdGVkVGhpc0N5Y2xlOwotICAgICAgICBtX2V4dHJhTWVtb3J5VXNhZ2Ug
PSAwOworICAgICAgICBtX2V4dHJhTWVtb3J5U2l6ZSA9IDA7CisgICAgICAgIG1fZGVwcmVjYXRl
ZEV4dHJhTWVtb3J5U2l6ZSA9IDA7CiAKICAgICAgICAgaWYgKG1fZnVsbEFjdGl2aXR5Q2FsbGJh
Y2spCiAgICAgICAgICAgICBtX2Z1bGxBY3Rpdml0eUNhbGxiYWNrLT53aWxsQ29sbGVjdCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTgxMzQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMTMg
KzE2MSwyMSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0KEhl
YXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUgPSBBbnlDb2xsZWN0aW9uKTsKICAgICBib29sIGNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGRpZCBjb2xs
ZWN0LgogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpOworICAg
IC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgbm9uLUdDIG1lbW9yeSByZWZlcmVuY2VkIGJ5IEdD
IG9iamVjdHMuIEJlIHN1cmUgdG8KKyAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25z
OiBDYWxsaW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFzdHJvcGljCisgICAgLy8gbWVtb3J5
IGdyb3d0aC4KKyAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Cisg
ICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoSlNDZWxsKiwgc2l6ZV90KTsKKworICAg
IC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgbm9uLUdDIG1lbW9yeSBpZiB5b3UgY2FuJ3QgdXNl
IHRoZSBiZXR0ZXIgQVBJIGFib3ZlLgorICAgIHZvaWQgZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVt
b3J5KHNpemVfdCk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEFiYW5kb25l
ZE9iamVjdEdyYXBoKCk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb3RlY3QoSlNW
YWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8v
IFRydWUgd2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgogICAgIAotICAgIHNpemVf
dCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxs
b2NhdGVkIGJ5IHRoZSBoZWFwCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5U2l6ZSgpOyAvLyBOb24t
R0MgbWVtb3J5IHJlZmVyZW5jZWQgYnkgR0Mgb2JqZWN0cy4KICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzaXplX3Qgc2l6ZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBvYmplY3RDb3VudCgpOwpAQCAtMjYxLDE1
ICsyNjksMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9y
KHNpemVfdCk7IC8vIEZvciB1c2Ugd2l0aCBvYmplY3RzIHdpdGhvdXQgZGVzdHJ1Y3RvcnMuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPiB2b2lkKiBhbGxvY2F0ZU9iamVjdE9mVHlw
ZShzaXplX3QpOyAvLyBDaG9vc2VzIG9uZSBvZiB0aGUgbWV0aG9kcyBhYm92ZSBiYXNlZCBvbiB0
eXBlLgogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5FeHRyYUNvc3QgPSAyNTY7Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhTWVtb3J5ID0gMjU2OwogICAgIAogICAgIGNsYXNzIEZp
bmFsaXplck93bmVyIDogcHVibGljIFdlYWtIYW5kbGVPd25lciB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwog
ICAgIH07CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzVmFsaWRBbGxvY2F0aW9uKHNp
emVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3RT
bG93Q2FzZShzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZShzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uoc2l6ZV90KTsKIAogICAgIHZv
aWQgY29sbGVjdEltcGwoSGVhcE9wZXJhdGlvbiwgdm9pZCogc3RhY2tPcmlnaW4sIHZvaWQqIHN0
YWNrVG9wLCBNYWNoaW5lVGhyZWFkczo6UmVnaXN0ZXJTdGF0ZSYpOwogCkBAIC0zNTMsNyArMzYx
LDggQEAgcHJpdmF0ZToKICAgICBNYXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwogICAgIENvcGll
ZFNwYWNlIG1fc3RvcmFnZVNwYWNlOwogICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5
QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKLSAgICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwor
ICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5U2l6ZTsKKyAgICBzaXplX3QgbV9kZXByZWNhdGVkRXh0
cmFNZW1vcnlTaXplOwogCiAgICAgSGFzaFNldDxjb25zdCBKU0NlbGwqPiBtX2NvcHlpbmdSZW1l
bWJlcmVkU2V0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxMCArMTUyLDM5IEBAIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0MKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBI
ZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpCitpbmxpbmUgdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAoY29z
dCA+IG1pbkV4dHJhQ29zdCkgCi0gICAgICAgIHJlcG9ydEV4dHJhTWVtb3J5Q29zdFNsb3dDYXNl
KGNvc3QpOworICAgIGlmIChzaXplID4gbWluRXh0cmFNZW1vcnkpIAorICAgICAgICByZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemUpOworfQorCitpbmxpbmUgdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoSlNDZWxsKiBvd25lciwgc2l6ZV90IHNpemUpCit7
CisjaWYgRU5BQkxFKEdHQykKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0
aGUgZXh0cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25z
LgorICAgIGlmIChvcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgSGVh
cDo6aXNSZW1lbWJlcmVkKG93bmVyKSkKKyAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0ob3duZXIpOworI2VuZGlmCisKKyAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRy
YU1lbW9yeVNpemU7CisgICAgCisjaWYgRU5BQkxFKENPTVBBUkVfQU5EX1NXQVApCisgICAgZm9y
ICg7OykgeworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9ICpjb3VudGVyOworICAgICAgICBpZiAo
V1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXBTaXplKGNvdW50ZXIsIG9sZFNpemUsIG9sZFNpemUgKyBz
aXplKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQorICAgICgqY291bnRlcikg
Kz0gc2l6ZTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBIZWFwOjpkZXByZWNhdGVkUmVwb3J0
RXh0cmFNZW1vcnkoc2l6ZV90IHNpemUpCit7CisgICAgaWYgKHNpemUgPiBtaW5FeHRyYU1lbW9y
eSkgCisgICAgICAgIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeVNsb3dDYXNlKHNpemUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6
UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJiBmdW5jdG9yKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAx
ODEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb3B5TGF0
ZXIoSlNDZWxsKiwgQ29weVRva2VuLCB2b2lkKiwgc2l6ZV90KTsKICAgICAKLSAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VXNhZ2UoSlNDZWxsKiBvd25lciwgc2l6ZV90KTsKKyAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChKU0NlbGwqIG93bmVyLCBzaXplX3QpOwogICAgIAogICAg
IHZvaWQgYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKik7
CiAgICAgdm9pZCBhZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDI3ICsyNTIsOSBA
QCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAgICAgfQogfQogICAg
IAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UoSlNDZWxs
KiBvd25lciwgc2l6ZV90IHNpemUpCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIsIHNpemVfdCBzaXplKQogewotI2lmIEVOQUJM
RShHR0MpCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dHJhIG1l
bW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAo
aGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYgSGVhcDo6
aXNSZW1lbWJlcmVkKG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0ob3duZXIpOwotI2VuZGlmCi0KLSAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9zaGFyZWQu
bV92bS0+aGVhcC5tX2V4dHJhTWVtb3J5VXNhZ2U7Ci0gICAgCi0jaWYgRU5BQkxFKENPTVBBUkVf
QU5EX1NXQVApCi0gICAgZm9yICg7OykgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9ICpjb3Vu
dGVyOwotICAgICAgICBpZiAoV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXBTaXplKGNvdW50ZXIsIG9s
ZFNpemUsIG9sZFNpemUgKyBzaXplKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZWxz
ZQotICAgICgqY291bnRlcikgKz0gc2l6ZTsKLSNlbmRpZgorICAgIGhlYXAoKS0+cmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKG93bmVyLCBzaXplKTsKIH0KIAogaW5saW5lIEhlYXAqIFNsb3RWaXNp
dG9yOjpoZWFwKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29u
dGV4dDo6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIHZtLmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRT
aXplKTsKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHN0YXRpY19jYXN0
PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKICAgICAKICAgICBtX3N0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKICAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+Ojp2CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJh
eTogewotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVjdCwg
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICBlbHNlIHsKICAg
ICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHRoaXNPYmplY3QtPm1fdmFsdWUuaW1wbCgpOwogICAg
ICAgICBBU1NFUlQoaW1wbCk7Ci0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2Fn
ZSh0aGlzT2JqZWN0LCBpbXBsLT5jb3N0RHVyaW5nR0MoKSk7CisgICAgICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKHRoaXNPYmplY3QsIGltcGwtPmNvc3REdXJpbmdHQygpKTsK
ICAgICB9CiB9CiAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2
ZVJvcGVUb0F0b21pY1N0CiAKICAgICAvLyBJZiB3ZSByZXNvbHZlZCBhIHN0cmluZyB0aGF0IGRp
ZG4ndCBwcmV2aW91c2x5IGV4aXN0LCBub3RpZnkgdGhlIGhlYXAgdGhhdCB3ZSd2ZSBncm93bi4K
ICAgICBpZiAobV92YWx1ZS5pbXBsKCktPmhhc09uZVJlZigpKQotICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobV92YWx1ZS5pbXBsKCktPmNvc3QoKSk7Cisg
ICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1fdmFs
dWUuaW1wbCgpLT5jb3N0KCkpOwogfQogCiB2b2lkIEpTUm9wZVN0cmluZzo6Y2xlYXJGaWJlcnMo
KSBjb25zdApAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9w
ZShFeGVjU3RhdGUKICAgICBpZiAoaXM4Qml0KCkpIHsKICAgICAgICAgTENoYXIqIGJ1ZmZlcjsK
ICAgICAgICAgaWYgKFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgYnVmZmVyKSkgewotICAgICAgICAgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG5ld0ltcGwtPmNvc3QoKSk7Cisg
ICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChu
ZXdJbXBsLT5jb3N0KCkpOwogICAgICAgICAgICAgbV92YWx1ZSA9IG5ld0ltcGwucmVsZWFzZSgp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgb3V0T2ZNZW1vcnkoZXhlYyk7CkBAIC0y
NTQsNyArMjU0LDcgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZQog
CiAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICBpZiAoUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwg
PSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7
Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChuZXdJbXBs
LT5jb3N0KCkpOworICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZChuZXdJbXBsLT5jb3N0KCkpOwogICAgICAgICBtX3ZhbHVlID0gbmV3SW1wbC5yZWxl
YXNlKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0T2ZNZW1vcnkoZXhlYyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDE4MTM0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICBzZXRJczhCaXQo
bV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVw
b3J0RXh0cmFNZW1vcnlDb3N0KGNvc3QpOworICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChjb3N0KTsKICAgICAgICAgdm0ubV9uZXdTdHJpbmdzU2lu
Y2VMYXN0SGFzaENvbnMrKzsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAxODEz
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsOCBAQCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpBZGRSZXN1bHQgU3BhcnNlQXJyCiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChp
LCBlbnRyeSk7CiAgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKICAgICBp
ZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAo
YXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFj
aXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKKyAgICAgICAgLy8gRklYTUU6IFN3aXRjaCB0byBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1v
cnksIG9yIGFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZC4KKyAgICAgICAgSGVhcDo6aGVh
cChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKChjYXBhY2l0eSAtIG1fcmVwb3J0
ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CiAgICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha01hcERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBEYXRhLmNwcAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2
NCw3IEBAIHZvaWQgV2Vha01hcERhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICAvLyBS
b3VnaCBhcHByb3hpbWF0aW9uIG9mIHRoZSBleHRlcm5hbCBzdG9yYWdlIG5lZWRlZCBmb3IgdGhl
IGhhc2h0YWJsZS4KICAgICAvLyBUaGlzIGlzbid0IGV4YWN0LCBidXQgaXQgaXMgY2xvc2UgZW5v
dWdoLCBhbmQgcHJvcG9ydGlvbmFsIHRvIHRoZSBhY3R1YWwKICAgICAvLyBleHRlcm5hbCBtZXJt
b3J5IHVzYWdlLgotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqLCB0
aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZCh0aGlzT2JqLCB0aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVj
dCopICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIH0KIAogdm9pZCBXZWFrTWFw
RGF0YTo6c2V0KFZNJiB2bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE4MTQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTAzLTExICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3JlZCB0aGUgSlNDOjpIZWFwIGV4
dHJhIGNvc3QgQVBJIGZvciBjbGFyaXR5IGFuZCB0byBtYWtlIHNvbWUga25vd24gYnVncyBtb3Jl
IG9idmlvdXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MjU4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZWQgZm9yIHJlbmFtZXMgdG8gSlNDIGV4dHJhIGNvc3QgQVBJcy4KKworICAgICAgICBB
ZGRlZCBGSVhNRXMgdG8gb3VyIDEwIHVzZSBjYXNlcyB0aGF0IGFyZSBjdXJyZW50bHkgd3Jvbmcs
IGluY2x1ZGluZworICAgICAgICBjYW52YXMsIHdoaWNoIGlzIHRoZSBjYXVzZGUgb2YgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQ1Ny4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBkb20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRGb3JDb2xsZWN0aW9u
SW5kZXhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RGb3JD
b2xsZWN0aW9uSW5kZXhDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0NvbGxlY3Rpb25J
bmRleENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvcj46OmNvbXB1dGVOb2RlQ291
bnRVcGRhdGluZ0xpc3RDYWNoZSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNoZTo6ZGlkUG9wdWxhdGUpOgorICAgICAgICAqIGh0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRl
cjo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgorCiAyMDE1LTAzLTExICBUaW1vdGh5IEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRv
IHpvb20gb24gcGFnZXMgdGhhdCBjbGFpbSB0byBsYXkgb3V0IHRvIGRldmljZSBzaXplIGFuZCB0
aGVuIGZhaWwgdG8gZG8gc28KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjphcHBlbmRCdWZmZXJJ
bnRlcm5hbCgKICAgICAvLyA2LiBBc3luY2hyb25vdXNseSBydW4gdGhlIGJ1ZmZlciBhcHBlbmQg
YWxnb3JpdGhtLgogICAgIG1fYXBwZW5kQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDApOwogCi0g
ICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CisgICAgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0
ZWQoKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlclRpbWVyRmlyZWQoKQpA
QCAtNjY3LDcgKzY2Nyw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRl
QXAKICAgICAgICAgICAgIHByb3ZpZGVNZWRpYURhdGEodHJhY2tCdWZmZXIsIHRyYWNrSUQpOwog
ICAgIH0KIAotICAgIHJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpOworICAgIHJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKCk7CiAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCgpID4gdGhpcy0+bWF4aW11
bUJ1ZmZlclNpemUoKSkKICAgICAgICAgbV9idWZmZXJGdWxsID0gdHJ1ZTsKIApAQCAtMTk4OCw3
ICsxOTg4LDcgQEAgc2l6ZV90IFNvdXJjZUJ1ZmZlcjo6ZXh0cmFNZW1vcnlDb3N0KCkgYwogICAg
IHJldHVybiBleHRyYU1lbW9yeUNvc3Q7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyOjpyZXBvcnRF
eHRyYU1lbW9yeUNvc3QoKQordm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKCkKIHsKICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gdGhpcy0+ZXh0cmFNZW1v
cnlDb3N0KCk7CiAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCA8IG1fcmVwb3J0ZWRFeHRyYU1lbW9y
eUNvc3QpCkBAIC0xOTk4LDggKzE5OTgsMTAgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4
dHJhTWVtb3J5Q29zdAogICAgIG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3QgPSBleHRyYU1lbW9y
eUNvc3Q7CiAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+dm0oKSk7Ci0gICAgaWYgKGV4dHJhTWVtb3J5Q29zdERlbHRhID4gMCkKLSAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0
KGV4dHJhTWVtb3J5Q29zdERlbHRhKTsKKyAgICBpZiAoZXh0cmFNZW1vcnlDb3N0RGVsdGEgPiAw
KSB7CisgICAgICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVt
b3J5LCBvciBhZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQuCisgICAgICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGV4
dHJhTWVtb3J5Q29zdERlbHRhKTsKKyAgICB9CiB9CiAKIFZlY3RvcjxTdHJpbmc+IFNvdXJjZUJ1
ZmZlcjo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChjb25zdCBBdG9taWNTdHJpbmcmIHRyYWNr
SUQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmgJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQpOwogCiAgICAgc2l6ZV90IGV4dHJhTWVtb3J5
Q29zdCgpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CisgICAgdm9p
ZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCgpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0oKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDggQEAg
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBkb2N1bWVudDsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4pKQogICAgICAg
ICAgICAgbm9kZUNvdW50Kys7CiAgICAgICAgIAotICAgICAgICBleGVjLT5oZWFwKCktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChub2RlQ291bnQgKiBzaXplb2YoTm9kZSkpOworICAgICAgICAvLyBG
SVhNRTogU3dpdGNoIHRvIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeSwgb3IgYWRvcHQgcmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkLgorICAgICAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKG5vZGVDb3VudCAqIHNpemVvZihOb2RlKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdl
RGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDggQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAg
IHdyYXBwZXIgPSBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xvYmFsT2JqZWN0LCBJbWFnZURhdGEsIGlt
YWdlRGF0YSk7CiAgICAgSWRlbnRpZmllciBkYXRhTmFtZShleGVjLCAiZGF0YSIpOwogICAgIHdy
YXBwZXItPnB1dERpcmVjdChleGVjLT52bSgpLCBkYXRhTmFtZSwgdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIGltYWdlRGF0YS0+ZGF0YSgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBl
eGVjLT5oZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChpbWFnZURhdGEtPmRhdGEoKS0+bGVu
Z3RoKCkpOworICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVt
b3J5LCBvciBhZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQuCisgICAgZXhlYy0+aGVhcCgp
LT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChpbWFnZURhdGEtPmRhdGEoKS0+bGVuZ3RoKCkp
OwogICAgIAogICAgIHJldHVybiB3cmFwcGVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIGJvb2wgSlNOb2RlTGlzdDo6Z2V0T3duUHJvcGVydHlT
bG90RGVsZWcKIAogSlNDOjpKU1ZhbHVlIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgTm9kZUxpc3QmIG5vZGVMaXN0KQogewotICAgIGdsb2JhbE9iamVjdC52
bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG5vZGVMaXN0Lm1lbW9yeUNvc3QoKSk7Cisg
ICAgLy8gRklYTUU6IFN3aXRjaCB0byBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnksIG9yIGFk
b3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZC4KKyAgICBnbG9iYWxPYmplY3Qudm0oKS5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5vZGVMaXN0Lm1lbW9yeUNvc3QoKSk7CiAgICAg
cmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNOb2RlTGlzdD4oJmdsb2JhbE9iamVjdCwgJm5vZGVM
aXN0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODcyLDcgKzI4NzIsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKHZpc2l0b3IpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tTWFya0Z1bmN0aW9uIn07CiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVwb3J0RXh0cmFNZW1vcnlDb3N0In0pIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZShj
ZWxsLCB0aGlzT2JqZWN0LT5pbXBsKCkubWVtb3J5Q29zdCgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
Y2VsbCwgdGhpc09iamVjdC0+aW1wbCgpLm1lbW9yeUNvc3QoKSk7XG4iKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CiAgICAgICAgICAgICBmb3Jl
YWNoIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CkBAIC0zMDg3LDcgKzMwODcsNyBAQCBF
TkQKICNlbmRpZgogRU5ECiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCkgaWYgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcG9ydEV4dHJhTWVtb3J5Q29zdCJ9Owot
ICAgIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChpbXBsLT5t
ZW1vcnlDb3N0KCkpOworICAgIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKGltcGwtPm1lbW9yeUNvc3QoKSk7CiBFTkQKIAogICAgICAgICBpZiAoJHN2
Z1Byb3BlcnR5VHlwZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbGxlY3Rpb25JbmRl
eENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29sbGVjdGlvbklu
ZGV4Q2FjaGUuY3BwCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29s
bGVjdGlvbkluZGV4Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdEZvckNv
bGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCBjb3N0KQordm9pZCByZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCBjb3N0KQogewogICAgIEpTQzo6
Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOwogICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvc3QpOwor
ICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5LCBvciBh
ZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQuCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZChjb3N0KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bGxlY3Rpb25JbmRleENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bGxlY3Rpb25JbmRleENhY2hlLmgJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3RG
b3JDb2xsZWN0aW9uSW5kZXhDYWNoZShzaXplX3QpOwordm9pZCByZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCk7CiAKIHRlbXBsYXRlIDxjbGFz
cyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVyYXRvcj4KIGNsYXNzIENvbGxlY3Rpb25JbmRleENhY2hl
IHsKQEAgLTEwMCw3ICsxMDAsNyBAQCB1bnNpZ25lZCBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xs
ZWN0aW9uCiAgICAgbV9saXN0VmFsaWQgPSB0cnVlOwogCiAgICAgaWYgKHVuc2lnbmVkIGNhcGFj
aXR5RGlmZmVyZW5jZSA9IG1fY2FjaGVkTGlzdC5jYXBhY2l0eSgpIC0gb2xkQ2FwYWNpdHkpCi0g
ICAgICAgIHJlcG9ydEV4dHJhTWVtb3J5Q29zdEZvckNvbGxlY3Rpb25JbmRleENhY2hlKGNhcGFj
aXR5RGlmZmVyZW5jZSAqIHNpemVvZihOb2RlVHlwZSopKTsKKyAgICAgICAgcmVwb3J0RXh0cmFN
ZW1vcnlBbGxvY2F0ZWRGb3JDb2xsZWN0aW9uSW5kZXhDYWNoZShjYXBhY2l0eURpZmZlcmVuY2Ug
KiBzaXplb2YoTm9kZVR5cGUqKSk7CiAKICAgICByZXR1cm4gbV9jYWNoZWRMaXN0LnNpemUoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZp
c2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTc2LDcgKzU3Niw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUltYWdlQnVmZmUKIAogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpKTsKICAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9p
bWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7CisgICAgLy8gRklYTUU6IFN3aXRj
aCB0byBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnksIG9yIGFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZC4KKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCkuaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChudW1CeXRlcyk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAg
IGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBp
bmxpbmUgdm9pZCBDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGU6CiAgICAgbV9kaWRQb3B1bGF0
ZSA9IHRydWU7CiAjZW5kaWYKICAgICBpZiAoc2l6ZV90IGNvc3QgPSBtZW1vcnlDb3N0KCkpCi0g
ICAgICAgIHJlcG9ydEV4dHJhTWVtb3J5Q29zdEZvckNvbGxlY3Rpb25JbmRleENhY2hlKGNvc3Qp
OworICAgICAgICByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENh
Y2hlKGNvc3QpOwogfQogCiBpbmxpbmUgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogQ29sbGVjdGlv
bk5hbWVkRWxlbWVudENhY2hlOjpmaW5kKGNvbnN0IFN0cmluZ1RvRWxlbWVudHNNYXAmIG1hcCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBrZXkpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDggQEAg
dm9pZCBIVE1MSW1hZ2VMb2FkZXI6OmltYWdlQ2hhbmdlZChDYWNoZQogICAgICAgICBpZiAoIWVs
ZW1lbnQoKS5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01X
aW5kb3dCYXNlOjpjb21tb25WTSgpOwogICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7Ci0gICAgICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjYWNoZWRJ
bWFnZS0+ZW5jb2RlZFNpemUoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogU3dpdGNoIHRvIGRl
cHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeSwgb3IgYWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNp
dGVkLgorICAgICAgICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChjYWNo
ZWRJbWFnZS0+ZW5jb2RlZFNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTgxMzQyKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjkyLDggKzY5MiwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENv
bnRhCiAgICAgICAgICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0RGVsdGEgPSBleHRyYU1lbW9y
eUNvc3QgLSBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0OwogICAgICAgICAgICAgbV9yZXBvcnRl
ZEV4dHJhTWVtb3J5Q29zdCA9IGV4dHJhTWVtb3J5Q29zdDsKIAotICAgICAgICAgICAgaWYgKGV4
dHJhTWVtb3J5Q29zdERlbHRhID4gMCkKLSAgICAgICAgICAgICAgICB2bS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5Q29zdChleHRyYU1lbW9yeUNvc3REZWx0YSk7CisgICAgICAgICAgICBpZiAoZXh0
cmFNZW1vcnlDb3N0RGVsdGEgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFN3aXRj
aCB0byBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnksIG9yIGFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZC4KKyAgICAgICAgICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKGV4dHJhTWVtb3J5Q29zdERlbHRhKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lv
biAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MTMsNyArOTEzLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFBy
b3RlY3Rpb24oKQogICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0IHBvaW50Lgog
ICAgIEpTQzo6Vk0mIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpOwogICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CisgICAgLy8gRklYTUU6IFN3aXRj
aCB0byBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnksIG9yIGFkb3B0IHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZC4KKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1fcmVz
cG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CiAKICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248446</attachid>
            <date>2015-03-11 14:17:21 -0700</date>
            <delta_ts>2015-03-11 14:28:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142589-20150311141656.patch</filename>
            <type>text/plain</type>
            <size>34903</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE1LTAzLTExICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVmYWN0b3JlZCB0aGUgSlNDOjpIZWFwIGV4dHJhIGNvc3QgQVBJIGZvciBjbGFyaXR5IGFu
ZCB0byBtYWtlIHNvbWUga25vd24gYnVncyBtb3JlIG9idmlvdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU4OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAgICAg
IChKU1JlcG9ydEV4dHJhTWVtb3J5Q29zdCk6IEFkZGVkIGEgRklYTUUgdG8gYW5ub3RhdGUgYSBr
bm93biBidWcuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlz
aXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOiBVcGRhdGVkIGZvciByZW5hbWUuCisKKyAgICAg
ICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRTbG93Q2FzZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeVNsb3dDYXNlKTogUmVuYW1l
ZCBvdXIgcmVwb3J0aW5nCisgICAgICAgIEFQSXMgdG8gY2xhcmlmeSB0aGVpciByZWxhdGlvbnNo
aXAgdG8gZWFjaCBvdGhlcjogT25lIG11c3QgcmVwb3J0IGV4dHJhCisgICAgICAgIG1lbW9yeSBh
dCB0aGUgdGltZSBvZiBhbGxvY2F0aW9uLCBhbmQgYXQgdGhlIHRpbWUgdGhlIEdDIHZpc2l0cyBp
dC4KKworICAgICAgICAoSlNDOjpIZWFwOjpleHRyYU1lbW9yeVNpemUpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y2FwYWNpdHkpOgorICAgICAgICAo
SlNDOjpIZWFwOjpzaXplQWZ0ZXJDb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6d2lsbFN0
YXJ0Q29sbGVjdGlvbik6IFVwZGF0ZWQgZm9yIHJlbmFtZXMuIEFkZGVkIGV4cGxpY2l0CisgICAg
ICAgIEFQSSBmb3IgZGVwcmVjYXRlZCB1c2VycyB3aG8gY2FuJ3QgdXNlIG91ciBiZXN0IEFQSS4K
KyAKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpleHRyYVNpemUpOiBEZWxldGVkLgorCisgICAg
ICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCk6CisgICAgICAgIChKU0M6
OkhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRl
cHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlcG9ydEV4
dHJhTWVtb3J5Q29zdCk6IERlbGV0ZWQuIERpdHRvLgorCisgICAgICAgICogaGVhcC9TbG90Vmlz
aXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlVc2FnZSk6IERlbGV0ZWQuIE1vdmVkIHRo
aXMKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBIZWFwIHNpbmNlIGl0J3MgcHJldHR5
IGRldGFpbGVkIGluIGl0cyBhY2Nlc3MKKyAgICAgICAgdG8gdGhlIGhlYXAuCisKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKTog
VXBkYXRlZCBmb3IKKyAgICAgICAgcmVuYW1lcy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVUb0F0b21pY1N0cmluZyk6CisgICAgICAg
IChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENyZWF0aW9uKTogVXBkYXRl
ZCBmb3IgcmVuYW1lcy4KKworICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZCk6IEFkZGVkIEZJWE1F
LgorCisgICAgICAgICogcnVudGltZS9XZWFrTWFwRGF0YS5jcHA6CisgICAgICAgIChKU0M6Oldl
YWtNYXBEYXRhOjp2aXNpdENoaWxkcmVuKTogVXBkYXRlZCBmb3IgcmVuYW1lLgorCiAyMDE1LTAz
LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIGV2ZW50
IGhhbmRsZXIgZml4ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJl
dmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSwxMCBAQCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1v
cnlDb3N0KEpTQ29udGV4dFJlCiAgICAgfQogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgIGV4ZWMtPnZtKCkuaGVhcC5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZSk7CisKKyAgICAvLyBGSVhNRTogc3dpdGNoIHRvIGRl
cHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTkzCisgICAgZXhlYy0+dm0oKS5oZWFwLnJlcG9ydEV4dHJh
TWVtb3J5QWxsb2NhdGVkKHNpemUpOwogfQogCiBleHRlcm4gIkMiIEpTX0VYUE9SVCB2b2lkIEpT
U3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc3LDcgKzE2NzcsNyBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgfQogICAgIAogICAgIG1faGVhcC0+bV9jb2Rl
QmxvY2tzLmFkZCh0aGlzKTsKLSAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXpl
b2YoQ29kZUJsb2NrKSk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChz
aXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJv
dmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQpAQCAtMjEzMSw3ICsyMTMxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICAgICBkdW1wQnl0ZWNvZGUoKTsKICAgICAKICAgICBtX2hlYXAtPm1f
Y29kZUJsb2Nrcy5hZGQodGhpcyk7Ci0gICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
c2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1
Y3Rpb24pKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihD
b2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7
CiB9CiAKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCkBAIC0yMjIzLDE1ICsyMjIzLDE1IEBAIHZv
aWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICBpZiAoQ29kZUJsb2Nr
KiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKICAgICAgICAgb3Ro
ZXJCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLnJlcG9ydEV4
dHJhTWVtb3J5VXNhZ2Uob3duZXJFeGVjdXRhYmxlKCksIHNpemVvZihDb2RlQmxvY2spKTsKKyAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChvd25lckV4ZWN1dGFibGUoKSwgc2l6
ZW9mKENvZGVCbG9jaykpOwogICAgIGlmIChtX2ppdENvZGUpCi0gICAgICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlVc2FnZShvd25lckV4ZWN1dGFibGUoKSwgbV9qaXRDb2RlLT5zaXplKCkp
OworICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChvd25lckV4ZWN1dGFi
bGUoKSwgbV9qaXRDb2RlLT5zaXplKCkpOwogICAgIGlmIChtX2luc3RydWN0aW9ucy5zaXplKCkp
IHsKICAgICAgICAgLy8gRGl2aWRlIGJ5IHJlZkNvdW50KCkgYmVjYXVzZSBtX2luc3RydWN0aW9u
cyBwb2ludHMgdG8gc29tZXRoaW5nIHRoYXQgaXMgc2hhcmVkCiAgICAgICAgIC8vIGJ5IG11bHRp
cGxlIENvZGVCbG9ja3MsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gY291bnQgaXQgdG93YXJkcyB0aGUg
aGVhcCBzaXplIG9uY2UuCiAgICAgICAgIC8vIEhhdmluZyBlYWNoIENvZGVCbG9jayByZXBvcnQg
b25seSBpdHMgcHJvcG9ydGlvbmFsIHNoYXJlIG9mIHRoZSBzaXplIGlzIG9uZSB3YXkKICAgICAg
ICAgLy8gb2YgYWNjb21wbGlzaGluZyB0aGlzLgotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJh
TWVtb3J5VXNhZ2Uob3duZXJFeGVjdXRhYmxlKCksIG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNp
emVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZDb3VudCgpKTsKKyAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQob3duZXJFeGVjdXRhYmxlKCksIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5y
ZWZDb3VudCgpKTsKICAgICB9CiAKICAgICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMTgxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwotICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChjb2RlLT5zaXplKCkpOworICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMg
cHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhp
bmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRD
b2RlID0gY29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxODEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKICAgICAs
IG1fb2JqZWN0U3BhY2UodGhpcykKICAgICAsIG1fc3RvcmFnZVNwYWNlKHRoaXMpCi0gICAgLCBt
X2V4dHJhTWVtb3J5VXNhZ2UoMCkKKyAgICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCisgICAgLCBt
X2RlcHJlY2F0ZWRFeHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhp
cykKICAgICAsIG1fc2hhcmVkRGF0YSh2bSkKICAgICAsIG1fc2xvdFZpc2l0b3IobV9zaGFyZWRE
YXRhKQpAQCAtMzkyLDIzICszOTMsMTggQEAgdm9pZCBIZWFwOjpyZWxlYXNlRGVsYXllZFJlbGVh
c2VkT2JqZWN0cwogI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0
U2xvd0Nhc2Uoc2l6ZV90IGNvc3QpCit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2Nh
dGVkU2xvd0Nhc2Uoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gT3VyIGZyZXF1ZW5jeSBvZiBnYXJi
YWdlIGNvbGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBtZW1vcnkgdXNlIGFnYWluc3Qgc3BlZWQK
LSAgICAvLyBieSBjb2xsZWN0aW5nIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgbmV3bHkgY3JlYXRl
ZCB2YWx1ZXMuIEhvd2V2ZXIsIGZvciB2YWx1ZXMKLSAgICAvLyB0aGF0IGhvbGQgb24gdG8gYSBn
cmVhdCBkZWFsIG9mIG1lbW9yeSB0aGF0J3Mgbm90IGluIHRoZSBmb3JtIG9mIG90aGVyIEpTIHZh
bHVlcywKLSAgICAvLyB0aGF0IGlzIG5vdCBnb29kIGVub3VnaCAtIGluIHNvbWUgY2FzZXMgYSBs
b3Qgb2YgdGhvc2Ugb2JqZWN0cyBjYW4gcGlsZSB1cCBhbmQKLSAgICAvLyB1c2UgY3JhenkgYW1v
dW50cyBvZiBtZW1vcnkgd2l0aG91dCBhIEdDIGhhcHBlbmluZy4gU28gd2UgdHJhY2sgdGhlc2Ug
ZXh0cmEKLSAgICAvLyBtZW1vcnkgY29zdHMuIE9ubHkgdW51c3VhbGx5IGxhcmdlIG9iamVjdHMg
YXJlIG5vdGVkLCBhbmQgd2Ugb25seSBrZWVwIHRyYWNrCi0gICAgLy8gb2YgdGhpcyBleHRyYSBj
b3N0IHVudGlsIHRoZSBuZXh0IEdDLiBJbiBnYXJiYWdlIGNvbGxlY3RlZCBsYW5ndWFnZXMsIG1v
c3QgdmFsdWVzCi0gICAgLy8gYXJlIGVpdGhlciB2ZXJ5IHNob3J0IGxpdmVkIHRlbXBvcmFyaWVz
LCBvciBoYXZlIGV4dHJlbWVseSBsb25nIGxpZmV0aW1lcy4gU28KLSAgICAvLyBpZiBhIGxhcmdl
IHZhbHVlIHN1cnZpdmVzIG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZXJlIGlzIG5vdCBtdWNo
IHBvaW50IHRvCi0gICAgLy8gY29sbGVjdGluZyBtb3JlIGZyZXF1ZW50bHkgYXMgbG9uZyBhcyBp
dCBzdGF5cyBhbGl2ZS4KLQotICAgIGRpZEFsbG9jYXRlKGNvc3QpOworICAgIGRpZEFsbG9jYXRl
KHNpemUpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIAordm9pZCBIZWFw
OjpkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93Q2FzZShzaXplX3Qgc2l6ZSkKK3sKKyAg
ICBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9yeVNpemUgKz0gc2l6ZTsKKyAgICByZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemUpOworfQorCiB2b2lkIEhlYXA6OnJlcG9ydEFiYW5k
b25lZE9iamVjdEdyYXBoKCkKIHsKICAgICAvLyBPdXIgY2xpZW50cyBkb24ndCBrbm93IGV4YWN0
bHkgaG93IG11Y2ggbWVtb3J5IHRoZXkKQEAgLTg1NCwxOSArODUwLDE5IEBAIHNpemVfdCBIZWFw
OjpvYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsK
IH0KIAotc2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCitzaXplX3QgSGVhcDo6ZXh0cmFNZW1vcnlT
aXplKCkKIHsKLSAgICByZXR1cm4gbV9leHRyYU1lbW9yeVVzYWdlICsgbV9hcnJheUJ1ZmZlcnMu
c2l6ZSgpOworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5U2l6ZSArIG1fZGVwcmVjYXRlZEV4dHJh
TWVtb3J5U2l6ZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnNp
emUoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNl
LnNpemUoKSArIGV4dHJhU2l6ZSgpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSAr
IG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIGV4dHJhTWVtb3J5U2l6ZSgpOwogfQogCiBzaXplX3Qg
SGVhcDo6Y2FwYWNpdHkoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkg
KyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFTaXplKCk7CisgICAgcmV0dXJuIG1f
b2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRy
YU1lbW9yeVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnNpemVBZnRlckNvbGxlY3QoKQpAQCAt
ODc2LDcgKzg3Miw3IEBAIHNpemVfdCBIZWFwOjpzaXplQWZ0ZXJDb2xsZWN0KCkKICAgICAvLyBy
YXRoZXIgdGhhbiBhbGwgdXNlZCAoaW5jbHVkaW5nIGRlYWQpIGNvcGllZCBieXRlcywgdGh1cyBp
dCdzIAogICAgIC8vIGFsd2F5cyB0aGUgY2FzZSB0aGF0IG1fdG90YWxCeXRlc0NvcGllZCA8PSBt
X3N0b3JhZ2VTcGFjZS5zaXplKCkuIAogICAgIEFTU0VSVChtX3RvdGFsQnl0ZXNDb3BpZWQgPD0g
bV9zdG9yYWdlU3BhY2Uuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV90b3RhbEJ5dGVzVmlzaXRlZCAr
IG1fdG90YWxCeXRlc0NvcGllZCArIGV4dHJhU2l6ZSgpOworICAgIHJldHVybiBtX3RvdGFsQnl0
ZXNWaXNpdGVkICsgbV90b3RhbEJ5dGVzQ29waWVkICsgZXh0cmFNZW1vcnlTaXplKCk7CiB9CiAK
IHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC0xMTI0LDcgKzEx
MjAsOCBAQCB2b2lkIEhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24oSGVhcE9wZXJhCiAgICAgfQog
ICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pIHsKICAgICAg
ICAgbV9zaXplQmVmb3JlTGFzdEZ1bGxDb2xsZWN0ID0gbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCAr
IG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGU7Ci0gICAgICAgIG1fZXh0cmFNZW1vcnlVc2FnZSA9
IDA7CisgICAgICAgIG1fZXh0cmFNZW1vcnlTaXplID0gMDsKKyAgICAgICAgbV9kZXByZWNhdGVk
RXh0cmFNZW1vcnlTaXplID0gMDsKIAogICAgICAgICBpZiAobV9mdWxsQWN0aXZpdHlDYWxsYmFj
aykKICAgICAgICAgICAgIG1fZnVsbEFjdGl2aXR5Q2FsbGJhY2stPndpbGxDb2xsZWN0KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSwxMyAr
MTYxLDIxIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3QoSGVh
cE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOwogICAgIGJvb2wgY29s
bGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOyAvLyBSZXR1cm5zIHRydWUgaWYgaXQgZGlkIGNvbGxl
Y3QuCiAKLSAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCk7CisgICAg
Ly8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCBub24tR0MgbWVtb3J5IHJlZmVyZW5jZWQgYnkgR0Mg
b2JqZWN0cy4gQmUgc3VyZSB0bworICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6
IENhbGxpbmcgb25seSBvbmUgbWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKKyAgICAvLyBtZW1vcnkg
Z3Jvd3RoLgorICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKKyAg
ICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChKU0NlbGwqLCBzaXplX3QpOworCisgICAg
Ly8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCBub24tR0MgbWVtb3J5IGlmIHlvdSBjYW4ndCB1c2Ug
dGhlIGJldHRlciBBUEkgYWJvdmUuCisgICAgdm9pZCBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1v
cnkoc2l6ZV90KTsKKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0QWJhbmRvbmVk
T2JqZWN0R3JhcGgoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvdGVjdChKU1Zh
bHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8g
VHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAuCiAgICAgCi0gICAgc2l6ZV90
IGV4dHJhU2l6ZSgpOyAvLyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdlcyBhbGxv
Y2F0ZWQgYnkgdGhlIGhlYXAKKyAgICBzaXplX3QgZXh0cmFNZW1vcnlTaXplKCk7IC8vIE5vbi1H
QyBtZW1vcnkgcmVmZXJlbmNlZCBieSBHQyBvYmplY3RzLgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHNpemVfdCBzaXplKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0yNjEsMTUg
KzI2OSwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Io
c2l6ZV90KTsgLy8gRm9yIHVzZSB3aXRoIG9iamVjdHMgd2l0aG91dCBkZXN0cnVjdG9ycy4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQqIGFsbG9jYXRlT2JqZWN0T2ZUeXBl
KHNpemVfdCk7IC8vIENob29zZXMgb25lIG9mIHRoZSBtZXRob2RzIGFib3ZlIGJhc2VkIG9uIHR5
cGUuCiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1pbkV4dHJhQ29zdCA9IDI1NjsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heEV4dHJhQ29zdCA9IDEwMjQgKiAxMDI0OworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbWluRXh0cmFNZW1vcnkgPSAyNTY7CiAgICAgCiAgICAgY2xhc3MgRmlu
YWxpemVyT3duZXIgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAg
ICAgfTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24oc2l6
ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdFNs
b3dDYXNlKHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93Q2FzZShzaXplX3QpOwogCiAgICAgdm9p
ZCBjb2xsZWN0SW1wbChIZWFwT3BlcmF0aW9uLCB2b2lkKiBzdGFja09yaWdpbiwgdm9pZCogc3Rh
Y2tUb3AsIE1hY2hpbmVUaHJlYWRzOjpSZWdpc3RlclN0YXRlJik7CiAKQEAgLTM1Myw3ICszNjEs
OCBAQCBwcml2YXRlOgogICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7CiAgICAgQ29waWVk
U3BhY2UgbV9zdG9yYWdlU3BhY2U7CiAgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlC
dWZmZXI+IG1fYXJyYXlCdWZmZXJzOwotICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlTaXplOworICAgIHNpemVfdCBtX2RlcHJlY2F0ZWRFeHRy
YU1lbW9yeVNpemU7CiAKICAgICBIYXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVt
YmVyZWRTZXQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDEwICsxNTIsMzkgQEAgaW5saW5lIHZvaWQg
SGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEhl
YXA6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplX3QgY29zdCkKK2lubGluZSB2b2lkIEhlYXA6
OnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCBzaXplKQogewotICAgIGlmIChjb3N0
ID4gbWluRXh0cmFDb3N0KSAKLSAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2Uo
Y29zdCk7CisgICAgaWYgKHNpemUgPiBtaW5FeHRyYU1lbW9yeSkgCisgICAgICAgIHJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkU2xvd0Nhc2Uoc2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIEhlYXA6
OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChKU0NlbGwqIG93bmVyLCBzaXplX3Qgc2l6ZSkKK3sK
KyNpZiBFTkFCTEUoR0dDKQorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRo
ZSBleHRyYSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMu
CisgICAgaWYgKG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAmJiBIZWFw
Ojppc1JlbWVtYmVyZWQob3duZXIpKQorICAgICAgICByZXR1cm47CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShvd25lcik7CisjZW5kaWYKKworICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dHJh
TWVtb3J5U2l6ZTsKKyAgICAKKyNpZiBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIHNpemVfdCBvbGRTaXplID0gKmNvdW50ZXI7CisgICAgICAgIGlmIChX
VEY6OndlYWtDb21wYXJlQW5kU3dhcFNpemUoY291bnRlciwgb2xkU2l6ZSwgb2xkU2l6ZSArIHNp
emUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCisgICAgKCpjb3VudGVyKSAr
PSBzaXplOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEhlYXA6OmRlcHJlY2F0ZWRSZXBvcnRF
eHRyYU1lbW9yeShzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA+IG1pbkV4dHJhTWVtb3J5
KSAKKyAgICAgICAgZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5U2xvd0Nhc2Uoc2l6ZSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpS
ZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDE4
MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvcHlMYXRl
cihKU0NlbGwqLCBDb3B5VG9rZW4sIHZvaWQqLCBzaXplX3QpOwogICAgIAotICAgIHZvaWQgcmVw
b3J0RXh0cmFNZW1vcnlVc2FnZShKU0NlbGwqIG93bmVyLCBzaXplX3QpOworICAgIHZvaWQgcmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKEpTQ2VsbCogb3duZXIsIHNpemVfdCk7CiAgICAgCiAgICAg
dm9pZCBhZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqKTsK
ICAgICB2b2lkIGFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXpl
ciopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMjcgKzI1Miw5IEBA
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIoSlNDZWwKICAgICB9CiB9CiAgICAg
Ci1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlVc2FnZShKU0NlbGwq
IG93bmVyLCBzaXplX3Qgc2l6ZSkKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoSlNDZWxsKiBvd25lciwgc2l6ZV90IHNpemUpCiB7Ci0jaWYgRU5BQkxF
KEdHQykKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVt
b3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmICho
ZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbiAmJiBIZWFwOjpp
c1JlbWVtYmVyZWQob3duZXIpKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShvd25lcik7Ci0jZW5kaWYKLQotICAgIHNpemVfdCogY291bnRlciA9ICZtX3NoYXJlZC5t
X3ZtLT5oZWFwLm1fZXh0cmFNZW1vcnlVc2FnZTsKLSAgICAKLSNpZiBFTkFCTEUoQ09NUEFSRV9B
TkRfU1dBUCkKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gKmNvdW50
ZXI7Ci0gICAgICAgIGlmIChXVEY6OndlYWtDb21wYXJlQW5kU3dhcFNpemUoY291bnRlciwgb2xk
U2l6ZSwgb2xkU2l6ZSArIHNpemUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNl
Ci0gICAgKCpjb3VudGVyKSArPSBzaXplOwotI2VuZGlmCisgICAgaGVhcCgpLT5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQob3duZXIsIHNpemUpOwogfQogCiBpbmxpbmUgSGVhcCogU2xvdFZpc2l0
b3I6OmhlYXAoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw3ICs3OCw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250
ZXh0OjoKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3Qoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNp
emUpOworICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNpemUpOwogICAgIAogICAgIG1fc3RydWN0dXJlID0g
c3RydWN0dXJlOwogICAgIG1fbW9kZSA9IE92ZXJzaXplVHlwZWRBcnJheTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OnYKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5
OiB7Ci0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LCB0
aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQodGhpc09iamVjdCwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
dm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIGVsc2UgewogICAg
ICAgICBTdHJpbmdJbXBsKiBpbXBsID0gdGhpc09iamVjdC0+bV92YWx1ZS5pbXBsKCk7CiAgICAg
ICAgIEFTU0VSVChpbXBsKTsKLSAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdl
KHRoaXNPYmplY3QsIGltcGwtPmNvc3REdXJpbmdHQygpKTsKKyAgICAgICAgdmlzaXRvci5yZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdCwgaW1wbC0+Y29zdER1cmluZ0dDKCkpOwog
ICAgIH0KIH0KIApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZl
Um9wZVRvQXRvbWljU3QKIAogICAgIC8vIElmIHdlIHJlc29sdmVkIGEgc3RyaW5nIHRoYXQgZGlk
bid0IHByZXZpb3VzbHkgZXhpc3QsIG5vdGlmeSB0aGUgaGVhcCB0aGF0IHdlJ3ZlIGdyb3duLgog
ICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCi0gICAgICAgIEhlYXA6OmhlYXAo
dGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3ZhbHVlLmltcGwoKS0+Y29zdCgpKTsKKyAg
ICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV92YWx1
ZS5pbXBsKCktPmNvc3QoKSk7CiB9CiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpjbGVhckZpYmVycygp
IGNvbnN0CkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3Bl
KEV4ZWNTdGF0ZQogICAgIGlmIChpczhCaXQoKSkgewogICAgICAgICBMQ2hhciogYnVmZmVyOwog
ICAgICAgICBpZiAoUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBidWZmZXIpKSB7Ci0gICAgICAgICAgICBIZWFw
OjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobmV3SW1wbC0+Y29zdCgpKTsKKyAg
ICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5l
d0ltcGwtPmNvc3QoKSk7CiAgICAgICAgICAgICBtX3ZhbHVlID0gbmV3SW1wbC5yZWxlYXNlKCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKQEAgLTI1
NCw3ICsyNTQsNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlCiAK
ICAgICBVQ2hhciogYnVmZmVyOwogICAgIGlmIChSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGJ1ZmZlcikpIHsK
LSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG5ld0ltcGwt
PmNvc3QoKSk7CisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKG5ld0ltcGwtPmNvc3QoKSk7CiAgICAgICAgIG1fdmFsdWUgPSBuZXdJbXBsLnJlbGVh
c2UoKTsKICAgICB9IGVsc2UgewogICAgICAgICBvdXRPZk1lbW9yeShleGVjKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTgxMzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICAgICAgIHNldElzOEJpdCht
X3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkpOwotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QoY29zdCk7CisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9y
dEV4dHJhTWVtb3J5QWxsb2NhdGVkKGNvc3QpOwogICAgICAgICB2bS5tX25ld1N0cmluZ3NTaW5j
ZUxhc3RIYXNoQ29ucysrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDE4MTM0
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw5IEBAIFNwYXJzZUFycmF5VmFsdWVNYXA6
OkFkZFJlc3VsdCBTcGFyc2VBcnIKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGks
IGVudHJ5KTsKICAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwogICAgIGlm
IChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChh
cnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNp
dHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
OworICAgICAgICAvLyBGSVhNRTogU3dpdGNoIHRvIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9y
eSwgb3IgYWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTkzCisgICAgICAgIEhlYXA6Omhl
YXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCgoY2FwYWNpdHkgLSBtX3JlcG9y
dGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOwogICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtNYXBEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwRGF0YS5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyAr
NjQsNyBAQCB2b2lkIFdlYWtNYXBEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgLy8g
Um91Z2ggYXBwcm94aW1hdGlvbiBvZiB0aGUgZXh0ZXJuYWwgc3RvcmFnZSBuZWVkZWQgZm9yIHRo
ZSBoYXNodGFibGUuCiAgICAgLy8gVGhpcyBpc24ndCBleGFjdCwgYnV0IGl0IGlzIGNsb3NlIGVu
b3VnaCwgYW5kIHByb3BvcnRpb25hbCB0byB0aGUgYWN0dWFsCiAgICAgLy8gZXh0ZXJuYWwgbWVy
bW9yeSB1c2FnZS4KLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iaiwg
dGhpc09iai0+bV9tYXAuY2FwYWNpdHkoKSAqIChzaXplb2YoSlNPYmplY3QqKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQodGhpc09iaiwgdGhpc09iai0+bV9tYXAuY2FwYWNpdHkoKSAqIChzaXplb2YoSlNPYmpl
Y3QqKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiB9CiAKIHZvaWQgV2Vha01h
cERhdGE6OnNldChWTSYgdm0sIEpTT2JqZWN0KiBrZXksIEpTVmFsdWUgdmFsdWUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODE0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAxNS0wMy0xMSAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yZWQgdGhlIEpTQzo6SGVhcCBl
eHRyYSBjb3N0IEFQSSBmb3IgY2xhcml0eSBhbmQgdG8gbWFrZSBzb21lIGtub3duIGJ1Z3MgbW9y
ZSBvYnZpb3VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDI1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVcGRhdGVkIGZvciByZW5hbWVzIHRvIEpTQyBleHRyYSBjb3N0IEFQSXMuCisKKyAgICAgICAg
QWRkZWQgRklYTUVzIHRvIG91ciAxMCB1c2UgY2FzZXMgdGhhdCBhcmUgY3VycmVudGx5IHdyb25n
LCBpbmNsdWRpbmcKKyAgICAgICAgY2FudmFzLCB3aGljaCBpcyB0aGUgY2F1c2Ugb2YgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQ1Ny4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUxpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBkb20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWRGb3JDb2xsZWN0aW9u
SW5kZXhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RGb3JD
b2xsZWN0aW9uSW5kZXhDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0NvbGxlY3Rpb25J
bmRleENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvcj46OmNvbXB1dGVOb2RlQ291
bnRVcGRhdGluZ0xpc3RDYWNoZSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNoZTo6ZGlkUG9wdWxhdGUpOgorICAgICAgICAqIGh0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUxvYWRl
cjo6aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgorCiAyMDE1LTAzLTExICBUaW1vdGh5IEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRv
IHpvb20gb24gcGFnZXMgdGhhdCBjbGFpbSB0byBsYXkgb3V0IHRvIGRldmljZSBzaXplIGFuZCB0
aGVuIGZhaWwgdG8gZG8gc28KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjphcHBlbmRCdWZmZXJJ
bnRlcm5hbCgKICAgICAvLyA2LiBBc3luY2hyb25vdXNseSBydW4gdGhlIGJ1ZmZlciBhcHBlbmQg
YWxnb3JpdGhtLgogICAgIG1fYXBwZW5kQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDApOwogCi0g
ICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CisgICAgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0
ZWQoKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlclRpbWVyRmlyZWQoKQpA
QCAtNjY3LDcgKzY2Nyw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRl
QXAKICAgICAgICAgICAgIHByb3ZpZGVNZWRpYURhdGEodHJhY2tCdWZmZXIsIHRyYWNrSUQpOwog
ICAgIH0KIAotICAgIHJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpOworICAgIHJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKCk7CiAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCgpID4gdGhpcy0+bWF4aW11
bUJ1ZmZlclNpemUoKSkKICAgICAgICAgbV9idWZmZXJGdWxsID0gdHJ1ZTsKIApAQCAtMTk4OCw3
ICsxOTg4LDcgQEAgc2l6ZV90IFNvdXJjZUJ1ZmZlcjo6ZXh0cmFNZW1vcnlDb3N0KCkgYwogICAg
IHJldHVybiBleHRyYU1lbW9yeUNvc3Q7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyOjpyZXBvcnRF
eHRyYU1lbW9yeUNvc3QoKQordm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKCkKIHsKICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gdGhpcy0+ZXh0cmFNZW1v
cnlDb3N0KCk7CiAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCA8IG1fcmVwb3J0ZWRFeHRyYU1lbW9y
eUNvc3QpCkBAIC0xOTk4LDggKzE5OTgsMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4
dHJhTWVtb3J5Q29zdAogICAgIG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3QgPSBleHRyYU1lbW9y
eUNvc3Q7CiAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+dm0oKSk7Ci0gICAgaWYgKGV4dHJhTWVtb3J5Q29zdERlbHRhID4gMCkKLSAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0
KGV4dHJhTWVtb3J5Q29zdERlbHRhKTsKKyAgICBpZiAoZXh0cmFNZW1vcnlDb3N0RGVsdGEgPiAw
KSB7CisgICAgICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVt
b3J5LCBvciBhZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTMKKyAgICAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQo
ZXh0cmFNZW1vcnlDb3N0RGVsdGEpOworICAgIH0KIH0KIAogVmVjdG9yPFN0cmluZz4gU291cmNl
QnVmZmVyOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKGNvbnN0IEF0b21pY1N0cmluZyYgdHJh
Y2tJRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuaAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5
Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVDb2RlZEZyYW1lcyhjb25zdCBNZWRpYVRp
bWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCk7CiAKICAgICBzaXplX3QgZXh0cmFNZW1v
cnlDb3N0KCkgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3QoKTsKKyAgICB2
b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZEFjY291bnRpbmdGb3JFbmRPZlN0cmVhbSgpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksOSBA
QCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgICAgIGZvciAo
Tm9kZSogbiA9IGRvY3VtZW50OyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbikpCiAgICAg
ICAgICAgICBub2RlQ291bnQrKzsKICAgICAgICAgCi0gICAgICAgIGV4ZWMtPmhlYXAoKS0+cmVw
b3J0RXh0cmFNZW1vcnlDb3N0KG5vZGVDb3VudCAqIHNpemVvZihOb2RlKSk7CisgICAgICAgIC8v
IEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5LCBvciBhZG9wdCBy
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTMKKyAgICAgICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZChub2RlQ291bnQgKiBzaXplb2YoTm9kZSkpOwogICAgIH0KIAog
ICAgIHJldHVybiB3cmFwcGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTgxMzQyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw5IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEK
ICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGdsb2JhbE9iamVjdCwgSW1hZ2VEYXRh
LCBpbWFnZURhdGEpOwogICAgIElkZW50aWZpZXIgZGF0YU5hbWUoZXhlYywgImRhdGEiKTsKICAg
ICB3cmFwcGVyLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZGF0YU5hbWUsIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbWFnZURhdGEtPmRhdGEoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0g
ICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoaW1hZ2VEYXRhLT5kYXRhKCkt
Pmxlbmd0aCgpKTsKKyAgICAvLyBGSVhNRTogU3dpdGNoIHRvIGRlcHJlY2F0ZWRSZXBvcnRFeHRy
YU1lbW9yeSwgb3IgYWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTMKKyAgICBleGVjLT5oZWFw
KCktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGltYWdlRGF0YS0+ZGF0YSgpLT5sZW5ndGgo
KSk7CiAgICAgCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTgxMzQyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDcgKzYyLDkgQEAgYm9vbCBKU05vZGVMaXN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3REZWxlZwogCiBKU0M6OkpTVmFsdWUgY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7Ci0gICAgZ2xvYmFsT2JqZWN0
LnZtKCkuaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qobm9kZUxpc3QubWVtb3J5Q29zdCgpKTsK
KyAgICAvLyBGSVhNRTogU3dpdGNoIHRvIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeSwgb3Ig
YWRvcHQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTMKKyAgICBnbG9iYWxPYmplY3Qudm0oKS5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5vZGVMaXN0Lm1lbW9yeUNvc3QoKSk7CiAgICAg
cmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNOb2RlTGlzdD4oJmdsb2JhbE9iamVjdCwgJm5vZGVM
aXN0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODcyLDcgKzI4NzIsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICB9CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPnZpc2l0QWRkaXRpb25h
bENoaWxkcmVuKHZpc2l0b3IpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkpTQ3VzdG9tTWFya0Z1bmN0aW9uIn07CiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVwb3J0RXh0cmFNZW1vcnlDb3N0In0pIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZShj
ZWxsLCB0aGlzT2JqZWN0LT5pbXBsKCkubWVtb3J5Q29zdCgpKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
Y2VsbCwgdGhpc09iamVjdC0+aW1wbCgpLm1lbW9yeUNvc3QoKSk7XG4iKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CiAgICAgICAgICAgICBmb3Jl
YWNoIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CkBAIC0zMDg3LDcgKzMwODcsNyBAQCBF
TkQKICNlbmRpZgogRU5ECiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCkgaWYgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcG9ydEV4dHJhTWVtb3J5Q29zdCJ9Owot
ICAgIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChpbXBsLT5t
ZW1vcnlDb3N0KCkpOworICAgIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKGltcGwtPm1lbW9yeUNvc3QoKSk7CiBFTkQKIAogICAgICAgICBpZiAoJHN2
Z1Byb3BlcnR5VHlwZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbGxlY3Rpb25JbmRl
eENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29sbGVjdGlvbklu
ZGV4Q2FjaGUuY3BwCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29s
bGVjdGlvbkluZGV4Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdEZvckNv
bGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCBjb3N0KQordm9pZCByZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCBjb3N0KQogewogICAgIEpTQzo6
Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOwogICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwotICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvc3QpOwor
ICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5LCBvciBh
ZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5MworICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWQoY29zdCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db2xs
ZWN0aW9uSW5kZXhDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db2xs
ZWN0aW9uSW5kZXhDYWNoZS5oCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0Rm9y
Q29sbGVjdGlvbkluZGV4Q2FjaGUoc2l6ZV90KTsKK3ZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWRGb3JDb2xsZWN0aW9uSW5kZXhDYWNoZShzaXplX3QpOwogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
Q29sbGVjdGlvbiwgY2xhc3MgSXRlcmF0b3I+CiBjbGFzcyBDb2xsZWN0aW9uSW5kZXhDYWNoZSB7
CkBAIC0xMDAsNyArMTAwLDcgQEAgdW5zaWduZWQgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVj
dGlvbgogICAgIG1fbGlzdFZhbGlkID0gdHJ1ZTsKIAogICAgIGlmICh1bnNpZ25lZCBjYXBhY2l0
eURpZmZlcmVuY2UgPSBtX2NhY2hlZExpc3QuY2FwYWNpdHkoKSAtIG9sZENhcGFjaXR5KQotICAg
ICAgICByZXBvcnRFeHRyYU1lbW9yeUNvc3RGb3JDb2xsZWN0aW9uSW5kZXhDYWNoZShjYXBhY2l0
eURpZmZlcmVuY2UgKiBzaXplb2YoTm9kZVR5cGUqKSk7CisgICAgICAgIHJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkRm9yQ29sbGVjdGlvbkluZGV4Q2FjaGUoY2FwYWNpdHlEaWZmZXJlbmNlICog
c2l6ZW9mKE5vZGVUeXBlKikpOwogCiAgICAgcmV0dXJuIG1fY2FjaGVkTGlzdC5zaXplKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNp
b24gMTgxMzQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3Niw3ICs1NzYsOSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpjcmVhdGVJbWFnZUJ1ZmZlCiAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dm0oKSk7CiAgICAgc2l6ZV90IG51bUJ5dGVzID0gNCAqIG1faW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5h
bFNpemUoKS5oZWlnaHQoKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCkuaGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobnVtQnl0ZXMpOworICAgIC8vIEZJWE1FOiBTd2l0Y2gg
dG8gZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5LCBvciBhZG9wdCByZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MjU5MworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKG51bUJ5dGVzKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYg
KG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIGlubGlu
ZSB2b2lkIENvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNoZToKICAgICBtX2RpZFBvcHVsYXRlID0g
dHJ1ZTsKICNlbmRpZgogICAgIGlmIChzaXplX3QgY29zdCA9IG1lbW9yeUNvc3QoKSkKLSAgICAg
ICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0Rm9yQ29sbGVjdGlvbkluZGV4Q2FjaGUoY29zdCk7Cisg
ICAgICAgIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkRm9yQ29sbGVjdGlvbkluZGV4Q2FjaGUo
Y29zdCk7CiB9CiAKIGlubGluZSBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBDb2xsZWN0aW9uTmFt
ZWRFbGVtZW50Q2FjaGU6OmZpbmQoY29uc3QgU3RyaW5nVG9FbGVtZW50c01hcCYgbWFwLCBjb25z
dCBBdG9taWNTdHJpbmcmIGtleSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDE4MTM0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsOSBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6aW1hZ2VDaGFuZ2VkKENhY2hlCiAgICAgICAgIGlmICghZWxlbWVu
dCgpLmluRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgSlNDOjpWTSYgdm0gPSBKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vblZNKCk7CiAgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKLSAgICAgICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNhY2hlZEltYWdl
LT5lbmNvZGVkU2l6ZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gZGVwcmVj
YXRlZFJlcG9ydEV4dHJhTWVtb3J5LCBvciBhZG9wdCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQu
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQyNTkzCisgICAgICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKGNh
Y2hlZEltYWdlLT5lbmNvZGVkU2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODEzNDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTIsOCArNjkyLDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlZEZyb20o
Q29udGEKICAgICAgICAgICAgIHNpemVfdCBleHRyYU1lbW9yeUNvc3REZWx0YSA9IGV4dHJhTWVt
b3J5Q29zdCAtIG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3Q7CiAgICAgICAgICAgICBtX3JlcG9y
dGVkRXh0cmFNZW1vcnlDb3N0ID0gZXh0cmFNZW1vcnlDb3N0OwogCi0gICAgICAgICAgICBpZiAo
ZXh0cmFNZW1vcnlDb3N0RGVsdGEgPiAwKQotICAgICAgICAgICAgICAgIHZtLmhlYXAucmVwb3J0
RXh0cmFNZW1vcnlDb3N0KGV4dHJhTWVtb3J5Q29zdERlbHRhKTsKKyAgICAgICAgICAgIGlmIChl
eHRyYU1lbW9yeUNvc3REZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU3dp
dGNoIHRvIGRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeSwgb3IgYWRvcHQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDI1OTMKKyAgICAgICAgICAgICAgICB2bS5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5QWxsb2NhdGVkKGV4dHJhTWVtb3J5Q29zdERlbHRhKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCShyZXZpc2lvbiAxODEzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTMsNyArOTEzLDkgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0
aGF0IHBvaW50LgogICAgIEpTQzo6Vk0mIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52
bSgpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIHZtLmhlYXAucmVwb3J0
RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CisgICAgLy8g
RklYTUU6IFN3aXRjaCB0byBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnksIG9yIGFkb3B0IHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQyNTkzCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9j
YXRlZChtX3Jlc3BvbnNlQnVpbGRlci5sZW5ndGgoKSAqIDIpOwogCiAgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CiB9Cg==
</data>
<flag name="review"
          id="273335"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>