<?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>140944</bug_id>
          
          <creation_ts>2015-01-27 11:04:08 -0800</creation_ts>
          <short_desc>Simple line layout: Move FlowContents iterator interface to FlowContentsIterator.</short_desc>
          <delta_ts>2015-01-28 13:37:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1064563</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-01-27 11:04:08 -0800</bug_when>
    <thetext>To cleanup FlowContents&apos;s interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064570</commentid>
    <comment_count>1</comment_count>
      <attachid>245456</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-01-27 11:16:31 -0800</bug_when>
    <thetext>Created attachment 245456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064574</commentid>
    <comment_count>2</comment_count>
      <attachid>245456</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-27 11:26:46 -0800</bug_when>
    <thetext>Comment on attachment 245456
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.h:86
&gt;      mutable LazyLineBreakIterator m_lineBreakIterator;

Should this move down too?

&gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.h:90
&gt; +class FlowContentsIterator : public FlowContents {

I&apos;d prefer FlowContentsIterator to have FlowContents instead of being one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064575</commentid>
    <comment_count>3</comment_count>
      <attachid>245456</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-01-27 11:27:29 -0800</bug_when>
    <thetext>Comment on attachment 245456
Patch

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

&gt;&gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.h:90
&gt;&gt; +class FlowContentsIterator : public FlowContents {
&gt; 
&gt; I&apos;d prefer FlowContentsIterator to have FlowContents instead of being one.

You should split this to two files at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064886</commentid>
    <comment_count>4</comment_count>
      <attachid>245540</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-01-28 07:22:53 -0800</bug_when>
    <thetext>Created attachment 245540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064953</commentid>
    <comment_count>5</comment_count>
      <attachid>245552</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-01-28 10:32:21 -0800</bug_when>
    <thetext>Created attachment 245552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064996</commentid>
    <comment_count>6</comment_count>
      <attachid>245565</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-01-28 12:38:38 -0800</bug_when>
    <thetext>Created attachment 245565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065017</commentid>
    <comment_count>7</comment_count>
      <attachid>245565</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 13:37:41 -0800</bug_when>
    <thetext>Comment on attachment 245565
Patch

Clearing flags on attachment: 245565

Committed r179284: &lt;http://trac.webkit.org/changeset/179284&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065018</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 13:37:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245456</attachid>
            <date>2015-01-27 11:16:31 -0800</date>
            <delta_ts>2015-01-28 07:22:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140944-20150127111633.patch</filename>
            <type>text/plain</type>
            <size>28148</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQyZTFhNjJlMTJhYjY1
YzUwMDA5ZTYwZTFiMDE2ODhkYWYxNDkwMC4uYjhhNjVlNzRkZDE5NjgzYWZlMWNmOTE2ZDE2ZDc4
NzA3NjQ3MTgzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDE1LTAxLTI3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNb3ZlIEZsb3dDb250ZW50cyBpdGVyYXRvciBpbnRlcmZhY2UgdG8gRmxvd0NvbnRlbnRzSXRl
cmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDA5NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNsZWFucyB1cCBGbG93Q29udGVudHMncyBpbnRlcmZhY2UgYnkgbW92aW5nIHRo
ZSBpdGVyYXRvciBmdW5jdGlvbmFsaXR5CisgICAgICAgIHRvIHRoaXMgbmV3IEZsb3dDb250ZW50
c0l0ZXJhdG9yIGNsYXNzLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjphZGRVbmNvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFkZFVuY29tbWl0dGVk
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFw
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hp
dGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdEZyYWdt
ZW50VG9GaXRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZpcnN0
RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGlu
ZVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5k
aW5nQW5kQWRqdXN0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpz
cGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6Y3JlYXRlVGV4dFJ1bnMpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9yOjpGbG93Q29udGVudHNJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6bmV4dFRl
eHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29u
dGVudHNJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OkZsb3dDb250ZW50czo6bmV4dFRleHRGcmFnbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnRleHRXaWR0aCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQ6OlRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6VGV4
dEZyYWdtZW50OjpUZXh0RnJhZ21lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6OmlzRW1wdHkpOiBEZWxl
dGVkLgorCisyMDE1LTAxLTI3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAg
ICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBNYWtlIEZsb3dDb250ZW50cyBhbiBpdGVyYXRvciBj
bGFzcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MDkwOQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAK
aW5kZXggNmRjNzFiYjNkOGM0YTVkMmU1MzY4NDk5YzRiYTg3Y2NmM2EwZGM1Zi4uMGRkOTYzMWU2
MzIzOGFlNGMwMzA5NDA1Y2QyZjc1NTRhMzI4NzFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0cnVjdCBM
aW5lU3RhdGUgewogICAgICAgICBtX25ld1VuY29tbWl0dGVkU2VnbWVudCA9IHRydWU7CiAgICAg
fQogCi0gICAgdm9pZCBhZGRVbmNvbW1pdHRlZChjb25zdCBGbG93Q29udGVudHM6OlRleHRGcmFn
bWVudCYgZnJhZ21lbnQpCisgICAgdm9pZCBhZGRVbmNvbW1pdHRlZChjb25zdCBGbG93Q29udGVu
dHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkKICAgICB7CiAgICAgICAgIC8vIFN0
YXJ0IGEgbmV3IHVuY29tbWl0dGVkIHNlZ21lbnQuCiAgICAgICAgIGlmIChtX25ld1VuY29tbWl0
dGVkU2VnbWVudCkgewpAQCAtMjU2LDEzICsyNTYsMTMgQEAgc3RydWN0IExpbmVTdGF0ZSB7CiAg
ICAgICAgIH0KICAgICAgICAgdW5jb21taXR0ZWRXaWR0aCArPSBmcmFnbWVudC53aWR0aDsKICAg
ICAgICAgdW5jb21taXR0ZWRFbmQgPSBmcmFnbWVudC5lbmQ7Ci0gICAgICAgIHVuY29taXR0ZWRU
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzOjpU
ZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC53aWR0aCA6IDA7Ci0gICAgICAgIHVu
Y29taXR0ZWRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGggPSBmcmFnbWVudC50eXBlID09IEZsb3dD
b250ZW50czo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlID8gZnJhZ21lbnQuZW5kIC0gZnJhZ21l
bnQuc3RhcnQgIDogMDsKKyAgICAgICAgdW5jb21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRo
ID0gZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpX
aGl0ZXNwYWNlID8gZnJhZ21lbnQud2lkdGggOiAwOworICAgICAgICB1bmNvbWl0dGVkVHJhaWxp
bmdXaGl0ZXNwYWNlTGVuZ3RoID0gZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRv
cjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlID8gZnJhZ21lbnQuZW5kIC0gZnJhZ21lbnQuc3Rh
cnQgIDogMDsKICAgICB9CiAKICAgICB2b2lkIGFkZFVuY29tbWl0dGVkV2hpdGVzcGFjZShmbG9h
dCB3aGl0ZXNwYWNlV2lkdGgpCiAgICAgewotICAgICAgICBhZGRVbmNvbW1pdHRlZChGbG93Q29u
dGVudHM6OlRleHRGcmFnbWVudCh1bmNvbW1pdHRlZEVuZCwgdW5jb21taXR0ZWRFbmQgKyAxLCB3
aGl0ZXNwYWNlV2lkdGgsIHRydWUpKTsKKyAgICAgICAgYWRkVW5jb21taXR0ZWQoRmxvd0NvbnRl
bnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCh1bmNvbW1pdHRlZEVuZCwgdW5jb21taXR0ZWRFbmQg
KyAxLCB3aGl0ZXNwYWNlV2lkdGgsIHRydWUpKTsKICAgICB9CiAKICAgICBib29sIGhhc1doaXRl
c3BhY2VPbmx5KCkgY29uc3QKQEAgLTMwMSwyNSArMzAxLDI1IEBAIHN0cnVjdCBMaW5lU3RhdGUg
ewogICAgIGJvb2wgbV9maXJzdENoYXJhY3RlckZpdHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9u
ZXdVbmNvbW1pdHRlZFNlZ21lbnQgeyB0cnVlIH07CiAKLSAgICBGbG93Q29udGVudHM6OlRleHRG
cmFnbWVudCBvdmVyZmxvd2VkRnJhZ21lbnQ7CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRl
eHRGcmFnbWVudCBvdmVyZmxvd2VkRnJhZ21lbnQ7CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgdW5j
b21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwogICAgIHVuc2lnbmVkIHVuY29t
aXR0ZWRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGggeyAwIH07CiB9OwogCi1zdGF0aWMgYm9vbCBw
cmVXcmFwKGNvbnN0IEZsb3dDb250ZW50czo6U3R5bGUmIHN0eWxlKQorc3RhdGljIGJvb2wgcHJl
V3JhcChjb25zdCBGbG93Q29udGVudHNJdGVyYXRvcjo6U3R5bGUmIHN0eWxlKQogewogICAgIHJl
dHVybiBzdHlsZS53cmFwTGluZXMgJiYgIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKIH0KICAg
ICAKLXN0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVT
dGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBGbG93Q29udGVudHMmIGZs
b3dDb250ZW50cykKK3N0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3Rh
dGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBGbG93Q29u
dGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCiB7CiAgICAgaWYgKCFsaW5lU3Rh
dGUuY29tbWl0dGVkVHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgLy8gUmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLCBvciBub24tY29sbGFwc2Vk
IHByZS13cmFwIHdoaXRlc3BhY2UsIHVubGVzcyBpdCdzIHRoZSBvbmx5IGNvbnRlbnQgb24gdGhl
IGxpbmUgLXNvIHJlbW92aW5nIHRoZSB3aGl0ZXNhcGNlIHdvdWxkIHByb2R1Y2UgYW4gZW1wdHkg
bGluZS4KLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50cy5zdHlsZSgpOworICAg
IGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUoKTsKICAgICBi
b29sIGNvbGxhcHNlV2hpdGVzcGFjZSA9IHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSB8IHByZVdy
YXAoc3R5bGUpOwogICAgIGlmICghY29sbGFwc2VXaGl0ZXNwYWNlKQogICAgICAgICByZXR1cm47
CkBAIC0zNDUsMTQgKzM0NSwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGZsb2F0JiBhdmFpbGFibGVXaQogICAgIGF2YWls
YWJsZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxvZ2lj
YWxMZWZ0T2Zmc2V0KTsKIH0KIAotc3RhdGljIEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50IHNw
bGl0RnJhZ21lbnRUb0ZpdExpbmUoRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50
VG9TcGxpdCwgZmxvYXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0
ZXIsIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRzKQorc3RhdGljIEZsb3dDb250ZW50
c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVu
dHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0IGF2YWlsYWJs
ZVdpZHRoLCBib29sIGtlZXBBdExlYXN0T25lQ2hhcmFjdGVyLCBjb25zdCBGbG93Q29udGVudHNJ
dGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCiB7CiAgICAgLy8gRmFzdCBwYXRoIGZvciBz
aW5nbGUgY2hhciBmcmFnbWVudHMuCiAgICAgaWYgKGZyYWdtZW50VG9TcGxpdC5zdGFydCArIDEg
PT0gZnJhZ21lbnRUb1NwbGl0LmVuZCkgewogICAgICAgICBpZiAoa2VlcEF0TGVhc3RPbmVDaGFy
YWN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQoKTsK
KyAgICAgICAgICAgIHJldHVybiBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50KCk7
CiAKLSAgICAgICAgRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQgZnJhZ21lbnRGb3JOZXh0TGlu
ZShmcmFnbWVudFRvU3BsaXQpOworICAgICAgICBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZy
YWdtZW50IGZyYWdtZW50Rm9yTmV4dExpbmUoZnJhZ21lbnRUb1NwbGl0KTsKICAgICAgICAgZnJh
Z21lbnRUb1NwbGl0LmVuZCA9IGZyYWdtZW50VG9TcGxpdC5zdGFydDsKICAgICAgICAgZnJhZ21l
bnRUb1NwbGl0LndpZHRoID0gMDsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50Rm9yTmV4dExpbmU7
CkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50IHNw
bGl0RnJhZ21lbnRUb0ZpdExpbmUoRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ20KICAgICBmbG9hdCB3
aWR0aCA9IDA7CiAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkgewogICAgICAgICB1bnNpZ25lZCBt
aWRkbGUgPSAobGVmdCArIHJpZ2h0KSAvIDI7Ci0gICAgICAgIHdpZHRoID0gZmxvd0NvbnRlbnRz
LnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQsIG1pZGRsZSArIDEsIDApOworICAgICAg
ICB3aWR0aCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQu
c3RhcnQsIG1pZGRsZSArIDEsIDApOwogICAgICAgICBpZiAoYXZhaWxhYmxlV2lkdGggPiB3aWR0
aCkKICAgICAgICAgICAgIGxlZnQgPSBtaWRkbGUgKyAxOwogICAgICAgICBlbHNlIGlmIChhdmFp
bGFibGVXaWR0aCA8IHdpZHRoKQpAQCAtMzc3LDQ4ICszNzcsNDggQEAgc3RhdGljIEZsb3dDb250
ZW50czo6VGV4dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoRmxvd0NvbnRlbnRzOjpU
ZXh0RnJhZ20KIAogICAgIGlmIChrZWVwQXRMZWFzdE9uZUNoYXJhY3RlciAmJiByaWdodCA9PSBm
cmFnbWVudFRvU3BsaXQuc3RhcnQpCiAgICAgICAgICsrcmlnaHQ7Ci0gICAgRmxvd0NvbnRlbnRz
OjpUZXh0RnJhZ21lbnQgZnJhZ21lbnRGb3JOZXh0TGluZShmcmFnbWVudFRvU3BsaXQpOworICAg
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZnJhZ21lbnRGb3JOZXh0TGluZShm
cmFnbWVudFRvU3BsaXQpOwogICAgIGZyYWdtZW50VG9TcGxpdC5lbmQgPSByaWdodDsKLSAgICBm
cmFnbWVudFRvU3BsaXQud2lkdGggPSBmcmFnbWVudFRvU3BsaXQuaXNFbXB0eSgpID8gMCA6IGZs
b3dDb250ZW50cy50ZXh0V2lkdGgoZnJhZ21lbnRUb1NwbGl0LnN0YXJ0LCBmcmFnbWVudFRvU3Bs
aXQuZW5kLCAwKTsKKyAgICBmcmFnbWVudFRvU3BsaXQud2lkdGggPSBmcmFnbWVudFRvU3BsaXQu
aXNFbXB0eSgpID8gMCA6IGZsb3dDb250ZW50c0l0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRv
U3BsaXQuc3RhcnQsIGZyYWdtZW50VG9TcGxpdC5lbmQsIDApOwogCiAgICAgZnJhZ21lbnRGb3JO
ZXh0TGluZS5zdGFydCA9IGZyYWdtZW50VG9TcGxpdC5lbmQ7CiAgICAgZnJhZ21lbnRGb3JOZXh0
TGluZS53aWR0aCAtPSBmcmFnbWVudFRvU3BsaXQud2lkdGg7CiAgICAgcmV0dXJuIGZyYWdtZW50
Rm9yTmV4dExpbmU7CiB9CiAKLXN0YXRpYyBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBmaXJz
dEZyYWdtZW50KEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRzLCBjb25zdCBMaW5lU3RhdGUmIHBy
ZXZpb3VzTGluZSkKK3N0YXRpYyBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZp
cnN0RnJhZ21lbnQoRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJhdG9yLCBj
b25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSkKIHsKICAgICAvLyBIYW5kbGUgb3ZlcmZsb3dl
ZCBmcmFnbWVudCBmcm9tIHByZXZpb3VzIGxpbmUuCi0gICAgRmxvd0NvbnRlbnRzOjpUZXh0RnJh
Z21lbnQgZmlyc3RGcmFnbWVudCA9IHByZXZpb3VzTGluZS5vdmVyZmxvd2VkRnJhZ21lbnQ7Ci0g
ICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHMuc3R5bGUoKTsKKyAgICBGbG93Q29u
dGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21lbnQgPSBwcmV2aW91c0xpbmUu
b3ZlcmZsb3dlZEZyYWdtZW50OworICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRz
SXRlcmF0b3Iuc3R5bGUoKTsKIAogICAgIGlmIChmaXJzdEZyYWdtZW50LmlzRW1wdHkoKSkKLSAg
ICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50cy5uZXh0VGV4dEZyYWdtZW50KCk7Cisg
ICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHNJdGVyYXRvci5uZXh0VGV4dEZyYWdt
ZW50KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFNwZWNpYWwgb3ZlcmZsb3cgcHJlLXdyYXAg
d2hpdGVzcGFjZSBoYW5kbGluZzogaWdub3JlIHRoZSBvdmVyZmxvd2VkIHdoaXRlc3BhY2UgaWYg
d2UgbWFuYWdlZCB0byBmaXQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBvbiB0aGUgcHJldmlvdXMg
bGluZS4KICAgICAgICAgLy8gV2hlbiB0aGUgbGluZSBpcyB0b28gc2hvcnQgdG8gZml0IG9uZSBj
aGFyYWN0ZXIgKHRob3VnaHQgaXQgc3RpbGwgc3RheXMgb24gdGhlIGxpbmUpIHdlIGNvbnRpbnVl
IHdpdGggdGhlIG92ZXJmbG93IHdoaXRlc3BhY2UgY29udGVudCBvbiB0aGlzIGxpbmUuCi0gICAg
ICAgIGlmIChmaXJzdEZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6
OldoaXRlc3BhY2UgJiYgcHJlV3JhcChzdHlsZSkgJiYgcHJldmlvdXNMaW5lLm1fZmlyc3RDaGFy
YWN0ZXJGaXRzKSB7Ci0gICAgICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzLm5l
eHRUZXh0RnJhZ21lbnQoKTsKKyAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93
Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlICYmIHByZVdyYXAoc3R5
bGUpICYmIHByZXZpb3VzTGluZS5tX2ZpcnN0Q2hhcmFjdGVyRml0cykgeworICAgICAgICAgICAg
Zmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsK
ICAgICAgICAgICAgIC8vIElmIHNraXBwaW5nIHRoZSB3aGl0ZXNwYWNlIHB1dHMgdXMgb24gYSBo
YXJkIG5ld2xpbmUsIHNraXAgdGhlIG5ld2xpbmUgdG9vIGFzIHdlIGFscmVhZHkgd3JhcHBlZCB0
aGUgbGluZS4KLSAgICAgICAgICAgIGlmIChmaXJzdEZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRl
bnRzOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykKLSAgICAgICAgICAgICAgICBmaXJzdEZyYWdt
ZW50ID0gZmxvd0NvbnRlbnRzLm5leHRUZXh0RnJhZ21lbnQoKTsKKyAgICAgICAgICAgIGlmIChm
aXJzdEZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6
TGluZUJyZWFrKQorICAgICAgICAgICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHNJ
dGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBD
aGVjayBpZiB3ZSBuZWVkIHRvIHNraXAgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZS4KLSAgICBpZiAo
c3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmIGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29u
dGVudHM6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkKLSAgICAgICAgZmlyc3RGcmFnbWVudCA9
IGZsb3dDb250ZW50cy5uZXh0VGV4dEZyYWdtZW50KCk7CisgICAgaWYgKHN0eWxlLmNvbGxhcHNl
V2hpdGVzcGFjZSAmJiBmaXJzdEZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6
OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkKKyAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dD
b250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKICAgICByZXR1cm4gZmlyc3RGcmFn
bWVudDsKIH0KIAotc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBj
b25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5z
LCBGbG93Q29udGVudHMmIGZsb3dDb250ZW50cykKK3N0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5z
KExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91dDo6
UnVuVmVjdG9yJiBsaW5lUnVucywgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0
ZXJhdG9yKQogewotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRzLnN0eWxlKCk7
CisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5zdHlsZSgpOwog
ICAgIGJvb2wgbGluZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBzdHlsZS5icmVh
a1dvcmRPbk92ZXJmbG93OwotICAgIGF1dG8gZnJhZ21lbnQgPSBmaXJzdEZyYWdtZW50KGZsb3dD
b250ZW50cywgcHJldmlvdXNMaW5lKTsKKyAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVu
dChmbG93Q29udGVudHNJdGVyYXRvciwgcHJldmlvdXNMaW5lKTsKICAgICB3aGlsZSAoIWZyYWdt
ZW50LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBIYXJkIGxpbmVicmVhay4KLSAgICAgICAgaWYg
KGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykg
eworICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4
dEZyYWdtZW50OjpMaW5lQnJlYWspIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IGxpbmUg
ZnJhZ21lbnQgb25seSBpZiB0aGVyZSdzIG5vdGhpbmcgb24gdGhlIGxpbmUuIChvdGhlcndpc2Ug
dGhlIGV4dHJhIG5ldyBsaW5lIGNoYXJhY3RlciB3b3VsZCBzaG93IHVwIGF0IHRoZSBlbmQgb2Yg
dGhlIGNvbnRlbnQuKQogICAgICAgICAgICAgaWYgKCFsaW5lLndpZHRoKCkpCiAgICAgICAgICAg
ICAgICAgbGluZS5hZGRVbmNvbW1pdHRlZChmcmFnbWVudCk7CkBAIC00MzIsMTAgKzQzMiwxMCBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVT
dGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAgICAgICAgICAgLy8gNC4gTm9uLXdoaXRlc3Bh
Y2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgYW5vdGhlciBmcmFnbWVudCBvbiB0aGUg
bGluZSBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgogICAgICAgICAgICAgYm9vbCBlbXB0
eUxpbmUgPSAhbGluZS53aWR0aCgpOwogICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBmcmFnbWVu
dC4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50czo6VGV4dEZy
YWdtZW50OjpXaGl0ZXNwYWNlKSB7CisgICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gU3BsaXQgdGhlIGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQgc3RheXMgb24g
dGhpcyBsaW5lLCBvdmVyZmxvd2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQgbGluZS4KLSAg
ICAgICAgICAgICAgICAgICAgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50
VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoIC0gbGluZS53aWR0aCgpLCBl
bXB0eUxpbmUsIGZsb3dDb250ZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUub3ZlcmZs
b3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZS5hdmFp
bGFibGVXaWR0aCAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHNJdGVyYXRv
cik7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuYWRkVW5jb21taXR0ZWQoZnJhZ21lbnQpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBXaGVuIHdoaXRlc3BhY2UgY29s
bGFwc2UgaXMgb24sIHdoaXRlc3BhY2UgdGhhdCBkb2Vzbid0IGZpdCBpcyBzaW1wbHkgc2tpcHBl
ZC4KQEAgLTQ0NCw3ICs0NDQsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3Rh
dGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAgICAgICAg
ICAgLy8gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQuICghc3R5bGUud3JhcExpbmVzOiBidWcxMzgx
MDIocHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IpCiAgICAgICAgICAgICBpZiAoKGVtcHR5TGlu
ZSAmJiBzdHlsZS5icmVha1dvcmRPbk92ZXJmbG93KSB8fCAhc3R5bGUud3JhcExpbmVzKSB7CiAg
ICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQg
c3RheXMgb24gdGhpcyBsaW5lLCBvdmVyZmxvd2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQg
bGluZS4KLSAgICAgICAgICAgICAgICBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCA9IHNwbGl0RnJh
Z21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGggLSBsaW5lLndpZHRo
KCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzKTsKKyAgICAgICAgICAgICAgICBsaW5lLm92ZXJm
bG93ZWRGcmFnbWVudCA9IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZh
aWxhYmxlV2lkdGggLSBsaW5lLndpZHRoKCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzSXRlcmF0
b3IpOwogICAgICAgICAgICAgICAgIGxpbmUuYWRkVW5jb21taXR0ZWQoZnJhZ21lbnQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDY1LDIyICs0NjUsMjIgQEAg
c3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3Rh
dGUmIHByZXZpb3VzTGluZSwgTGF5b3UKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBsaW5l
LmFkZFVuY29tbWl0dGVkKGZyYWdtZW50KTsKICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0
IGZyYWdtZW50LgotICAgICAgICBmcmFnbWVudCA9IGZsb3dDb250ZW50cy5uZXh0VGV4dEZyYWdt
ZW50KGxpbmUud2lkdGgoKSk7CisgICAgICAgIGZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0
b3IubmV4dFRleHRGcmFnbWVudChsaW5lLndpZHRoKCkpOwogICAgIH0KICAgICBsaW5lLmNvbW1p
dEFuZENyZWF0ZVJ1bihsaW5lUnVucyk7CiAgICAgcmV0dXJuIGZyYWdtZW50LmlzRW1wdHkoKSAm
JiBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudC5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNs
b3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZl
Y3RvciYgcnVucywgdW5zaWduZWQgcHJldmlvdXNSdW5Db3VudCwgdW5zaWduZWQmIGxpbmVDb3Vu
dCwgY29uc3QgRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMpCitzdGF0aWMgdm9pZCBjbG9zZUxp
bmVFbmRpbmdBbmRBZGp1c3RSdW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bnMsIHVuc2lnbmVkIHByZXZpb3VzUnVuQ291bnQsIHVuc2lnbmVkJiBsaW5lQ291bnQsIGNv
bnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKICAgICBp
ZiAocHJldmlvdXNSdW5Db3VudCA9PSBydW5zLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IEFTU0VSVChydW5zLnNpemUoKSk7Ci0gICAgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKGxpbmUs
IHJ1bnMsIGZsb3dDb250ZW50cyk7CisgICAgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKGxpbmUs
IHJ1bnMsIGZsb3dDb250ZW50c0l0ZXJhdG9yKTsKICAgICBpZiAoIXJ1bnMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5l
J3MgYWxpZ25tZW50IGludG8gYWNjb3VudC4KLSAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0
ID0gY29tcHV0ZUxpbmVMZWZ0KGZsb3dDb250ZW50cy5zdHlsZSgpLnRleHRBbGlnbiwgbGluZS5h
dmFpbGFibGVXaWR0aCwgbGluZS5jb21taXR0ZWRXaWR0aCwgbGluZS5sb2dpY2FsTGVmdE9mZnNl
dCkpIHsKKyAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0ID0gY29tcHV0ZUxpbmVMZWZ0KGZs
b3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCkudGV4dEFsaWduLCBsaW5lLmF2YWlsYWJsZVdpZHRo
LCBsaW5lLmNvbW1pdHRlZFdpZHRoLCBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KSkgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwcmV2aW91c1J1bkNvdW50OyBpIDwgcnVucy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgcnVuc1tpXS5sb2dpY2FsTGVmdCArPSBsaW5lTG9naWNhbExlZnQ7
CiAgICAgICAgICAgICBydW5zW2ldLmxvZ2ljYWxSaWdodCArPSBsaW5lTG9naWNhbExlZnQ7CkBA
IC00OTAsMjQgKzQ5MCwyNCBAQCBzdGF0aWMgdm9pZCBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RS
dW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bgogICAgICsrbGluZUNv
dW50OwogfQogCi1zdGF0aWMgdm9pZCBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkoTGF5b3V0
OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBGbG93Q29udGVudHMmIGZsb3dDb250ZW50cykK
K3N0YXRpYyB2b2lkIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeShMYXlvdXQ6OlJ1blZlY3Rv
ciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVy
YXRvcikKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHNwbGl0IGR1cmluZyBy
dW4gY29uc3RydWN0aW9uIGluc3RlYWQgb2YgYXMgYSBzZXBhcmF0ZSBwYXNzLgogICAgIGlmIChs
aW5lUnVucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZmxvd0NvbnRlbnRz
Lmhhc09uZVNlZ21lbnQoKSkKKyAgICBpZiAoZmxvd0NvbnRlbnRzSXRlcmF0b3IuaGFzT25lU2Vn
bWVudCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBydW5JbmRleCA9IDA7CiAg
ICAgZG8gewogICAgICAgICBjb25zdCBSdW4mIHJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4KTsK
ICAgICAgICAgQVNTRVJUKHJ1bi5zdGFydCAhPSBydW4uZW5kKTsKLSAgICAgICAgYXV0byYgc3Rh
cnRTZWdtZW50ID0gZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlvbihydW4uc3RhcnQpOwor
ICAgICAgICBhdXRvJiBzdGFydFNlZ21lbnQgPSBmbG93Q29udGVudHNJdGVyYXRvci5zZWdtZW50
Rm9yUG9zaXRpb24ocnVuLnN0YXJ0KTsKICAgICAgICAgaWYgKHJ1bi5lbmQgPD0gc3RhcnRTZWdt
ZW50LmVuZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBUaGlzIHJ1biBvdmVy
bGFwcyBtdWx0aXBsZSByZW5kZXJlcnMuIFNwbGl0IGl0IHVwLgogICAgICAgICAvLyBTcGxpdCBy
dW4gYXQgdGhlIHJlbmRlcmVyJ3MgYm91bmRhcnkgYW5kIGNyZWF0ZSBhIG5ldyBydW4gZm9yIHRo
ZSBsZWZ0IHNpZGUsIHdoaWxlIHVzZSB0aGUgY3VycmVudCBydW4gYXMgdGhlIHJpZ2h0IHNpZGUu
Ci0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mTGVmdFJ1biA9IHJ1bi5sb2dpY2FsTGVmdCAr
IGZsb3dDb250ZW50cy50ZXh0V2lkdGgocnVuLnN0YXJ0LCBzdGFydFNlZ21lbnQuZW5kLCBydW4u
bG9naWNhbExlZnQpOworICAgICAgICBmbG9hdCBsb2dpY2FsUmlnaHRPZkxlZnRSdW4gPSBydW4u
bG9naWNhbExlZnQgKyBmbG93Q29udGVudHNJdGVyYXRvci50ZXh0V2lkdGgocnVuLnN0YXJ0LCBz
dGFydFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOwogICAgICAgICBsaW5lUnVucy5pbnNl
cnQocnVuSW5kZXgsIFJ1bihydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1bi5sb2dpY2Fs
TGVmdCwgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuLCBmYWxzZSkpOwogICAgICAgICBSdW4mIHJpZ2h0
U2lkZVJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4ICsgMSk7CiAgICAgICAgIHJpZ2h0U2lkZVJ1
bi5zdGFydCA9IHN0YXJ0U2VnbWVudC5lbmQ7CkBAIC01MjEsNyArNTIxLDcgQEAgc3RhdGljIHZv
aWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxv
dyYgZmxvdywgdW5zaWcKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0RnJv
bUZsb3coZmxvdyk7CiAgICAgTGluZVN0YXRlIGxpbmU7CiAgICAgYm9vbCBpc0VuZE9mQ29udGVu
dCA9IGZhbHNlOwotICAgIEZsb3dDb250ZW50cyBmbG93Q29udGVudHMgPSBGbG93Q29udGVudHMo
Zmxvdyk7CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3IgZmxvd0NvbnRlbnRzSXRlcmF0b3IgPSBG
bG93Q29udGVudHNJdGVyYXRvcihmbG93KTsKIAogICAgIGRvIHsKICAgICAgICAgZmxvdy5zZXRM
b2dpY2FsSGVpZ2h0KGxpbmVIZWlnaHQgKiBsaW5lQ291bnQgKyBib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKTsKQEAgLTUyOSwxMSArNTI5LDExIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5zKExh
eW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnCiAgICAg
ICAgIHVuc2lnbmVkIHByZXZpb3VzUnVuQ291bnQgPSBydW5zLnNpemUoKTsKICAgICAgICAgbGlu
ZSA9IExpbmVTdGF0ZSgpOwogICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5l
LmF2YWlsYWJsZVdpZHRoLCBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KTsKLSAgICAgICAgaXNFbmRP
ZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMsIGZsb3dD
b250ZW50cyk7Ci0gICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZSwgcnVu
cywgcHJldmlvdXNSdW5Db3VudCwgbGluZUNvdW50LCBmbG93Q29udGVudHMpOworICAgICAgICBp
c0VuZE9mQ29udGVudCA9IGNyZWF0ZUxpbmVSdW5zKGxpbmUsIHByZXZpb3VzTGluZSwgcnVucywg
Zmxvd0NvbnRlbnRzSXRlcmF0b3IpOworICAgICAgICBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RS
dW5zKGxpbmUsIHJ1bnMsIHByZXZpb3VzUnVuQ291bnQsIGxpbmVDb3VudCwgZmxvd0NvbnRlbnRz
SXRlcmF0b3IpOwogICAgIH0gd2hpbGUgKCFpc0VuZE9mQ29udGVudCk7CiAKLSAgICBzcGxpdFJ1
bnNBdFJlbmRlcmVyQm91bmRhcnkocnVucywgZmxvd0NvbnRlbnRzKTsKKyAgICBzcGxpdFJ1bnNB
dFJlbmRlcmVyQm91bmRhcnkocnVucywgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwogICAgIEFTU0VS
VCghbGluZS51bmNvbW1pdHRlZFdpZHRoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCmluZGV4IDcx
OGU5OTVjYzIxMzYxYzg0Y2Y0ZmRlOWZjNTlkNThkY2Q3ZTBlZmEuLjUwNTAwNDg3MmZkNDE5N2Rj
YzI1ZDBhYTA5ZTQzNDQ1MGUzYmRhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKQEAgLTY2LDU2ICs2
Niw2IEBAIEZsb3dDb250ZW50czo6Rmxvd0NvbnRlbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
ZmxvdykKIHsKIH0KIAotRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRlbnRzOjpu
ZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbikKLXsKLSAgICAvLyBBIGZyYWdtZW50IGNh
biBlaXRoZXIgYmUKLSAgICAvLyAxLiBuZXcgbGluZSBjaGFyYWN0ZXIgd2hlbiBwcmVzZXJ2ZU5l
d2xpbmUgaXMgb24gKG5vdCBjb25zaWRlcmVkIGFzIHdoaXRlc3BhY2UpIG9yCi0gICAgLy8gMi4g
d2hpdGVzcGFjZSAoY29sbGFzcGVkLCBub24tY29sbGFwc2VkIG11bHRpIG9yIHNpbmdsZSkgb3IK
LSAgICAvLyAzLiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgotICAgIC8vIDQuIGVtcHR5LCBp
bmRpY2F0aW5nIGNvbnRlbnQgZW5kLgotICAgIFRleHRGcmFnbWVudCBmcmFnbWVudDsKLSAgICBm
cmFnbWVudC5zdGFydCA9IG1fcG9zaXRpb247Ci0gICAgaWYgKGlzRW5kKGZyYWdtZW50LnN0YXJ0
KSkgewotICAgICAgICBmcmFnbWVudC5lbmQgPSBmcmFnbWVudC5zdGFydDsKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAoaXNMaW5lQnJlYWsoZnJhZ21lbnQuc3RhcnQp
KSB7Ci0gICAgICAgIGZyYWdtZW50LnR5cGUgPSBUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhazsKLSAg
ICAgICAgZnJhZ21lbnQuZW5kID0gZnJhZ21lbnQuc3RhcnQgKyAxOwotICAgICAgICBtX3Bvc2l0
aW9uID0gZnJhZ21lbnQuZW5kOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgc3BhY2VDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgd2hpdGVzcGFjZUVuZCA9
IGZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGZyYWdtZW50LnN0YXJ0LCBzcGFjZUNvdW50
KTsKLSAgICBBU1NFUlQoZnJhZ21lbnQuc3RhcnQgPD0gd2hpdGVzcGFjZUVuZCk7Ci0gICAgaWYg
KGZyYWdtZW50LnN0YXJ0ICE9IHdoaXRlc3BhY2VFbmQpIHsKLSAgICAgICAgZnJhZ21lbnQudHlw
ZSA9IFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZTsKLSAgICAgICAgZnJhZ21lbnQuZW5kID0gd2hp
dGVzcGFjZUVuZDsKLSAgICAgICAgYm9vbCBtdWx0aXBsZVdoaXRlc3BhY2UgPSBmcmFnbWVudC5z
dGFydCArIDEgPCBmcmFnbWVudC5lbmQ7Ci0gICAgICAgIGZyYWdtZW50LmlzQ29sbGFwc2VkID0g
bXVsdGlwbGVXaGl0ZXNwYWNlICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwotICAgICAg
ICBmcmFnbWVudC5pc0JyZWFrYWJsZSA9ICFmcmFnbWVudC5pc0NvbGxhcHNlZCAmJiBtdWx0aXBs
ZVdoaXRlc3BhY2U7Ci0gICAgICAgIGlmIChmcmFnbWVudC5pc0NvbGxhcHNlZCkKLSAgICAgICAg
ICAgIGZyYWdtZW50LndpZHRoID0gbV9zdHlsZS5zcGFjZVdpZHRoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50TGVuZ3RoID0gZnJhZ21lbnQuZW5kIC0gZnJh
Z21lbnQuc3RhcnQ7Ci0gICAgICAgICAgICBpZiAoZnJhZ21lbnRMZW5ndGggPT0gc3BhY2VDb3Vu
dCkKLSAgICAgICAgICAgICAgICBmcmFnbWVudC53aWR0aCA9IGZyYWdtZW50TGVuZ3RoICogbV9z
dHlsZS5zcGFjZVdpZHRoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZyYWdt
ZW50LndpZHRoID0gdGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3Np
dGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZDsKLSAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLQotICAgIGZyYWdtZW50LnR5cGUgPSBUZXh0
RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2U7Ci0gICAgZnJhZ21lbnQuaXNCcmVha2FibGUgPSBtX3N0
eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3c7Ci0gICAgZnJhZ21lbnQuZW5kID0gZmluZE5leHRCcmVh
a2FibGVQb3NpdGlvbihmcmFnbWVudC5zdGFydCArIDEpOwotICAgIGZyYWdtZW50LndpZHRoID0g
dGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3NpdGlvbik7Ci0gICAg
bV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZDsKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci19Ci0KIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIHVuc2lnbmVkIG5leHRCcmVh
a2FibGVQb3NpdGlvbihMYXp5TGluZUJyZWFrSXRlcmF0b3ImIGxpbmVCcmVha0l0ZXJhdG9yLCBj
b25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKQog
ewpAQCAtMTcxLDI5ICsxMjEsNiBAQCB1bnNpZ25lZCBGbG93Q29udGVudHM6OmZpbmROZXh0Tm9u
V2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZAogICAgIHJldHVy
biBwb3NpdGlvbjsKIH0KIAotZmxvYXQgRmxvd0NvbnRlbnRzOjp0ZXh0V2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBjb25zdCBh
dXRvJiBmcm9tU2VnbWVudCA9IHNlZ21lbnRGb3JQb3NpdGlvbihmcm9tKTsKLQotICAgIGlmICgo
bV9zdHlsZS5mb250LmlzRml4ZWRQaXRjaCgpICYmIGZyb21TZWdtZW50LmVuZCA+PSB0bykgfHwg
KGZyb20gPT0gZnJvbVNlZ21lbnQuc3RhcnQgJiYgdG8gPT0gZnJvbVNlZ21lbnQuZW5kKSkKLSAg
ICAgICAgcmV0dXJuIGZyb21TZWdtZW50LnJlbmRlcmVyLndpZHRoKGZyb20gLSBmcm9tU2VnbWVu
dC5zdGFydCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwgbnVsbHB0ciwgbnVs
bHB0cik7Ci0KLSAgICBjb25zdCBhdXRvKiBzZWdtZW50ID0gJmZyb21TZWdtZW50OwotICAgIGZs
b2F0IHRleHRXaWR0aCA9IDA7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRFbmQgPSAwOwotICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgIGZyYWdtZW50RW5kID0gc3RkOjptaW4odG8sIHNlZ21lbnQt
PmVuZCk7Ci0gICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50LT50ZXh0LmlzOEJpdCgpID8gcnVu
V2lkdGg8TENoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFydCwgZnJhZ21l
bnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKSA6Ci0gICAgICAg
ICAgICBydW5XaWR0aDxVQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQtPnN0YXJ0
LCBmcmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lkdGgpOwot
ICAgICAgICBpZiAoZnJhZ21lbnRFbmQgPT0gdG8pCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZnJvbSA9IGZyYWdtZW50RW5kOwotICAgICAgICBzZWdtZW50ID0gJnNlZ21lbnRGb3JQb3Np
dGlvbihmcmFnbWVudEVuZCk7Ci0gICAgfTsKLQotICAgIHJldHVybiB0ZXh0V2lkdGg7Ci19Ci0K
IHVuc2lnbmVkIEZsb3dDb250ZW50czo6c2VnbWVudEluZGV4Rm9yUG9zaXRpb25TbG93KHVuc2ln
bmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKG1f
c2VnbWVudHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRpb24sIFtdKGNvbnN0IFNl
Z21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKSB7CkBAIC0yMzEsNSArMTU4LDg2IEBA
IGZsb2F0IEZsb3dDb250ZW50czo6cnVuV2lkdGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvCiAgICAgcmV0dXJuIHdpZHRoOwogfQogCitGbG93Q29u
dGVudHNJdGVyYXRvcjo6Rmxvd0NvbnRlbnRzSXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBmbG93KQorICAgIDogRmxvd0NvbnRlbnRzKGZsb3cpCit7Cit9CisKK0Zsb3dDb250ZW50c0l0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6Om5leHRUZXh0RnJhZ21l
bnQoZmxvYXQgeFBvc2l0aW9uKQoreworICAgIC8vIEEgZnJhZ21lbnQgY2FuIGVpdGhlciBiZQor
ICAgIC8vIDEuIG5ldyBsaW5lIGNoYXJhY3RlciB3aGVuIHByZXNlcnZlTmV3bGluZSBpcyBvbiAo
bm90IGNvbnNpZGVyZWQgYXMgd2hpdGVzcGFjZSkgb3IKKyAgICAvLyAyLiB3aGl0ZXNwYWNlIChj
b2xsYXNwZWQsIG5vbi1jb2xsYXBzZWQgbXVsdGkgb3Igc2luZ2xlKSBvcgorICAgIC8vIDMuIG5v
bi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAgLy8gNC4gZW1wdHksIGluZGljYXRpbmcgY29u
dGVudCBlbmQuCisgICAgVGV4dEZyYWdtZW50IGZyYWdtZW50OworICAgIGZyYWdtZW50LnN0YXJ0
ID0gbV9wb3NpdGlvbjsKKyAgICBpZiAoaXNFbmQoZnJhZ21lbnQuc3RhcnQpKSB7CisgICAgICAg
IGZyYWdtZW50LmVuZCA9IGZyYWdtZW50LnN0YXJ0OworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
CisgICAgfQorICAgIGlmIChpc0xpbmVCcmVhayhmcmFnbWVudC5zdGFydCkpIHsKKyAgICAgICAg
ZnJhZ21lbnQudHlwZSA9IFRleHRGcmFnbWVudDo6TGluZUJyZWFrOworICAgICAgICBmcmFnbWVu
dC5lbmQgPSBmcmFnbWVudC5zdGFydCArIDE7CisgICAgICAgIG1fcG9zaXRpb24gPSBmcmFnbWVu
dC5lbmQ7CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisKKyAgICBjb25zdCBhdXRv
JiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgdW5zaWduZWQgc3BhY2VDb3VudCA9IDA7Cisg
ICAgdW5zaWduZWQgd2hpdGVzcGFjZUVuZCA9IGZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9u
KGZyYWdtZW50LnN0YXJ0LCBzcGFjZUNvdW50KTsKKyAgICBBU1NFUlQoZnJhZ21lbnQuc3RhcnQg
PD0gd2hpdGVzcGFjZUVuZCk7CisgICAgaWYgKGZyYWdtZW50LnN0YXJ0ICE9IHdoaXRlc3BhY2VF
bmQpIHsKKyAgICAgICAgZnJhZ21lbnQudHlwZSA9IFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZTsK
KyAgICAgICAgZnJhZ21lbnQuZW5kID0gd2hpdGVzcGFjZUVuZDsKKyAgICAgICAgYm9vbCBtdWx0
aXBsZVdoaXRlc3BhY2UgPSBmcmFnbWVudC5zdGFydCArIDEgPCBmcmFnbWVudC5lbmQ7CisgICAg
ICAgIGZyYWdtZW50LmlzQ29sbGFwc2VkID0gbXVsdGlwbGVXaGl0ZXNwYWNlICYmIHN0eWxlLmNv
bGxhcHNlV2hpdGVzcGFjZTsKKyAgICAgICAgZnJhZ21lbnQuaXNCcmVha2FibGUgPSAhZnJhZ21l
bnQuaXNDb2xsYXBzZWQgJiYgbXVsdGlwbGVXaGl0ZXNwYWNlOworICAgICAgICBpZiAoZnJhZ21l
bnQuaXNDb2xsYXBzZWQpCisgICAgICAgICAgICBmcmFnbWVudC53aWR0aCA9IHN0eWxlLnNwYWNl
V2lkdGg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRMZW5n
dGggPSBmcmFnbWVudC5lbmQgLSBmcmFnbWVudC5zdGFydDsKKyAgICAgICAgICAgIGlmIChmcmFn
bWVudExlbmd0aCA9PSBzcGFjZUNvdW50KQorICAgICAgICAgICAgICAgIGZyYWdtZW50LndpZHRo
ID0gZnJhZ21lbnRMZW5ndGggKiBzdHlsZS5zcGFjZVdpZHRoOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGZyYWdtZW50LndpZHRoID0gdGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0
LCBmcmFnbWVudC5lbmQsIHhQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgbV9wb3NpdGlv
biA9IGZyYWdtZW50LmVuZDsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKworICAg
IGZyYWdtZW50LnR5cGUgPSBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2U7CisgICAgZnJhZ21l
bnQuaXNCcmVha2FibGUgPSBzdHlsZS5icmVha1dvcmRPbk92ZXJmbG93OworICAgIGZyYWdtZW50
LmVuZCA9IGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24oZnJhZ21lbnQuc3RhcnQgKyAxKTsKKyAg
ICBmcmFnbWVudC53aWR0aCA9IHRleHRXaWR0aChmcmFnbWVudC5zdGFydCwgZnJhZ21lbnQuZW5k
LCB4UG9zaXRpb24pOworICAgIG1fcG9zaXRpb24gPSBmcmFnbWVudC5lbmQ7CisgICAgcmV0dXJu
IGZyYWdtZW50OworfQorCitmbG9hdCBGbG93Q29udGVudHNJdGVyYXRvcjo6dGV4dFdpZHRoKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Cit7CisgICAg
Y29uc3QgYXV0byYgZnJvbVNlZ21lbnQgPSBzZWdtZW50Rm9yUG9zaXRpb24oZnJvbSk7CisgICAg
Y29uc3QgYXV0byYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworCisgICAgaWYgKChzdHlsZS5mb250
LmlzRml4ZWRQaXRjaCgpICYmIGZyb21TZWdtZW50LmVuZCA+PSB0bykgfHwgKGZyb20gPT0gZnJv
bVNlZ21lbnQuc3RhcnQgJiYgdG8gPT0gZnJvbVNlZ21lbnQuZW5kKSkKKyAgICAgICAgcmV0dXJu
IGZyb21TZWdtZW50LnJlbmRlcmVyLndpZHRoKGZyb20gLSBmcm9tU2VnbWVudC5zdGFydCwgdG8g
LSBmcm9tLCBzdHlsZS5mb250LCB4UG9zaXRpb24sIG51bGxwdHIsIG51bGxwdHIpOworCisgICAg
Y29uc3QgYXV0byogc2VnbWVudCA9ICZmcm9tU2VnbWVudDsKKyAgICBmbG9hdCB0ZXh0V2lkdGgg
PSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBmcmFnbWVudEVuZCA9IHN0ZDo6bWluKHRvLCBzZWdtZW50LT5lbmQpOworICAgICAg
ICB0ZXh0V2lkdGggKz0gc2VnbWVudC0+dGV4dC5pczhCaXQoKSA/IHJ1bldpZHRoPExDaGFyPihz
ZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdtZW50RW5kIC0gc2VnbWVu
dC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCkgOgorICAgICAgICAgICAgcnVuV2lkdGg8
VUNoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFydCwgZnJhZ21lbnRFbmQg
LSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKTsKKyAgICAgICAgaWYgKGZy
YWdtZW50RW5kID09IHRvKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZyb20gPSBmcmFn
bWVudEVuZDsKKyAgICAgICAgc2VnbWVudCA9ICZzZWdtZW50Rm9yUG9zaXRpb24oZnJhZ21lbnRF
bmQpOworICAgIH07CisKKyAgICByZXR1cm4gdGV4dFdpZHRoOworfQorCisKIH0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50cy5oCmluZGV4IDdhNzkxN2ZkMDlmYjgzZDA1ZTZjNWFjNzc2ZTk4MzVhM2JlNjk1NzMuLjI5
N2E4NWNmODk3NWE0NGZlNzJjOTE2ZDU5OTFiYzE3NjkwYWVhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaApA
QCAtNDAsMzIgKzQwLDYgQEAgY2xhc3MgRmxvd0NvbnRlbnRzIHsKIHB1YmxpYzoKICAgICBGbG93
Q29udGVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7CiAKLSAgICBzdHJ1Y3QgVGV4dEZyYWdt
ZW50IHsKLSAgICAgICAgVGV4dEZyYWdtZW50KCkgPSBkZWZhdWx0OwotICAgICAgICBUZXh0RnJh
Z21lbnQodW5zaWduZWQgdGV4dFN0YXJ0LCB1bnNpZ25lZCB0ZXh0RW5kLCBmbG9hdCB0ZXh0V2lk
dGgsIGJvb2wgaXNXaGl0ZXNwYWNlT25seSkKLSAgICAgICAgICAgIDogc3RhcnQodGV4dFN0YXJ0
KQotICAgICAgICAgICAgLCBlbmQodGV4dEVuZCkKLSAgICAgICAgICAgICwgdHlwZShpc1doaXRl
c3BhY2VPbmx5ID8gV2hpdGVzcGFjZSA6IE5vbldoaXRlc3BhY2UpCi0gICAgICAgICAgICAsIHdp
ZHRoKHRleHRXaWR0aCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ID09IGVuZDsK
LSAgICAgICAgfQotCi0gICAgICAgIGVudW0gVHlwZSB7IExpbmVCcmVhaywgV2hpdGVzcGFjZSwg
Tm9uV2hpdGVzcGFjZSB9OwotICAgICAgICB1bnNpZ25lZCBzdGFydCA9IDA7Ci0gICAgICAgIHVu
c2lnbmVkIGVuZCA9IDA7Ci0gICAgICAgIFR5cGUgdHlwZSA9IE5vbldoaXRlc3BhY2U7Ci0gICAg
ICAgIGJvb2wgaXNDb2xsYXBzZWQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc0JyZWFrYWJsZSA9
IGZhbHNlOwotICAgICAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgfTsKLSAgICBUZXh0RnJhZ21l
bnQgbmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24gPSAwKTsKLSAgICBmbG9hdCB0ZXh0
V2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7
Ci0KICAgICBzdHJ1Y3QgU2VnbWVudCB7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0OwogICAgICAg
ICB1bnNpZ25lZCBlbmQ7CkBAIC05MywyMiArNjcsNTcgQEAgcHVibGljOgogICAgIH07CiAgICAg
Y29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9u
KHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VDb3VudCkgY29uc3Q7CiAgICAgdW5z
aWduZWQgZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7
CiAgICAgYm9vbCBpc0xpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CiAgICAgYm9v
bCBpc0VuZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGZsb2F0IHJ1bldpZHRoKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OworCitwcml2YXRlOgogICAg
IHVuc2lnbmVkIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dDsKICAgICB1bnNpZ25lZCBzZWdtZW50SW5kZXhGb3JQb3NpdGlvblNsb3codW5zaWduZWQgcG9z
aXRpb24pIGNvbnN0OwogCiAgICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0OwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBmbG9hdCBydW5X
aWR0aChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBv
c2l0aW9uKSBjb25zdDsKIAogICAgIGNvbnN0IFN0eWxlIG1fc3R5bGU7CiAgICAgY29uc3QgVmVj
dG9yPFNlZ21lbnQsIDg+IG1fc2VnbWVudHM7CiAKICAgICBtdXRhYmxlIExhenlMaW5lQnJlYWtJ
dGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwogICAgIG11dGFibGUgdW5zaWduZWQgbV9sYXN0
U2VnbWVudEluZGV4OworfTsKKworY2xhc3MgRmxvd0NvbnRlbnRzSXRlcmF0b3IgOiBwdWJsaWMg
Rmxvd0NvbnRlbnRzIHsKK3B1YmxpYzoKKyAgICBGbG93Q29udGVudHNJdGVyYXRvcihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmKTsKKworICAgIHN0cnVjdCBUZXh0RnJhZ21lbnQgeworICAgICAgICBU
ZXh0RnJhZ21lbnQoKSA9IGRlZmF1bHQ7CisgICAgICAgIFRleHRGcmFnbWVudCh1bnNpZ25lZCB0
ZXh0U3RhcnQsIHVuc2lnbmVkIHRleHRFbmQsIGZsb2F0IHRleHRXaWR0aCwgYm9vbCBpc1doaXRl
c3BhY2VPbmx5KQorICAgICAgICAgICAgOiBzdGFydCh0ZXh0U3RhcnQpCisgICAgICAgICAgICAs
IGVuZCh0ZXh0RW5kKQorICAgICAgICAgICAgLCB0eXBlKGlzV2hpdGVzcGFjZU9ubHkgPyBXaGl0
ZXNwYWNlIDogTm9uV2hpdGVzcGFjZSkKKyAgICAgICAgICAgICwgd2lkdGgodGV4dFdpZHRoKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhcnQgPT0gZW5kOworICAgICAgICB9CisKKyAg
ICAgICAgZW51bSBUeXBlIHsgTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNwYWNlIH07
CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OworICAgICAgICB1bnNpZ25lZCBlbmQgIHsw
IH07CisgICAgICAgIFR5cGUgdHlwZSB7IE5vbldoaXRlc3BhY2UgfTsKKyAgICAgICAgYm9vbCBp
c0NvbGxhcHNlZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNCcmVha2FibGUgeyBmYWxzZSB9
OworICAgICAgICBmbG9hdCB3aWR0aCB7IDAgfTsKKyAgICB9OworICAgIFRleHRGcmFnbWVudCBu
ZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9IDApOworICAgIGZsb2F0IHRleHRXaWR0
aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKKwor
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245540</attachid>
            <date>2015-01-28 07:22:53 -0800</date>
            <delta_ts>2015-01-28 10:32:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140944-20150128072257.patch</filename>
            <type>text/plain</type>
            <size>51399</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQxNWNhYTAwNzU5YTIy
ZDNjYmM5ZjMyOTk2ODA3YWNhZmMwOTgxOC4uN2Q3Nzc2NDIzYTBkZjc0Yjk2YmEwODM1M2VjZThi
M2I2NzIzMDQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE1LTAxLTI3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNb3ZlIEZsb3dDb250ZW50cyBpdGVyYXRvciBpbnRlcmZhY2UgdG8gRmxvd0NvbnRlbnRzSXRl
cmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDA5NDQKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBU
aGlzIHBhdGNoIGNsZWFucyB1cCBGbG93Q29udGVudHMncyBpbnRlcmZhY2UgYnkgbW92aW5nIHRo
ZSBpdGVyYXRvciBmdW5jdGlvbmFsaXR5CisgICAgICAgIHRvIHRoaXMgbmV3IEZsb3dDb250ZW50
c0l0ZXJhdG9yIGNsYXNzLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjphZGRVbmNvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFkZFVuY29tbWl0dGVk
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFw
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hp
dGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdEZyYWdt
ZW50VG9GaXRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZpcnN0
RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGlu
ZVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5k
aW5nQW5kQWRqdXN0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpz
cGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6Y3JlYXRlVGV4dFJ1bnMpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9yOjpGbG93Q29udGVudHNJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6bmV4dFRl
eHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29u
dGVudHNJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OkZsb3dDb250ZW50czo6bmV4dFRleHRGcmFnbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnRleHRXaWR0aCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQ6OlRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6VGV4
dEZyYWdtZW50OjpUZXh0RnJhZ21lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6OmlzRW1wdHkpOiBEZWxl
dGVkLgorCiAyMDE1LTAxLTI3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIFNpbXBsaWZ5IGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxheS1zdGFsbC5o
dG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGFhMjdiMDE1NGI5OGQ2MzMyNmU5MzI2NTRlYzAw
NjQ4MGY2MzM4ZmIuLmQ0YTBiMDc0OTZlNTRlMDhmYzJkYWI2NjFmN2Y0NWQ4YzRlYjZlODggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMzUyLDYgKzIzNTIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcAogICAgIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmNwcAorICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCiAgICAg
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKICAgICByZW5kZXJpbmcvVGV4
dEF1dG9zaXplci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCmluZGV4IGFlZDJjOGU5YTFlMWRkNTM2NGIxMzg2YzFlZTJmYzlkOWJkZDQ5MGIu
LjUxYmU2YzBjNDk0MTllMzIxNTgzODIxYWZiZThjNzlkMTA1OTBlMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTE1ODIsNiArMTE1
ODIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNlbGVjdGlvblN1
YnRyZWVSb290LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xT
aW1wbGVMaW5lTGF5b3V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxp
bmVMYXlvdXRGdW5jdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3BwIiAvPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IDgyMWY4NThiYmY5ZDAwZTA3ZWFiM2I1ZjlmZWRiNjViZTY5MjYwYjguLmZjODIxMGMxNzg5
ZGRjOTk0ZThiM2YwYTBmYzI0ODcwOTkwY2QwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTY3NzUsNiAr
Njc3NSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGlu
ZUxheW91dEZsb3dDb250ZW50cy5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwIj4KKyAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAiPgogICAg
ICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOTc4
Y2ExOGU2M2M5NDMxYzI5YmIwYTcxOWU2NjZmNTMxOTk5MjUzLi4xZTI0NjIyYWZlNDYxMzgxZmIw
ZmMxMmM5YjRkMzM4ZjAxM2ZiMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDk2LDYgKzIwOTYsOCBAQAogCQk1ODAzNzE2
MTFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBS
ZWN0LmNwcCAqLzsgfTsKIAkJNTgwMzcxNjIxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE2MDFB
NjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1ODAzNzE2NDFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJG
cmFnbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTgwMzcxNjMxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1ODJDQjA1MzFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJDQjA1MjFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggKi87IH07CisJ
CTU4MkNCMDU1MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHNJdGVyYXRvci5jcHAgKi87IH07CiAJCTU4NUQ2REZDMUExNTM1NTYwMEZBNEYxMiAvKiBTaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5jcHAgKi87IH07CiAJCTU4NUQ2RTAzMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLzsgfTsKIAkJNTg1RDZFMDQxQTFBNzkyRTAwRkE0RjEy
IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi87IH07CkBAIC05MjMyLDYgKzkyMzQsOCBAQAog
CQk1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xpcFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTgwMzcxNjMxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGcmFnbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1ODJDQjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1ODJDQjA1NDFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4NUQ2REZCMUExNTM1NTYwMEZBNEYxMiAv
KiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNjA0LDYg
KzIyNjA4LDggQEAKIAkJCQlFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5
bGUuaCAqLywKIAkJCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNS
b290SW5saW5lQm94LmggKi8sCiAJCQkJQkNBMjU3MTQxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRp
Y2FsUG9zaXRpb25DYWNoZS5oICovLAorCQkJCTU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBT
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCAqLywKKwkJCQk1ODJDQjA1NDFB
NzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNw
cCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcmVuZGVyaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTIzNTQzLDYgKzIzNTQ5LDcgQEAKIAkJCQkzNzlFNjFDQzEyNkNBNUM0MDBCNjNF
OEQgLyogQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjVFMEM2
NUMxNjQzQzQyQzAwRDZDQjY5IC8qIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMzNFRTVDNTE0RkI0OTYxMDAwMjA5NUEgLyogQmFzZUNs
aWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTU4MkNCMDUzMUE3
OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1OUM5NjAwMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREFFMTI1MUYxMkQwMDNF
RjI2OSAvKiBCYXNlVGV4dElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJENkFGOEEx
NUVGMjVERjAwOEI3MTEwIC8qIEJhc2ljU2hhcGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLApA
QCAtMjk1MDYsNiArMjk1MTMsNyBAQAogCQkJCUJDMjQ0MUM0MEU4QjY1RDAwMDU1MzIwRiAvKiBT
Y3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVD
OCAvKiBTY3JvbGxWaWV3SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4
QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1ODJDQjA1
NTFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFy
Y2hJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUExNDY4NjIyNTAwNUU5
M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0QwRTBGQTBF
OTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggNmRjNzFi
YjNkOGM0YTVkMmU1MzY4NDk5YzRiYTg3Y2NmM2EwZGM1Zi4uODc5ZDA2OTgyMTIzYTE1OGY2YzZm
OWJjMDBhNmJlOWIyNjQ2OTE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHMuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgogI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCkBAIC0yNDcsNyArMjQ4LDcgQEAg
c3RydWN0IExpbmVTdGF0ZSB7CiAgICAgICAgIG1fbmV3VW5jb21taXR0ZWRTZWdtZW50ID0gdHJ1
ZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFVuY29tbWl0dGVkKGNvbnN0IEZsb3dDb250ZW50czo6
VGV4dEZyYWdtZW50JiBmcmFnbWVudCkKKyAgICB2b2lkIGFkZFVuY29tbWl0dGVkKGNvbnN0IEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQogICAgIHsKICAgICAg
ICAgLy8gU3RhcnQgYSBuZXcgdW5jb21taXR0ZWQgc2VnbWVudC4KICAgICAgICAgaWYgKG1fbmV3
VW5jb21taXR0ZWRTZWdtZW50KSB7CkBAIC0yNTYsMTMgKzI1NywxMyBAQCBzdHJ1Y3QgTGluZVN0
YXRlIHsKICAgICAgICAgfQogICAgICAgICB1bmNvbW1pdHRlZFdpZHRoICs9IGZyYWdtZW50Lndp
ZHRoOwogICAgICAgICB1bmNvbW1pdHRlZEVuZCA9IGZyYWdtZW50LmVuZDsKLSAgICAgICAgdW5j
b21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gZnJhZ21lbnQudHlwZSA9PSBGbG93Q29u
dGVudHM6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSA/IGZyYWdtZW50LndpZHRoIDogMDsKLSAg
ICAgICAgdW5jb21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCA9IGZyYWdtZW50LnR5cGUg
PT0gRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC5lbmQg
LSBmcmFnbWVudC5zdGFydCAgOiAwOworICAgICAgICB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggPSBmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC53aWR0aCA6IDA7CisgICAgICAgIHVuY29taXR0
ZWRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGggPSBmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50
c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC5lbmQgLSBmcmFn
bWVudC5zdGFydCAgOiAwOwogICAgIH0KIAogICAgIHZvaWQgYWRkVW5jb21taXR0ZWRXaGl0ZXNw
YWNlKGZsb2F0IHdoaXRlc3BhY2VXaWR0aCkKICAgICB7Ci0gICAgICAgIGFkZFVuY29tbWl0dGVk
KEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50KHVuY29tbWl0dGVkRW5kLCB1bmNvbW1pdHRlZEVu
ZCArIDEsIHdoaXRlc3BhY2VXaWR0aCwgdHJ1ZSkpOworICAgICAgICBhZGRVbmNvbW1pdHRlZChG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50KHVuY29tbWl0dGVkRW5kLCB1bmNvbW1p
dHRlZEVuZCArIDEsIHdoaXRlc3BhY2VXaWR0aCwgdHJ1ZSkpOwogICAgIH0KIAogICAgIGJvb2wg
aGFzV2hpdGVzcGFjZU9ubHkoKSBjb25zdApAQCAtMzAxLDI1ICszMDIsMjUgQEAgc3RydWN0IExp
bmVTdGF0ZSB7CiAgICAgYm9vbCBtX2ZpcnN0Q2hhcmFjdGVyRml0cyB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX25ld1VuY29tbWl0dGVkU2VnbWVudCB7IHRydWUgfTsKIAotICAgIEZsb3dDb250ZW50
czo6VGV4dEZyYWdtZW50IG92ZXJmbG93ZWRGcmFnbWVudDsKKyAgICBGbG93Q29udGVudHNJdGVy
YXRvcjo6VGV4dEZyYWdtZW50IG92ZXJmbG93ZWRGcmFnbWVudDsKIAogcHJpdmF0ZToKICAgICBm
bG9hdCB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07CiAgICAgdW5zaWdu
ZWQgdW5jb21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCB7IDAgfTsKIH07CiAKLXN0YXRp
YyBib29sIHByZVdyYXAoY29uc3QgRmxvd0NvbnRlbnRzOjpTdHlsZSYgc3R5bGUpCitzdGF0aWMg
Ym9vbCBwcmVXcmFwKGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCiB7
CiAgICAgcmV0dXJuIHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNl
OwogfQogICAgIAotc3RhdGljIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExpbmVTdGF0
ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250
ZW50cyYgZmxvd0NvbnRlbnRzKQorc3RhdGljIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNl
KExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0
IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKICAgICBpZiAo
IWxpbmVTdGF0ZS5jb21taXR0ZWRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGgpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICAvLyBSZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UsIG9yIG5vbi1j
b2xsYXBzZWQgcHJlLXdyYXAgd2hpdGVzcGFjZSwgdW5sZXNzIGl0J3MgdGhlIG9ubHkgY29udGVu
dCBvbiB0aGUgbGluZSAtc28gcmVtb3ZpbmcgdGhlIHdoaXRlc2FwY2Ugd291bGQgcHJvZHVjZSBh
biBlbXB0eSBsaW5lLgotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRzLnN0eWxl
KCk7CisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5zdHlsZSgp
OwogICAgIGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNlID0gc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNl
IHwgcHJlV3JhcChzdHlsZSk7CiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlc3BhY2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTM0NSwxNCArMzQ2LDE0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUxpbmVDb25z
dHJhaW5zKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgZmxvYXQmIGF2YWlsYWJsZVdpCiAg
ICAgYXZhaWxhYmxlV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0
IC0gbG9naWNhbExlZnRPZmZzZXQpOwogfQogCi1zdGF0aWMgRmxvd0NvbnRlbnRzOjpUZXh0RnJh
Z21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCYg
ZnJhZ21lbnRUb1NwbGl0LCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBrZWVwQXRMZWFzdE9u
ZUNoYXJhY3RlciwgY29uc3QgRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMpCitzdGF0aWMgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50VG9TcGxpdCwgZmxvYXQg
YXZhaWxhYmxlV2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIsIGNvbnN0IEZsb3dD
b250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKICAgICAvLyBGYXN0IHBh
dGggZm9yIHNpbmdsZSBjaGFyIGZyYWdtZW50cy4KICAgICBpZiAoZnJhZ21lbnRUb1NwbGl0LnN0
YXJ0ICsgMSA9PSBmcmFnbWVudFRvU3BsaXQuZW5kKSB7CiAgICAgICAgIGlmIChrZWVwQXRMZWFz
dE9uZUNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybiBGbG93Q29udGVudHM6OlRleHRGcmFn
bWVudCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQoKTsKIAotICAgICAgICBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBmcmFnbWVudEZv
ck5leHRMaW5lKGZyYWdtZW50VG9TcGxpdCk7CisgICAgICAgIEZsb3dDb250ZW50c0l0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQgZnJhZ21lbnRGb3JOZXh0TGluZShmcmFnbWVudFRvU3BsaXQpOwogICAg
ICAgICBmcmFnbWVudFRvU3BsaXQuZW5kID0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0OwogICAgICAg
ICBmcmFnbWVudFRvU3BsaXQud2lkdGggPSAwOwogICAgICAgICByZXR1cm4gZnJhZ21lbnRGb3JO
ZXh0TGluZTsKQEAgLTM2NCw3ICszNjUsNyBAQCBzdGF0aWMgRmxvd0NvbnRlbnRzOjpUZXh0RnJh
Z21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVudHM6OlRleHRGcmFnbQogICAg
IGZsb2F0IHdpZHRoID0gMDsKICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7CiAgICAgICAgIHVu
c2lnbmVkIG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKLSAgICAgICAgd2lkdGggPSBmbG93
Q29udGVudHMudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFydCwgbWlkZGxlICsgMSwgMCk7
CisgICAgICAgIHdpZHRoID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50
VG9TcGxpdC5zdGFydCwgbWlkZGxlICsgMSwgMCk7CiAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0
aCA+IHdpZHRoKQogICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7CiAgICAgICAgIGVsc2Ug
aWYgKGF2YWlsYWJsZVdpZHRoIDwgd2lkdGgpCkBAIC0zNzcsNDggKzM3OCw0OCBAQCBzdGF0aWMg
Rmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29u
dGVudHM6OlRleHRGcmFnbQogCiAgICAgaWYgKGtlZXBBdExlYXN0T25lQ2hhcmFjdGVyICYmIHJp
Z2h0ID09IGZyYWdtZW50VG9TcGxpdC5zdGFydCkKICAgICAgICAgKytyaWdodDsKLSAgICBGbG93
Q29udGVudHM6OlRleHRGcmFnbWVudCBmcmFnbWVudEZvck5leHRMaW5lKGZyYWdtZW50VG9TcGxp
dCk7CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBmcmFnbWVudEZvck5l
eHRMaW5lKGZyYWdtZW50VG9TcGxpdCk7CiAgICAgZnJhZ21lbnRUb1NwbGl0LmVuZCA9IHJpZ2h0
OwotICAgIGZyYWdtZW50VG9TcGxpdC53aWR0aCA9IGZyYWdtZW50VG9TcGxpdC5pc0VtcHR5KCkg
PyAwIDogZmxvd0NvbnRlbnRzLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQsIGZyYWdt
ZW50VG9TcGxpdC5lbmQsIDApOworICAgIGZyYWdtZW50VG9TcGxpdC53aWR0aCA9IGZyYWdtZW50
VG9TcGxpdC5pc0VtcHR5KCkgPyAwIDogZmxvd0NvbnRlbnRzSXRlcmF0b3IudGV4dFdpZHRoKGZy
YWdtZW50VG9TcGxpdC5zdGFydCwgZnJhZ21lbnRUb1NwbGl0LmVuZCwgMCk7CiAKICAgICBmcmFn
bWVudEZvck5leHRMaW5lLnN0YXJ0ID0gZnJhZ21lbnRUb1NwbGl0LmVuZDsKICAgICBmcmFnbWVu
dEZvck5leHRMaW5lLndpZHRoIC09IGZyYWdtZW50VG9TcGxpdC53aWR0aDsKICAgICByZXR1cm4g
ZnJhZ21lbnRGb3JOZXh0TGluZTsKIH0KIAotc3RhdGljIEZsb3dDb250ZW50czo6VGV4dEZyYWdt
ZW50IGZpcnN0RnJhZ21lbnQoRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMsIGNvbnN0IExpbmVT
dGF0ZSYgcHJldmlvdXNMaW5lKQorc3RhdGljIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQgZmlyc3RGcmFnbWVudChGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRl
cmF0b3IsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lKQogewogICAgIC8vIEhhbmRsZSBv
dmVyZmxvd2VkIGZyYWdtZW50IGZyb20gcHJldmlvdXMgbGluZS4KLSAgICBGbG93Q29udGVudHM6
OlRleHRGcmFnbWVudCBmaXJzdEZyYWdtZW50ID0gcHJldmlvdXNMaW5lLm92ZXJmbG93ZWRGcmFn
bWVudDsKLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50cy5zdHlsZSgpOworICAg
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudCA9IHByZXZp
b3VzTGluZS5vdmVyZmxvd2VkRnJhZ21lbnQ7CisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93
Q29udGVudHNJdGVyYXRvci5zdHlsZSgpOwogCiAgICAgaWYgKGZpcnN0RnJhZ21lbnQuaXNFbXB0
eSgpKQotICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzLm5leHRUZXh0RnJhZ21l
bnQoKTsKKyAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRU
ZXh0RnJhZ21lbnQoKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gU3BlY2lhbCBvdmVyZmxvdyBw
cmUtd3JhcCB3aGl0ZXNwYWNlIGhhbmRsaW5nOiBpZ25vcmUgdGhlIG92ZXJmbG93ZWQgd2hpdGVz
cGFjZSBpZiB3ZSBtYW5hZ2VkIHRvIGZpdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9uIHRoZSBw
cmV2aW91cyBsaW5lLgogICAgICAgICAvLyBXaGVuIHRoZSBsaW5lIGlzIHRvbyBzaG9ydCB0byBm
aXQgb25lIGNoYXJhY3RlciAodGhvdWdodCBpdCBzdGlsbCBzdGF5cyBvbiB0aGUgbGluZSkgd2Ug
Y29udGludWUgd2l0aCB0aGUgb3ZlcmZsb3cgd2hpdGVzcGFjZSBjb250ZW50IG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHM6OlRleHRG
cmFnbWVudDo6V2hpdGVzcGFjZSAmJiBwcmVXcmFwKHN0eWxlKSAmJiBwcmV2aW91c0xpbmUubV9m
aXJzdENoYXJhY3RlckZpdHMpIHsKLSAgICAgICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29u
dGVudHMubmV4dFRleHRGcmFnbWVudCgpOworICAgICAgICBpZiAoZmlyc3RGcmFnbWVudC50eXBl
ID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgJiYgcHJl
V3JhcChzdHlsZSkgJiYgcHJldmlvdXNMaW5lLm1fZmlyc3RDaGFyYWN0ZXJGaXRzKSB7CisgICAg
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOwogICAgICAgICAgICAgLy8gSWYgc2tpcHBpbmcgdGhlIHdoaXRlc3BhY2UgcHV0cyB1
cyBvbiBhIGhhcmQgbmV3bGluZSwgc2tpcCB0aGUgbmV3bGluZSB0b28gYXMgd2UgYWxyZWFkeSB3
cmFwcGVkIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBG
bG93Q29udGVudHM6OlRleHRGcmFnbWVudDo6TGluZUJyZWFrKQotICAgICAgICAgICAgICAgIGZp
cnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHMubmV4dFRleHRGcmFnbWVudCgpOworICAgICAgICAg
ICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZy
YWdtZW50OjpMaW5lQnJlYWspCisgICAgICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dD
b250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gc2tpcCB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlLgot
ICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgZmlyc3RGcmFnbWVudC50eXBlID09
IEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICBmaXJzdEZy
YWdtZW50ID0gZmxvd0NvbnRlbnRzLm5leHRUZXh0RnJhZ21lbnQoKTsKKyAgICBpZiAoc3R5bGUu
Y29sbGFwc2VXaGl0ZXNwYWNlICYmIGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQorICAgICAgICBmaXJzdEZyYWdtZW50
ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwogICAgIHJldHVybiBm
aXJzdEZyYWdtZW50OwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUm
IGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYg
bGluZVJ1bnMsIEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRzKQorc3RhdGljIGJvb2wgY3JlYXRl
TGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwg
TGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0Nv
bnRlbnRzSXRlcmF0b3IpCiB7Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHMu
c3R5bGUoKTsKKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0
eWxlKCk7CiAgICAgYm9vbCBsaW5lQ2FuQmVXcmFwcGVkID0gc3R5bGUud3JhcExpbmVzIHx8IHN0
eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3c7Ci0gICAgYXV0byBmcmFnbWVudCA9IGZpcnN0RnJhZ21l
bnQoZmxvd0NvbnRlbnRzLCBwcmV2aW91c0xpbmUpOworICAgIGF1dG8gZnJhZ21lbnQgPSBmaXJz
dEZyYWdtZW50KGZsb3dDb250ZW50c0l0ZXJhdG9yLCBwcmV2aW91c0xpbmUpOwogICAgIHdoaWxl
ICghZnJhZ21lbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEhhcmQgbGluZWJyZWFrLgotICAg
ICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudDo6TGlu
ZUJyZWFrKSB7CisgICAgICAgIGlmIChmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBu
ZXcgbGluZSBmcmFnbWVudCBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBvbiB0aGUgbGluZS4gKG90
aGVyd2lzZSB0aGUgZXh0cmEgbmV3IGxpbmUgY2hhcmFjdGVyIHdvdWxkIHNob3cgdXAgYXQgdGhl
IGVuZCBvZiB0aGUgY29udGVudC4pCiAgICAgICAgICAgICBpZiAoIWxpbmUud2lkdGgoKSkKICAg
ICAgICAgICAgICAgICBsaW5lLmFkZFVuY29tbWl0dGVkKGZyYWdtZW50KTsKQEAgLTQzMiwxMCAr
NDMzLDEwIEBAIHN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29u
c3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91CiAgICAgICAgICAgICAvLyA0LiBOb24t
d2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBhbm90aGVyIGZyYWdtZW50
IG9uIHRoZSBsaW5lIGdldHMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgICAgICBi
b29sIGVtcHR5TGluZSA9ICFsaW5lLndpZHRoKCk7CiAgICAgICAgICAgICAvLyBXaGl0ZXNwYWNl
IGZyYWdtZW50LgotICAgICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRz
OjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudC50
eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCBz
dGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQgdG8gbmV4dCBs
aW5lLgotICAgICAgICAgICAgICAgICAgICBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCA9IHNwbGl0
RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGggLSBsaW5lLndp
ZHRoKCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBs
aW5lLmF2YWlsYWJsZVdpZHRoIC0gbGluZS53aWR0aCgpLCBlbXB0eUxpbmUsIGZsb3dDb250ZW50
c0l0ZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgbGluZS5hZGRVbmNvbW1pdHRlZChmcmFn
bWVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIFdoZW4gd2hpdGVz
cGFjZSBjb2xsYXBzZSBpcyBvbiwgd2hpdGVzcGFjZSB0aGF0IGRvZXNuJ3QgZml0IGlzIHNpbXBs
eSBza2lwcGVkLgpAQCAtNDQ0LDcgKzQ0NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5z
KExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91CiAg
ICAgICAgICAgICAvLyBOb24td2hpdGVzcGFjZSBmcmFnbWVudC4gKCFzdHlsZS53cmFwTGluZXM6
IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKICAgICAgICAgICAgIGlmICgo
ZW1wdHlMaW5lICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8ICFzdHlsZS53cmFwTGlu
ZXMpIHsKICAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClm
cmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQg
dG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgICAgIGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50ID0g
c3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZS5hdmFpbGFibGVXaWR0aCAtIGxp
bmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHMpOworICAgICAgICAgICAgICAgIGxp
bmUub3ZlcmZsb3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwg
bGluZS5hdmFpbGFibGVXaWR0aCAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVu
dHNJdGVyYXRvcik7CiAgICAgICAgICAgICAgICAgbGluZS5hZGRVbmNvbW1pdHRlZChmcmFnbWVu
dCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00NjUsMjIgKzQ2
NiwyMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0
IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGxpbmUuYWRkVW5jb21taXR0ZWQoZnJhZ21lbnQpOwogICAgICAgICAvLyBGaW5kIHRoZSBu
ZXh0IHRleHQgZnJhZ21lbnQuCi0gICAgICAgIGZyYWdtZW50ID0gZmxvd0NvbnRlbnRzLm5leHRU
ZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBmbG93Q29udGVu
dHNJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KGxpbmUud2lkdGgoKSk7CiAgICAgfQogICAgIGxp
bmUuY29tbWl0QW5kQ3JlYXRlUnVuKGxpbmVSdW5zKTsKICAgICByZXR1cm4gZnJhZ21lbnQuaXNF
bXB0eSgpICYmIGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50LmlzRW1wdHkoKTsKIH0KIAotc3RhdGlj
IHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCBwcmV2aW91c1J1bkNvdW50LCB1bnNpZ25lZCYg
bGluZUNvdW50LCBjb25zdCBGbG93Q29udGVudHMmIGZsb3dDb250ZW50cykKK3N0YXRpYyB2b2lk
IGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucywgdW5zaWduZWQgcHJldmlvdXNSdW5Db3VudCwgdW5zaWduZWQmIGxpbmVD
b3VudCwgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJhdG9yKQog
ewogICAgIGlmIChwcmV2aW91c1J1bkNvdW50ID09IHJ1bnMuc2l6ZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICByZW1vdmVUcmFpbGluZ1doaXRlc3Bh
Y2UobGluZSwgcnVucywgZmxvd0NvbnRlbnRzKTsKKyAgICByZW1vdmVUcmFpbGluZ1doaXRlc3Bh
Y2UobGluZSwgcnVucywgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwogICAgIGlmICghcnVucy5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBBZGp1c3QgcnVucycgcG9zaXRpb24gYnkgdGFr
aW5nIGxpbmUncyBhbGlnbm1lbnQgaW50byBhY2NvdW50LgotICAgIGlmIChmbG9hdCBsaW5lTG9n
aWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQoZmxvd0NvbnRlbnRzLnN0eWxlKCkudGV4dEFsaWdu
LCBsaW5lLmF2YWlsYWJsZVdpZHRoLCBsaW5lLmNvbW1pdHRlZFdpZHRoLCBsaW5lLmxvZ2ljYWxM
ZWZ0T2Zmc2V0KSkgeworICAgIGlmIChmbG9hdCBsaW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGlu
ZUxlZnQoZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUoKS50ZXh0QWxpZ24sIGxpbmUuYXZhaWxh
YmxlV2lkdGgsIGxpbmUuY29tbWl0dGVkV2lkdGgsIGxpbmUubG9naWNhbExlZnRPZmZzZXQpKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHByZXZpb3VzUnVuQ291bnQ7IGkgPCBydW5zLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBydW5zW2ldLmxvZ2ljYWxMZWZ0ICs9IGxpbmVMb2dp
Y2FsTGVmdDsKICAgICAgICAgICAgIHJ1bnNbaV0ubG9naWNhbFJpZ2h0ICs9IGxpbmVMb2dpY2Fs
TGVmdDsKQEAgLTQ5MCwyNCArNDkxLDI0IEBAIHN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0Fu
ZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVuCiAgICAg
KytsaW5lQ291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFy
eShMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0Nv
bnRlbnRzKQorc3RhdGljIHZvaWQgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KExheW91dDo6
UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250
ZW50c0l0ZXJhdG9yKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgc3BsaXQg
ZHVyaW5nIHJ1biBjb25zdHJ1Y3Rpb24gaW5zdGVhZCBvZiBhcyBhIHNlcGFyYXRlIHBhc3MuCiAg
ICAgaWYgKGxpbmVSdW5zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmbG93
Q29udGVudHMuaGFzT25lU2VnbWVudCgpKQorICAgIGlmIChmbG93Q29udGVudHNJdGVyYXRvci5m
bG93Q29udGVudHMoKS5oYXNPbmVTZWdtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVu
c2lnbmVkIHJ1bkluZGV4ID0gMDsKICAgICBkbyB7CiAgICAgICAgIGNvbnN0IFJ1biYgcnVuID0g
bGluZVJ1bnMuYXQocnVuSW5kZXgpOwogICAgICAgICBBU1NFUlQocnVuLnN0YXJ0ICE9IHJ1bi5l
bmQpOwotICAgICAgICBhdXRvJiBzdGFydFNlZ21lbnQgPSBmbG93Q29udGVudHMuc2VnbWVudEZv
clBvc2l0aW9uKHJ1bi5zdGFydCk7CisgICAgICAgIGF1dG8mIHN0YXJ0U2VnbWVudCA9IGZsb3dD
b250ZW50c0l0ZXJhdG9yLmZsb3dDb250ZW50cygpLnNlZ21lbnRGb3JQb3NpdGlvbihydW4uc3Rh
cnQpOwogICAgICAgICBpZiAocnVuLmVuZCA8PSBzdGFydFNlZ21lbnQuZW5kKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIC8vIFRoaXMgcnVuIG92ZXJsYXBzIG11bHRpcGxlIHJlbmRl
cmVycy4gU3BsaXQgaXQgdXAuCiAgICAgICAgIC8vIFNwbGl0IHJ1biBhdCB0aGUgcmVuZGVyZXIn
cyBib3VuZGFyeSBhbmQgY3JlYXRlIGEgbmV3IHJ1biBmb3IgdGhlIGxlZnQgc2lkZSwgd2hpbGUg
dXNlIHRoZSBjdXJyZW50IHJ1biBhcyB0aGUgcmlnaHQgc2lkZS4KLSAgICAgICAgZmxvYXQgbG9n
aWNhbFJpZ2h0T2ZMZWZ0UnVuID0gcnVuLmxvZ2ljYWxMZWZ0ICsgZmxvd0NvbnRlbnRzLnRleHRX
aWR0aChydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1bi5sb2dpY2FsTGVmdCk7CisgICAg
ICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mTGVmdFJ1biA9IHJ1bi5sb2dpY2FsTGVmdCArIGZsb3dD
b250ZW50c0l0ZXJhdG9yLnRleHRXaWR0aChydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1
bi5sb2dpY2FsTGVmdCk7CiAgICAgICAgIGxpbmVSdW5zLmluc2VydChydW5JbmRleCwgUnVuKHJ1
bi5zdGFydCwgc3RhcnRTZWdtZW50LmVuZCwgcnVuLmxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHRP
ZkxlZnRSdW4sIGZhbHNlKSk7CiAgICAgICAgIFJ1biYgcmlnaHRTaWRlUnVuID0gbGluZVJ1bnMu
YXQocnVuSW5kZXggKyAxKTsKICAgICAgICAgcmlnaHRTaWRlUnVuLnN0YXJ0ID0gc3RhcnRTZWdt
ZW50LmVuZDsKQEAgLTUyMSw3ICs1MjIsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVUZXh0UnVucyhM
YXlvdXQ6OlJ1blZlY3RvciYgcnVucywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZwogICAg
IExheW91dFVuaXQgbGluZUhlaWdodCA9IGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KTsKICAgICBM
aW5lU3RhdGUgbGluZTsKICAgICBib29sIGlzRW5kT2ZDb250ZW50ID0gZmFsc2U7Ci0gICAgRmxv
d0NvbnRlbnRzIGZsb3dDb250ZW50cyA9IEZsb3dDb250ZW50cyhmbG93KTsKKyAgICBGbG93Q29u
dGVudHNJdGVyYXRvciBmbG93Q29udGVudHNJdGVyYXRvciA9IEZsb3dDb250ZW50c0l0ZXJhdG9y
KGZsb3cpOwogCiAgICAgZG8gewogICAgICAgICBmbG93LnNldExvZ2ljYWxIZWlnaHQobGluZUhl
aWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUpOwpAQCAtNTI5LDExICs1
MzAsMTEgQEAgc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1
bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWcKICAgICAgICAgdW5zaWduZWQgcHJldmlv
dXNSdW5Db3VudCA9IHJ1bnMuc2l6ZSgpOwogICAgICAgICBsaW5lID0gTGluZVN0YXRlKCk7CiAg
ICAgICAgIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGZsb3csIGxpbmUuYXZhaWxhYmxlV2lkdGgsIGxp
bmUubG9naWNhbExlZnRPZmZzZXQpOwotICAgICAgICBpc0VuZE9mQ29udGVudCA9IGNyZWF0ZUxp
bmVSdW5zKGxpbmUsIHByZXZpb3VzTGluZSwgcnVucywgZmxvd0NvbnRlbnRzKTsKLSAgICAgICAg
Y2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBwcmV2aW91c1J1bkNvdW50
LCBsaW5lQ291bnQsIGZsb3dDb250ZW50cyk7CisgICAgICAgIGlzRW5kT2ZDb250ZW50ID0gY3Jl
YXRlTGluZVJ1bnMobGluZSwgcHJldmlvdXNMaW5lLCBydW5zLCBmbG93Q29udGVudHNJdGVyYXRv
cik7CisgICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZSwgcnVucywgcHJl
dmlvdXNSdW5Db3VudCwgbGluZUNvdW50LCBmbG93Q29udGVudHNJdGVyYXRvcik7CiAgICAgfSB3
aGlsZSAoIWlzRW5kT2ZDb250ZW50KTsKIAotICAgIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFy
eShydW5zLCBmbG93Q29udGVudHMpOworICAgIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeShy
dW5zLCBmbG93Q29udGVudHNJdGVyYXRvcik7CiAgICAgQVNTRVJUKCFsaW5lLnVuY29tbWl0dGVk
V2lkdGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKaW5kZXggNzE4ZTk5NWNjMjEzNjFjODRjZjRm
ZGU5ZmM1OWQ1OGRjZDdlMGVmYS4uMjIwOTc5N2RlN2JhNTZkYzMwN2FhZDJmNDYzOWQ3NTY3NTEx
ZmIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApAQCAtMzMsMTkgKzMzLDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKIAotRmxvd0NvbnRlbnRzOjpT
dHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotICAgIDogZm9udChzdHlsZS5m
b250Q2FzY2FkZSgpKQotICAgICwgdGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigpKQotICAgICwg
Y29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICwgcHJl
c2VydmVOZXdsaW5lKHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQotICAgICwgd3JhcExpbmVzKHN0
eWxlLmF1dG9XcmFwKCkpCi0gICAgLCBicmVha1dvcmRPbk92ZXJmbG93KHN0eWxlLm92ZXJmbG93
V3JhcCgpID09IEJyZWFrT3ZlcmZsb3dXcmFwICYmICh3cmFwTGluZXMgfHwgcHJlc2VydmVOZXds
aW5lKSkKLSAgICAsIHNwYWNlV2lkdGgoZm9udC53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpKQot
ICAgICwgdGFiV2lkdGgoY29sbGFwc2VXaGl0ZXNwYWNlID8gMCA6IHN0eWxlLnRhYlNpemUoKSkK
LSAgICAsIGxvY2FsZShzdHlsZS5sb2NhbGUoKSkKLXsKLX0KLQogc3RhdGljIFZlY3RvcjxGbG93
Q29udGVudHM6OlNlZ21lbnQ+IGluaXRpYWxpemVTZWdtZW50cyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsb3cpCiB7CiAgICAgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudCwgOD4gc2VnbWVu
dHM7CkBAIC01OSwxNDEgKzQ2LDExIEBAIHN0YXRpYyBWZWN0b3I8Rmxvd0NvbnRlbnRzOjpTZWdt
ZW50PiBpbml0aWFsaXplU2VnbWVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmCiB9CiAKIEZs
b3dDb250ZW50czo6Rmxvd0NvbnRlbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLSAg
ICA6IG1fc3R5bGUoZmxvdy5zdHlsZSgpKQotICAgICwgbV9zZWdtZW50cyhpbml0aWFsaXplU2Vn
bWVudHMoZmxvdykpCi0gICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKG1fc2VnbWVudHNbMF0udGV4
dCwgZmxvdy5zdHlsZSgpLmxvY2FsZSgpKQorICAgIDogbV9zZWdtZW50cyhpbml0aWFsaXplU2Vn
bWVudHMoZmxvdykpCiAgICAgLCBtX2xhc3RTZWdtZW50SW5kZXgoMCkKIHsKIH0KIAotRmxvd0Nv
bnRlbnRzOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRlbnRzOjpuZXh0VGV4dEZyYWdtZW50KGZsb2F0
IHhQb3NpdGlvbikKLXsKLSAgICAvLyBBIGZyYWdtZW50IGNhbiBlaXRoZXIgYmUKLSAgICAvLyAx
LiBuZXcgbGluZSBjaGFyYWN0ZXIgd2hlbiBwcmVzZXJ2ZU5ld2xpbmUgaXMgb24gKG5vdCBjb25z
aWRlcmVkIGFzIHdoaXRlc3BhY2UpIG9yCi0gICAgLy8gMi4gd2hpdGVzcGFjZSAoY29sbGFzcGVk
LCBub24tY29sbGFwc2VkIG11bHRpIG9yIHNpbmdsZSkgb3IKLSAgICAvLyAzLiBub24td2hpdGVz
cGFjZSBjaGFyYWN0ZXJzLgotICAgIC8vIDQuIGVtcHR5LCBpbmRpY2F0aW5nIGNvbnRlbnQgZW5k
LgotICAgIFRleHRGcmFnbWVudCBmcmFnbWVudDsKLSAgICBmcmFnbWVudC5zdGFydCA9IG1fcG9z
aXRpb247Ci0gICAgaWYgKGlzRW5kKGZyYWdtZW50LnN0YXJ0KSkgewotICAgICAgICBmcmFnbWVu
dC5lbmQgPSBmcmFnbWVudC5zdGFydDsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0K
LSAgICBpZiAoaXNMaW5lQnJlYWsoZnJhZ21lbnQuc3RhcnQpKSB7Ci0gICAgICAgIGZyYWdtZW50
LnR5cGUgPSBUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhazsKLSAgICAgICAgZnJhZ21lbnQuZW5kID0g
ZnJhZ21lbnQuc3RhcnQgKyAxOwotICAgICAgICBtX3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kOwot
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc3BhY2VDb3Vu
dCA9IDA7Ci0gICAgdW5zaWduZWQgd2hpdGVzcGFjZUVuZCA9IGZpbmROZXh0Tm9uV2hpdGVzcGFj
ZVBvc2l0aW9uKGZyYWdtZW50LnN0YXJ0LCBzcGFjZUNvdW50KTsKLSAgICBBU1NFUlQoZnJhZ21l
bnQuc3RhcnQgPD0gd2hpdGVzcGFjZUVuZCk7Ci0gICAgaWYgKGZyYWdtZW50LnN0YXJ0ICE9IHdo
aXRlc3BhY2VFbmQpIHsKLSAgICAgICAgZnJhZ21lbnQudHlwZSA9IFRleHRGcmFnbWVudDo6V2hp
dGVzcGFjZTsKLSAgICAgICAgZnJhZ21lbnQuZW5kID0gd2hpdGVzcGFjZUVuZDsKLSAgICAgICAg
Ym9vbCBtdWx0aXBsZVdoaXRlc3BhY2UgPSBmcmFnbWVudC5zdGFydCArIDEgPCBmcmFnbWVudC5l
bmQ7Ci0gICAgICAgIGZyYWdtZW50LmlzQ29sbGFwc2VkID0gbXVsdGlwbGVXaGl0ZXNwYWNlICYm
IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwotICAgICAgICBmcmFnbWVudC5pc0JyZWFrYWJs
ZSA9ICFmcmFnbWVudC5pc0NvbGxhcHNlZCAmJiBtdWx0aXBsZVdoaXRlc3BhY2U7Ci0gICAgICAg
IGlmIChmcmFnbWVudC5pc0NvbGxhcHNlZCkKLSAgICAgICAgICAgIGZyYWdtZW50LndpZHRoID0g
bV9zdHlsZS5zcGFjZVdpZHRoOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGZyYWdtZW50TGVuZ3RoID0gZnJhZ21lbnQuZW5kIC0gZnJhZ21lbnQuc3RhcnQ7Ci0gICAgICAg
ICAgICBpZiAoZnJhZ21lbnRMZW5ndGggPT0gc3BhY2VDb3VudCkKLSAgICAgICAgICAgICAgICBm
cmFnbWVudC53aWR0aCA9IGZyYWdtZW50TGVuZ3RoICogbV9zdHlsZS5zcGFjZVdpZHRoOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZyYWdtZW50LndpZHRoID0gdGV4dFdpZHRo
KGZyYWdtZW50LnN0YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZDsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50
OwotICAgIH0KLQotICAgIGZyYWdtZW50LnR5cGUgPSBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3Bh
Y2U7Ci0gICAgZnJhZ21lbnQuaXNCcmVha2FibGUgPSBtX3N0eWxlLmJyZWFrV29yZE9uT3ZlcmZs
b3c7Ci0gICAgZnJhZ21lbnQuZW5kID0gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbihmcmFnbWVu
dC5zdGFydCArIDEpOwotICAgIGZyYWdtZW50LndpZHRoID0gdGV4dFdpZHRoKGZyYWdtZW50LnN0
YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3NpdGlvbik7Ci0gICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50
LmVuZDsKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGlu
ZUJyZWFrSXRlcmF0b3ImIGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBGbG93Q29udGVudHM6OlNl
Z21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKQotewotICAgIGNvbnN0IGF1dG8qIGNo
YXJhY3RlcnMgPSBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOwotICAg
IHVuc2lnbmVkIHNlZ21lbnRMZW5ndGggPSBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQ7Ci0g
ICAgdW5zaWduZWQgc2VnbWVudFBvc2l0aW9uID0gcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0Owot
ICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25Ob25Mb29zZWx5PENoYXJhY3RlclR5cGUs
IE5CU1BCZWhhdmlvcjo6SWdub3JlTkJTUD4obGluZUJyZWFrSXRlcmF0b3IsIGNoYXJhY3RlcnMs
IHNlZ21lbnRMZW5ndGgsIHNlZ21lbnRQb3NpdGlvbik7Ci19Ci0KLXVuc2lnbmVkIEZsb3dDb250
ZW50czo6ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QK
LXsKLSAgICB3aGlsZSAoIWlzRW5kKHBvc2l0aW9uKSkgewotICAgICAgICBhdXRvJiBzZWdtZW50
ID0gc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKHNlZ21lbnQudGV4
dC5pbXBsKCkgIT0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmcoKS5pbXBsKCkpIHsKLSAgICAg
ICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0ID4gMCA/IGNoYXJhY3Rl
ckF0KHNlZ21lbnQuc3RhcnQgLSAxKSA6IDA7Ci0gICAgICAgICAgICBVQ2hhciBzZWNvbmRUb0xh
c3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0ID4gMSA/IGNoYXJhY3RlckF0KHNlZ21lbnQuc3Rh
cnQgLSAyKSA6IDA7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnNldFByaW9yQ29u
dGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpOwotICAgICAgICAgICAg
bV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihzZWdtZW50
LnRleHQsIG1fc3R5bGUubG9jYWxlLCBMaW5lQnJlYWtJdGVyYXRvck1vZGVVQVgxNCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBicmVha2FibGUgPSBzZWdtZW50LnRleHQuaXM4Qml0
KCkgPyBuZXh0QnJlYWthYmxlUG9zaXRpb248TENoYXI+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHNl
Z21lbnQsIHBvc2l0aW9uKSA6IG5leHRCcmVha2FibGVQb3NpdGlvbjxVQ2hhcj4obV9saW5lQnJl
YWtJdGVyYXRvciwgc2VnbWVudCwgcG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbiA9IHNlZ21l
bnQuc3RhcnQgKyBicmVha2FibGU7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IHNlZ21lbnQuZW5k
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBmaW5kTmV4dE5v
bldoaXRlc3BhY2UoY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCBjb25zdCBG
bG93Q29udGVudHM6OlN0eWxlJiBzdHlsZSwgdW5zaWduZWQmIHBvc2l0aW9uLCB1bnNpZ25lZCYg
c3BhY2VDb3VudCkKLXsKLSAgICBjb25zdCBhdXRvKiB0ZXh0ID0gc2VnbWVudC50ZXh0LmNoYXJh
Y3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBmb3IgKDsgcG9zaXRpb24gPCBzZWdtZW50LmVu
ZDsgKytwb3NpdGlvbikgewotICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHRleHRbcG9zaXRpb24g
LSBzZWdtZW50LnN0YXJ0XTsKLSAgICAgICAgYm9vbCBpc1NwYWNlID0gY2hhcmFjdGVyID09ICcg
JzsKLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBpc1NwYWNlIHx8IGNoYXJhY3RlciA9PSAn
XHQnIHx8ICghc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKLSAg
ICAgICAgaWYgKCFpc1doaXRlc3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKGlzU3BhY2UpCi0gICAgICAgICAgICArK3NwYWNlQ291bnQ7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpmaW5kTmV4dE5vbldoaXRl
c3BhY2VQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpIGNv
bnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc2VnbWVudEluZGV4Rm9yUG9zaXRpb24ocG9z
aXRpb24pOyBpIDwgbV9zZWdtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIGZvdW5k
Tm9uV2hpdGVzcGFjZSA9IG1fc2VnbWVudHNbaV0udGV4dC5pczhCaXQoKSA/IGZpbmROZXh0Tm9u
V2hpdGVzcGFjZTxMQ2hhcj4obV9zZWdtZW50c1tpXSwgbV9zdHlsZSwgcG9zaXRpb24sIHNwYWNl
Q291bnQpIDoKLSAgICAgICAgICAgIGZpbmROZXh0Tm9uV2hpdGVzcGFjZTxVQ2hhcj4obV9zZWdt
ZW50c1tpXSwgbV9zdHlsZSwgcG9zaXRpb24sIHNwYWNlQ291bnQpOwotICAgICAgICBpZiAoZm91
bmROb25XaGl0ZXNwYWNlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBw
b3NpdGlvbjsKLX0KLQotZmxvYXQgRmxvd0NvbnRlbnRzOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBjb25zdCBhdXRv
JiBmcm9tU2VnbWVudCA9IHNlZ21lbnRGb3JQb3NpdGlvbihmcm9tKTsKLQotICAgIGlmICgobV9z
dHlsZS5mb250LmlzRml4ZWRQaXRjaCgpICYmIGZyb21TZWdtZW50LmVuZCA+PSB0bykgfHwgKGZy
b20gPT0gZnJvbVNlZ21lbnQuc3RhcnQgJiYgdG8gPT0gZnJvbVNlZ21lbnQuZW5kKSkKLSAgICAg
ICAgcmV0dXJuIGZyb21TZWdtZW50LnJlbmRlcmVyLndpZHRoKGZyb20gLSBmcm9tU2VnbWVudC5z
dGFydCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwgbnVsbHB0ciwgbnVsbHB0
cik7Ci0KLSAgICBjb25zdCBhdXRvKiBzZWdtZW50ID0gJmZyb21TZWdtZW50OwotICAgIGZsb2F0
IHRleHRXaWR0aCA9IDA7Ci0gICAgdW5zaWduZWQgZnJhZ21lbnRFbmQgPSAwOwotICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgIGZyYWdtZW50RW5kID0gc3RkOjptaW4odG8sIHNlZ21lbnQtPmVu
ZCk7Ci0gICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50LT50ZXh0LmlzOEJpdCgpID8gcnVuV2lk
dGg8TENoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFydCwgZnJhZ21lbnRF
bmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKSA6Ci0gICAgICAgICAg
ICBydW5XaWR0aDxVQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQtPnN0YXJ0LCBm
cmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lkdGgpOwotICAg
ICAgICBpZiAoZnJhZ21lbnRFbmQgPT0gdG8pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZnJvbSA9IGZyYWdtZW50RW5kOwotICAgICAgICBzZWdtZW50ID0gJnNlZ21lbnRGb3JQb3NpdGlv
bihmcmFnbWVudEVuZCk7Ci0gICAgfTsKLQotICAgIHJldHVybiB0ZXh0V2lkdGg7Ci19Ci0KIHVu
c2lnbmVkIEZsb3dDb250ZW50czo6c2VnbWVudEluZGV4Rm9yUG9zaXRpb25TbG93KHVuc2lnbmVk
IHBvc2l0aW9uKSBjb25zdAogewogICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fc2Vn
bWVudHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRpb24sIFtdKGNvbnN0IFNlZ21l
bnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKSB7CkBAIC0yMTUsMjEgKzcyLDUgQEAgY29u
c3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBGbG93Q29udGVudHM6OnNlZ21lbnRGb3JSZW5kZXJl
cihjb25zdCBSZW5kZXJUZXh0JgogICAgIHJldHVybiBtX3NlZ21lbnRzLmxhc3QoKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1mbG9hdCBGbG93Q29udGVudHM6OnJ1
bldpZHRoKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZs
b2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoZnJvbSA8IHRvKTsKLSAgICBib29s
IG1lYXN1cmVXaXRoRW5kU3BhY2UgPSBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSAmJiB0byA8
IHRleHQubGVuZ3RoKCkgJiYgdGV4dFt0b10gPT0gJyAnOwotICAgIGlmIChtZWFzdXJlV2l0aEVu
ZFNwYWNlKQotICAgICAgICArK3RvOwotICAgIFRleHRSdW4gcnVuKHRleHQuY2hhcmFjdGVyczxD
aGFyYWN0ZXJUeXBlPigpICsgZnJvbSwgdG8gLSBmcm9tKTsKLSAgICBydW4uc2V0WFBvcyh4UG9z
aXRpb24pOwotICAgIHJ1bi5zZXRUYWJTaXplKCEhbV9zdHlsZS50YWJXaWR0aCwgbV9zdHlsZS50
YWJXaWR0aCk7Ci0gICAgZmxvYXQgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKLSAg
ICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKLSAgICAgICAgd2lkdGggLT0gbV9zdHlsZS5zcGFj
ZVdpZHRoOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKaW5kZXgg
N2E3OTE3ZmQwOWZiODNkMDVlNmM1YWM3NzZlOTgzNWEzYmU2OTU3My4uOGIxMGNjODE5M2NjOWVh
NWE3MmRmMTdkMThhMWJhMWNkMzg3MjM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCkBAIC0yNiwxMCArMjYs
NyBAQAogI2lmbmRlZiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzX2gKICNkZWZpbmUgU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgot
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJicmVha19saW5lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwpAQCAtNDAsMzIgKzM3LDYg
QEAgY2xhc3MgRmxvd0NvbnRlbnRzIHsKIHB1YmxpYzoKICAgICBGbG93Q29udGVudHMoY29uc3Qg
UmVuZGVyQmxvY2tGbG93Jik7CiAKLSAgICBzdHJ1Y3QgVGV4dEZyYWdtZW50IHsKLSAgICAgICAg
VGV4dEZyYWdtZW50KCkgPSBkZWZhdWx0OwotICAgICAgICBUZXh0RnJhZ21lbnQodW5zaWduZWQg
dGV4dFN0YXJ0LCB1bnNpZ25lZCB0ZXh0RW5kLCBmbG9hdCB0ZXh0V2lkdGgsIGJvb2wgaXNXaGl0
ZXNwYWNlT25seSkKLSAgICAgICAgICAgIDogc3RhcnQodGV4dFN0YXJ0KQotICAgICAgICAgICAg
LCBlbmQodGV4dEVuZCkKLSAgICAgICAgICAgICwgdHlwZShpc1doaXRlc3BhY2VPbmx5ID8gV2hp
dGVzcGFjZSA6IE5vbldoaXRlc3BhY2UpCi0gICAgICAgICAgICAsIHdpZHRoKHRleHRXaWR0aCkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ID09IGVuZDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGVudW0gVHlwZSB7IExpbmVCcmVhaywgV2hpdGVzcGFjZSwgTm9uV2hpdGVzcGFjZSB9
OwotICAgICAgICB1bnNpZ25lZCBzdGFydCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZCA9IDA7
Ci0gICAgICAgIFR5cGUgdHlwZSA9IE5vbldoaXRlc3BhY2U7Ci0gICAgICAgIGJvb2wgaXNDb2xs
YXBzZWQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc0JyZWFrYWJsZSA9IGZhbHNlOwotICAgICAg
ICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgfTsKLSAgICBUZXh0RnJhZ21lbnQgbmV4dFRleHRGcmFn
bWVudChmbG9hdCB4UG9zaXRpb24gPSAwKTsKLSAgICBmbG9hdCB0ZXh0V2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7Ci0KICAgICBzdHJ1Y3Qg
U2VnbWVudCB7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0OwogICAgICAgICB1bnNpZ25lZCBlbmQ7
CkBAIC03NSw2NCArNDYsNDQgQEAgcHVibGljOgogICAgIGNvbnN0IFNlZ21lbnQmIHNlZ21lbnRG
b3JQb3NpdGlvbih1bnNpZ25lZCkgY29uc3Q7CiAgICAgY29uc3QgU2VnbWVudCYgc2VnbWVudEZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlclRleHQmKSBjb25zdDsKIAorICAgIGNsYXNzIEl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhdG9yKGNvbnN0IEZsb3dDb250ZW50cyYgZmxv
d0NvbnRlbnRzLCB1bnNpZ25lZCBzZWdtZW50SW5kZXgpCisgICAgICAgICAgICA6IG1fZmxvd0Nv
bnRlbnRzKGZsb3dDb250ZW50cykKKyAgICAgICAgICAgICwgbV9zZWdtZW50SW5kZXgoc2VnbWVu
dEluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBJdGVyYXRvciYgb3BlcmF0
b3IrKygpIHsgKyttX3NlZ21lbnRJbmRleDsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9zZWdt
ZW50SW5kZXggPT0gb3RoZXIubV9zZWdtZW50SW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KKworICAgICAgICBjb25zdCBTZWdtZW50JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biBtX2Zsb3dDb250ZW50cy5tX3NlZ21lbnRzW21fc2VnbWVudEluZGV4XTsgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgRmxvd0NvbnRlbnRzJiBtX2Zsb3dDb250ZW50czsKKyAgICAg
ICAgdW5zaWduZWQgbV9zZWdtZW50SW5kZXg7CisgICAgfTsKKworICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgSXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIG1fc2VnbWVudHMuc2l6ZSgpKTsgfQor
CiAgICAgYm9vbCBoYXNPbmVTZWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50cy5zaXpl
KCkgPT0gMTsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVu
dHMubGFzdCgpLmVuZDsgfTsKIAotICAgIHN0cnVjdCBTdHlsZSB7Ci0gICAgICAgIGV4cGxpY2l0
IFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KLSAgICAgICAgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQ7Ci0gICAgICAgIEVUZXh0QWxpZ24gdGV4dEFsaWduOwotICAgICAgICBib29sIGNvbGxh
cHNlV2hpdGVzcGFjZTsKLSAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7Ci0gICAgICAgIGJv
b2wgd3JhcExpbmVzOwotICAgICAgICBib29sIGJyZWFrV29yZE9uT3ZlcmZsb3c7Ci0gICAgICAg
IGZsb2F0IHNwYWNlV2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIHRhYldpZHRoOwotICAgICAgICBB
dG9taWNTdHJpbmcgbG9jYWxlOwotICAgIH07Ci0gICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIHVuc2lnbmVkIHNlZ21lbnRJbmRleEZvclBvc2l0
aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBm
aW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQm
IHNwYWNlQ291bnQpIGNvbnN0OwotICAgIHVuc2lnbmVkIGZpbmROZXh0QnJlYWthYmxlUG9zaXRp
b24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIGJvb2wgaXNMaW5lQnJlYWsodW5zaWdu
ZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIGJvb2wgaXNFbmQodW5zaWduZWQgcG9zaXRpb24pIGNv
bnN0OwotICAgIHVuc2lnbmVkIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0
aW9uKSBjb25zdDsKICAgICB1bnNpZ25lZCBzZWdtZW50SW5kZXhGb3JQb3NpdGlvblNsb3codW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0OwogCi0gICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0OwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBm
bG9hdCBydW5XaWR0aChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywg
ZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKLQotICAgIGNvbnN0IFN0eWxlIG1fc3R5bGU7CiAgICAg
Y29uc3QgVmVjdG9yPFNlZ21lbnQsIDg+IG1fc2VnbWVudHM7CiAKLSAgICBtdXRhYmxlIExhenlM
aW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwogICAgIG11dGFibGUgdW5zaWdu
ZWQgbV9sYXN0U2VnbWVudEluZGV4OwotICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07CiB9
OwogCi1pbmxpbmUgVUNoYXIgRmxvd0NvbnRlbnRzOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QKLXsKLSAgICBhdXRvJiBzZWdtZW50ID0gc2VnbWVudEZvclBvc2l0aW9uKHBv
c2l0aW9uKTsKLSAgICByZXR1cm4gc2VnbWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFy
dF07Ci19Ci0KLWlubGluZSBib29sIEZsb3dDb250ZW50czo6aXNMaW5lQnJlYWsodW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW5kKHBvc2l0aW9uKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0
ZXJBdChwb3NpdGlvbikgPT0gJ1xuJzsKLX0KLQotaW5saW5lIGJvb2wgRmxvd0NvbnRlbnRzOjpp
c0VuZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb24gPj0g
bGVuZ3RoKCk7Ci19Ci0KIGlubGluZSB1bnNpZ25lZCBGbG93Q29udGVudHM6OnNlZ21lbnRJbmRl
eEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewotICAgIEFTU0VSVCghaXNF
bmQocG9zaXRpb24pKTsKICAgICBhdXRvJiBsYXN0U2VnbWVudCA9IG1fc2VnbWVudHNbbV9sYXN0
U2VnbWVudEluZGV4XTsKICAgICBpZiAobGFzdFNlZ21lbnQuc3RhcnQgPD0gcG9zaXRpb24gJiYg
cG9zaXRpb24gPCBsYXN0U2VnbWVudC5lbmQpCiAgICAgICAgIHJldHVybiBtX2xhc3RTZWdtZW50
SW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiNThi
NTkxMTI3NTJlYzk5NDA2MzJlZjdjY2U1YzUwODgwOTliYTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJh
dG9yLmNwcApAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCIKKwor
I2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91
dEZsb3dDb250ZW50cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU2ltcGxl
TGluZUxheW91dCB7CisKK0Zsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgpKQorICAg
ICwgdGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigpKQorICAgICwgY29sbGFwc2VXaGl0ZXNwYWNl
KHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQorICAgICwgcHJlc2VydmVOZXdsaW5lKHN0eWxl
LnByZXNlcnZlTmV3bGluZSgpKQorICAgICwgd3JhcExpbmVzKHN0eWxlLmF1dG9XcmFwKCkpCisg
ICAgLCBicmVha1dvcmRPbk92ZXJmbG93KHN0eWxlLm92ZXJmbG93V3JhcCgpID09IEJyZWFrT3Zl
cmZsb3dXcmFwICYmICh3cmFwTGluZXMgfHwgcHJlc2VydmVOZXdsaW5lKSkKKyAgICAsIHNwYWNl
V2lkdGgoZm9udC53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpKQorICAgICwgdGFiV2lkdGgoY29s
bGFwc2VXaGl0ZXNwYWNlID8gMCA6IHN0eWxlLnRhYlNpemUoKSkKKyAgICAsIGxvY2FsZShzdHls
ZS5sb2NhbGUoKSkKK3sKK30KKworRmxvd0NvbnRlbnRzSXRlcmF0b3I6OkZsb3dDb250ZW50c0l0
ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKKyAgICA6IG1fZmxvd0NvbnRlbnRz
KGZsb3cpCisgICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKCgqbV9mbG93Q29udGVudHMuYmVnaW4o
KSkudGV4dCwgZmxvdy5zdHlsZSgpLmxvY2FsZSgpKQorICAgICwgbV9zdHlsZShmbG93LnN0eWxl
KCkpCit7Cit9CisKK0Zsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRl
bnRzSXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQoreworICAgIC8v
IEEgZnJhZ21lbnQgY2FuIGVpdGhlciBiZQorICAgIC8vIDEuIG5ldyBsaW5lIGNoYXJhY3RlciB3
aGVuIHByZXNlcnZlTmV3bGluZSBpcyBvbiAobm90IGNvbnNpZGVyZWQgYXMgd2hpdGVzcGFjZSkg
b3IKKyAgICAvLyAyLiB3aGl0ZXNwYWNlIChjb2xsYXNwZWQsIG5vbi1jb2xsYXBzZWQgbXVsdGkg
b3Igc2luZ2xlKSBvcgorICAgIC8vIDMuIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAg
Ly8gNC4gZW1wdHksIGluZGljYXRpbmcgY29udGVudCBlbmQuCisgICAgVGV4dEZyYWdtZW50IGZy
YWdtZW50OworICAgIGZyYWdtZW50LnN0YXJ0ID0gbV9wb3NpdGlvbjsKKyAgICBpZiAoaXNFbmQo
ZnJhZ21lbnQuc3RhcnQpKSB7CisgICAgICAgIGZyYWdtZW50LmVuZCA9IGZyYWdtZW50LnN0YXJ0
OworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChpc0xpbmVCcmVhayhm
cmFnbWVudC5zdGFydCkpIHsKKyAgICAgICAgZnJhZ21lbnQudHlwZSA9IFRleHRGcmFnbWVudDo6
TGluZUJyZWFrOworICAgICAgICBmcmFnbWVudC5lbmQgPSBmcmFnbWVudC5zdGFydCArIDE7Cisg
ICAgICAgIG1fcG9zaXRpb24gPSBmcmFnbWVudC5lbmQ7CisgICAgICAgIHJldHVybiBmcmFnbWVu
dDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzcGFjZUNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCB3
aGl0ZXNwYWNlRW5kID0gZmluZE5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oZnJhZ21lbnQuc3Rh
cnQsIHNwYWNlQ291bnQpOworICAgIEFTU0VSVChmcmFnbWVudC5zdGFydCA8PSB3aGl0ZXNwYWNl
RW5kKTsKKyAgICBpZiAoZnJhZ21lbnQuc3RhcnQgIT0gd2hpdGVzcGFjZUVuZCkgeworICAgICAg
ICBmcmFnbWVudC50eXBlID0gVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlOworICAgICAgICBmcmFn
bWVudC5lbmQgPSB3aGl0ZXNwYWNlRW5kOworICAgICAgICBib29sIG11bHRpcGxlV2hpdGVzcGFj
ZSA9IGZyYWdtZW50LnN0YXJ0ICsgMSA8IGZyYWdtZW50LmVuZDsKKyAgICAgICAgZnJhZ21lbnQu
aXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRl
c3BhY2U7CisgICAgICAgIGZyYWdtZW50LmlzQnJlYWthYmxlID0gIWZyYWdtZW50LmlzQ29sbGFw
c2VkICYmIG11bHRpcGxlV2hpdGVzcGFjZTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmlzQ29sbGFw
c2VkKQorICAgICAgICAgICAgZnJhZ21lbnQud2lkdGggPSBtX3N0eWxlLnNwYWNlV2lkdGg7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRMZW5ndGggPSBmcmFn
bWVudC5lbmQgLSBmcmFnbWVudC5zdGFydDsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudExlbmd0
aCA9PSBzcGFjZUNvdW50KQorICAgICAgICAgICAgICAgIGZyYWdtZW50LndpZHRoID0gZnJhZ21l
bnRMZW5ndGggKiBtX3N0eWxlLnNwYWNlV2lkdGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgZnJhZ21lbnQud2lkdGggPSB0ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQsIGZyYWdt
ZW50LmVuZCwgeFBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBtX3Bvc2l0aW9uID0gZnJh
Z21lbnQuZW5kOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorCisgICAgZnJhZ21l
bnQudHlwZSA9IFRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZTsKKyAgICBmcmFnbWVudC5pc0Jy
ZWFrYWJsZSA9IG1fc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdzsKKyAgICBmcmFnbWVudC5lbmQg
PSBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGZyYWdtZW50LnN0YXJ0ICsgMSk7CisgICAgZnJh
Z21lbnQud2lkdGggPSB0ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQsIGZyYWdtZW50LmVuZCwgeFBv
c2l0aW9uKTsKKyAgICBtX3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kOworICAgIHJldHVybiBmcmFn
bWVudDsKK30KKworZmxvYXQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OnRleHRXaWR0aCh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAoreworICAgIGNvbnN0
IGF1dG8mIGZyb21TZWdtZW50ID0gbV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKGZy
b20pOworICAgIGlmICgobV9zdHlsZS5mb250LmlzRml4ZWRQaXRjaCgpICYmIGZyb21TZWdtZW50
LmVuZCA+PSB0bykgfHwgKGZyb20gPT0gZnJvbVNlZ21lbnQuc3RhcnQgJiYgdG8gPT0gZnJvbVNl
Z21lbnQuZW5kKSkKKyAgICAgICAgcmV0dXJuIGZyb21TZWdtZW50LnJlbmRlcmVyLndpZHRoKGZy
b20gLSBmcm9tU2VnbWVudC5zdGFydCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlv
biwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBjb25zdCBhdXRvKiBzZWdtZW50ID0gJmZyb21T
ZWdtZW50OworICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRF
bmQgPSAwOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGZyYWdtZW50RW5kID0gc3RkOjpt
aW4odG8sIHNlZ21lbnQtPmVuZCk7CisgICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50LT50ZXh0
LmlzOEJpdCgpID8gcnVuV2lkdGg8TENoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50
LT5zdGFydCwgZnJhZ21lbnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdp
ZHRoKSA6CisgICAgICAgICAgICBydW5XaWR0aDxVQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAt
IHNlZ21lbnQtPnN0YXJ0LCBmcmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24g
KyB0ZXh0V2lkdGgpOworICAgICAgICBpZiAoZnJhZ21lbnRFbmQgPT0gdG8pCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZnJvbSA9IGZyYWdtZW50RW5kOworICAgICAgICBzZWdtZW50ID0g
Jm1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlvbihmcmFnbWVudEVuZCk7CisgICAgfTsK
KworICAgIHJldHVybiB0ZXh0V2lkdGg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGluZUJy
ZWFrSXRlcmF0b3ImIGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBGbG93Q29udGVudHM6OlNlZ21l
bnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKQoreworICAgIGNvbnN0IGF1dG8qIGNoYXJh
Y3RlcnMgPSBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIHVu
c2lnbmVkIHNlZ21lbnRMZW5ndGggPSBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQ7CisgICAg
dW5zaWduZWQgc2VnbWVudFBvc2l0aW9uID0gcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0OworICAg
IHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25Ob25Mb29zZWx5PENoYXJhY3RlclR5cGUsIE5C
U1BCZWhhdmlvcjo6SWdub3JlTkJTUD4obGluZUJyZWFrSXRlcmF0b3IsIGNoYXJhY3RlcnMsIHNl
Z21lbnRMZW5ndGgsIHNlZ21lbnRQb3NpdGlvbik7Cit9CisKK3Vuc2lnbmVkIEZsb3dDb250ZW50
c0l0ZXJhdG9yOjpmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBj
b25zdAoreworICAgIHdoaWxlICghaXNFbmQocG9zaXRpb24pKSB7CisgICAgICAgIGF1dG8mIHNl
Z21lbnQgPSBtX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOworICAg
ICAgICBpZiAoc2VnbWVudC50ZXh0LmltcGwoKSAhPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmlu
ZygpLmltcGwoKSkgeworICAgICAgICAgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IHNlZ21lbnQu
c3RhcnQgPiAwID8gY2hhcmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDEpIDogMDsKKyAgICAgICAg
ICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAxID8gY2hh
cmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDIpIDogMDsKKyAgICAgICAgICAgIG1fbGluZUJyZWFr
SXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJh
Y3Rlcik7CisgICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVs
ZWFzZUl0ZXJhdG9yKHNlZ21lbnQudGV4dCwgbV9zdHlsZS5sb2NhbGUsIExpbmVCcmVha0l0ZXJh
dG9yTW9kZVVBWDE0KTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGJyZWFrYWJsZSA9
IHNlZ21lbnQudGV4dC5pczhCaXQoKSA/IG5leHRCcmVha2FibGVQb3NpdGlvbjxMQ2hhcj4obV9s
aW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudCwgcG9zaXRpb24pIDogbmV4dEJyZWFrYWJsZVBvc2l0
aW9uPFVDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LCBwb3NpdGlvbik7CisgICAg
ICAgIHBvc2l0aW9uID0gc2VnbWVudC5zdGFydCArIGJyZWFrYWJsZTsKKyAgICAgICAgaWYgKHBv
c2l0aW9uIDwgc2VnbWVudC5lbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0
YXRpYyBib29sIGZpbmROZXh0Tm9uV2hpdGVzcGFjZShjb25zdCBGbG93Q29udGVudHM6OlNlZ21l
bnQmIHNlZ21lbnQsIGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIHVu
c2lnbmVkJiBwb3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpCit7CisgICAgY29uc3QgYXV0
byogdGV4dCA9IHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CisgICAg
Zm9yICg7IHBvc2l0aW9uIDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKKyAgICAgICAgYXV0
byBjaGFyYWN0ZXIgPSB0ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF07CisgICAgICAgIGJv
b2wgaXNTcGFjZSA9IGNoYXJhY3RlciA9PSAnICc7CisgICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNl
ID0gaXNTcGFjZSB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoIXN0eWxlLnByZXNlcnZlTmV3bGlu
ZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7CisgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpc1NwYWNlKQorICAgICAgICAgICAg
KytzcGFjZUNvdW50OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25l
ZCBwb3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpIGNvbnN0Cit7CisgICAgRmxvd0NvbnRl
bnRzOjpJdGVyYXRvciBpdChtX2Zsb3dDb250ZW50cywgbV9mbG93Q29udGVudHMuc2VnbWVudElu
ZGV4Rm9yUG9zaXRpb24ocG9zaXRpb24pKTsKKyAgICBmb3IgKGF1dG8gZW5kID0gbV9mbG93Q29u
dGVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBib29sIGZvdW5kTm9uV2hp
dGVzcGFjZSA9ICgqaXQpLnRleHQuaXM4Qml0KCkgPyBmaW5kTmV4dE5vbldoaXRlc3BhY2U8TENo
YXI+KCppdCwgbV9zdHlsZSwgcG9zaXRpb24sIHNwYWNlQ291bnQpIDogZmluZE5leHROb25XaGl0
ZXNwYWNlPFVDaGFyPigqaXQsIG1fc3R5bGUsIHBvc2l0aW9uLCBzcGFjZUNvdW50KTsKKyAgICAg
ICAgaWYgKGZvdW5kTm9uV2hpdGVzcGFjZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gcG9zaXRpb247Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PgorZmxvYXQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OnJ1bldpZHRoKGNvbnN0IFN0cmluZyYgdGV4
dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoZnJvbSA8IHRvKTsKKyAgICBib29sIG1lYXN1cmVXaXRoRW5kU3BhY2UgPSBt
X3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSAmJiB0byA8IHRleHQubGVuZ3RoKCkgJiYgdGV4dFt0
b10gPT0gJyAnOworICAgIGlmIChtZWFzdXJlV2l0aEVuZFNwYWNlKQorICAgICAgICArK3RvOwor
ICAgIFRleHRSdW4gcnVuKHRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgZnJvbSwg
dG8gLSBmcm9tKTsKKyAgICBydW4uc2V0WFBvcyh4UG9zaXRpb24pOworICAgIHJ1bi5zZXRUYWJT
aXplKCEhbV9zdHlsZS50YWJXaWR0aCwgbV9zdHlsZS50YWJXaWR0aCk7CisgICAgZmxvYXQgd2lk
dGggPSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKKyAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFj
ZSkKKyAgICAgICAgd2lkdGggLT0gbV9zdHlsZS5zcGFjZVdpZHRoOworICAgIHJldHVybiB3aWR0
aDsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlm
ZjJkNGY2NjRmYzdiOTczY2JmYzgzOGMwZTQ2ZDBmZDMzMDg2YmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0
ZXJhdG9yLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvcl9oCisjZGVmaW5lIFNpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHNJdGVyYXRvcl9oCisKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiYnJlYWtfbGlu
ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworCitu
YW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CisKK2NsYXNzIEZsb3dDb250ZW50c0l0ZXJhdG9y
ICB7CitwdWJsaWM6CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tG
bG93Jik7CisKKyAgICBzdHJ1Y3QgVGV4dEZyYWdtZW50IHsKKyAgICAgICAgVGV4dEZyYWdtZW50
KCkgPSBkZWZhdWx0OworICAgICAgICBUZXh0RnJhZ21lbnQodW5zaWduZWQgdGV4dFN0YXJ0LCB1
bnNpZ25lZCB0ZXh0RW5kLCBmbG9hdCB0ZXh0V2lkdGgsIGJvb2wgaXNXaGl0ZXNwYWNlT25seSkK
KyAgICAgICAgICAgIDogc3RhcnQodGV4dFN0YXJ0KQorICAgICAgICAgICAgLCBlbmQodGV4dEVu
ZCkKKyAgICAgICAgICAgICwgdHlwZShpc1doaXRlc3BhY2VPbmx5ID8gV2hpdGVzcGFjZSA6IE5v
bldoaXRlc3BhY2UpCisgICAgICAgICAgICAsIHdpZHRoKHRleHRXaWR0aCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXJ0ID09IGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0g
VHlwZSB7IExpbmVCcmVhaywgV2hpdGVzcGFjZSwgTm9uV2hpdGVzcGFjZSB9OworICAgICAgICB1
bnNpZ25lZCBzdGFydCB7IDAgfTsKKyAgICAgICAgdW5zaWduZWQgZW5kICB7MCB9OworICAgICAg
ICBUeXBlIHR5cGUgeyBOb25XaGl0ZXNwYWNlIH07CisgICAgICAgIGJvb2wgaXNDb2xsYXBzZWQg
eyBmYWxzZSB9OworICAgICAgICBib29sIGlzQnJlYWthYmxlIHsgZmFsc2UgfTsKKyAgICAgICAg
ZmxvYXQgd2lkdGggeyAwIH07CisgICAgfTsKKyAgICBUZXh0RnJhZ21lbnQgbmV4dFRleHRGcmFn
bWVudChmbG9hdCB4UG9zaXRpb24gPSAwKTsKKyAgICBmbG9hdCB0ZXh0V2lkdGgodW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7CisKKyAgICBzdHJ1Y3Qg
U3R5bGUgeworICAgICAgICBleHBsaWNpdCBTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYpOworCisg
ICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250OworICAgICAgICBFVGV4dEFsaWduIHRleHRB
bGlnbjsKKyAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlc3BhY2U7CisgICAgICAgIGJvb2wgcHJl
c2VydmVOZXdsaW5lOworICAgICAgICBib29sIHdyYXBMaW5lczsKKyAgICAgICAgYm9vbCBicmVh
a1dvcmRPbk92ZXJmbG93OworICAgICAgICBmbG9hdCBzcGFjZVdpZHRoOworICAgICAgICB1bnNp
Z25lZCB0YWJXaWR0aDsKKyAgICAgICAgQXRvbWljU3RyaW5nIGxvY2FsZTsKKyAgICB9OworICAg
IGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICAvLyBG
SVhNRTogcmVtb3ZlIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeSgpCisgICAgY29uc3QgRmxv
d0NvbnRlbnRzJiBmbG93Q29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50czsg
fQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIGZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9u
KHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VDb3VudCkgY29uc3Q7CisgICAgdW5z
aWduZWQgZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7
CisgICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIGJv
b2wgaXNMaW5lQnJlYWsodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIGJvb2wgaXNFbmQo
dW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBmbG9hdCBydW5XaWR0aChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKKworICAgIEZsb3dDb250ZW50cyBtX2Zs
b3dDb250ZW50czsKKyAgICBtdXRhYmxlIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVh
a0l0ZXJhdG9yOworICAgIGNvbnN0IFN0eWxlIG1fc3R5bGU7CisgICAgdW5zaWduZWQgbV9wb3Np
dGlvbiB7IDAgfTsKK307CisKK2lubGluZSBVQ2hhciBGbG93Q29udGVudHNJdGVyYXRvcjo6Y2hh
cmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgYXV0byYgc2VnbWVudCA9
IG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7CisgICAgcmV0dXJu
IHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnRdOworfQorCitpbmxpbmUgYm9v
bCBGbG93Q29udGVudHNJdGVyYXRvcjo6aXNMaW5lQnJlYWsodW5zaWduZWQgcG9zaXRpb24pIGNv
bnN0Cit7CisgICAgaWYgKGlzRW5kKHBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXJBdChwb3NpdGlv
bikgPT0gJ1xuJzsKK30KKworaW5saW5lIGJvb2wgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OmlzRW5k
KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAgIHJldHVybiBwb3NpdGlvbiA+PSBtX2Zs
b3dDb250ZW50cy5sZW5ndGgoKTsKK30KKworfQorfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245552</attachid>
            <date>2015-01-28 10:32:21 -0800</date>
            <delta_ts>2015-01-28 12:38:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140944-20150128103227.patch</filename>
            <type>text/plain</type>
            <size>51478</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQxNWNhYTAwNzU5YTIy
ZDNjYmM5ZjMyOTk2ODA3YWNhZmMwOTgxOC4uN2Q3Nzc2NDIzYTBkZjc0Yjk2YmEwODM1M2VjZThi
M2I2NzIzMDQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE1LTAxLTI3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNb3ZlIEZsb3dDb250ZW50cyBpdGVyYXRvciBpbnRlcmZhY2UgdG8gRmxvd0NvbnRlbnRzSXRl
cmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDA5NDQKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBU
aGlzIHBhdGNoIGNsZWFucyB1cCBGbG93Q29udGVudHMncyBpbnRlcmZhY2UgYnkgbW92aW5nIHRo
ZSBpdGVyYXRvciBmdW5jdGlvbmFsaXR5CisgICAgICAgIHRvIHRoaXMgbmV3IEZsb3dDb250ZW50
c0l0ZXJhdG9yIGNsYXNzLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjphZGRVbmNvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFkZFVuY29tbWl0dGVk
V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFw
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hp
dGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdEZyYWdt
ZW50VG9GaXRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZpcnN0
RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGlu
ZVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5k
aW5nQW5kQWRqdXN0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpz
cGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6Y3JlYXRlVGV4dFJ1bnMpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9yOjpGbG93Q29udGVudHNJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6bmV4dFRl
eHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29u
dGVudHNJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OkZsb3dDb250ZW50czo6bmV4dFRleHRGcmFnbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnRleHRXaWR0aCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQ6OlRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6VGV4
dEZyYWdtZW50OjpUZXh0RnJhZ21lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6OmlzRW1wdHkpOiBEZWxl
dGVkLgorCiAyMDE1LTAxLTI3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIFNpbXBsaWZ5IGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxheS1zdGFsbC5o
dG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGFhMjdiMDE1NGI5OGQ2MzMyNmU5MzI2NTRlYzAw
NjQ4MGY2MzM4ZmIuLmQ0YTBiMDc0OTZlNTRlMDhmYzJkYWI2NjFmN2Y0NWQ4YzRlYjZlODggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMzUyLDYgKzIzNTIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcAogICAgIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmNwcAorICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCiAgICAg
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKICAgICByZW5kZXJpbmcvVGV4
dEF1dG9zaXplci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCmluZGV4IGFlZDJjOGU5YTFlMWRkNTM2NGIxMzg2YzFlZTJmYzlkOWJkZDQ5MGIu
LjUxYmU2YzBjNDk0MTllMzIxNTgzODIxYWZiZThjNzlkMTA1OTBlMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTE1ODIsNiArMTE1
ODIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNlbGVjdGlvblN1
YnRyZWVSb290LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xT
aW1wbGVMaW5lTGF5b3V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxp
bmVMYXlvdXRGdW5jdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3BwIiAvPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IDgyMWY4NThiYmY5ZDAwZTA3ZWFiM2I1ZjlmZWRiNjViZTY5MjYwYjguLmZjODIxMGMxNzg5
ZGRjOTk0ZThiM2YwYTBmYzI0ODcwOTkwY2QwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTY3NzUsNiAr
Njc3NSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGlu
ZUxheW91dEZsb3dDb250ZW50cy5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwIj4KKyAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAiPgogICAg
ICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOTc4
Y2ExOGU2M2M5NDMxYzI5YmIwYTcxOWU2NjZmNTMxOTk5MjUzLi4xZTI0NjIyYWZlNDYxMzgxZmIw
ZmMxMmM5YjRkMzM4ZjAxM2ZiMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDk2LDYgKzIwOTYsOCBAQAogCQk1ODAzNzE2
MTFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBS
ZWN0LmNwcCAqLzsgfTsKIAkJNTgwMzcxNjIxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE2MDFB
NjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1ODAzNzE2NDFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJG
cmFnbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTgwMzcxNjMxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1ODJDQjA1MzFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJDQjA1MjFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggKi87IH07CisJ
CTU4MkNCMDU1MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHNJdGVyYXRvci5jcHAgKi87IH07CiAJCTU4NUQ2REZDMUExNTM1NTYwMEZBNEYxMiAvKiBTaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5jcHAgKi87IH07CiAJCTU4NUQ2RTAzMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLzsgfTsKIAkJNTg1RDZFMDQxQTFBNzkyRTAwRkE0RjEy
IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi87IH07CkBAIC05MjMyLDYgKzkyMzQsOCBAQAog
CQk1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xpcFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTgwMzcxNjMxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGcmFnbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1ODJDQjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1ODJDQjA1NDFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4NUQ2REZCMUExNTM1NTYwMEZBNEYxMiAv
KiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNjA0LDYg
KzIyNjA4LDggQEAKIAkJCQlFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5
bGUuaCAqLywKIAkJCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNS
b290SW5saW5lQm94LmggKi8sCiAJCQkJQkNBMjU3MTQxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRp
Y2FsUG9zaXRpb25DYWNoZS5oICovLAorCQkJCTU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBT
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCAqLywKKwkJCQk1ODJDQjA1NDFB
NzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNw
cCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcmVuZGVyaW5nOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTIzNTQzLDYgKzIzNTQ5LDcgQEAKIAkJCQkzNzlFNjFDQzEyNkNBNUM0MDBCNjNF
OEQgLyogQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjVFMEM2
NUMxNjQzQzQyQzAwRDZDQjY5IC8qIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMzNFRTVDNTE0RkI0OTYxMDAwMjA5NUEgLyogQmFzZUNs
aWNrYWJsZVdpdGhLZXlJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTU4MkNCMDUzMUE3
OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1OUM5NjAwMTI1NUIyM0YwMDA2MjNDMCAvKiBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREFFMTI1MUYxMkQwMDNF
RjI2OSAvKiBCYXNlVGV4dElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJENkFGOEEx
NUVGMjVERjAwOEI3MTEwIC8qIEJhc2ljU2hhcGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLApA
QCAtMjk1MDYsNiArMjk1MTMsNyBAQAogCQkJCUJDMjQ0MUM0MEU4QjY1RDAwMDU1MzIwRiAvKiBT
Y3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NTM5MDQ1MEVBRkQ2MzcwMDM2OTVD
OCAvKiBTY3JvbGxWaWV3SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4
QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1ODJDQjA1
NTFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFy
Y2hJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUExNDY4NjIyNTAwNUU5
M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0QwRTBGQTBF
OTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggNmRjNzFi
YjNkOGM0YTVkMmU1MzY4NDk5YzRiYTg3Y2NmM2EwZGM1Zi4uY2I1YzFjNjVmY2Y2Y2QyMmExNDll
NTlmZWEzNTM0YTQ2NTc2Nzk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHMuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgogI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCkBAIC0yNDcsNyArMjQ4LDcgQEAg
c3RydWN0IExpbmVTdGF0ZSB7CiAgICAgICAgIG1fbmV3VW5jb21taXR0ZWRTZWdtZW50ID0gdHJ1
ZTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFVuY29tbWl0dGVkKGNvbnN0IEZsb3dDb250ZW50czo6
VGV4dEZyYWdtZW50JiBmcmFnbWVudCkKKyAgICB2b2lkIGFkZFVuY29tbWl0dGVkKGNvbnN0IEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQogICAgIHsKICAgICAg
ICAgLy8gU3RhcnQgYSBuZXcgdW5jb21taXR0ZWQgc2VnbWVudC4KICAgICAgICAgaWYgKG1fbmV3
VW5jb21taXR0ZWRTZWdtZW50KSB7CkBAIC0yNTYsMTMgKzI1NywxMyBAQCBzdHJ1Y3QgTGluZVN0
YXRlIHsKICAgICAgICAgfQogICAgICAgICB1bmNvbW1pdHRlZFdpZHRoICs9IGZyYWdtZW50Lndp
ZHRoOwogICAgICAgICB1bmNvbW1pdHRlZEVuZCA9IGZyYWdtZW50LmVuZDsKLSAgICAgICAgdW5j
b21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gZnJhZ21lbnQudHlwZSA9PSBGbG93Q29u
dGVudHM6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSA/IGZyYWdtZW50LndpZHRoIDogMDsKLSAg
ICAgICAgdW5jb21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCA9IGZyYWdtZW50LnR5cGUg
PT0gRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC5lbmQg
LSBmcmFnbWVudC5zdGFydCAgOiAwOworICAgICAgICB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggPSBmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC53aWR0aCA6IDA7CisgICAgICAgIHVuY29taXR0
ZWRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGggPSBmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50
c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgPyBmcmFnbWVudC5lbmQgLSBmcmFn
bWVudC5zdGFydCAgOiAwOwogICAgIH0KIAogICAgIHZvaWQgYWRkVW5jb21taXR0ZWRXaGl0ZXNw
YWNlKGZsb2F0IHdoaXRlc3BhY2VXaWR0aCkKICAgICB7Ci0gICAgICAgIGFkZFVuY29tbWl0dGVk
KEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50KHVuY29tbWl0dGVkRW5kLCB1bmNvbW1pdHRlZEVu
ZCArIDEsIHdoaXRlc3BhY2VXaWR0aCwgdHJ1ZSkpOworICAgICAgICBhZGRVbmNvbW1pdHRlZChG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50KHVuY29tbWl0dGVkRW5kLCB1bmNvbW1p
dHRlZEVuZCArIDEsIHdoaXRlc3BhY2VXaWR0aCwgdHJ1ZSkpOwogICAgIH0KIAogICAgIGJvb2wg
aGFzV2hpdGVzcGFjZU9ubHkoKSBjb25zdApAQCAtMzAxLDI1ICszMDIsMjUgQEAgc3RydWN0IExp
bmVTdGF0ZSB7CiAgICAgYm9vbCBtX2ZpcnN0Q2hhcmFjdGVyRml0cyB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX25ld1VuY29tbWl0dGVkU2VnbWVudCB7IHRydWUgfTsKIAotICAgIEZsb3dDb250ZW50
czo6VGV4dEZyYWdtZW50IG92ZXJmbG93ZWRGcmFnbWVudDsKKyAgICBGbG93Q29udGVudHNJdGVy
YXRvcjo6VGV4dEZyYWdtZW50IG92ZXJmbG93ZWRGcmFnbWVudDsKIAogcHJpdmF0ZToKICAgICBm
bG9hdCB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07CiAgICAgdW5zaWdu
ZWQgdW5jb21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCB7IDAgfTsKIH07CiAKLXN0YXRp
YyBib29sIHByZVdyYXAoY29uc3QgRmxvd0NvbnRlbnRzOjpTdHlsZSYgc3R5bGUpCitzdGF0aWMg
Ym9vbCBwcmVXcmFwKGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCiB7
CiAgICAgcmV0dXJuIHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNl
OwogfQogICAgIAotc3RhdGljIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExpbmVTdGF0
ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250
ZW50cyYgZmxvd0NvbnRlbnRzKQorc3RhdGljIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNl
KExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0
IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKICAgICBpZiAo
IWxpbmVTdGF0ZS5jb21taXR0ZWRUcmFpbGluZ1doaXRlc3BhY2VMZW5ndGgpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICAvLyBSZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UsIG9yIG5vbi1j
b2xsYXBzZWQgcHJlLXdyYXAgd2hpdGVzcGFjZSwgdW5sZXNzIGl0J3MgdGhlIG9ubHkgY29udGVu
dCBvbiB0aGUgbGluZSAtc28gcmVtb3ZpbmcgdGhlIHdoaXRlc2FwY2Ugd291bGQgcHJvZHVjZSBh
biBlbXB0eSBsaW5lLgotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRzLnN0eWxl
KCk7CisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5zdHlsZSgp
OwogICAgIGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNlID0gc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNl
IHwgcHJlV3JhcChzdHlsZSk7CiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlc3BhY2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTM0NSwxNCArMzQ2LDE0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUxpbmVDb25z
dHJhaW5zKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgZmxvYXQmIGF2YWlsYWJsZVdpCiAg
ICAgYXZhaWxhYmxlV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0
IC0gbG9naWNhbExlZnRPZmZzZXQpOwogfQogCi1zdGF0aWMgRmxvd0NvbnRlbnRzOjpUZXh0RnJh
Z21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCYg
ZnJhZ21lbnRUb1NwbGl0LCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBrZWVwQXRMZWFzdE9u
ZUNoYXJhY3RlciwgY29uc3QgRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMpCitzdGF0aWMgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50VG9TcGxpdCwgZmxvYXQg
YXZhaWxhYmxlV2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIsIGNvbnN0IEZsb3dD
b250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKICAgICAvLyBGYXN0IHBh
dGggZm9yIHNpbmdsZSBjaGFyIGZyYWdtZW50cy4KICAgICBpZiAoZnJhZ21lbnRUb1NwbGl0LnN0
YXJ0ICsgMSA9PSBmcmFnbWVudFRvU3BsaXQuZW5kKSB7CiAgICAgICAgIGlmIChrZWVwQXRMZWFz
dE9uZUNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybiBGbG93Q29udGVudHM6OlRleHRGcmFn
bWVudCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQoKTsKIAotICAgICAgICBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBmcmFnbWVudEZv
ck5leHRMaW5lKGZyYWdtZW50VG9TcGxpdCk7CisgICAgICAgIEZsb3dDb250ZW50c0l0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQgZnJhZ21lbnRGb3JOZXh0TGluZShmcmFnbWVudFRvU3BsaXQpOwogICAg
ICAgICBmcmFnbWVudFRvU3BsaXQuZW5kID0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0OwogICAgICAg
ICBmcmFnbWVudFRvU3BsaXQud2lkdGggPSAwOwogICAgICAgICByZXR1cm4gZnJhZ21lbnRGb3JO
ZXh0TGluZTsKQEAgLTM2NCw3ICszNjUsNyBAQCBzdGF0aWMgRmxvd0NvbnRlbnRzOjpUZXh0RnJh
Z21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVudHM6OlRleHRGcmFnbQogICAg
IGZsb2F0IHdpZHRoID0gMDsKICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7CiAgICAgICAgIHVu
c2lnbmVkIG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKLSAgICAgICAgd2lkdGggPSBmbG93
Q29udGVudHMudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFydCwgbWlkZGxlICsgMSwgMCk7
CisgICAgICAgIHdpZHRoID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50
VG9TcGxpdC5zdGFydCwgbWlkZGxlICsgMSwgMCk7CiAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0
aCA+IHdpZHRoKQogICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7CiAgICAgICAgIGVsc2Ug
aWYgKGF2YWlsYWJsZVdpZHRoIDwgd2lkdGgpCkBAIC0zNzcsNDggKzM3OCw0OCBAQCBzdGF0aWMg
Rmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29u
dGVudHM6OlRleHRGcmFnbQogCiAgICAgaWYgKGtlZXBBdExlYXN0T25lQ2hhcmFjdGVyICYmIHJp
Z2h0ID09IGZyYWdtZW50VG9TcGxpdC5zdGFydCkKICAgICAgICAgKytyaWdodDsKLSAgICBGbG93
Q29udGVudHM6OlRleHRGcmFnbWVudCBmcmFnbWVudEZvck5leHRMaW5lKGZyYWdtZW50VG9TcGxp
dCk7CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBmcmFnbWVudEZvck5l
eHRMaW5lKGZyYWdtZW50VG9TcGxpdCk7CiAgICAgZnJhZ21lbnRUb1NwbGl0LmVuZCA9IHJpZ2h0
OwotICAgIGZyYWdtZW50VG9TcGxpdC53aWR0aCA9IGZyYWdtZW50VG9TcGxpdC5pc0VtcHR5KCkg
PyAwIDogZmxvd0NvbnRlbnRzLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQsIGZyYWdt
ZW50VG9TcGxpdC5lbmQsIDApOworICAgIGZyYWdtZW50VG9TcGxpdC53aWR0aCA9IGZyYWdtZW50
VG9TcGxpdC5pc0VtcHR5KCkgPyAwIDogZmxvd0NvbnRlbnRzSXRlcmF0b3IudGV4dFdpZHRoKGZy
YWdtZW50VG9TcGxpdC5zdGFydCwgZnJhZ21lbnRUb1NwbGl0LmVuZCwgMCk7CiAKICAgICBmcmFn
bWVudEZvck5leHRMaW5lLnN0YXJ0ID0gZnJhZ21lbnRUb1NwbGl0LmVuZDsKICAgICBmcmFnbWVu
dEZvck5leHRMaW5lLndpZHRoIC09IGZyYWdtZW50VG9TcGxpdC53aWR0aDsKICAgICByZXR1cm4g
ZnJhZ21lbnRGb3JOZXh0TGluZTsKIH0KIAotc3RhdGljIEZsb3dDb250ZW50czo6VGV4dEZyYWdt
ZW50IGZpcnN0RnJhZ21lbnQoRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMsIGNvbnN0IExpbmVT
dGF0ZSYgcHJldmlvdXNMaW5lKQorc3RhdGljIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQgZmlyc3RGcmFnbWVudChGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRl
cmF0b3IsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lKQogewogICAgIC8vIEhhbmRsZSBv
dmVyZmxvd2VkIGZyYWdtZW50IGZyb20gcHJldmlvdXMgbGluZS4KLSAgICBGbG93Q29udGVudHM6
OlRleHRGcmFnbWVudCBmaXJzdEZyYWdtZW50ID0gcHJldmlvdXNMaW5lLm92ZXJmbG93ZWRGcmFn
bWVudDsKLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50cy5zdHlsZSgpOworICAg
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudCA9IHByZXZp
b3VzTGluZS5vdmVyZmxvd2VkRnJhZ21lbnQ7CisgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93
Q29udGVudHNJdGVyYXRvci5zdHlsZSgpOwogCiAgICAgaWYgKGZpcnN0RnJhZ21lbnQuaXNFbXB0
eSgpKQotICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzLm5leHRUZXh0RnJhZ21l
bnQoKTsKKyAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRU
ZXh0RnJhZ21lbnQoKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gU3BlY2lhbCBvdmVyZmxvdyBw
cmUtd3JhcCB3aGl0ZXNwYWNlIGhhbmRsaW5nOiBpZ25vcmUgdGhlIG92ZXJmbG93ZWQgd2hpdGVz
cGFjZSBpZiB3ZSBtYW5hZ2VkIHRvIGZpdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9uIHRoZSBw
cmV2aW91cyBsaW5lLgogICAgICAgICAvLyBXaGVuIHRoZSBsaW5lIGlzIHRvbyBzaG9ydCB0byBm
aXQgb25lIGNoYXJhY3RlciAodGhvdWdodCBpdCBzdGlsbCBzdGF5cyBvbiB0aGUgbGluZSkgd2Ug
Y29udGludWUgd2l0aCB0aGUgb3ZlcmZsb3cgd2hpdGVzcGFjZSBjb250ZW50IG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHM6OlRleHRG
cmFnbWVudDo6V2hpdGVzcGFjZSAmJiBwcmVXcmFwKHN0eWxlKSAmJiBwcmV2aW91c0xpbmUubV9m
aXJzdENoYXJhY3RlckZpdHMpIHsKLSAgICAgICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29u
dGVudHMubmV4dFRleHRGcmFnbWVudCgpOworICAgICAgICBpZiAoZmlyc3RGcmFnbWVudC50eXBl
ID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgJiYgcHJl
V3JhcChzdHlsZSkgJiYgcHJldmlvdXNMaW5lLm1fZmlyc3RDaGFyYWN0ZXJGaXRzKSB7CisgICAg
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOwogICAgICAgICAgICAgLy8gSWYgc2tpcHBpbmcgdGhlIHdoaXRlc3BhY2UgcHV0cyB1
cyBvbiBhIGhhcmQgbmV3bGluZSwgc2tpcCB0aGUgbmV3bGluZSB0b28gYXMgd2UgYWxyZWFkeSB3
cmFwcGVkIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBG
bG93Q29udGVudHM6OlRleHRGcmFnbWVudDo6TGluZUJyZWFrKQotICAgICAgICAgICAgICAgIGZp
cnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHMubmV4dFRleHRGcmFnbWVudCgpOworICAgICAgICAg
ICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZy
YWdtZW50OjpMaW5lQnJlYWspCisgICAgICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dD
b250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gc2tpcCB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlLgot
ICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgZmlyc3RGcmFnbWVudC50eXBlID09
IEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICBmaXJzdEZy
YWdtZW50ID0gZmxvd0NvbnRlbnRzLm5leHRUZXh0RnJhZ21lbnQoKTsKKyAgICBpZiAoc3R5bGUu
Y29sbGFwc2VXaGl0ZXNwYWNlICYmIGZpcnN0RnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHNJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQorICAgICAgICBmaXJzdEZyYWdtZW50
ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwogICAgIHJldHVybiBm
aXJzdEZyYWdtZW50OwogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUm
IGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYg
bGluZVJ1bnMsIEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRzKQorc3RhdGljIGJvb2wgY3JlYXRl
TGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwg
TGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0Nv
bnRlbnRzSXRlcmF0b3IpCiB7Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHMu
c3R5bGUoKTsKKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0
eWxlKCk7CiAgICAgYm9vbCBsaW5lQ2FuQmVXcmFwcGVkID0gc3R5bGUud3JhcExpbmVzIHx8IHN0
eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3c7Ci0gICAgYXV0byBmcmFnbWVudCA9IGZpcnN0RnJhZ21l
bnQoZmxvd0NvbnRlbnRzLCBwcmV2aW91c0xpbmUpOworICAgIGF1dG8gZnJhZ21lbnQgPSBmaXJz
dEZyYWdtZW50KGZsb3dDb250ZW50c0l0ZXJhdG9yLCBwcmV2aW91c0xpbmUpOwogICAgIHdoaWxl
ICghZnJhZ21lbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEhhcmQgbGluZWJyZWFrLgotICAg
ICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudDo6TGlu
ZUJyZWFrKSB7CisgICAgICAgIGlmIChmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBu
ZXcgbGluZSBmcmFnbWVudCBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBvbiB0aGUgbGluZS4gKG90
aGVyd2lzZSB0aGUgZXh0cmEgbmV3IGxpbmUgY2hhcmFjdGVyIHdvdWxkIHNob3cgdXAgYXQgdGhl
IGVuZCBvZiB0aGUgY29udGVudC4pCiAgICAgICAgICAgICBpZiAoIWxpbmUud2lkdGgoKSkKICAg
ICAgICAgICAgICAgICBsaW5lLmFkZFVuY29tbWl0dGVkKGZyYWdtZW50KTsKQEAgLTQzMiwxMCAr
NDMzLDEwIEBAIHN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29u
c3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91CiAgICAgICAgICAgICAvLyA0LiBOb24t
d2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBhbm90aGVyIGZyYWdtZW50
IG9uIHRoZSBsaW5lIGdldHMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgICAgICBi
b29sIGVtcHR5TGluZSA9ICFsaW5lLndpZHRoKCk7CiAgICAgICAgICAgICAvLyBXaGl0ZXNwYWNl
IGZyYWdtZW50LgotICAgICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRz
OjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudC50
eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCBz
dGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQgdG8gbmV4dCBs
aW5lLgotICAgICAgICAgICAgICAgICAgICBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCA9IHNwbGl0
RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGggLSBsaW5lLndp
ZHRoKCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgbGlu
ZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBs
aW5lLmF2YWlsYWJsZVdpZHRoIC0gbGluZS53aWR0aCgpLCBlbXB0eUxpbmUsIGZsb3dDb250ZW50
c0l0ZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgbGluZS5hZGRVbmNvbW1pdHRlZChmcmFn
bWVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIFdoZW4gd2hpdGVz
cGFjZSBjb2xsYXBzZSBpcyBvbiwgd2hpdGVzcGFjZSB0aGF0IGRvZXNuJ3QgZml0IGlzIHNpbXBs
eSBza2lwcGVkLgpAQCAtNDQ0LDcgKzQ0NSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5z
KExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91CiAg
ICAgICAgICAgICAvLyBOb24td2hpdGVzcGFjZSBmcmFnbWVudC4gKCFzdHlsZS53cmFwTGluZXM6
IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKICAgICAgICAgICAgIGlmICgo
ZW1wdHlMaW5lICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8ICFzdHlsZS53cmFwTGlu
ZXMpIHsKICAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClm
cmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQg
dG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgICAgIGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50ID0g
c3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZS5hdmFpbGFibGVXaWR0aCAtIGxp
bmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHMpOworICAgICAgICAgICAgICAgIGxp
bmUub3ZlcmZsb3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwg
bGluZS5hdmFpbGFibGVXaWR0aCAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVu
dHNJdGVyYXRvcik7CiAgICAgICAgICAgICAgICAgbGluZS5hZGRVbmNvbW1pdHRlZChmcmFnbWVu
dCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00NjUsMjIgKzQ2
NiwyMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNvbnN0
IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdQogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGxpbmUuYWRkVW5jb21taXR0ZWQoZnJhZ21lbnQpOwogICAgICAgICAvLyBGaW5kIHRoZSBu
ZXh0IHRleHQgZnJhZ21lbnQuCi0gICAgICAgIGZyYWdtZW50ID0gZmxvd0NvbnRlbnRzLm5leHRU
ZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSBmbG93Q29udGVu
dHNJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KGxpbmUud2lkdGgoKSk7CiAgICAgfQogICAgIGxp
bmUuY29tbWl0QW5kQ3JlYXRlUnVuKGxpbmVSdW5zKTsKICAgICByZXR1cm4gZnJhZ21lbnQuaXNF
bXB0eSgpICYmIGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50LmlzRW1wdHkoKTsKIH0KIAotc3RhdGlj
IHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCBwcmV2aW91c1J1bkNvdW50LCB1bnNpZ25lZCYg
bGluZUNvdW50LCBjb25zdCBGbG93Q29udGVudHMmIGZsb3dDb250ZW50cykKK3N0YXRpYyB2b2lk
IGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucywgdW5zaWduZWQgcHJldmlvdXNSdW5Db3VudCwgdW5zaWduZWQmIGxpbmVD
b3VudCwgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJhdG9yKQog
ewogICAgIGlmIChwcmV2aW91c1J1bkNvdW50ID09IHJ1bnMuc2l6ZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICByZW1vdmVUcmFpbGluZ1doaXRlc3Bh
Y2UobGluZSwgcnVucywgZmxvd0NvbnRlbnRzKTsKKyAgICByZW1vdmVUcmFpbGluZ1doaXRlc3Bh
Y2UobGluZSwgcnVucywgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwogICAgIGlmICghcnVucy5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBBZGp1c3QgcnVucycgcG9zaXRpb24gYnkgdGFr
aW5nIGxpbmUncyBhbGlnbm1lbnQgaW50byBhY2NvdW50LgotICAgIGlmIChmbG9hdCBsaW5lTG9n
aWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQoZmxvd0NvbnRlbnRzLnN0eWxlKCkudGV4dEFsaWdu
LCBsaW5lLmF2YWlsYWJsZVdpZHRoLCBsaW5lLmNvbW1pdHRlZFdpZHRoLCBsaW5lLmxvZ2ljYWxM
ZWZ0T2Zmc2V0KSkgeworICAgIGlmIChmbG9hdCBsaW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGlu
ZUxlZnQoZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUoKS50ZXh0QWxpZ24sIGxpbmUuYXZhaWxh
YmxlV2lkdGgsIGxpbmUuY29tbWl0dGVkV2lkdGgsIGxpbmUubG9naWNhbExlZnRPZmZzZXQpKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHByZXZpb3VzUnVuQ291bnQ7IGkgPCBydW5zLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBydW5zW2ldLmxvZ2ljYWxMZWZ0ICs9IGxpbmVMb2dp
Y2FsTGVmdDsKICAgICAgICAgICAgIHJ1bnNbaV0ubG9naWNhbFJpZ2h0ICs9IGxpbmVMb2dpY2Fs
TGVmdDsKQEAgLTQ5MCwyNCArNDkxLDIxIEBAIHN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0Fu
ZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVuCiAgICAg
KytsaW5lQ291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFy
eShMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0Nv
bnRlbnRzKQorc3RhdGljIHZvaWQgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KExheW91dDo6
UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250
ZW50c0l0ZXJhdG9yKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgc3BsaXQg
ZHVyaW5nIHJ1biBjb25zdHJ1Y3Rpb24gaW5zdGVhZCBvZiBhcyBhIHNlcGFyYXRlIHBhc3MuCiAg
ICAgaWYgKGxpbmVSdW5zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChmbG93
Q29udGVudHMuaGFzT25lU2VnbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICB1bnNpZ25l
ZCBydW5JbmRleCA9IDA7CiAgICAgZG8gewogICAgICAgICBjb25zdCBSdW4mIHJ1biA9IGxpbmVS
dW5zLmF0KHJ1bkluZGV4KTsKICAgICAgICAgQVNTRVJUKHJ1bi5zdGFydCAhPSBydW4uZW5kKTsK
LSAgICAgICAgYXV0byYgc3RhcnRTZWdtZW50ID0gZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3Np
dGlvbihydW4uc3RhcnQpOworICAgICAgICBhdXRvJiBzdGFydFNlZ21lbnQgPSBmbG93Q29udGVu
dHNJdGVyYXRvci5zZWdtZW50Rm9yUG9zaXRpb24ocnVuLnN0YXJ0KTsKICAgICAgICAgaWYgKHJ1
bi5lbmQgPD0gc3RhcnRTZWdtZW50LmVuZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAvLyBUaGlzIHJ1biBvdmVybGFwcyBtdWx0aXBsZSByZW5kZXJlcnMuIFNwbGl0IGl0IHVwLgog
ICAgICAgICAvLyBTcGxpdCBydW4gYXQgdGhlIHJlbmRlcmVyJ3MgYm91bmRhcnkgYW5kIGNyZWF0
ZSBhIG5ldyBydW4gZm9yIHRoZSBsZWZ0IHNpZGUsIHdoaWxlIHVzZSB0aGUgY3VycmVudCBydW4g
YXMgdGhlIHJpZ2h0IHNpZGUuCi0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mTGVmdFJ1biA9
IHJ1bi5sb2dpY2FsTGVmdCArIGZsb3dDb250ZW50cy50ZXh0V2lkdGgocnVuLnN0YXJ0LCBzdGFy
dFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOworICAgICAgICBmbG9hdCBsb2dpY2FsUmln
aHRPZkxlZnRSdW4gPSBydW4ubG9naWNhbExlZnQgKyBmbG93Q29udGVudHNJdGVyYXRvci50ZXh0
V2lkdGgocnVuLnN0YXJ0LCBzdGFydFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOwogICAg
ICAgICBsaW5lUnVucy5pbnNlcnQocnVuSW5kZXgsIFJ1bihydW4uc3RhcnQsIHN0YXJ0U2VnbWVu
dC5lbmQsIHJ1bi5sb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuLCBmYWxzZSkpOwog
ICAgICAgICBSdW4mIHJpZ2h0U2lkZVJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4ICsgMSk7CiAg
ICAgICAgIHJpZ2h0U2lkZVJ1bi5zdGFydCA9IHN0YXJ0U2VnbWVudC5lbmQ7CkBAIC01MjEsNyAr
NTE5LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1
bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWcKICAgICBMYXlvdXRVbml0IGxpbmVIZWln
aHQgPSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdyk7CiAgICAgTGluZVN0YXRlIGxpbmU7CiAgICAg
Ym9vbCBpc0VuZE9mQ29udGVudCA9IGZhbHNlOwotICAgIEZsb3dDb250ZW50cyBmbG93Q29udGVu
dHMgPSBGbG93Q29udGVudHMoZmxvdyk7CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3IgZmxvd0Nv
bnRlbnRzSXRlcmF0b3IgPSBGbG93Q29udGVudHNJdGVyYXRvcihmbG93KTsKIAogICAgIGRvIHsK
ICAgICAgICAgZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVIZWlnaHQgKiBsaW5lQ291bnQgKyBi
b3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsKQEAgLTUyOSwxMSArNTI3LDEyIEBAIHN0YXRpYyB2b2lk
IGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cm
IGZsb3csIHVuc2lnCiAgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzUnVuQ291bnQgPSBydW5zLnNp
emUoKTsKICAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwogICAgICAgICB1cGRhdGVMaW5lQ29u
c3RyYWlucyhmbG93LCBsaW5lLmF2YWlsYWJsZVdpZHRoLCBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0
KTsKLSAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91
c0xpbmUsIHJ1bnMsIGZsb3dDb250ZW50cyk7Ci0gICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFk
anVzdFJ1bnMobGluZSwgcnVucywgcHJldmlvdXNSdW5Db3VudCwgbGluZUNvdW50LCBmbG93Q29u
dGVudHMpOworICAgICAgICBpc0VuZE9mQ29udGVudCA9IGNyZWF0ZUxpbmVSdW5zKGxpbmUsIHBy
ZXZpb3VzTGluZSwgcnVucywgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOworICAgICAgICBjbG9zZUxp
bmVFbmRpbmdBbmRBZGp1c3RSdW5zKGxpbmUsIHJ1bnMsIHByZXZpb3VzUnVuQ291bnQsIGxpbmVD
b3VudCwgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwogICAgIH0gd2hpbGUgKCFpc0VuZE9mQ29udGVu
dCk7CiAKLSAgICBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkocnVucywgZmxvd0NvbnRlbnRz
KTsKKyAgICBpZiAoZmxvdy5maXJzdENoaWxkKCkgIT0gZmxvdy5sYXN0Q2hpbGQoKSkKKyAgICAg
ICAgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KHJ1bnMsIGZsb3dDb250ZW50c0l0ZXJhdG9y
KTsKICAgICBBU1NFUlQoIWxpbmUudW5jb21taXR0ZWRXaWR0aCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
LmNwcAppbmRleCA3MThlOTk1Y2MyMTM2MWM4NGNmNGZkZTlmYzU5ZDU4ZGNkN2UwZWZhLi4yMjA5
Nzk3ZGU3YmE1NmRjMzA3YWFkMmY0NjM5ZDc1Njc1MTFmYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3Bw
CkBAIC0zMywxOSArMzMsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFNpbXBs
ZUxpbmVMYXlvdXQgewogCi1GbG93Q29udGVudHM6OlN0eWxlOjpTdHlsZShjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnRDYXNjYWRlKCkpCi0gICAgLCB0ZXh0
QWxpZ24oc3R5bGUudGV4dEFsaWduKCkpCi0gICAgLCBjb2xsYXBzZVdoaXRlc3BhY2Uoc3R5bGUu
Y29sbGFwc2VXaGl0ZVNwYWNlKCkpCi0gICAgLCBwcmVzZXJ2ZU5ld2xpbmUoc3R5bGUucHJlc2Vy
dmVOZXdsaW5lKCkpCi0gICAgLCB3cmFwTGluZXMoc3R5bGUuYXV0b1dyYXAoKSkKLSAgICAsIGJy
ZWFrV29yZE9uT3ZlcmZsb3coc3R5bGUub3ZlcmZsb3dXcmFwKCkgPT0gQnJlYWtPdmVyZmxvd1dy
YXAgJiYgKHdyYXBMaW5lcyB8fCBwcmVzZXJ2ZU5ld2xpbmUpKQotICAgICwgc3BhY2VXaWR0aChm
b250LndpZHRoKFRleHRSdW4oJnNwYWNlLCAxKSkpCi0gICAgLCB0YWJXaWR0aChjb2xsYXBzZVdo
aXRlc3BhY2UgPyAwIDogc3R5bGUudGFiU2l6ZSgpKQotICAgICwgbG9jYWxlKHN0eWxlLmxvY2Fs
ZSgpKQotewotfQotCiBzdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gaW5pdGlh
bGl6ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKIHsKICAgICBWZWN0b3I8
Rmxvd0NvbnRlbnRzOjpTZWdtZW50LCA4PiBzZWdtZW50czsKQEAgLTU5LDE0MSArNDYsMTEgQEAg
c3RhdGljIFZlY3RvcjxGbG93Q29udGVudHM6OlNlZ21lbnQ+IGluaXRpYWxpemVTZWdtZW50cyhj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGYKIH0KIAogRmxvd0NvbnRlbnRzOjpGbG93Q29udGVudHMo
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotICAgIDogbV9zdHlsZShmbG93LnN0eWxlKCkp
Ci0gICAgLCBtX3NlZ21lbnRzKGluaXRpYWxpemVTZWdtZW50cyhmbG93KSkKLSAgICAsIG1fbGlu
ZUJyZWFrSXRlcmF0b3IobV9zZWdtZW50c1swXS50ZXh0LCBmbG93LnN0eWxlKCkubG9jYWxlKCkp
CisgICAgOiBtX3NlZ21lbnRzKGluaXRpYWxpemVTZWdtZW50cyhmbG93KSkKICAgICAsIG1fbGFz
dFNlZ21lbnRJbmRleCgwKQogewogfQogCi1GbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBGbG93
Q29udGVudHM6Om5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIC8vIEEg
ZnJhZ21lbnQgY2FuIGVpdGhlciBiZQotICAgIC8vIDEuIG5ldyBsaW5lIGNoYXJhY3RlciB3aGVu
IHByZXNlcnZlTmV3bGluZSBpcyBvbiAobm90IGNvbnNpZGVyZWQgYXMgd2hpdGVzcGFjZSkgb3IK
LSAgICAvLyAyLiB3aGl0ZXNwYWNlIChjb2xsYXNwZWQsIG5vbi1jb2xsYXBzZWQgbXVsdGkgb3Ig
c2luZ2xlKSBvcgotICAgIC8vIDMuIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCi0gICAgLy8g
NC4gZW1wdHksIGluZGljYXRpbmcgY29udGVudCBlbmQuCi0gICAgVGV4dEZyYWdtZW50IGZyYWdt
ZW50OwotICAgIGZyYWdtZW50LnN0YXJ0ID0gbV9wb3NpdGlvbjsKLSAgICBpZiAoaXNFbmQoZnJh
Z21lbnQuc3RhcnQpKSB7Ci0gICAgICAgIGZyYWdtZW50LmVuZCA9IGZyYWdtZW50LnN0YXJ0Owot
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChpc0xpbmVCcmVhayhmcmFn
bWVudC5zdGFydCkpIHsKLSAgICAgICAgZnJhZ21lbnQudHlwZSA9IFRleHRGcmFnbWVudDo6TGlu
ZUJyZWFrOwotICAgICAgICBmcmFnbWVudC5lbmQgPSBmcmFnbWVudC5zdGFydCArIDE7Ci0gICAg
ICAgIG1fcG9zaXRpb24gPSBmcmFnbWVudC5lbmQ7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzcGFjZUNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCB3aGl0
ZXNwYWNlRW5kID0gZmluZE5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oZnJhZ21lbnQuc3RhcnQs
IHNwYWNlQ291bnQpOwotICAgIEFTU0VSVChmcmFnbWVudC5zdGFydCA8PSB3aGl0ZXNwYWNlRW5k
KTsKLSAgICBpZiAoZnJhZ21lbnQuc3RhcnQgIT0gd2hpdGVzcGFjZUVuZCkgewotICAgICAgICBm
cmFnbWVudC50eXBlID0gVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlOwotICAgICAgICBmcmFnbWVu
dC5lbmQgPSB3aGl0ZXNwYWNlRW5kOwotICAgICAgICBib29sIG11bHRpcGxlV2hpdGVzcGFjZSA9
IGZyYWdtZW50LnN0YXJ0ICsgMSA8IGZyYWdtZW50LmVuZDsKLSAgICAgICAgZnJhZ21lbnQuaXND
b2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3Bh
Y2U7Ci0gICAgICAgIGZyYWdtZW50LmlzQnJlYWthYmxlID0gIWZyYWdtZW50LmlzQ29sbGFwc2Vk
ICYmIG11bHRpcGxlV2hpdGVzcGFjZTsKLSAgICAgICAgaWYgKGZyYWdtZW50LmlzQ29sbGFwc2Vk
KQotICAgICAgICAgICAgZnJhZ21lbnQud2lkdGggPSBtX3N0eWxlLnNwYWNlV2lkdGg7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRMZW5ndGggPSBmcmFnbWVu
dC5lbmQgLSBmcmFnbWVudC5zdGFydDsKLSAgICAgICAgICAgIGlmIChmcmFnbWVudExlbmd0aCA9
PSBzcGFjZUNvdW50KQotICAgICAgICAgICAgICAgIGZyYWdtZW50LndpZHRoID0gZnJhZ21lbnRM
ZW5ndGggKiBtX3N0eWxlLnNwYWNlV2lkdGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZnJhZ21lbnQud2lkdGggPSB0ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQsIGZyYWdtZW50
LmVuZCwgeFBvc2l0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBtX3Bvc2l0aW9uID0gZnJhZ21l
bnQuZW5kOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotCi0gICAgZnJhZ21lbnQu
dHlwZSA9IFRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZTsKLSAgICBmcmFnbWVudC5pc0JyZWFr
YWJsZSA9IG1fc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdzsKLSAgICBmcmFnbWVudC5lbmQgPSBm
aW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGZyYWdtZW50LnN0YXJ0ICsgMSk7Ci0gICAgZnJhZ21l
bnQud2lkdGggPSB0ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQsIGZyYWdtZW50LmVuZCwgeFBvc2l0
aW9uKTsKLSAgICBtX3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kOwotICAgIHJldHVybiBmcmFnbWVu
dDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdW5zaWdu
ZWQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGluZUJyZWFr
SXRlcmF0b3IsIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQg
cG9zaXRpb24pCi17Ci0gICAgY29uc3QgYXV0byogY2hhcmFjdGVycyA9IHNlZ21lbnQudGV4dC5j
aGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7Ci0gICAgdW5zaWduZWQgc2VnbWVudExlbmd0aCA9
IHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydDsKLSAgICB1bnNpZ25lZCBzZWdtZW50UG9zaXRp
b24gPSBwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnQ7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQ
b3NpdGlvbk5vbkxvb3NlbHk8Q2hhcmFjdGVyVHlwZSwgTkJTUEJlaGF2aW9yOjpJZ25vcmVOQlNQ
PihsaW5lQnJlYWtJdGVyYXRvciwgY2hhcmFjdGVycywgc2VnbWVudExlbmd0aCwgc2VnbWVudFBv
c2l0aW9uKTsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpmaW5kTmV4dEJyZWFrYWJsZVBv
c2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIHdoaWxlICghaXNFbmQocG9z
aXRpb24pKSB7Ci0gICAgICAgIGF1dG8mIHNlZ21lbnQgPSBzZWdtZW50Rm9yUG9zaXRpb24ocG9z
aXRpb24pOwotICAgICAgICBpZiAoc2VnbWVudC50ZXh0LmltcGwoKSAhPSBtX2xpbmVCcmVha0l0
ZXJhdG9yLnN0cmluZygpLmltcGwoKSkgewotICAgICAgICAgICAgVUNoYXIgbGFzdENoYXJhY3Rl
ciA9IHNlZ21lbnQuc3RhcnQgPiAwID8gY2hhcmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDEpIDog
MDsKLSAgICAgICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3Rh
cnQgPiAxID8gY2hhcmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDIpIDogMDsKLSAgICAgICAgICAg
IG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29u
ZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0
U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKHNlZ21lbnQudGV4dCwgbV9zdHlsZS5sb2NhbGUsIExp
bmVCcmVha0l0ZXJhdG9yTW9kZVVBWDE0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVk
IGJyZWFrYWJsZSA9IHNlZ21lbnQudGV4dC5pczhCaXQoKSA/IG5leHRCcmVha2FibGVQb3NpdGlv
bjxMQ2hhcj4obV9saW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudCwgcG9zaXRpb24pIDogbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uPFVDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LCBwb3Np
dGlvbik7Ci0gICAgICAgIHBvc2l0aW9uID0gc2VnbWVudC5zdGFydCArIGJyZWFrYWJsZTsKLSAg
ICAgICAgaWYgKHBvc2l0aW9uIDwgc2VnbWVudC5lbmQpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIHBvc2l0aW9uOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBib29sIGZpbmROZXh0Tm9uV2hpdGVzcGFjZShjb25zdCBGbG93Q29u
dGVudHM6OlNlZ21lbnQmIHNlZ21lbnQsIGNvbnN0IEZsb3dDb250ZW50czo6U3R5bGUmIHN0eWxl
LCB1bnNpZ25lZCYgcG9zaXRpb24sIHVuc2lnbmVkJiBzcGFjZUNvdW50KQotewotICAgIGNvbnN0
IGF1dG8qIHRleHQgPSBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOwot
ICAgIGZvciAoOyBwb3NpdGlvbiA8IHNlZ21lbnQuZW5kOyArK3Bvc2l0aW9uKSB7Ci0gICAgICAg
IGF1dG8gY2hhcmFjdGVyID0gdGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnRdOwotICAgICAg
ICBib29sIGlzU3BhY2UgPSBjaGFyYWN0ZXIgPT0gJyAnOwotICAgICAgICBib29sIGlzV2hpdGVz
cGFjZSA9IGlzU3BhY2UgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKCFzdHlsZS5wcmVzZXJ2ZU5l
d2xpbmUgJiYgY2hhcmFjdGVyID09ICdcbicpOwotICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoaXNTcGFjZSkKLSAgICAgICAg
ICAgICsrc3BhY2VDb3VudDsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25l
ZCBGbG93Q29udGVudHM6OmZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBv
c2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VDb3VudCkgY29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzZWdtZW50SW5kZXhGb3JQb3NpdGlvbihwb3NpdGlvbik7IGkgPCBtX3NlZ21lbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGJvb2wgZm91bmROb25XaGl0ZXNwYWNlID0gbV9zZWdtZW50
c1tpXS50ZXh0LmlzOEJpdCgpID8gZmluZE5leHROb25XaGl0ZXNwYWNlPExDaGFyPihtX3NlZ21l
bnRzW2ldLCBtX3N0eWxlLCBwb3NpdGlvbiwgc3BhY2VDb3VudCkgOgotICAgICAgICAgICAgZmlu
ZE5leHROb25XaGl0ZXNwYWNlPFVDaGFyPihtX3NlZ21lbnRzW2ldLCBtX3N0eWxlLCBwb3NpdGlv
biwgc3BhY2VDb3VudCk7Ci0gICAgICAgIGlmIChmb3VuZE5vbldoaXRlc3BhY2UpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHBvc2l0aW9uOwotfQotCi1mbG9hdCBGbG93
Q29udGVudHM6OnRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBv
c2l0aW9uKSBjb25zdAotewotICAgIGNvbnN0IGF1dG8mIGZyb21TZWdtZW50ID0gc2VnbWVudEZv
clBvc2l0aW9uKGZyb20pOwotCi0gICAgaWYgKChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkg
JiYgZnJvbVNlZ21lbnQuZW5kID49IHRvKSB8fCAoZnJvbSA9PSBmcm9tU2VnbWVudC5zdGFydCAm
JiB0byA9PSBmcm9tU2VnbWVudC5lbmQpKQotICAgICAgICByZXR1cm4gZnJvbVNlZ21lbnQucmVu
ZGVyZXIud2lkdGgoZnJvbSAtIGZyb21TZWdtZW50LnN0YXJ0LCB0byAtIGZyb20sIG1fc3R5bGUu
Zm9udCwgeFBvc2l0aW9uLCBudWxscHRyLCBudWxscHRyKTsKLQotICAgIGNvbnN0IGF1dG8qIHNl
Z21lbnQgPSAmZnJvbVNlZ21lbnQ7Ci0gICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKLSAgICB1bnNp
Z25lZCBmcmFnbWVudEVuZCA9IDA7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgZnJhZ21l
bnRFbmQgPSBzdGQ6Om1pbih0bywgc2VnbWVudC0+ZW5kKTsKLSAgICAgICAgdGV4dFdpZHRoICs9
IHNlZ21lbnQtPnRleHQuaXM4Qml0KCkgPyBydW5XaWR0aDxMQ2hhcj4oc2VnbWVudC0+dGV4dCwg
ZnJvbSAtIHNlZ21lbnQtPnN0YXJ0LCBmcmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9z
aXRpb24gKyB0ZXh0V2lkdGgpIDoKLSAgICAgICAgICAgIHJ1bldpZHRoPFVDaGFyPihzZWdtZW50
LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdtZW50RW5kIC0gc2VnbWVudC0+c3Rh
cnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCk7Ci0gICAgICAgIGlmIChmcmFnbWVudEVuZCA9PSB0
bykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBmcm9tID0gZnJhZ21lbnRFbmQ7Ci0gICAg
ICAgIHNlZ21lbnQgPSAmc2VnbWVudEZvclBvc2l0aW9uKGZyYWdtZW50RW5kKTsKLSAgICB9Owot
Ci0gICAgcmV0dXJuIHRleHRXaWR0aDsKLX0KLQogdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdt
ZW50SW5kZXhGb3JQb3NpdGlvblNsb3codW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAg
YXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQobV9zZWdtZW50cy5iZWdpbigpLCBtX3NlZ21lbnRz
LmVuZCgpLCBwb3NpdGlvbiwgW10oY29uc3QgU2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgcG9z
aXRpb24pIHsKQEAgLTIxNSwyMSArNzIsNSBAQCBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQm
IEZsb3dDb250ZW50czo6c2VnbWVudEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlclRleHQmCiAgICAg
cmV0dXJuIG1fc2VnbWVudHMubGFzdCgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLWZsb2F0IEZsb3dDb250ZW50czo6cnVuV2lkdGgoY29uc3QgU3RyaW5nJiB0ZXh0
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAotewot
ICAgIEFTU0VSVChmcm9tIDwgdG8pOwotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1f
c3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmIHRvIDwgdGV4dC5sZW5ndGgoKSAmJiB0ZXh0W3Rv
XSA9PSAnICc7Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgICsrdG87Ci0g
ICAgVGV4dFJ1biBydW4odGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCkgKyBmcm9tLCB0
byAtIGZyb20pOwotICAgIHJ1bi5zZXRYUG9zKHhQb3NpdGlvbik7Ci0gICAgcnVuLnNldFRhYlNp
emUoISFtX3N0eWxlLnRhYldpZHRoLCBtX3N0eWxlLnRhYldpZHRoKTsKLSAgICBmbG9hdCB3aWR0
aCA9IG1fc3R5bGUuZm9udC53aWR0aChydW4pOwotICAgIGlmIChtZWFzdXJlV2l0aEVuZFNwYWNl
KQotICAgICAgICB3aWR0aCAtPSBtX3N0eWxlLnNwYWNlV2lkdGg7Ci0gICAgcmV0dXJuIHdpZHRo
OwotfQotCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAppbmRleCA3YTc5MTdmZDA5ZmI4M2QwNWU2YzVhYzc3
NmU5ODM1YTNiZTY5NTczLi5jYzczMzNhYWQxYTFlOGU2Y2Y2YzE5Y2NhNzEwMGQ2NzkxOTA5OTQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgKQEAgLTI2LDEwICsyNiw3IEBACiAjaWZuZGVmIFNpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHNfaAogI2RlZmluZSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
X2gKIAotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
LSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgotI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgi
CisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBS
ZW5kZXJCbG9ja0Zsb3c7CkBAIC00MCwzMiArMzcsNiBAQCBjbGFzcyBGbG93Q29udGVudHMgewog
cHVibGljOgogICAgIEZsb3dDb250ZW50cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKIAotICAg
IHN0cnVjdCBUZXh0RnJhZ21lbnQgewotICAgICAgICBUZXh0RnJhZ21lbnQoKSA9IGRlZmF1bHQ7
Ci0gICAgICAgIFRleHRGcmFnbWVudCh1bnNpZ25lZCB0ZXh0U3RhcnQsIHVuc2lnbmVkIHRleHRF
bmQsIGZsb2F0IHRleHRXaWR0aCwgYm9vbCBpc1doaXRlc3BhY2VPbmx5KQotICAgICAgICAgICAg
OiBzdGFydCh0ZXh0U3RhcnQpCi0gICAgICAgICAgICAsIGVuZCh0ZXh0RW5kKQotICAgICAgICAg
ICAgLCB0eXBlKGlzV2hpdGVzcGFjZU9ubHkgPyBXaGl0ZXNwYWNlIDogTm9uV2hpdGVzcGFjZSkK
LSAgICAgICAgICAgICwgd2lkdGgodGV4dFdpZHRoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gc3RhcnQgPT0gZW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgZW51bSBUeXBlIHsgTGluZUJy
ZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNwYWNlIH07Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0
ID0gMDsKLSAgICAgICAgdW5zaWduZWQgZW5kID0gMDsKLSAgICAgICAgVHlwZSB0eXBlID0gTm9u
V2hpdGVzcGFjZTsKLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCA9IGZhbHNlOwotICAgICAgICBi
b29sIGlzQnJlYWthYmxlID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICB9
OwotICAgIFRleHRGcmFnbWVudCBuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9IDAp
OwotICAgIGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQg
eFBvc2l0aW9uKSBjb25zdDsKLQogICAgIHN0cnVjdCBTZWdtZW50IHsKICAgICAgICAgdW5zaWdu
ZWQgc3RhcnQ7CiAgICAgICAgIHVuc2lnbmVkIGVuZDsKQEAgLTc1LDY0ICs0Niw0MyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgU2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9uKHVuc2lnbmVkKSBjb25z
dDsKICAgICBjb25zdCBTZWdtZW50JiBzZWdtZW50Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyVGV4
dCYpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNPbmVTZWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9z
ZWdtZW50cy5zaXplKCkgPT0gMTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VnbWVudHMubGFzdCgpLmVuZDsgfTsKKyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAg
cHVibGljOgorICAgICAgICBJdGVyYXRvcihjb25zdCBGbG93Q29udGVudHMmIGZsb3dDb250ZW50
cywgdW5zaWduZWQgc2VnbWVudEluZGV4KQorICAgICAgICAgICAgOiBtX2Zsb3dDb250ZW50cyhm
bG93Q29udGVudHMpCisgICAgICAgICAgICAsIG1fc2VnbWVudEluZGV4KHNlZ21lbnRJbmRleCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7
ICsrbV9zZWdtZW50SW5kZXg7IHJldHVybiAqdGhpczsgfQogCi0gICAgc3RydWN0IFN0eWxlIHsK
LSAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotICAgICAgICBj
b25zdCBGb250Q2FzY2FkZSYgZm9udDsKLSAgICAgICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247Ci0g
ICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNlOwotICAgICAgICBib29sIHByZXNlcnZlTmV3
bGluZTsKLSAgICAgICAgYm9vbCB3cmFwTGluZXM7Ci0gICAgICAgIGJvb2wgYnJlYWtXb3JkT25P
dmVyZmxvdzsKLSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aDsKLSAgICAgICAgdW5zaWduZWQgdGFi
V2lkdGg7Ci0gICAgICAgIEF0b21pY1N0cmluZyBsb2NhbGU7CisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudEluZGV4
ID09IG90aGVyLm1fc2VnbWVudEluZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisK
KyAgICAgICAgY29uc3QgU2VnbWVudCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9mbG93
Q29udGVudHMubV9zZWdtZW50c1ttX3NlZ21lbnRJbmRleF07IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IEZsb3dDb250ZW50cyYgbV9mbG93Q29udGVudHM7CisgICAgICAgIHVuc2ln
bmVkIG1fc2VnbWVudEluZGV4OwogICAgIH07Ci0gICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZTsgfQogCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIGZpbmROZXh0
Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VD
b3VudCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1bnNp
Z25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgYm9vbCBpc0xpbmVCcmVhayh1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3Q7Ci0gICAgYm9vbCBpc0VuZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Cisg
ICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcigqdGhpcywgMCk7IH0K
KyAgICBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcigqdGhpcywgbV9zZWdt
ZW50cy5zaXplKCkpOyB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3NlZ21lbnRzLmxhc3QoKS5lbmQ7IH07CisKICAgICB1bnNpZ25lZCBzZWdtZW50SW5kZXhGb3JQ
b3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgdW5zaWduZWQgc2VnbWVudElu
ZGV4Rm9yUG9zaXRpb25TbG93KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKIAotICAgIFVDaGFy
IGNoYXJhY3RlckF0KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxvYXQgcnVuV2lkdGgoY29uc3QgU3RyaW5nJiwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7Citwcml2YXRlOgor
ICAgIHVuc2lnbmVkIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uU2xvdyh1bnNpZ25lZCBwb3NpdGlv
bikgY29uc3Q7CiAKLSAgICBjb25zdCBTdHlsZSBtX3N0eWxlOwogICAgIGNvbnN0IFZlY3RvcjxT
ZWdtZW50LCA4PiBtX3NlZ21lbnRzOwogCi0gICAgbXV0YWJsZSBMYXp5TGluZUJyZWFrSXRlcmF0
b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fbGFzdFNlZ21l
bnRJbmRleDsKLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OwogfTsKIAotaW5saW5lIFVD
aGFyIEZsb3dDb250ZW50czo6Y2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Ci17
Ci0gICAgYXV0byYgc2VnbWVudCA9IHNlZ21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAg
cmV0dXJuIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnRdOwotfQotCi1pbmxp
bmUgYm9vbCBGbG93Q29udGVudHM6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dAotewotICAgIGlmIChpc0VuZChwb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyQXQocG9zaXRpb24p
ID09ICdcbic7Ci19Ci0KLWlubGluZSBib29sIEZsb3dDb250ZW50czo6aXNFbmQodW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBvc2l0aW9uID49IGxlbmd0aCgpOwotfQot
CiBpbmxpbmUgdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhGb3JQb3NpdGlvbih1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoIWlzRW5kKHBvc2l0aW9uKSk7
CiAgICAgYXV0byYgbGFzdFNlZ21lbnQgPSBtX3NlZ21lbnRzW21fbGFzdFNlZ21lbnRJbmRleF07
CiAgICAgaWYgKGxhc3RTZWdtZW50LnN0YXJ0IDw9IHBvc2l0aW9uICYmIHBvc2l0aW9uIDwgbGFz
dFNlZ21lbnQuZW5kKQogICAgICAgICByZXR1cm4gbV9sYXN0U2VnbWVudEluZGV4OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHNJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjU4YjU5MTEyNzUyZWM5OTQw
NjMyZWY3Y2NlNWM1MDg4MDk5YmE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAKQEAgLTAs
MCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewor
CitGbG93Q29udGVudHNJdGVyYXRvcjo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKKyAgICA6IGZvbnQoc3R5bGUuZm9udENhc2NhZGUoKSkKKyAgICAsIHRleHRBbGlnbihz
dHlsZS50ZXh0QWxpZ24oKSkKKyAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSkKKyAgICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xp
bmUoKSkKKyAgICAsIHdyYXBMaW5lcyhzdHlsZS5hdXRvV3JhcCgpKQorICAgICwgYnJlYWtXb3Jk
T25PdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1dyYXAoKSA9PSBCcmVha092ZXJmbG93V3JhcCAmJiAo
d3JhcExpbmVzIHx8IHByZXNlcnZlTmV3bGluZSkpCisgICAgLCBzcGFjZVdpZHRoKGZvbnQud2lk
dGgoVGV4dFJ1bigmc3BhY2UsIDEpKSkKKyAgICAsIHRhYldpZHRoKGNvbGxhcHNlV2hpdGVzcGFj
ZSA/IDAgOiBzdHlsZS50YWJTaXplKCkpCisgICAgLCBsb2NhbGUoc3R5bGUubG9jYWxlKCkpCit7
Cit9CisKK0Zsb3dDb250ZW50c0l0ZXJhdG9yOjpGbG93Q29udGVudHNJdGVyYXRvcihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCisgICAgOiBtX2Zsb3dDb250ZW50cyhmbG93KQorICAgICwg
bV9saW5lQnJlYWtJdGVyYXRvcigoKm1fZmxvd0NvbnRlbnRzLmJlZ2luKCkpLnRleHQsIGZsb3cu
c3R5bGUoKS5sb2NhbGUoKSkKKyAgICAsIG1fc3R5bGUoZmxvdy5zdHlsZSgpKQoreworfQorCitG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpu
ZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbikKK3sKKyAgICAvLyBBIGZyYWdtZW50IGNh
biBlaXRoZXIgYmUKKyAgICAvLyAxLiBuZXcgbGluZSBjaGFyYWN0ZXIgd2hlbiBwcmVzZXJ2ZU5l
d2xpbmUgaXMgb24gKG5vdCBjb25zaWRlcmVkIGFzIHdoaXRlc3BhY2UpIG9yCisgICAgLy8gMi4g
d2hpdGVzcGFjZSAoY29sbGFzcGVkLCBub24tY29sbGFwc2VkIG11bHRpIG9yIHNpbmdsZSkgb3IK
KyAgICAvLyAzLiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorICAgIC8vIDQuIGVtcHR5LCBp
bmRpY2F0aW5nIGNvbnRlbnQgZW5kLgorICAgIFRleHRGcmFnbWVudCBmcmFnbWVudDsKKyAgICBm
cmFnbWVudC5zdGFydCA9IG1fcG9zaXRpb247CisgICAgaWYgKGlzRW5kKGZyYWdtZW50LnN0YXJ0
KSkgeworICAgICAgICBmcmFnbWVudC5lbmQgPSBmcmFnbWVudC5zdGFydDsKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAoaXNMaW5lQnJlYWsoZnJhZ21lbnQuc3RhcnQp
KSB7CisgICAgICAgIGZyYWdtZW50LnR5cGUgPSBUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhazsKKyAg
ICAgICAgZnJhZ21lbnQuZW5kID0gZnJhZ21lbnQuc3RhcnQgKyAxOworICAgICAgICBtX3Bvc2l0
aW9uID0gZnJhZ21lbnQuZW5kOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorCisg
ICAgdW5zaWduZWQgc3BhY2VDb3VudCA9IDA7CisgICAgdW5zaWduZWQgd2hpdGVzcGFjZUVuZCA9
IGZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGZyYWdtZW50LnN0YXJ0LCBzcGFjZUNvdW50
KTsKKyAgICBBU1NFUlQoZnJhZ21lbnQuc3RhcnQgPD0gd2hpdGVzcGFjZUVuZCk7CisgICAgaWYg
KGZyYWdtZW50LnN0YXJ0ICE9IHdoaXRlc3BhY2VFbmQpIHsKKyAgICAgICAgZnJhZ21lbnQudHlw
ZSA9IFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZTsKKyAgICAgICAgZnJhZ21lbnQuZW5kID0gd2hp
dGVzcGFjZUVuZDsKKyAgICAgICAgYm9vbCBtdWx0aXBsZVdoaXRlc3BhY2UgPSBmcmFnbWVudC5z
dGFydCArIDEgPCBmcmFnbWVudC5lbmQ7CisgICAgICAgIGZyYWdtZW50LmlzQ29sbGFwc2VkID0g
bXVsdGlwbGVXaGl0ZXNwYWNlICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOworICAgICAg
ICBmcmFnbWVudC5pc0JyZWFrYWJsZSA9ICFmcmFnbWVudC5pc0NvbGxhcHNlZCAmJiBtdWx0aXBs
ZVdoaXRlc3BhY2U7CisgICAgICAgIGlmIChmcmFnbWVudC5pc0NvbGxhcHNlZCkKKyAgICAgICAg
ICAgIGZyYWdtZW50LndpZHRoID0gbV9zdHlsZS5zcGFjZVdpZHRoOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50TGVuZ3RoID0gZnJhZ21lbnQuZW5kIC0gZnJh
Z21lbnQuc3RhcnQ7CisgICAgICAgICAgICBpZiAoZnJhZ21lbnRMZW5ndGggPT0gc3BhY2VDb3Vu
dCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudC53aWR0aCA9IGZyYWdtZW50TGVuZ3RoICogbV9z
dHlsZS5zcGFjZVdpZHRoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyYWdt
ZW50LndpZHRoID0gdGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3Np
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZDsKKyAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKworICAgIGZyYWdtZW50LnR5cGUgPSBUZXh0
RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2U7CisgICAgZnJhZ21lbnQuaXNCcmVha2FibGUgPSBtX3N0
eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3c7CisgICAgZnJhZ21lbnQuZW5kID0gZmluZE5leHRCcmVh
a2FibGVQb3NpdGlvbihmcmFnbWVudC5zdGFydCArIDEpOworICAgIGZyYWdtZW50LndpZHRoID0g
dGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3NpdGlvbik7CisgICAg
bV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZDsKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKK2Zs
b2F0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKK3sKKyAgICBjb25zdCBhdXRvJiBmcm9tU2Vn
bWVudCA9IG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlvbihmcm9tKTsKKyAgICBpZiAo
KG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSAmJiBmcm9tU2VnbWVudC5lbmQgPj0gdG8pIHx8
IChmcm9tID09IGZyb21TZWdtZW50LnN0YXJ0ICYmIHRvID09IGZyb21TZWdtZW50LmVuZCkpCisg
ICAgICAgIHJldHVybiBmcm9tU2VnbWVudC5yZW5kZXJlci53aWR0aChmcm9tIC0gZnJvbVNlZ21l
bnQuc3RhcnQsIHRvIC0gZnJvbSwgbV9zdHlsZS5mb250LCB4UG9zaXRpb24sIG51bGxwdHIsIG51
bGxwdHIpOworCisgICAgY29uc3QgYXV0byogc2VnbWVudCA9ICZmcm9tU2VnbWVudDsKKyAgICBm
bG9hdCB0ZXh0V2lkdGggPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBmcmFnbWVudEVuZCA9IHN0ZDo6bWluKHRvLCBzZWdtZW50
LT5lbmQpOworICAgICAgICB0ZXh0V2lkdGggKz0gc2VnbWVudC0+dGV4dC5pczhCaXQoKSA/IHJ1
bldpZHRoPExDaGFyPihzZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdt
ZW50RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCkgOgorICAgICAg
ICAgICAgcnVuV2lkdGg8VUNoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFy
dCwgZnJhZ21lbnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKTsK
KyAgICAgICAgaWYgKGZyYWdtZW50RW5kID09IHRvKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGZyb20gPSBmcmFnbWVudEVuZDsKKyAgICAgICAgc2VnbWVudCA9ICZtX2Zsb3dDb250ZW50
cy5zZWdtZW50Rm9yUG9zaXRpb24oZnJhZ21lbnRFbmQpOworICAgIH07CisKKyAgICByZXR1cm4g
dGV4dFdpZHRoOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRp
YyB1bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24oTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBs
aW5lQnJlYWtJdGVyYXRvciwgY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCB1
bnNpZ25lZCBwb3NpdGlvbikKK3sKKyAgICBjb25zdCBhdXRvKiBjaGFyYWN0ZXJzID0gc2VnbWVu
dC50ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICB1bnNpZ25lZCBzZWdtZW50
TGVuZ3RoID0gc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0OworICAgIHVuc2lnbmVkIHNlZ21l
bnRQb3NpdGlvbiA9IHBvc2l0aW9uIC0gc2VnbWVudC5zdGFydDsKKyAgICByZXR1cm4gbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uTm9uTG9vc2VseTxDaGFyYWN0ZXJUeXBlLCBOQlNQQmVoYXZpb3I6Okln
bm9yZU5CU1A+KGxpbmVCcmVha0l0ZXJhdG9yLCBjaGFyYWN0ZXJzLCBzZWdtZW50TGVuZ3RoLCBz
ZWdtZW50UG9zaXRpb24pOworfQorCit1bnNpZ25lZCBGbG93Q29udGVudHNJdGVyYXRvcjo6Zmlu
ZE5leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICB3
aGlsZSAoIWlzRW5kKHBvc2l0aW9uKSkgeworICAgICAgICBhdXRvJiBzZWdtZW50ID0gbV9mbG93
Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHNlZ21l
bnQudGV4dC5pbXBsKCkgIT0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmcoKS5pbXBsKCkpIHsK
KyAgICAgICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0ID4gMCA/IGNo
YXJhY3RlckF0KHNlZ21lbnQuc3RhcnQgLSAxKSA6IDA7CisgICAgICAgICAgICBVQ2hhciBzZWNv
bmRUb0xhc3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0ID4gMSA/IGNoYXJhY3RlckF0KHNlZ21l
bnQuc3RhcnQgLSAyKSA6IDA7CisgICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnNldFBy
aW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihz
ZWdtZW50LnRleHQsIG1fc3R5bGUubG9jYWxlLCBMaW5lQnJlYWtJdGVyYXRvck1vZGVVQVgxNCk7
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBicmVha2FibGUgPSBzZWdtZW50LnRleHQu
aXM4Qml0KCkgPyBuZXh0QnJlYWthYmxlUG9zaXRpb248TENoYXI+KG1fbGluZUJyZWFrSXRlcmF0
b3IsIHNlZ21lbnQsIHBvc2l0aW9uKSA6IG5leHRCcmVha2FibGVQb3NpdGlvbjxVQ2hhcj4obV9s
aW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudCwgcG9zaXRpb24pOworICAgICAgICBwb3NpdGlvbiA9
IHNlZ21lbnQuc3RhcnQgKyBicmVha2FibGU7CisgICAgICAgIGlmIChwb3NpdGlvbiA8IHNlZ21l
bnQuZW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBwb3NpdGlvbjsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBmaW5k
TmV4dE5vbldoaXRlc3BhY2UoY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCBj
b25zdCBGbG93Q29udGVudHNJdGVyYXRvcjo6U3R5bGUmIHN0eWxlLCB1bnNpZ25lZCYgcG9zaXRp
b24sIHVuc2lnbmVkJiBzcGFjZUNvdW50KQoreworICAgIGNvbnN0IGF1dG8qIHRleHQgPSBzZWdt
ZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIGZvciAoOyBwb3NpdGlv
biA8IHNlZ21lbnQuZW5kOyArK3Bvc2l0aW9uKSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0g
dGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnRdOworICAgICAgICBib29sIGlzU3BhY2UgPSBj
aGFyYWN0ZXIgPT0gJyAnOworICAgICAgICBib29sIGlzV2hpdGVzcGFjZSA9IGlzU3BhY2UgfHwg
Y2hhcmFjdGVyID09ICdcdCcgfHwgKCFzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVy
ID09ICdcbicpOworICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoaXNTcGFjZSkKKyAgICAgICAgICAgICsrc3BhY2VDb3VudDsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNpZ25lZCBGbG93Q29udGVudHNJdGVy
YXRvcjo6ZmluZE5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24sIHVu
c2lnbmVkJiBzcGFjZUNvdW50KSBjb25zdAoreworICAgIEZsb3dDb250ZW50czo6SXRlcmF0b3Ig
aXQobV9mbG93Q29udGVudHMsIG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRJbmRleEZvclBvc2l0aW9u
KHBvc2l0aW9uKSk7CisgICAgZm9yIChhdXRvIGVuZCA9IG1fZmxvd0NvbnRlbnRzLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYm9vbCBmb3VuZE5vbldoaXRlc3BhY2UgPSAoKml0
KS50ZXh0LmlzOEJpdCgpID8gZmluZE5leHROb25XaGl0ZXNwYWNlPExDaGFyPigqaXQsIG1fc3R5
bGUsIHBvc2l0aW9uLCBzcGFjZUNvdW50KSA6IGZpbmROZXh0Tm9uV2hpdGVzcGFjZTxVQ2hhcj4o
Kml0LCBtX3N0eWxlLCBwb3NpdGlvbiwgc3BhY2VDb3VudCk7CisgICAgICAgIGlmIChmb3VuZE5v
bldoaXRlc3BhY2UpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Zsb2F0IEZsb3dD
b250ZW50c0l0ZXJhdG9yOjpydW5XaWR0aChjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKGZy
b20gPCB0byk7CisgICAgYm9vbCBtZWFzdXJlV2l0aEVuZFNwYWNlID0gbV9zdHlsZS5jb2xsYXBz
ZVdoaXRlc3BhY2UgJiYgdG8gPCB0ZXh0Lmxlbmd0aCgpICYmIHRleHRbdG9dID09ICcgJzsKKyAg
ICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKKyAgICAgICAgKyt0bzsKKyAgICBUZXh0UnVuIHJ1
bih0ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKSArIGZyb20sIHRvIC0gZnJvbSk7Cisg
ICAgcnVuLnNldFhQb3MoeFBvc2l0aW9uKTsKKyAgICBydW4uc2V0VGFiU2l6ZSghIW1fc3R5bGUu
dGFiV2lkdGgsIG1fc3R5bGUudGFiV2lkdGgpOworICAgIGZsb2F0IHdpZHRoID0gbV9zdHlsZS5m
b250LndpZHRoKHJ1bik7CisgICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCisgICAgICAgIHdp
ZHRoIC09IG1fc3R5bGUuc3BhY2VXaWR0aDsKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK30KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q0Yzg1ZjhkZGFjZjNm
NmVlNTUzOGEyNWU1NGNhNWFlMzUxYjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oCkBAIC0w
LDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzSXRlcmF0b3JfaAorI2RlZmluZSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRl
cmF0b3JfaAorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNp
bmNsdWRlICJicmVha19saW5lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZW5k
ZXJCbG9ja0Zsb3c7CisKK25hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKKworY2xhc3MgRmxv
d0NvbnRlbnRzSXRlcmF0b3IgIHsKK3B1YmxpYzoKKyAgICBGbG93Q29udGVudHNJdGVyYXRvcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKKworICAgIHN0cnVjdCBUZXh0RnJhZ21lbnQgeworICAg
ICAgICBUZXh0RnJhZ21lbnQoKSA9IGRlZmF1bHQ7CisgICAgICAgIFRleHRGcmFnbWVudCh1bnNp
Z25lZCB0ZXh0U3RhcnQsIHVuc2lnbmVkIHRleHRFbmQsIGZsb2F0IHRleHRXaWR0aCwgYm9vbCBp
c1doaXRlc3BhY2VPbmx5KQorICAgICAgICAgICAgOiBzdGFydCh0ZXh0U3RhcnQpCisgICAgICAg
ICAgICAsIGVuZCh0ZXh0RW5kKQorICAgICAgICAgICAgLCB0eXBlKGlzV2hpdGVzcGFjZU9ubHkg
PyBXaGl0ZXNwYWNlIDogTm9uV2hpdGVzcGFjZSkKKyAgICAgICAgICAgICwgd2lkdGgodGV4dFdp
ZHRoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhcnQgPT0gZW5kOworICAgICAgICB9
CisKKyAgICAgICAgZW51bSBUeXBlIHsgTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNw
YWNlIH07CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OworICAgICAgICB1bnNpZ25lZCBl
bmQgIHswIH07CisgICAgICAgIFR5cGUgdHlwZSB7IE5vbldoaXRlc3BhY2UgfTsKKyAgICAgICAg
Ym9vbCBpc0NvbGxhcHNlZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNCcmVha2FibGUgeyBm
YWxzZSB9OworICAgICAgICBmbG9hdCB3aWR0aCB7IDAgfTsKKyAgICB9OworICAgIFRleHRGcmFn
bWVudCBuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9IDApOworICAgIGZsb2F0IHRl
eHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25z
dDsKKworICAgIHN0cnVjdCBTdHlsZSB7CisgICAgICAgIGV4cGxpY2l0IFN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlJik7CisKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQ7CisgICAgICAg
IEVUZXh0QWxpZ24gdGV4dEFsaWduOworICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZTsK
KyAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7CisgICAgICAgIGJvb2wgd3JhcExpbmVzOwor
ICAgICAgICBib29sIGJyZWFrV29yZE9uT3ZlcmZsb3c7CisgICAgICAgIGZsb2F0IHNwYWNlV2lk
dGg7CisgICAgICAgIHVuc2lnbmVkIHRhYldpZHRoOworICAgICAgICBBdG9taWNTdHJpbmcgbG9j
YWxlOworICAgIH07CisgICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZTsgfQorICAgIC8vIEZJWE1FOiByZW1vdmUgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5
KCkKKyAgICBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnRGb3JQb3NpdGlvbih1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gbV9mbG93Q29udGVudHMuc2VnbWVudEZv
clBvc2l0aW9uKHBvc2l0aW9uKTsgfTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBmaW5kTmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQmIHNwYWNl
Q291bnQpIGNvbnN0OworICAgIHVuc2lnbmVkIGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24odW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIFVDaGFyIGNoYXJhY3RlckF0KHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdDsKKyAgICBib29sIGlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBj
b25zdDsKKyAgICBib29sIGlzRW5kKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxvYXQgcnVuV2lkdGgoY29uc3QgU3RyaW5n
JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7CisK
KyAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7CisgICAgbXV0YWJsZSBMYXp5TGluZUJy
ZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsKKyAgICBjb25zdCBTdHlsZSBtX3N0eWxl
OworICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07Cit9OworCitpbmxpbmUgVUNoYXIgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OmNoYXJhY3RlckF0KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAor
eworICAgIGF1dG8mIHNlZ21lbnQgPSBtX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24o
cG9zaXRpb24pOworICAgIHJldHVybiBzZWdtZW50LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0
YXJ0XTsKK30KKworaW5saW5lIGJvb2wgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OmlzTGluZUJyZWFr
KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmIChpc0VuZChwb3NpdGlvbikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUg
JiYgY2hhcmFjdGVyQXQocG9zaXRpb24pID09ICdcbic7Cit9CisKK2lubGluZSBib29sIEZsb3dD
b250ZW50c0l0ZXJhdG9yOjppc0VuZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcG9zaXRpb24gPj0gbV9mbG93Q29udGVudHMubGVuZ3RoKCk7Cit9CisKK30KK30KKwor
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245565</attachid>
            <date>2015-01-28 12:38:38 -0800</date>
            <delta_ts>2015-01-28 13:37:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140944-20150128123843.patch</filename>
            <type>text/plain</type>
            <size>54501</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1NTY1YjA4NTgxMTll
Zjg5MzRmNWNmMjZiNzgzODhiMzk1YmJhZC4uNjI3OGU3N2EzZDZkYjlkNWRmNmM4OGFkZDA2YzBj
ZGJkZmM2MjdjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDE1LTAxLTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNb3ZlIEZsb3dDb250ZW50cyBpdGVyYXRvciBpbnRlcmZhY2UgdG8gRmxvd0NvbnRlbnRzSXRl
cmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDA5NDQKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBU
aGlzIHBhdGNoIGNsZWFucyB1cCBGbG93Q29udGVudHMncyBpbnRlcmZhY2UgYnkgbW92aW5nIHRo
ZSBpdGVyYXRvciBmdW5jdGlvbmFsaXR5CisgICAgICAgIHRvIHRoaXMgbmV3IEZsb3dDb250ZW50
c0l0ZXJhdG9yIGNsYXNzLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVTdGF0ZTo6YWRkVW5jb21taXR0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVN0YXRlOjphZGRVbmNvbW1pdHRlZFdo
aXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJlV3JhcCk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpyZW1vdmVUcmFpbGluZ1doaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6c3BsaXRGcmFnbWVu
dFRvRml0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaXJzdEZy
YWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVS
dW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNsb3NlTGluZUVuZGlu
Z0FuZEFkanVzdFJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6c3Bs
aXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OmNyZWF0ZVRleHRSdW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dEZsb3dDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0
OjpGbG93Q29udGVudHM6OkZsb3dDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpGbG93Q29udGVudHM6OlN0eWxlOjpTdHlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6Om5leHRUZXh0RnJhZ21l
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6bmV4dEJy
ZWFrYWJsZVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OkZsb3dDb250ZW50czo6ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaW5kTmV4dE5vbldoaXRlc3Bh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0Nv
bnRlbnRzOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnRleHRXaWR0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6
OnJ1bldpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dEZsb3dDb250ZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxv
d0NvbnRlbnRzOjpJdGVyYXRvcjo6SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6YmVnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjplbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpsZW5ndGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpJdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29u
dGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6OkZsb3dDb250ZW50czo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhGb3JQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVu
dHM6OlRleHRGcmFnbWVudDo6VGV4dEZyYWdtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50Ojppc0VtcHR5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250
ZW50czo6aGFzT25lU2VnbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6Y2hhcmFjdGVyQXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjppc0xp
bmVCcmVhayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpG
bG93Q29udGVudHM6OmlzRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzSXRlcmF0b3I6OlN0eWxl
OjpTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVu
dHNJdGVyYXRvcjo6Rmxvd0NvbnRlbnRzSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzSXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzSXRlcmF0b3I6
OnRleHRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpuZXh0QnJl
YWthYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxv
d0NvbnRlbnRzSXRlcmF0b3I6OmZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6ZmluZE5leHROb25XaGl0ZXNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9yOjpmaW5k
TmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5l
TGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6cnVuV2lkdGgpOgorICAgICAgICAqIHJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6OlRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9y
OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVu
dHNJdGVyYXRvcjo6c2VnbWVudEZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50c0l0ZXJhdG9yOjpjaGFyYWN0ZXJBdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHNJdGVyYXRvcjo6aXNMaW5l
QnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRz
SXRlcmF0b3I6OmlzRW5kKToKKwogMjAxNS0wMS0yOCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRA
YXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgQVNhbiBmbGFnIHNldHRpbmdzIGZyb20gRGVidWdS
ZWxlYXNlLnhjY29uZmlnIHRvIEJhc2UueGNjb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
YWEyN2IwMTU0Yjk4ZDYzMzI2ZTkzMjY1NGVjMDA2NDgwZjYzMzhmYi4uZDRhMGIwNzQ5NmU1NGUw
OGZjMmRhYjY2MWY3ZjQ1ZDhjNGViNmU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIzNTIs
NiArMjM1Miw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvU2Nyb2xsQmVo
YXZpb3IuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCiAgICAgcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCisgICAgcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZ1bmN0aW9ucy5jcHAKICAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJl
c29sdmVyLmNwcAogICAgIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggYWVkMmM4ZTlhMWUx
ZGQ1MzY0YjEzODZjMWVlMmZjOWQ5YmRkNDkwYi4uNTFiZTZjMGM0OTQxOWUzMjE1ODM4MjFhZmJl
OGM3OWQxMDU5MGUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCkBAIC0xMTU4Miw2ICsxMTU4Miw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXQuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xUZXh0UGFp
bnRTdHlsZS5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggODIxZjg1OGJiZjlkMDBlMDdlYWIzYjVm
OWZlZGI2NWJlNjkyNjBiOC4uZmM4MjEwYzE3ODlkZGM5OTRlOGIzZjBhMGZjMjQ4NzA5OTBjZDAw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwpAQCAtNjc3NSw2ICs2Nzc1LDkgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCI+CiAg
ICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHNJdGVyYXRvci5jcHAiPgorICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMwM2E3NWIyY2U2MzQwODQ5MmU0YmFmYzBhMmE4ZWE2
NWYyOTAyOTUuLmU2OTRjZTdlZmFkZWE4NmI5YzNmOTZhOTRlNTlkY2Q1ZDk5MjE5MGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTIwOTYsNiArMjA5Niw4IEBACiAJCTU4MDM3MTYxMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVj
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAz
NzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovOyB9OwogCQk1ODAzNzE2MjFB
NjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTYwMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MDM3
MTY0MUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyog
TGF5ZXJGcmFnbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzSXRlcmF0b3IuaCAqLzsgfTsKKwkJNTgyQ0IwNTUxQTc4QTJCMjAwQUZGQ0M0IC8q
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJDQjA1NDFBNzhBMkIyMDBBRkZDQzQg
LyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJNTg1
RDZERkMxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODVENkRGQjFBMTUz
NTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLzsgfTsKIAkJNTg1
RDZFMDMxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTg1RDZFMDEx
QTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwICovOyB9
OwogCQk1ODVENkUwNDFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTg1
RDZFMDIxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCAq
LzsgfTsKQEAgLTkyMzIsNiArOTIzNCw4IEBACiAJCTU4MDM3MTVGMUE2NkYwMEEwMEJBRjUxOSAv
KiBDbGlwUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGlw
UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MDM3MTYwMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
bGlwUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODAzNzE2MzFBNjZGMUQz
MDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMYXllckZyYWdtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU4MkNC
MDUyMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50c0l0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU4MkNC
MDU0MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxh
eW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0
UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODVENkUwMTFBMUE3
OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg1RDZFMDIxQTFBNzkyRTAwRkE0
RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI2MDQsNiArMjI2MDgsOCBAQAogCQkJCUU0QzkxQTBEMTgw
MjM0MzEwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5oICovLAogCQkJCTM3RkM5NkRBMTEwNEVE
NzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLywKIAkJCQlCQ0Ey
NTcxNDEyOTNDMDEwMDA3QTI2M0QgLyogVmVydGljYWxQb3NpdGlvbkNhY2hlLmggKi8sCisJCQkJ
NTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJ
dGVyYXRvci5oICovLAorCQkJCTU4MkNCMDU0MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSByZW5k
ZXJpbmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjM1NDMsNiArMjM1NDksNyBA
QAogCQkJCTM3OUU2MUNDMTI2Q0E1QzQwMEI2M0U4RCAvKiBCYXNlQ2hlY2thYmxlSW5wdXRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNUUwQzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNo
b29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzM0VF
NUM1MTRGQjQ5NjEwMDAyMDk1QSAvKiBCYXNlQ2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU5Qzk2MDAx
MjU1QjIzRjAwMDYyM0MwIC8qIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjU1QjNEQUUxMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGQkQ2QUY4QTE1RUYyNURGMDA4QjcxMTAgLyogQmFzaWNTaGFw
ZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTUwNiw2ICsyOTUxMyw3IEBACiAJCQkJ
QkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTQ1MzkwNDUwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01hYy5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTU4MkNCMDU1MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1
QjNERDExMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzZGMzZFQTE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDRDBFMEZBMEU5NzJDMzUwMDI2NURFQSAvKiBTZWN1cml0eU9y
aWdpbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcAppbmRleCA2ZGM3MWJiM2Q4YzRhNWQyZTUzNjg0OTljNGJhODdjY2Yz
YTBkYzVmLi5jYjVjMWM2NWZjZjZjZDIyYTE0OWU1OWZlYTM1MzRhNDY1NzY3OTY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBAIC00NCw2ICs0
NCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIgorI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNpbXBsZUxpbmVM
YXlvdXRGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50
U3R5bGUuaCIKQEAgLTI0Nyw3ICsyNDgsNyBAQCBzdHJ1Y3QgTGluZVN0YXRlIHsKICAgICAgICAg
bV9uZXdVbmNvbW1pdHRlZFNlZ21lbnQgPSB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgYWRkVW5j
b21taXR0ZWQoY29uc3QgRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQorICAg
IHZvaWQgYWRkVW5jb21taXR0ZWQoY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFn
bWVudCYgZnJhZ21lbnQpCiAgICAgewogICAgICAgICAvLyBTdGFydCBhIG5ldyB1bmNvbW1pdHRl
ZCBzZWdtZW50LgogICAgICAgICBpZiAobV9uZXdVbmNvbW1pdHRlZFNlZ21lbnQpIHsKQEAgLTI1
NiwxMyArMjU3LDEzIEBAIHN0cnVjdCBMaW5lU3RhdGUgewogICAgICAgICB9CiAgICAgICAgIHVu
Y29tbWl0dGVkV2lkdGggKz0gZnJhZ21lbnQud2lkdGg7CiAgICAgICAgIHVuY29tbWl0dGVkRW5k
ID0gZnJhZ21lbnQuZW5kOwotICAgICAgICB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0ZXNwYWNlV2lk
dGggPSBmcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50OjpXaGl0ZXNw
YWNlID8gZnJhZ21lbnQud2lkdGggOiAwOwotICAgICAgICB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0
ZXNwYWNlTGVuZ3RoID0gZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHM6OlRleHRGcmFnbWVu
dDo6V2hpdGVzcGFjZSA/IGZyYWdtZW50LmVuZCAtIGZyYWdtZW50LnN0YXJ0ICA6IDA7CisgICAg
ICAgIHVuY29taXR0ZWRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IGZyYWdtZW50LnR5cGUgPT0g
Rmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSA/IGZyYWdtZW50
LndpZHRoIDogMDsKKyAgICAgICAgdW5jb21pdHRlZFRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aCA9
IGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hp
dGVzcGFjZSA/IGZyYWdtZW50LmVuZCAtIGZyYWdtZW50LnN0YXJ0ICA6IDA7CiAgICAgfQogCiAg
ICAgdm9pZCBhZGRVbmNvbW1pdHRlZFdoaXRlc3BhY2UoZmxvYXQgd2hpdGVzcGFjZVdpZHRoKQog
ICAgIHsKLSAgICAgICAgYWRkVW5jb21taXR0ZWQoRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQo
dW5jb21taXR0ZWRFbmQsIHVuY29tbWl0dGVkRW5kICsgMSwgd2hpdGVzcGFjZVdpZHRoLCB0cnVl
KSk7CisgICAgICAgIGFkZFVuY29tbWl0dGVkKEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQodW5jb21taXR0ZWRFbmQsIHVuY29tbWl0dGVkRW5kICsgMSwgd2hpdGVzcGFjZVdpZHRo
LCB0cnVlKSk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNXaGl0ZXNwYWNlT25seSgpIGNvbnN0CkBA
IC0zMDEsMjUgKzMwMiwyNSBAQCBzdHJ1Y3QgTGluZVN0YXRlIHsKICAgICBib29sIG1fZmlyc3RD
aGFyYWN0ZXJGaXRzIHsgZmFsc2UgfTsKICAgICBib29sIG1fbmV3VW5jb21taXR0ZWRTZWdtZW50
IHsgdHJ1ZSB9OwogCi0gICAgRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQgb3ZlcmZsb3dlZEZy
YWdtZW50OworICAgIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgb3ZlcmZsb3dl
ZEZyYWdtZW50OwogCiBwcml2YXRlOgogICAgIGZsb2F0IHVuY29taXR0ZWRUcmFpbGluZ1doaXRl
c3BhY2VXaWR0aCB7IDAgfTsKICAgICB1bnNpZ25lZCB1bmNvbWl0dGVkVHJhaWxpbmdXaGl0ZXNw
YWNlTGVuZ3RoIHsgMCB9OwogfTsKIAotc3RhdGljIGJvb2wgcHJlV3JhcChjb25zdCBGbG93Q29u
dGVudHM6OlN0eWxlJiBzdHlsZSkKK3N0YXRpYyBib29sIHByZVdyYXAoY29uc3QgRmxvd0NvbnRl
bnRzSXRlcmF0b3I6OlN0eWxlJiBzdHlsZSkKIHsKICAgICByZXR1cm4gc3R5bGUud3JhcExpbmVz
ICYmICFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7CiB9CiAgICAgCi1zdGF0aWMgdm9pZCByZW1v
dmVUcmFpbGluZ1doaXRlc3BhY2UoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVj
dG9yJiBsaW5lUnVucywgY29uc3QgRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMpCitzdGF0aWMg
dm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91
dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dD
b250ZW50c0l0ZXJhdG9yKQogewogICAgIGlmICghbGluZVN0YXRlLmNvbW1pdHRlZFRyYWlsaW5n
V2hpdGVzcGFjZUxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFJlbW92ZSBj
b2xsYXBzZWQgd2hpdGVzcGFjZSwgb3Igbm9uLWNvbGxhcHNlZCBwcmUtd3JhcCB3aGl0ZXNwYWNl
LCB1bmxlc3MgaXQncyB0aGUgb25seSBjb250ZW50IG9uIHRoZSBsaW5lIC1zbyByZW1vdmluZyB0
aGUgd2hpdGVzYXBjZSB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUuCi0gICAgY29uc3QgYXV0
byYgc3R5bGUgPSBmbG93Q29udGVudHMuc3R5bGUoKTsKKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9
IGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCk7CiAgICAgYm9vbCBjb2xsYXBzZVdoaXRlc3Bh
Y2UgPSBzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfCBwcmVXcmFwKHN0eWxlKTsKICAgICBpZiAo
IWNvbGxhcHNlV2hpdGVzcGFjZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ1LDE0ICszNDYsMTQg
QEAgc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFpbnMoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBmbG93LCBmbG9hdCYgYXZhaWxhYmxlV2kKICAgICBhdmFpbGFibGVXaWR0aCA9IHN0ZDo6bWF4
PGZsb2F0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXQgLSBsb2dpY2FsTGVmdE9mZnNldCk7CiB9CiAK
LXN0YXRpYyBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5l
KEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0IGF2YWls
YWJsZVdpZHRoLCBib29sIGtlZXBBdExlYXN0T25lQ2hhcmFjdGVyLCBjb25zdCBGbG93Q29udGVu
dHMmIGZsb3dDb250ZW50cykKK3N0YXRpYyBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFn
bWVudCYgZnJhZ21lbnRUb1NwbGl0LCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBrZWVwQXRM
ZWFzdE9uZUNoYXJhY3RlciwgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50
c0l0ZXJhdG9yKQogewogICAgIC8vIEZhc3QgcGF0aCBmb3Igc2luZ2xlIGNoYXIgZnJhZ21lbnRz
LgogICAgIGlmIChmcmFnbWVudFRvU3BsaXQuc3RhcnQgKyAxID09IGZyYWdtZW50VG9TcGxpdC5l
bmQpIHsKICAgICAgICAgaWYgKGtlZXBBdExlYXN0T25lQ2hhcmFjdGVyKQotICAgICAgICAgICAg
cmV0dXJuIEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50KCk7CisgICAgICAgICAgICByZXR1cm4g
Rmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCgpOwogCi0gICAgICAgIEZsb3dDb250
ZW50czo6VGV4dEZyYWdtZW50IGZyYWdtZW50Rm9yTmV4dExpbmUoZnJhZ21lbnRUb1NwbGl0KTsK
KyAgICAgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBmcmFnbWVudEZvck5l
eHRMaW5lKGZyYWdtZW50VG9TcGxpdCk7CiAgICAgICAgIGZyYWdtZW50VG9TcGxpdC5lbmQgPSBm
cmFnbWVudFRvU3BsaXQuc3RhcnQ7CiAgICAgICAgIGZyYWdtZW50VG9TcGxpdC53aWR0aCA9IDA7
CiAgICAgICAgIHJldHVybiBmcmFnbWVudEZvck5leHRMaW5lOwpAQCAtMzY0LDcgKzM2NSw3IEBA
IHN0YXRpYyBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5l
KEZsb3dDb250ZW50czo6VGV4dEZyYWdtCiAgICAgZmxvYXQgd2lkdGggPSAwOwogICAgIHdoaWxl
IChsZWZ0IDwgcmlnaHQpIHsKICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gKGxlZnQgKyByaWdo
dCkgLyAyOwotICAgICAgICB3aWR0aCA9IGZsb3dDb250ZW50cy50ZXh0V2lkdGgoZnJhZ21lbnRU
b1NwbGl0LnN0YXJ0LCBtaWRkbGUgKyAxLCAwKTsKKyAgICAgICAgd2lkdGggPSBmbG93Q29udGVu
dHNJdGVyYXRvci50ZXh0V2lkdGgoZnJhZ21lbnRUb1NwbGl0LnN0YXJ0LCBtaWRkbGUgKyAxLCAw
KTsKICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoID4gd2lkdGgpCiAgICAgICAgICAgICBsZWZ0
ID0gbWlkZGxlICsgMTsKICAgICAgICAgZWxzZSBpZiAoYXZhaWxhYmxlV2lkdGggPCB3aWR0aCkK
QEAgLTM3Nyw0OCArMzc4LDQ4IEBAIHN0YXRpYyBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudCBz
cGxpdEZyYWdtZW50VG9GaXRMaW5lKEZsb3dDb250ZW50czo6VGV4dEZyYWdtCiAKICAgICBpZiAo
a2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIgJiYgcmlnaHQgPT0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0
KQogICAgICAgICArK3JpZ2h0OwotICAgIEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50IGZyYWdt
ZW50Rm9yTmV4dExpbmUoZnJhZ21lbnRUb1NwbGl0KTsKKyAgICBGbG93Q29udGVudHNJdGVyYXRv
cjo6VGV4dEZyYWdtZW50IGZyYWdtZW50Rm9yTmV4dExpbmUoZnJhZ21lbnRUb1NwbGl0KTsKICAg
ICBmcmFnbWVudFRvU3BsaXQuZW5kID0gcmlnaHQ7Ci0gICAgZnJhZ21lbnRUb1NwbGl0LndpZHRo
ID0gZnJhZ21lbnRUb1NwbGl0LmlzRW1wdHkoKSA/IDAgOiBmbG93Q29udGVudHMudGV4dFdpZHRo
KGZyYWdtZW50VG9TcGxpdC5zdGFydCwgZnJhZ21lbnRUb1NwbGl0LmVuZCwgMCk7CisgICAgZnJh
Z21lbnRUb1NwbGl0LndpZHRoID0gZnJhZ21lbnRUb1NwbGl0LmlzRW1wdHkoKSA/IDAgOiBmbG93
Q29udGVudHNJdGVyYXRvci50ZXh0V2lkdGgoZnJhZ21lbnRUb1NwbGl0LnN0YXJ0LCBmcmFnbWVu
dFRvU3BsaXQuZW5kLCAwKTsKIAogICAgIGZyYWdtZW50Rm9yTmV4dExpbmUuc3RhcnQgPSBmcmFn
bWVudFRvU3BsaXQuZW5kOwogICAgIGZyYWdtZW50Rm9yTmV4dExpbmUud2lkdGggLT0gZnJhZ21l
bnRUb1NwbGl0LndpZHRoOwogICAgIHJldHVybiBmcmFnbWVudEZvck5leHRMaW5lOwogfQogCi1z
dGF0aWMgRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudChGbG93Q29udGVu
dHMmIGZsb3dDb250ZW50cywgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUpCitzdGF0aWMg
Rmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBmaXJzdEZyYWdtZW50KEZsb3dDb250
ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvciwgY29uc3QgTGluZVN0YXRlJiBwcmV2
aW91c0xpbmUpCiB7CiAgICAgLy8gSGFuZGxlIG92ZXJmbG93ZWQgZnJhZ21lbnQgZnJvbSBwcmV2
aW91cyBsaW5lLgotICAgIEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21lbnQg
PSBwcmV2aW91c0xpbmUub3ZlcmZsb3dlZEZyYWdtZW50OwotICAgIGNvbnN0IGF1dG8mIHN0eWxl
ID0gZmxvd0NvbnRlbnRzLnN0eWxlKCk7CisgICAgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRG
cmFnbWVudCBmaXJzdEZyYWdtZW50ID0gcHJldmlvdXNMaW5lLm92ZXJmbG93ZWRGcmFnbWVudDsK
KyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0eWxlKCk7CiAK
ICAgICBpZiAoZmlyc3RGcmFnbWVudC5pc0VtcHR5KCkpCi0gICAgICAgIGZpcnN0RnJhZ21lbnQg
PSBmbG93Q29udGVudHMubmV4dFRleHRGcmFnbWVudCgpOworICAgICAgICBmaXJzdEZyYWdtZW50
ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwogICAgIGVsc2Ugewog
ICAgICAgICAvLyBTcGVjaWFsIG92ZXJmbG93IHByZS13cmFwIHdoaXRlc3BhY2UgaGFuZGxpbmc6
IGlnbm9yZSB0aGUgb3ZlcmZsb3dlZCB3aGl0ZXNwYWNlIGlmIHdlIG1hbmFnZWQgdG8gZml0IGF0
IGxlYXN0IG9uZSBjaGFyYWN0ZXIgb24gdGhlIHByZXZpb3VzIGxpbmUuCiAgICAgICAgIC8vIFdo
ZW4gdGhlIGxpbmUgaXMgdG9vIHNob3J0IHRvIGZpdCBvbmUgY2hhcmFjdGVyICh0aG91Z2h0IGl0
IHN0aWxsIHN0YXlzIG9uIHRoZSBsaW5lKSB3ZSBjb250aW51ZSB3aXRoIHRoZSBvdmVyZmxvdyB3
aGl0ZXNwYWNlIGNvbnRlbnQgb24gdGhpcyBsaW5lLgotICAgICAgICBpZiAoZmlyc3RGcmFnbWVu
dC50eXBlID09IEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlICYmIHByZVdy
YXAoc3R5bGUpICYmIHByZXZpb3VzTGluZS5tX2ZpcnN0Q2hhcmFjdGVyRml0cykgewotICAgICAg
ICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50cy5uZXh0VGV4dEZyYWdtZW50KCk7Cisg
ICAgICAgIGlmIChmaXJzdEZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6V2hpdGVzcGFjZSAmJiBwcmVXcmFwKHN0eWxlKSAmJiBwcmV2aW91c0xpbmUu
bV9maXJzdENoYXJhY3RlckZpdHMpIHsKKyAgICAgICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93
Q29udGVudHNJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7CiAgICAgICAgICAgICAvLyBJZiBz
a2lwcGluZyB0aGUgd2hpdGVzcGFjZSBwdXRzIHVzIG9uIGEgaGFyZCBuZXdsaW5lLCBza2lwIHRo
ZSBuZXdsaW5lIHRvbyBhcyB3ZSBhbHJlYWR5IHdyYXBwZWQgdGhlIGxpbmUuCi0gICAgICAgICAg
ICBpZiAoZmlyc3RGcmFnbWVudC50eXBlID09IEZsb3dDb250ZW50czo6VGV4dEZyYWdtZW50OjpM
aW5lQnJlYWspCi0gICAgICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50cy5u
ZXh0VGV4dEZyYWdtZW50KCk7CisgICAgICAgICAgICBpZiAoZmlyc3RGcmFnbWVudC50eXBlID09
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykKKyAgICAgICAg
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBz
a2lwIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgaWYgKHN0eWxlLmNvbGxhcHNlV2hpdGVz
cGFjZSAmJiBmaXJzdEZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzOjpUZXh0RnJhZ21lbnQ6
OldoaXRlc3BhY2UpCi0gICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHMubmV4dFRl
eHRGcmFnbWVudCgpOworICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgZmlyc3RG
cmFnbWVudC50eXBlID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRl
c3BhY2UpCisgICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHNJdGVyYXRvci5uZXh0
VGV4dEZyYWdtZW50KCk7CiAgICAgcmV0dXJuIGZpcnN0RnJhZ21lbnQ7CiB9CiAKLXN0YXRpYyBi
b29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2
aW91c0xpbmUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgRmxvd0NvbnRlbnRzJiBmbG93
Q29udGVudHMpCitzdGF0aWMgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmUsIGNv
bnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMs
IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKIHsKLSAgICBjb25z
dCBhdXRvJiBzdHlsZSA9IGZsb3dDb250ZW50cy5zdHlsZSgpOworICAgIGNvbnN0IGF1dG8mIHN0
eWxlID0gZmxvd0NvbnRlbnRzSXRlcmF0b3Iuc3R5bGUoKTsKICAgICBib29sIGxpbmVDYW5CZVdy
YXBwZWQgPSBzdHlsZS53cmFwTGluZXMgfHwgc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdzsKLSAg
ICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudChmbG93Q29udGVudHMsIHByZXZpb3VzTGlu
ZSk7CisgICAgYXV0byBmcmFnbWVudCA9IGZpcnN0RnJhZ21lbnQoZmxvd0NvbnRlbnRzSXRlcmF0
b3IsIHByZXZpb3VzTGluZSk7CiAgICAgd2hpbGUgKCFmcmFnbWVudC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gSGFyZCBsaW5lYnJlYWsuCi0gICAgICAgIGlmIChmcmFnbWVudC50eXBlID09IEZs
b3dDb250ZW50czo6VGV4dEZyYWdtZW50OjpMaW5lQnJlYWspIHsKKyAgICAgICAgaWYgKGZyYWdt
ZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6TGluZUJyZWFr
KSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBsaW5lIGZyYWdtZW50IG9ubHkgaWYgdGhl
cmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAob3RoZXJ3aXNlIHRoZSBleHRyYSBuZXcgbGluZSBj
aGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50LikKICAgICAg
ICAgICAgIGlmICghbGluZS53aWR0aCgpKQogICAgICAgICAgICAgICAgIGxpbmUuYWRkVW5jb21t
aXR0ZWQoZnJhZ21lbnQpOwpAQCAtNDMyLDEwICs0MzMsMTAgQEAgc3RhdGljIGJvb2wgY3JlYXRl
TGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwg
TGF5b3UKICAgICAgICAgICAgIC8vIDQuIE5vbi13aGl0ZXNwYWNlIGZyYWdtZW50IHdoZW4gdGhl
cmUncyBhbHJlYWR5IGFub3RoZXIgZnJhZ21lbnQgb24gdGhlIGxpbmUgZ2V0cyBwdXNoZWQgdG8g
dGhlIG5leHQgbGluZS4KICAgICAgICAgICAgIGJvb2wgZW1wdHlMaW5lID0gIWxpbmUud2lkdGgo
KTsKICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21lbnQuCi0gICAgICAgICAgICBpZiAo
ZnJhZ21lbnQudHlwZSA9PSBGbG93Q29udGVudHM6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkg
eworICAgICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6
OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgIGlmICghc3R5bGUu
Y29sbGFwc2VXaGl0ZXNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBm
cmFnbWVudDsgKG1vZGlmaWVkKWZyYWdtZW50IHN0YXlzIG9uIHRoaXMgbGluZSwgb3ZlcmZsb3dl
ZEZyYWdtZW50IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIGxp
bmUub3ZlcmZsb3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwg
bGluZS5hdmFpbGFibGVXaWR0aCAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVu
dHMpOworICAgICAgICAgICAgICAgICAgICBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCA9IHNwbGl0
RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGggLSBsaW5lLndp
ZHRoKCksIGVtcHR5TGluZSwgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwogICAgICAgICAgICAgICAg
ICAgICBsaW5lLmFkZFVuY29tbWl0dGVkKGZyYWdtZW50KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgLy8gV2hlbiB3aGl0ZXNwYWNlIGNvbGxhcHNlIGlzIG9uLCB3aGl0ZXNw
YWNlIHRoYXQgZG9lc24ndCBmaXQgaXMgc2ltcGx5IHNraXBwZWQuCkBAIC00NDQsNyArNDQ1LDcg
QEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5l
U3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UKICAgICAgICAgICAgIC8vIE5vbi13aGl0ZXNwYWNl
IGZyYWdtZW50LiAoIXN0eWxlLndyYXBMaW5lczogYnVnMTM4MTAyKHByZXNlcnZlIGV4aXN0aW5n
IGJlaGF2aW9yKQogICAgICAgICAgICAgaWYgKChlbXB0eUxpbmUgJiYgc3R5bGUuYnJlYWtXb3Jk
T25PdmVyZmxvdykgfHwgIXN0eWxlLndyYXBMaW5lcykgewogICAgICAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBmcmFnbWVudDsgKG1vZGlmaWVkKWZyYWdtZW50IHN0YXlzIG9uIHRoaXMgbGluZSwg
b3ZlcmZsb3dlZEZyYWdtZW50IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAg
ICAgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdt
ZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoIC0gbGluZS53aWR0aCgpLCBlbXB0eUxpbmUsIGZsb3dD
b250ZW50cyk7CisgICAgICAgICAgICAgICAgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQgPSBzcGxp
dEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoIC0gbGluZS53
aWR0aCgpLCBlbXB0eUxpbmUsIGZsb3dDb250ZW50c0l0ZXJhdG9yKTsKICAgICAgICAgICAgICAg
ICBsaW5lLmFkZFVuY29tbWl0dGVkKGZyYWdtZW50KTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KQEAgLTQ2NSwyMiArNDY2LDIyIEBAIHN0YXRpYyBib29sIGNyZWF0ZUxp
bmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExh
eW91CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGluZS5hZGRVbmNvbW1pdHRlZChmcmFn
bWVudCk7CiAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgdGV4dCBmcmFnbWVudC4KLSAgICAgICAg
ZnJhZ21lbnQgPSBmbG93Q29udGVudHMubmV4dFRleHRGcmFnbWVudChsaW5lLndpZHRoKCkpOwor
ICAgICAgICBmcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQo
bGluZS53aWR0aCgpKTsKICAgICB9CiAgICAgbGluZS5jb21taXRBbmRDcmVhdGVSdW4obGluZVJ1
bnMpOwogICAgIHJldHVybiBmcmFnbWVudC5pc0VtcHR5KCkgJiYgbGluZS5vdmVyZmxvd2VkRnJh
Z21lbnQuaXNFbXB0eSgpOwogfQogCi1zdGF0aWMgdm9pZCBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1
c3RSdW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVk
IHByZXZpb3VzUnVuQ291bnQsIHVuc2lnbmVkJiBsaW5lQ291bnQsIGNvbnN0IEZsb3dDb250ZW50
cyYgZmxvd0NvbnRlbnRzKQorc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVu
cyhMaW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCBwcmV2
aW91c1J1bkNvdW50LCB1bnNpZ25lZCYgbGluZUNvdW50LCBjb25zdCBGbG93Q29udGVudHNJdGVy
YXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCiB7CiAgICAgaWYgKHByZXZpb3VzUnVuQ291bnQg
PT0gcnVucy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQocnVucy5zaXplKCkp
OwotICAgIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShsaW5lLCBydW5zLCBmbG93Q29udGVudHMp
OworICAgIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShsaW5lLCBydW5zLCBmbG93Q29udGVudHNJ
dGVyYXRvcik7CiAgICAgaWYgKCFydW5zLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8v
IEFkanVzdCBydW5zJyBwb3NpdGlvbiBieSB0YWtpbmcgbGluZSdzIGFsaWdubWVudCBpbnRvIGFj
Y291bnQuCi0gICAgaWYgKGZsb2F0IGxpbmVMb2dpY2FsTGVmdCA9IGNvbXB1dGVMaW5lTGVmdChm
bG93Q29udGVudHMuc3R5bGUoKS50ZXh0QWxpZ24sIGxpbmUuYXZhaWxhYmxlV2lkdGgsIGxpbmUu
Y29tbWl0dGVkV2lkdGgsIGxpbmUubG9naWNhbExlZnRPZmZzZXQpKSB7CisgICAgaWYgKGZsb2F0
IGxpbmVMb2dpY2FsTGVmdCA9IGNvbXB1dGVMaW5lTGVmdChmbG93Q29udGVudHNJdGVyYXRvci5z
dHlsZSgpLnRleHRBbGlnbiwgbGluZS5hdmFpbGFibGVXaWR0aCwgbGluZS5jb21taXR0ZWRXaWR0
aCwgbGluZS5sb2dpY2FsTGVmdE9mZnNldCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
cHJldmlvdXNSdW5Db3VudDsgaSA8IHJ1bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHJ1
bnNbaV0ubG9naWNhbExlZnQgKz0gbGluZUxvZ2ljYWxMZWZ0OwogICAgICAgICAgICAgcnVuc1tp
XS5sb2dpY2FsUmlnaHQgKz0gbGluZUxvZ2ljYWxMZWZ0OwpAQCAtNDkwLDI0ICs0OTEsMjEgQEAg
c3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUs
IExheW91dDo6UnVuVmVjdG9yJiBydW4KICAgICArK2xpbmVDb3VudDsKIH0KIAotc3RhdGljIHZv
aWQgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVu
cywgY29uc3QgRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMpCitzdGF0aWMgdm9pZCBzcGxpdFJ1
bnNBdFJlbmRlcmVyQm91bmRhcnkoTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBG
bG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCiB7CiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwcm9iYWJseSBzcGxpdCBkdXJpbmcgcnVuIGNvbnN0cnVjdGlvbiBpbnN0
ZWFkIG9mIGFzIGEgc2VwYXJhdGUgcGFzcy4KICAgICBpZiAobGluZVJ1bnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZsb3dDb250ZW50cy5oYXNPbmVTZWdtZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gMDsKICAgICBkbyB7CiAg
ICAgICAgIGNvbnN0IFJ1biYgcnVuID0gbGluZVJ1bnMuYXQocnVuSW5kZXgpOwogICAgICAgICBB
U1NFUlQocnVuLnN0YXJ0ICE9IHJ1bi5lbmQpOwotICAgICAgICBhdXRvJiBzdGFydFNlZ21lbnQg
PSBmbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHJ1bi5zdGFydCk7CisgICAgICAgIGF1
dG8mIHN0YXJ0U2VnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnNlZ21lbnRGb3JQb3NpdGlv
bihydW4uc3RhcnQpOwogICAgICAgICBpZiAocnVuLmVuZCA8PSBzdGFydFNlZ21lbnQuZW5kKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIC8vIFRoaXMgcnVuIG92ZXJsYXBzIG11bHRp
cGxlIHJlbmRlcmVycy4gU3BsaXQgaXQgdXAuCiAgICAgICAgIC8vIFNwbGl0IHJ1biBhdCB0aGUg
cmVuZGVyZXIncyBib3VuZGFyeSBhbmQgY3JlYXRlIGEgbmV3IHJ1biBmb3IgdGhlIGxlZnQgc2lk
ZSwgd2hpbGUgdXNlIHRoZSBjdXJyZW50IHJ1biBhcyB0aGUgcmlnaHQgc2lkZS4KLSAgICAgICAg
ZmxvYXQgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuID0gcnVuLmxvZ2ljYWxMZWZ0ICsgZmxvd0NvbnRl
bnRzLnRleHRXaWR0aChydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1bi5sb2dpY2FsTGVm
dCk7CisgICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mTGVmdFJ1biA9IHJ1bi5sb2dpY2FsTGVm
dCArIGZsb3dDb250ZW50c0l0ZXJhdG9yLnRleHRXaWR0aChydW4uc3RhcnQsIHN0YXJ0U2VnbWVu
dC5lbmQsIHJ1bi5sb2dpY2FsTGVmdCk7CiAgICAgICAgIGxpbmVSdW5zLmluc2VydChydW5JbmRl
eCwgUnVuKHJ1bi5zdGFydCwgc3RhcnRTZWdtZW50LmVuZCwgcnVuLmxvZ2ljYWxMZWZ0LCBsb2dp
Y2FsUmlnaHRPZkxlZnRSdW4sIGZhbHNlKSk7CiAgICAgICAgIFJ1biYgcmlnaHRTaWRlUnVuID0g
bGluZVJ1bnMuYXQocnVuSW5kZXggKyAxKTsKICAgICAgICAgcmlnaHRTaWRlUnVuLnN0YXJ0ID0g
c3RhcnRTZWdtZW50LmVuZDsKQEAgLTUyMSw3ICs1MTksNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVU
ZXh0UnVucyhMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1
bnNpZwogICAgIExheW91dFVuaXQgbGluZUhlaWdodCA9IGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93
KTsKICAgICBMaW5lU3RhdGUgbGluZTsKICAgICBib29sIGlzRW5kT2ZDb250ZW50ID0gZmFsc2U7
Ci0gICAgRmxvd0NvbnRlbnRzIGZsb3dDb250ZW50cyA9IEZsb3dDb250ZW50cyhmbG93KTsKKyAg
ICBGbG93Q29udGVudHNJdGVyYXRvciBmbG93Q29udGVudHNJdGVyYXRvciA9IEZsb3dDb250ZW50
c0l0ZXJhdG9yKGZsb3cpOwogCiAgICAgZG8gewogICAgICAgICBmbG93LnNldExvZ2ljYWxIZWln
aHQobGluZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUpOwpAQCAt
NTI5LDExICs1MjcsMTIgQEAgc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5W
ZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWcKICAgICAgICAgdW5zaWdu
ZWQgcHJldmlvdXNSdW5Db3VudCA9IHJ1bnMuc2l6ZSgpOwogICAgICAgICBsaW5lID0gTGluZVN0
YXRlKCk7CiAgICAgICAgIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGZsb3csIGxpbmUuYXZhaWxhYmxl
V2lkdGgsIGxpbmUubG9naWNhbExlZnRPZmZzZXQpOwotICAgICAgICBpc0VuZE9mQ29udGVudCA9
IGNyZWF0ZUxpbmVSdW5zKGxpbmUsIHByZXZpb3VzTGluZSwgcnVucywgZmxvd0NvbnRlbnRzKTsK
LSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBwcmV2aW91
c1J1bkNvdW50LCBsaW5lQ291bnQsIGZsb3dDb250ZW50cyk7CisgICAgICAgIGlzRW5kT2ZDb250
ZW50ID0gY3JlYXRlTGluZVJ1bnMobGluZSwgcHJldmlvdXNMaW5lLCBydW5zLCBmbG93Q29udGVu
dHNJdGVyYXRvcik7CisgICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZSwg
cnVucywgcHJldmlvdXNSdW5Db3VudCwgbGluZUNvdW50LCBmbG93Q29udGVudHNJdGVyYXRvcik7
CiAgICAgfSB3aGlsZSAoIWlzRW5kT2ZDb250ZW50KTsKIAotICAgIHNwbGl0UnVuc0F0UmVuZGVy
ZXJCb3VuZGFyeShydW5zLCBmbG93Q29udGVudHMpOworICAgIGlmIChmbG93LmZpcnN0Q2hpbGQo
KSAhPSBmbG93Lmxhc3RDaGlsZCgpKQorICAgICAgICBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRh
cnkocnVucywgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOwogICAgIEFTU0VSVCghbGluZS51bmNvbW1p
dHRlZFdpZHRoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCmluZGV4IDcxOGU5OTVjYzIxMzYxYzg0
Y2Y0ZmRlOWZjNTlkNThkY2Q3ZTBlZmEuLjIyMDk3OTdkZTdiYTU2ZGMzMDdhYWQyZjQ2MzlkNzU2
NzUxMWZiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKQEAgLTMzLDE5ICszMyw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAKLUZsb3dDb250ZW50
czo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAgICA6IGZvbnQoc3R5
bGUuZm9udENhc2NhZGUoKSkKLSAgICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24oKSkKLSAg
ICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAgICAs
IHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAsIHdyYXBMaW5l
cyhzdHlsZS5hdXRvV3JhcCgpKQotICAgICwgYnJlYWtXb3JkT25PdmVyZmxvdyhzdHlsZS5vdmVy
Zmxvd1dyYXAoKSA9PSBCcmVha092ZXJmbG93V3JhcCAmJiAod3JhcExpbmVzIHx8IHByZXNlcnZl
TmV3bGluZSkpCi0gICAgLCBzcGFjZVdpZHRoKGZvbnQud2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEp
KSkKLSAgICAsIHRhYldpZHRoKGNvbGxhcHNlV2hpdGVzcGFjZSA/IDAgOiBzdHlsZS50YWJTaXpl
KCkpCi0gICAgLCBsb2NhbGUoc3R5bGUubG9jYWxlKCkpCi17Ci19Ci0KIHN0YXRpYyBWZWN0b3I8
Rmxvd0NvbnRlbnRzOjpTZWdtZW50PiBpbml0aWFsaXplU2VnbWVudHMoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93KQogewogICAgIFZlY3RvcjxGbG93Q29udGVudHM6OlNlZ21lbnQsIDg+IHNl
Z21lbnRzOwpAQCAtNTksMTQxICs0NiwxMSBAQCBzdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6
U2VnbWVudD4gaW5pdGlhbGl6ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZgogfQog
CiBGbG93Q29udGVudHM6OkZsb3dDb250ZW50cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
Ci0gICAgOiBtX3N0eWxlKGZsb3cuc3R5bGUoKSkKLSAgICAsIG1fc2VnbWVudHMoaW5pdGlhbGl6
ZVNlZ21lbnRzKGZsb3cpKQotICAgICwgbV9saW5lQnJlYWtJdGVyYXRvcihtX3NlZ21lbnRzWzBd
LnRleHQsIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSkKKyAgICA6IG1fc2VnbWVudHMoaW5pdGlhbGl6
ZVNlZ21lbnRzKGZsb3cpKQogICAgICwgbV9sYXN0U2VnbWVudEluZGV4KDApCiB7CiB9CiAKLUZs
b3dDb250ZW50czo6VGV4dEZyYWdtZW50IEZsb3dDb250ZW50czo6bmV4dFRleHRGcmFnbWVudChm
bG9hdCB4UG9zaXRpb24pCi17Ci0gICAgLy8gQSBmcmFnbWVudCBjYW4gZWl0aGVyIGJlCi0gICAg
Ly8gMS4gbmV3IGxpbmUgY2hhcmFjdGVyIHdoZW4gcHJlc2VydmVOZXdsaW5lIGlzIG9uIChub3Qg
Y29uc2lkZXJlZCBhcyB3aGl0ZXNwYWNlKSBvcgotICAgIC8vIDIuIHdoaXRlc3BhY2UgKGNvbGxh
c3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBzaW5nbGUpIG9yCi0gICAgLy8gMy4gbm9uLXdo
aXRlc3BhY2UgY2hhcmFjdGVycy4KLSAgICAvLyA0LiBlbXB0eSwgaW5kaWNhdGluZyBjb250ZW50
IGVuZC4KLSAgICBUZXh0RnJhZ21lbnQgZnJhZ21lbnQ7Ci0gICAgZnJhZ21lbnQuc3RhcnQgPSBt
X3Bvc2l0aW9uOwotICAgIGlmIChpc0VuZChmcmFnbWVudC5zdGFydCkpIHsKLSAgICAgICAgZnJh
Z21lbnQuZW5kID0gZnJhZ21lbnQuc3RhcnQ7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAg
ICB9Ci0gICAgaWYgKGlzTGluZUJyZWFrKGZyYWdtZW50LnN0YXJ0KSkgewotICAgICAgICBmcmFn
bWVudC50eXBlID0gVGV4dEZyYWdtZW50OjpMaW5lQnJlYWs7Ci0gICAgICAgIGZyYWdtZW50LmVu
ZCA9IGZyYWdtZW50LnN0YXJ0ICsgMTsKLSAgICAgICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVu
ZDsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNwYWNl
Q291bnQgPSAwOwotICAgIHVuc2lnbmVkIHdoaXRlc3BhY2VFbmQgPSBmaW5kTmV4dE5vbldoaXRl
c3BhY2VQb3NpdGlvbihmcmFnbWVudC5zdGFydCwgc3BhY2VDb3VudCk7Ci0gICAgQVNTRVJUKGZy
YWdtZW50LnN0YXJ0IDw9IHdoaXRlc3BhY2VFbmQpOwotICAgIGlmIChmcmFnbWVudC5zdGFydCAh
PSB3aGl0ZXNwYWNlRW5kKSB7Ci0gICAgICAgIGZyYWdtZW50LnR5cGUgPSBUZXh0RnJhZ21lbnQ6
OldoaXRlc3BhY2U7Ci0gICAgICAgIGZyYWdtZW50LmVuZCA9IHdoaXRlc3BhY2VFbmQ7Ci0gICAg
ICAgIGJvb2wgbXVsdGlwbGVXaGl0ZXNwYWNlID0gZnJhZ21lbnQuc3RhcnQgKyAxIDwgZnJhZ21l
bnQuZW5kOwotICAgICAgICBmcmFnbWVudC5pc0NvbGxhcHNlZCA9IG11bHRpcGxlV2hpdGVzcGFj
ZSAmJiBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKLSAgICAgICAgZnJhZ21lbnQuaXNCcmVh
a2FibGUgPSAhZnJhZ21lbnQuaXNDb2xsYXBzZWQgJiYgbXVsdGlwbGVXaGl0ZXNwYWNlOwotICAg
ICAgICBpZiAoZnJhZ21lbnQuaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICBmcmFnbWVudC53aWR0
aCA9IG1fc3R5bGUuc3BhY2VXaWR0aDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBmcmFnbWVudExlbmd0aCA9IGZyYWdtZW50LmVuZCAtIGZyYWdtZW50LnN0YXJ0OwotICAg
ICAgICAgICAgaWYgKGZyYWdtZW50TGVuZ3RoID09IHNwYWNlQ291bnQpCi0gICAgICAgICAgICAg
ICAgZnJhZ21lbnQud2lkdGggPSBmcmFnbWVudExlbmd0aCAqIG1fc3R5bGUuc3BhY2VXaWR0aDsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcmFnbWVudC53aWR0aCA9IHRleHRX
aWR0aChmcmFnbWVudC5zdGFydCwgZnJhZ21lbnQuZW5kLCB4UG9zaXRpb24pOwotICAgICAgICB9
Ci0gICAgICAgIG1fcG9zaXRpb24gPSBmcmFnbWVudC5lbmQ7Ci0gICAgICAgIHJldHVybiBmcmFn
bWVudDsKLSAgICB9Ci0KLSAgICBmcmFnbWVudC50eXBlID0gVGV4dEZyYWdtZW50OjpOb25XaGl0
ZXNwYWNlOwotICAgIGZyYWdtZW50LmlzQnJlYWthYmxlID0gbV9zdHlsZS5icmVha1dvcmRPbk92
ZXJmbG93OwotICAgIGZyYWdtZW50LmVuZCA9IGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24oZnJh
Z21lbnQuc3RhcnQgKyAxKTsKLSAgICBmcmFnbWVudC53aWR0aCA9IHRleHRXaWR0aChmcmFnbWVu
dC5zdGFydCwgZnJhZ21lbnQuZW5kLCB4UG9zaXRpb24pOwotICAgIG1fcG9zaXRpb24gPSBmcmFn
bWVudC5lbmQ7Ci0gICAgcmV0dXJuIGZyYWdtZW50OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB1bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24oTGF6
eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgRmxvd0NvbnRlbnRz
OjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBwb3NpdGlvbikKLXsKLSAgICBjb25zdCBhdXRv
KiBjaGFyYWN0ZXJzID0gc2VnbWVudC50ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsK
LSAgICB1bnNpZ25lZCBzZWdtZW50TGVuZ3RoID0gc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0
OwotICAgIHVuc2lnbmVkIHNlZ21lbnRQb3NpdGlvbiA9IHBvc2l0aW9uIC0gc2VnbWVudC5zdGFy
dDsKLSAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uTm9uTG9vc2VseTxDaGFyYWN0ZXJU
eXBlLCBOQlNQQmVoYXZpb3I6Oklnbm9yZU5CU1A+KGxpbmVCcmVha0l0ZXJhdG9yLCBjaGFyYWN0
ZXJzLCBzZWdtZW50TGVuZ3RoLCBzZWdtZW50UG9zaXRpb24pOwotfQotCi11bnNpZ25lZCBGbG93
Q29udGVudHM6OmZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNv
bnN0Ci17Ci0gICAgd2hpbGUgKCFpc0VuZChwb3NpdGlvbikpIHsKLSAgICAgICAgYXV0byYgc2Vn
bWVudCA9IHNlZ21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIGlmIChzZWdtZW50
LnRleHQuaW1wbCgpICE9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCkuaW1wbCgpKSB7Ci0g
ICAgICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gc2VnbWVudC5zdGFydCA+IDAgPyBjaGFy
YWN0ZXJBdChzZWdtZW50LnN0YXJ0IC0gMSkgOiAwOwotICAgICAgICAgICAgVUNoYXIgc2Vjb25k
VG9MYXN0Q2hhcmFjdGVyID0gc2VnbWVudC5zdGFydCA+IDEgPyBjaGFyYWN0ZXJBdChzZWdtZW50
LnN0YXJ0IC0gMikgOiAwOwotICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlv
ckNvbnRleHQobGFzdENoYXJhY3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAgICAg
ICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2Vn
bWVudC50ZXh0LCBtX3N0eWxlLmxvY2FsZSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlVUFYMTQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgYnJlYWthYmxlID0gc2VnbWVudC50ZXh0Lmlz
OEJpdCgpID8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPExDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9y
LCBzZWdtZW50LCBwb3NpdGlvbikgOiBuZXh0QnJlYWthYmxlUG9zaXRpb248VUNoYXI+KG1fbGlu
ZUJyZWFrSXRlcmF0b3IsIHNlZ21lbnQsIHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gPSBz
ZWdtZW50LnN0YXJ0ICsgYnJlYWthYmxlOwotICAgICAgICBpZiAocG9zaXRpb24gPCBzZWdtZW50
LmVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zaXRpb247Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgZmluZE5l
eHROb25XaGl0ZXNwYWNlKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgY29u
c3QgRmxvd0NvbnRlbnRzOjpTdHlsZSYgc3R5bGUsIHVuc2lnbmVkJiBwb3NpdGlvbiwgdW5zaWdu
ZWQmIHNwYWNlQ291bnQpCi17Ci0gICAgY29uc3QgYXV0byogdGV4dCA9IHNlZ21lbnQudGV4dC5j
aGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7Ci0gICAgZm9yICg7IHBvc2l0aW9uIDwgc2VnbWVu
dC5lbmQ7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSB0ZXh0W3Bvc2l0
aW9uIC0gc2VnbWVudC5zdGFydF07Ci0gICAgICAgIGJvb2wgaXNTcGFjZSA9IGNoYXJhY3RlciA9
PSAnICc7Ci0gICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlID0gaXNTcGFjZSB8fCBjaGFyYWN0ZXIg
PT0gJ1x0JyB8fCAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7
Ci0gICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGlmIChpc1NwYWNlKQotICAgICAgICAgICAgKytzcGFjZUNvdW50OwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIEZsb3dDb250ZW50czo6ZmluZE5leHROb25X
aGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkJiBzcGFjZUNvdW50
KSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IHNlZ21lbnRJbmRleEZvclBvc2l0aW9u
KHBvc2l0aW9uKTsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBm
b3VuZE5vbldoaXRlc3BhY2UgPSBtX3NlZ21lbnRzW2ldLnRleHQuaXM4Qml0KCkgPyBmaW5kTmV4
dE5vbldoaXRlc3BhY2U8TENoYXI+KG1fc2VnbWVudHNbaV0sIG1fc3R5bGUsIHBvc2l0aW9uLCBz
cGFjZUNvdW50KSA6Ci0gICAgICAgICAgICBmaW5kTmV4dE5vbldoaXRlc3BhY2U8VUNoYXI+KG1f
c2VnbWVudHNbaV0sIG1fc3R5bGUsIHBvc2l0aW9uLCBzcGFjZUNvdW50KTsKLSAgICAgICAgaWYg
KGZvdW5kTm9uV2hpdGVzcGFjZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gcG9zaXRpb247Ci19Ci0KLWZsb2F0IEZsb3dDb250ZW50czo6dGV4dFdpZHRoKHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgY29uc3Qg
YXV0byYgZnJvbVNlZ21lbnQgPSBzZWdtZW50Rm9yUG9zaXRpb24oZnJvbSk7Ci0KLSAgICBpZiAo
KG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSAmJiBmcm9tU2VnbWVudC5lbmQgPj0gdG8pIHx8
IChmcm9tID09IGZyb21TZWdtZW50LnN0YXJ0ICYmIHRvID09IGZyb21TZWdtZW50LmVuZCkpCi0g
ICAgICAgIHJldHVybiBmcm9tU2VnbWVudC5yZW5kZXJlci53aWR0aChmcm9tIC0gZnJvbVNlZ21l
bnQuc3RhcnQsIHRvIC0gZnJvbSwgbV9zdHlsZS5mb250LCB4UG9zaXRpb24sIG51bGxwdHIsIG51
bGxwdHIpOwotCi0gICAgY29uc3QgYXV0byogc2VnbWVudCA9ICZmcm9tU2VnbWVudDsKLSAgICBm
bG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0gMDsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBmcmFnbWVudEVuZCA9IHN0ZDo6bWluKHRvLCBzZWdtZW50
LT5lbmQpOwotICAgICAgICB0ZXh0V2lkdGggKz0gc2VnbWVudC0+dGV4dC5pczhCaXQoKSA/IHJ1
bldpZHRoPExDaGFyPihzZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdt
ZW50RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCkgOgotICAgICAg
ICAgICAgcnVuV2lkdGg8VUNoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFy
dCwgZnJhZ21lbnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKTsK
LSAgICAgICAgaWYgKGZyYWdtZW50RW5kID09IHRvKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGZyb20gPSBmcmFnbWVudEVuZDsKLSAgICAgICAgc2VnbWVudCA9ICZzZWdtZW50Rm9yUG9z
aXRpb24oZnJhZ21lbnRFbmQpOwotICAgIH07Ci0KLSAgICByZXR1cm4gdGV4dFdpZHRoOwotfQot
CiB1bnNpZ25lZCBGbG93Q29udGVudHM6OnNlZ21lbnRJbmRleEZvclBvc2l0aW9uU2xvdyh1bnNp
Z25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZCht
X3NlZ21lbnRzLmJlZ2luKCksIG1fc2VnbWVudHMuZW5kKCksIHBvc2l0aW9uLCBbXShjb25zdCBT
ZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBwb3NpdGlvbikgewpAQCAtMjE1LDIxICs3Miw1IEBA
IGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgRmxvd0NvbnRlbnRzOjpzZWdtZW50Rm9yUmVu
ZGVyZXIoY29uc3QgUmVuZGVyVGV4dCYKICAgICByZXR1cm4gbV9zZWdtZW50cy5sYXN0KCk7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotZmxvYXQgRmxvd0NvbnRlbnRz
OjpydW5XaWR0aChjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
LCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZyb20gPCB0byk7Ci0gICAg
Ym9vbCBtZWFzdXJlV2l0aEVuZFNwYWNlID0gbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYg
dG8gPCB0ZXh0Lmxlbmd0aCgpICYmIHRleHRbdG9dID09ICcgJzsKLSAgICBpZiAobWVhc3VyZVdp
dGhFbmRTcGFjZSkKLSAgICAgICAgKyt0bzsKLSAgICBUZXh0UnVuIHJ1bih0ZXh0LmNoYXJhY3Rl
cnM8Q2hhcmFjdGVyVHlwZT4oKSArIGZyb20sIHRvIC0gZnJvbSk7Ci0gICAgcnVuLnNldFhQb3Mo
eFBvc2l0aW9uKTsKLSAgICBydW4uc2V0VGFiU2l6ZSghIW1fc3R5bGUudGFiV2lkdGgsIG1fc3R5
bGUudGFiV2lkdGgpOwotICAgIGZsb2F0IHdpZHRoID0gbV9zdHlsZS5mb250LndpZHRoKHJ1bik7
Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IG1fc3R5bGUu
c3BhY2VXaWR0aDsKLSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCmlu
ZGV4IDdhNzkxN2ZkMDlmYjgzZDA1ZTZjNWFjNzc2ZTk4MzVhM2JlNjk1NzMuLjQ1NzViZDYwN2M3
ZGNiYWIxMWIzNjBhZDBlZDM2MGI5N2ZmNjkyYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaApAQCAtMjYsMTAg
KzI2LDcgQEAKICNpZm5kZWYgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c19oCiAjZGVmaW5l
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNfaAogCi0jaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKQEAgLTQwLDMyICsz
Nyw2IEBAIGNsYXNzIEZsb3dDb250ZW50cyB7CiBwdWJsaWM6CiAgICAgRmxvd0NvbnRlbnRzKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYpOwogCi0gICAgc3RydWN0IFRleHRGcmFnbWVudCB7Ci0gICAg
ICAgIFRleHRGcmFnbWVudCgpID0gZGVmYXVsdDsKLSAgICAgICAgVGV4dEZyYWdtZW50KHVuc2ln
bmVkIHRleHRTdGFydCwgdW5zaWduZWQgdGV4dEVuZCwgZmxvYXQgdGV4dFdpZHRoLCBib29sIGlz
V2hpdGVzcGFjZU9ubHkpCi0gICAgICAgICAgICA6IHN0YXJ0KHRleHRTdGFydCkKLSAgICAgICAg
ICAgICwgZW5kKHRleHRFbmQpCi0gICAgICAgICAgICAsIHR5cGUoaXNXaGl0ZXNwYWNlT25seSA/
IFdoaXRlc3BhY2UgOiBOb25XaGl0ZXNwYWNlKQotICAgICAgICAgICAgLCB3aWR0aCh0ZXh0V2lk
dGgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGFydCA9PSBlbmQ7Ci0gICAgICAgIH0K
LQotICAgICAgICBlbnVtIFR5cGUgeyBMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRlc3Bh
Y2UgfTsKLSAgICAgICAgdW5zaWduZWQgc3RhcnQgPSAwOwotICAgICAgICB1bnNpZ25lZCBlbmQg
PSAwOwotICAgICAgICBUeXBlIHR5cGUgPSBOb25XaGl0ZXNwYWNlOwotICAgICAgICBib29sIGlz
Q29sbGFwc2VkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNCcmVha2FibGUgPSBmYWxzZTsKLSAg
ICAgICAgZmxvYXQgd2lkdGggPSAwOwotICAgIH07Ci0gICAgVGV4dEZyYWdtZW50IG5leHRUZXh0
RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uID0gMCk7Ci0gICAgZmxvYXQgdGV4dFdpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwotCiAgICAgc3Ry
dWN0IFNlZ21lbnQgewogICAgICAgICB1bnNpZ25lZCBzdGFydDsKICAgICAgICAgdW5zaWduZWQg
ZW5kOwpAQCAtNzUsNjQgKzQ2LDU3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTZWdtZW50JiBzZWdt
ZW50Rm9yUG9zaXRpb24odW5zaWduZWQpIGNvbnN0OwogICAgIGNvbnN0IFNlZ21lbnQmIHNlZ21l
bnRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJUZXh0JikgY29uc3Q7CiAKLSAgICBib29sIGhhc09u
ZVNlZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLnNpemUoKSA9PSAxOyB9Ci0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50cy5sYXN0KCkuZW5kOyB9
OworICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhdG9yKGNv
bnN0IEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRzLCB1bnNpZ25lZCBzZWdtZW50SW5kZXgpCisg
ICAgICAgICAgICA6IG1fZmxvd0NvbnRlbnRzKGZsb3dDb250ZW50cykKKyAgICAgICAgICAgICwg
bV9zZWdtZW50SW5kZXgoc2VnbWVudEluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7CisgICAgICAgIGNvbnN0IFNlZ21lbnQmIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd0NvbnRlbnRzLm1fc2VnbWVudHNbbV9zZWdtZW50SW5k
ZXhdOyB9CiAKLSAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICBleHBsaWNpdCBTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYpOwotCi0gICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250OwotICAg
ICAgICBFVGV4dEFsaWduIHRleHRBbGlnbjsKLSAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlc3Bh
Y2U7Ci0gICAgICAgIGJvb2wgcHJlc2VydmVOZXdsaW5lOwotICAgICAgICBib29sIHdyYXBMaW5l
czsKLSAgICAgICAgYm9vbCBicmVha1dvcmRPbk92ZXJmbG93OwotICAgICAgICBmbG9hdCBzcGFj
ZVdpZHRoOwotICAgICAgICB1bnNpZ25lZCB0YWJXaWR0aDsKLSAgICAgICAgQXRvbWljU3RyaW5n
IGxvY2FsZTsKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBGbG93Q29udGVudHMmIG1fZmxv
d0NvbnRlbnRzOworICAgICAgICB1bnNpZ25lZCBtX3NlZ21lbnRJbmRleDsKICAgICB9OwotICAg
IGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAotcHJpdmF0
ZToKLSAgICB1bnNpZ25lZCBmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25lZCBw
b3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpIGNvbnN0OwotICAgIHVuc2lnbmVkIGZpbmRO
ZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIGJvb2wg
aXNMaW5lQnJlYWsodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIGJvb2wgaXNFbmQodW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gSXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gSXRlcmF0b3IoKnRoaXMsIG1fc2VnbWVudHMuc2l6ZSgpKTsgfQorCisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50cy5sYXN0KCkuZW5kOyB9OworCiAgICAg
dW5zaWduZWQgc2VnbWVudEluZGV4Rm9yUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0
OwotICAgIHVuc2lnbmVkIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uU2xvdyh1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3Q7CiAKLSAgICBVQ2hhciBjaGFyYWN0ZXJBdCh1bnNpZ25lZCBwb3NpdGlvbikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGZsb2F0IHJ1bldp
ZHRoKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9z
aXRpb24pIGNvbnN0OworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBzZWdtZW50SW5kZXhGb3JQb3Np
dGlvblNsb3codW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OwogCi0gICAgY29uc3QgU3R5bGUgbV9z
dHlsZTsKICAgICBjb25zdCBWZWN0b3I8U2VnbWVudCwgOD4gbV9zZWdtZW50czsKIAotICAgIG11
dGFibGUgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7CiAgICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2xhc3RTZWdtZW50SW5kZXg7Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlv
biB7IDAgfTsKIH07CiAKLWlubGluZSBVQ2hhciBGbG93Q29udGVudHM6OmNoYXJhY3RlckF0KHVu
c2lnbmVkIHBvc2l0aW9uKSBjb25zdAoraW5saW5lIEZsb3dDb250ZW50czo6SXRlcmF0b3ImIEZs
b3dDb250ZW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQogewotICAgIGF1dG8mIHNlZ21lbnQg
PSBzZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgIHJldHVybiBzZWdtZW50LnRleHRb
cG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKKyAgICArK21fc2VnbWVudEluZGV4OworICAgIHJl
dHVybiAqdGhpczsKIH0KIAotaW5saW5lIGJvb2wgRmxvd0NvbnRlbnRzOjppc0xpbmVCcmVhayh1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK2lubGluZSBib29sIEZsb3dDb250ZW50czo6SXRlcmF0
b3I6Om9wZXJhdG9yPT0oY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgb3RoZXIpIGNvbnN0
CiB7Ci0gICAgaWYgKGlzRW5kKHBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXJBdChwb3NpdGlvbikg
PT0gJ1xuJzsKKyAgICByZXR1cm4gbV9zZWdtZW50SW5kZXggPT0gb3RoZXIubV9zZWdtZW50SW5k
ZXg7CiB9CiAKLWlubGluZSBib29sIEZsb3dDb250ZW50czo6aXNFbmQodW5zaWduZWQgcG9zaXRp
b24pIGNvbnN0CitpbmxpbmUgYm9vbCBGbG93Q29udGVudHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9
KGNvbnN0IEZsb3dDb250ZW50czo6SXRlcmF0b3ImIG90aGVyKSBjb25zdAogewotICAgIHJldHVy
biBwb3NpdGlvbiA+PSBsZW5ndGgoKTsKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9
CiAKIGlubGluZSB1bnNpZ25lZCBGbG93Q29udGVudHM6OnNlZ21lbnRJbmRleEZvclBvc2l0aW9u
KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewotICAgIEFTU0VSVCghaXNFbmQocG9zaXRpb24p
KTsKICAgICBhdXRvJiBsYXN0U2VnbWVudCA9IG1fc2VnbWVudHNbbV9sYXN0U2VnbWVudEluZGV4
XTsKICAgICBpZiAobGFzdFNlZ21lbnQuc3RhcnQgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPCBs
YXN0U2VnbWVudC5lbmQpCiAgICAgICAgIHJldHVybiBtX2xhc3RTZWdtZW50SW5kZXg7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50c0l0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiNThiNTkxMTI3NTJlYzk5
NDA2MzJlZjdjY2U1YzUwODgwOTliYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcApAQCAt
MCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCIKKworI2luY2x1ZGUgIlJl
bmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7
CisKK0Zsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQorICAgIDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgpKQorICAgICwgdGV4dEFsaWdu
KHN0eWxlLnRleHRBbGlnbigpKQorICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNvbGxh
cHNlV2hpdGVTcGFjZSgpKQorICAgICwgcHJlc2VydmVOZXdsaW5lKHN0eWxlLnByZXNlcnZlTmV3
bGluZSgpKQorICAgICwgd3JhcExpbmVzKHN0eWxlLmF1dG9XcmFwKCkpCisgICAgLCBicmVha1dv
cmRPbk92ZXJmbG93KHN0eWxlLm92ZXJmbG93V3JhcCgpID09IEJyZWFrT3ZlcmZsb3dXcmFwICYm
ICh3cmFwTGluZXMgfHwgcHJlc2VydmVOZXdsaW5lKSkKKyAgICAsIHNwYWNlV2lkdGgoZm9udC53
aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpKQorICAgICwgdGFiV2lkdGgoY29sbGFwc2VXaGl0ZXNw
YWNlID8gMCA6IHN0eWxlLnRhYlNpemUoKSkKKyAgICAsIGxvY2FsZShzdHlsZS5sb2NhbGUoKSkK
K3sKK30KKworRmxvd0NvbnRlbnRzSXRlcmF0b3I6OkZsb3dDb250ZW50c0l0ZXJhdG9yKGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKKyAgICA6IG1fZmxvd0NvbnRlbnRzKGZsb3cpCisgICAg
LCBtX2xpbmVCcmVha0l0ZXJhdG9yKCgqbV9mbG93Q29udGVudHMuYmVnaW4oKSkudGV4dCwgZmxv
dy5zdHlsZSgpLmxvY2FsZSgpKQorICAgICwgbV9zdHlsZShmbG93LnN0eWxlKCkpCit7Cit9CisK
K0Zsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6
Om5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQoreworICAgIC8vIEEgZnJhZ21lbnQg
Y2FuIGVpdGhlciBiZQorICAgIC8vIDEuIG5ldyBsaW5lIGNoYXJhY3RlciB3aGVuIHByZXNlcnZl
TmV3bGluZSBpcyBvbiAobm90IGNvbnNpZGVyZWQgYXMgd2hpdGVzcGFjZSkgb3IKKyAgICAvLyAy
LiB3aGl0ZXNwYWNlIChjb2xsYXNwZWQsIG5vbi1jb2xsYXBzZWQgbXVsdGkgb3Igc2luZ2xlKSBv
cgorICAgIC8vIDMuIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAgLy8gNC4gZW1wdHks
IGluZGljYXRpbmcgY29udGVudCBlbmQuCisgICAgVGV4dEZyYWdtZW50IGZyYWdtZW50OworICAg
IGZyYWdtZW50LnN0YXJ0ID0gbV9wb3NpdGlvbjsKKyAgICBpZiAoaXNFbmQoZnJhZ21lbnQuc3Rh
cnQpKSB7CisgICAgICAgIGZyYWdtZW50LmVuZCA9IGZyYWdtZW50LnN0YXJ0OworICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChpc0xpbmVCcmVhayhmcmFnbWVudC5zdGFy
dCkpIHsKKyAgICAgICAgZnJhZ21lbnQudHlwZSA9IFRleHRGcmFnbWVudDo6TGluZUJyZWFrOwor
ICAgICAgICBmcmFnbWVudC5lbmQgPSBmcmFnbWVudC5zdGFydCArIDE7CisgICAgICAgIG1fcG9z
aXRpb24gPSBmcmFnbWVudC5lbmQ7CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBzcGFjZUNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlRW5k
ID0gZmluZE5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oZnJhZ21lbnQuc3RhcnQsIHNwYWNlQ291
bnQpOworICAgIEFTU0VSVChmcmFnbWVudC5zdGFydCA8PSB3aGl0ZXNwYWNlRW5kKTsKKyAgICBp
ZiAoZnJhZ21lbnQuc3RhcnQgIT0gd2hpdGVzcGFjZUVuZCkgeworICAgICAgICBmcmFnbWVudC50
eXBlID0gVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlOworICAgICAgICBmcmFnbWVudC5lbmQgPSB3
aGl0ZXNwYWNlRW5kOworICAgICAgICBib29sIG11bHRpcGxlV2hpdGVzcGFjZSA9IGZyYWdtZW50
LnN0YXJ0ICsgMSA8IGZyYWdtZW50LmVuZDsKKyAgICAgICAgZnJhZ21lbnQuaXNDb2xsYXBzZWQg
PSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7CisgICAg
ICAgIGZyYWdtZW50LmlzQnJlYWthYmxlID0gIWZyYWdtZW50LmlzQ29sbGFwc2VkICYmIG11bHRp
cGxlV2hpdGVzcGFjZTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmlzQ29sbGFwc2VkKQorICAgICAg
ICAgICAgZnJhZ21lbnQud2lkdGggPSBtX3N0eWxlLnNwYWNlV2lkdGg7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRMZW5ndGggPSBmcmFnbWVudC5lbmQgLSBm
cmFnbWVudC5zdGFydDsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudExlbmd0aCA9PSBzcGFjZUNv
dW50KQorICAgICAgICAgICAgICAgIGZyYWdtZW50LndpZHRoID0gZnJhZ21lbnRMZW5ndGggKiBt
X3N0eWxlLnNwYWNlV2lkdGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnJh
Z21lbnQud2lkdGggPSB0ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQsIGZyYWdtZW50LmVuZCwgeFBv
c2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBtX3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kOwor
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorCisgICAgZnJhZ21lbnQudHlwZSA9IFRl
eHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZTsKKyAgICBmcmFnbWVudC5pc0JyZWFrYWJsZSA9IG1f
c3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdzsKKyAgICBmcmFnbWVudC5lbmQgPSBmaW5kTmV4dEJy
ZWFrYWJsZVBvc2l0aW9uKGZyYWdtZW50LnN0YXJ0ICsgMSk7CisgICAgZnJhZ21lbnQud2lkdGgg
PSB0ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQsIGZyYWdtZW50LmVuZCwgeFBvc2l0aW9uKTsKKyAg
ICBtX3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kOworICAgIHJldHVybiBmcmFnbWVudDsKK30KKwor
ZmxvYXQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OnRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8mIGZyb21T
ZWdtZW50ID0gbV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKGZyb20pOworICAgIGlm
ICgobV9zdHlsZS5mb250LmlzRml4ZWRQaXRjaCgpICYmIGZyb21TZWdtZW50LmVuZCA+PSB0bykg
fHwgKGZyb20gPT0gZnJvbVNlZ21lbnQuc3RhcnQgJiYgdG8gPT0gZnJvbVNlZ21lbnQuZW5kKSkK
KyAgICAgICAgcmV0dXJuIGZyb21TZWdtZW50LnJlbmRlcmVyLndpZHRoKGZyb20gLSBmcm9tU2Vn
bWVudC5zdGFydCwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwgbnVsbHB0ciwg
bnVsbHB0cik7CisKKyAgICBjb25zdCBhdXRvKiBzZWdtZW50ID0gJmZyb21TZWdtZW50OworICAg
IGZsb2F0IHRleHRXaWR0aCA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmQgPSAwOworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIGZyYWdtZW50RW5kID0gc3RkOjptaW4odG8sIHNlZ21l
bnQtPmVuZCk7CisgICAgICAgIHRleHRXaWR0aCArPSBzZWdtZW50LT50ZXh0LmlzOEJpdCgpID8g
cnVuV2lkdGg8TENoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdtZW50LT5zdGFydCwgZnJh
Z21lbnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4dFdpZHRoKSA6CisgICAg
ICAgICAgICBydW5XaWR0aDxVQ2hhcj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQtPnN0
YXJ0LCBmcmFnbWVudEVuZCAtIHNlZ21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lkdGgp
OworICAgICAgICBpZiAoZnJhZ21lbnRFbmQgPT0gdG8pCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZnJvbSA9IGZyYWdtZW50RW5kOworICAgICAgICBzZWdtZW50ID0gJm1fZmxvd0NvbnRl
bnRzLnNlZ21lbnRGb3JQb3NpdGlvbihmcmFnbWVudEVuZCk7CisgICAgfTsKKworICAgIHJldHVy
biB0ZXh0V2lkdGg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3Rh
dGljIHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbihMYXp5TGluZUJyZWFrSXRlcmF0b3Im
IGxpbmVCcmVha0l0ZXJhdG9yLCBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQs
IHVuc2lnbmVkIHBvc2l0aW9uKQoreworICAgIGNvbnN0IGF1dG8qIGNoYXJhY3RlcnMgPSBzZWdt
ZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIHVuc2lnbmVkIHNlZ21l
bnRMZW5ndGggPSBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQ7CisgICAgdW5zaWduZWQgc2Vn
bWVudFBvc2l0aW9uID0gcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0OworICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb25Ob25Mb29zZWx5PENoYXJhY3RlclR5cGUsIE5CU1BCZWhhdmlvcjo6
SWdub3JlTkJTUD4obGluZUJyZWFrSXRlcmF0b3IsIGNoYXJhY3RlcnMsIHNlZ21lbnRMZW5ndGgs
IHNlZ21lbnRQb3NpdGlvbik7Cit9CisKK3Vuc2lnbmVkIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpm
aW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAg
IHdoaWxlICghaXNFbmQocG9zaXRpb24pKSB7CisgICAgICAgIGF1dG8mIHNlZ21lbnQgPSBtX2Zs
b3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAoc2Vn
bWVudC50ZXh0LmltcGwoKSAhPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygpLmltcGwoKSkg
eworICAgICAgICAgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAwID8g
Y2hhcmFjdGVyQXQoc2VnbWVudC5zdGFydCAtIDEpIDogMDsKKyAgICAgICAgICAgIFVDaGFyIHNl
Y29uZFRvTGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAxID8gY2hhcmFjdGVyQXQoc2Vn
bWVudC5zdGFydCAtIDIpIDogMDsKKyAgICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0
UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7CisgICAg
ICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9y
KHNlZ21lbnQudGV4dCwgbV9zdHlsZS5sb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9kZVVBWDE0
KTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGJyZWFrYWJsZSA9IHNlZ21lbnQudGV4
dC5pczhCaXQoKSA/IG5leHRCcmVha2FibGVQb3NpdGlvbjxMQ2hhcj4obV9saW5lQnJlYWtJdGVy
YXRvciwgc2VnbWVudCwgcG9zaXRpb24pIDogbmV4dEJyZWFrYWJsZVBvc2l0aW9uPFVDaGFyPiht
X2xpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LCBwb3NpdGlvbik7CisgICAgICAgIHBvc2l0aW9u
ID0gc2VnbWVudC5zdGFydCArIGJyZWFrYWJsZTsKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwgc2Vn
bWVudC5lbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBib29sIGZp
bmROZXh0Tm9uV2hpdGVzcGFjZShjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIHNlZ21lbnQs
IGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIHVuc2lnbmVkJiBwb3Np
dGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpCit7CisgICAgY29uc3QgYXV0byogdGV4dCA9IHNl
Z21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CisgICAgZm9yICg7IHBvc2l0
aW9uIDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIg
PSB0ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF07CisgICAgICAgIGJvb2wgaXNTcGFjZSA9
IGNoYXJhY3RlciA9PSAnICc7CisgICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlID0gaXNTcGFjZSB8
fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoIXN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0
ZXIgPT0gJ1xuJyk7CisgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChpc1NwYWNlKQorICAgICAgICAgICAgKytzcGFjZUNvdW50
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIEZsb3dDb250ZW50c0l0
ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbiwg
dW5zaWduZWQmIHNwYWNlQ291bnQpIGNvbnN0Cit7CisgICAgRmxvd0NvbnRlbnRzOjpJdGVyYXRv
ciBpdChtX2Zsb3dDb250ZW50cywgbV9mbG93Q29udGVudHMuc2VnbWVudEluZGV4Rm9yUG9zaXRp
b24ocG9zaXRpb24pKTsKKyAgICBmb3IgKGF1dG8gZW5kID0gbV9mbG93Q29udGVudHMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBib29sIGZvdW5kTm9uV2hpdGVzcGFjZSA9ICgq
aXQpLnRleHQuaXM4Qml0KCkgPyBmaW5kTmV4dE5vbldoaXRlc3BhY2U8TENoYXI+KCppdCwgbV9z
dHlsZSwgcG9zaXRpb24sIHNwYWNlQ291bnQpIDogZmluZE5leHROb25XaGl0ZXNwYWNlPFVDaGFy
PigqaXQsIG1fc3R5bGUsIHBvc2l0aW9uLCBzcGFjZUNvdW50KTsKKyAgICAgICAgaWYgKGZvdW5k
Tm9uV2hpdGVzcGFjZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcG9z
aXRpb247Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorZmxvYXQgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OnJ1bldpZHRoKGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQo
ZnJvbSA8IHRvKTsKKyAgICBib29sIG1lYXN1cmVXaXRoRW5kU3BhY2UgPSBtX3N0eWxlLmNvbGxh
cHNlV2hpdGVzcGFjZSAmJiB0byA8IHRleHQubGVuZ3RoKCkgJiYgdGV4dFt0b10gPT0gJyAnOwor
ICAgIGlmIChtZWFzdXJlV2l0aEVuZFNwYWNlKQorICAgICAgICArK3RvOworICAgIFRleHRSdW4g
cnVuKHRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgZnJvbSwgdG8gLSBmcm9tKTsK
KyAgICBydW4uc2V0WFBvcyh4UG9zaXRpb24pOworICAgIHJ1bi5zZXRUYWJTaXplKCEhbV9zdHls
ZS50YWJXaWR0aCwgbV9zdHlsZS50YWJXaWR0aCk7CisgICAgZmxvYXQgd2lkdGggPSBtX3N0eWxl
LmZvbnQud2lkdGgocnVuKTsKKyAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKKyAgICAgICAg
d2lkdGggLT0gbV9zdHlsZS5zcGFjZVdpZHRoOworICAgIHJldHVybiB3aWR0aDsKK30KKworfQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHNJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZDRjODVmOGRkYWNm
M2Y2ZWU1NTM4YTI1ZTU0Y2E1YWUzNTFiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmgKQEAg
LTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHNJdGVyYXRvcl9oCisjZGVmaW5lIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJ
dGVyYXRvcl9oCisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHMuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgor
I2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJl
bmRlckJsb2NrRmxvdzsKKworbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgeworCitjbGFzcyBG
bG93Q29udGVudHNJdGVyYXRvciAgeworcHVibGljOgorICAgIEZsb3dDb250ZW50c0l0ZXJhdG9y
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOworCisgICAgc3RydWN0IFRleHRGcmFnbWVudCB7Cisg
ICAgICAgIFRleHRGcmFnbWVudCgpID0gZGVmYXVsdDsKKyAgICAgICAgVGV4dEZyYWdtZW50KHVu
c2lnbmVkIHRleHRTdGFydCwgdW5zaWduZWQgdGV4dEVuZCwgZmxvYXQgdGV4dFdpZHRoLCBib29s
IGlzV2hpdGVzcGFjZU9ubHkpCisgICAgICAgICAgICA6IHN0YXJ0KHRleHRTdGFydCkKKyAgICAg
ICAgICAgICwgZW5kKHRleHRFbmQpCisgICAgICAgICAgICAsIHR5cGUoaXNXaGl0ZXNwYWNlT25s
eSA/IFdoaXRlc3BhY2UgOiBOb25XaGl0ZXNwYWNlKQorICAgICAgICAgICAgLCB3aWR0aCh0ZXh0
V2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydCA9PSBlbmQ7CisgICAgICAg
IH0KKworICAgICAgICBlbnVtIFR5cGUgeyBMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRl
c3BhY2UgfTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgeyAwIH07CisgICAgICAgIHVuc2lnbmVk
IGVuZCAgezAgfTsKKyAgICAgICAgVHlwZSB0eXBlIHsgTm9uV2hpdGVzcGFjZSB9OworICAgICAg
ICBib29sIGlzQ29sbGFwc2VkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBpc0JyZWFrYWJsZSB7
IGZhbHNlIH07CisgICAgICAgIGZsb2F0IHdpZHRoIHsgMCB9OworICAgIH07CisgICAgVGV4dEZy
YWdtZW50IG5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uID0gMCk7CisgICAgZmxvYXQg
dGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNv
bnN0OworCisgICAgc3RydWN0IFN0eWxlIHsKKyAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmKTsKKworICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udDsKKyAgICAg
ICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247CisgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNl
OworICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKKyAgICAgICAgYm9vbCB3cmFwTGluZXM7
CisgICAgICAgIGJvb2wgYnJlYWtXb3JkT25PdmVyZmxvdzsKKyAgICAgICAgZmxvYXQgc3BhY2VX
aWR0aDsKKyAgICAgICAgdW5zaWduZWQgdGFiV2lkdGg7CisgICAgICAgIEF0b21pY1N0cmluZyBs
b2NhbGU7CisgICAgfTsKKyAgICBjb25zdCBTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0eWxlOyB9CisgICAgLy8gRklYTUU6IHJlbW92ZSBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRh
cnkoKQorICAgIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9u
KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50cy5zZWdtZW50
Rm9yUG9zaXRpb24ocG9zaXRpb24pOyB9OworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIGZpbmRO
ZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3Bh
Y2VDb3VudCkgY29uc3Q7CisgICAgdW5zaWduZWQgZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CisgICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0OworICAgIGJvb2wgaXNMaW5lQnJlYWsodW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0OworICAgIGJvb2wgaXNFbmQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBmbG9hdCBydW5XaWR0aChjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsK
KworICAgIEZsb3dDb250ZW50cyBtX2Zsb3dDb250ZW50czsKKyAgICBtdXRhYmxlIExhenlMaW5l
QnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOworICAgIGNvbnN0IFN0eWxlIG1fc3R5
bGU7CisgICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKK307CisKK2lubGluZSBVQ2hhciBG
bG93Q29udGVudHNJdGVyYXRvcjo6Y2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0
Cit7CisgICAgYXV0byYgc2VnbWVudCA9IG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlv
bihwb3NpdGlvbik7CisgICAgcmV0dXJuIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQu
c3RhcnRdOworfQorCitpbmxpbmUgYm9vbCBGbG93Q29udGVudHNJdGVyYXRvcjo6aXNMaW5lQnJl
YWsodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGlzRW5kKHBvc2l0aW9uKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3N0eWxlLnByZXNlcnZlTmV3bGlu
ZSAmJiBjaGFyYWN0ZXJBdChwb3NpdGlvbikgPT0gJ1xuJzsKK30KKworaW5saW5lIGJvb2wgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OmlzRW5kKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAg
IHJldHVybiBwb3NpdGlvbiA+PSBtX2Zsb3dDb250ZW50cy5sZW5ndGgoKTsKK30KKworfQorfQor
CisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>