<?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>146817</bug_id>
          
          <creation_ts>2015-07-09 15:50:07 -0700</creation_ts>
          <short_desc>[Content Extensions] Cache domain actions</short_desc>
          <delta_ts>2015-07-16 15:09:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1108430</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-09 15:50:07 -0700</bug_when>
    <thetext>Right now we run regular expressions on the domain every time we have any rules that match with if-domain or unless-domain.  This caches the results of running regular expressions on the domain of the main document&apos;s url so we only need to run those regular expressions when the main document changes domain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108431</commentid>
    <comment_count>1</comment_count>
      <attachid>256536</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-09 15:54:28 -0700</bug_when>
    <thetext>Created attachment 256536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108840</commentid>
    <comment_count>2</comment_count>
      <attachid>256635</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-10 18:21:27 -0700</bug_when>
    <thetext>Created attachment 256635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109491</commentid>
    <comment_count>3</comment_count>
      <attachid>256802</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-14 15:24:32 -0700</bug_when>
    <thetext>Created attachment 256802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109515</commentid>
    <comment_count>4</comment_count>
      <attachid>256809</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-14 16:45:39 -0700</bug_when>
    <thetext>Created attachment 256809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109632</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-15 08:52:13 -0700</bug_when>
    <thetext>I measured this to be about a 25% improvement in interpreting time in one case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109981</commentid>
    <comment_count>6</comment_count>
      <attachid>256809</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-16 14:41:59 -0700</bug_when>
    <thetext>Comment on attachment 256809
Patch

lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109993</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-16 15:09:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/186912</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256536</attachid>
            <date>2015-07-09 15:54:28 -0700</date>
            <delta_ts>2015-07-10 18:21:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146817-20150709155326.patch</filename>
            <type>text/plain</type>
            <size>15259</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjY0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA3LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgZG9tYWluIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjgxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJpZ2h0IG5vdyB3ZSBydW4gcmVndWxhciBleHByZXNz
aW9ucyBvbiB0aGUgZG9tYWluIGV2ZXJ5IHRpbWUgd2UgaGF2ZSBhbnkgcnVsZXMgdGhhdCBtYXRj
aCB3aXRoIGlmLWRvbWFpbiBvciB1bmxlc3MtZG9tYWluLiAgCisgICAgICAgIFRoaXMgY2FjaGVz
IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgcmVndWxhciBleHByZXNzaW9ucyBvbiB0aGUgZG9tYWlu
IG9mIHRoZSBtYWluIGRvY3VtZW50J3MgdXJsIHNvIHdlIG9ubHkgbmVlZCB0byAKKyAgICAgICAg
cnVuIHRob3NlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlbiB0aGUgbWFpbiBkb2N1bWVudCBjaGFu
Z2VzIGRvbWFpbi4gIFdlIGFsc28gc3BlbmQgbGVzcyB0aW1lIGFkZGluZyB1bnVzZWQgYWN0aW9u
cyBpbnRvIEhhc2hTZXRzLgorCisgICAgICAgIEFsbCBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIGFwaSB0ZXN0cy4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb246Omdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Y2FjaGVkRG9tYWluQWN0
aW9ucyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246Omlk
ZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb246OmNvbXBpbGVkRXh0ZW5zaW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291cmNl
TG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0SnVtcERpc3Rh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjptYXRjaGVzRmxhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Om1hdGNoZXNEb21haW4pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6aW50ZXJwcmV0V2l0aERvbWFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldCk6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOgorCiAyMDE1LTA3LTA5
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBEb2N1bWVudExv
YWRlcjo6ZGV0YWNoRnJvbUZyYW1lKCkgaXMgYmVpbmcgY2FsbGVkIHdpdGggbm8gY3VycmVudCBG
cmFtZSBzZXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTg2NDc1KQorKysgU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDYgKzc1LDIxIEBAIFN0eWxlU2hlZXRDb250ZW50cyogQ29udGVudEV4dGVuc2lv
bjo6Z2wKICAgICByZXR1cm4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQuZ2V0KCk7CiB9
CiAKK2NvbnN0IENhY2hlZERvbWFpbkFjdGlvbnMmIENvbnRlbnRFeHRlbnNpb246OmNhY2hlZERv
bWFpbkFjdGlvbnMoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgaWYgKG1fY2FjaGVkRG9t
YWluICE9IGRvbWFpbikgeworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJl
dGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBtX2NvbXBp
bGVkRXh0ZW5zaW9uLT5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgICAgIGNv
bnN0IHVpbnQxNl90IGFsbExvYWRUeXBlc0FuZFJlc291cmNlVHlwZXMgPSBMb2FkVHlwZU1hc2sg
fCBSZXNvdXJjZVR5cGVNYXNrOworICAgICAgICBhdXRvIGRvbWFpbkFjdGlvbnMgPSBpbnRlcnBy
ZXRlci5pbnRlcnByZXQoZG9tYWluLnV0ZjgoKSwgYWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBl
cyk7CisgICAgICAgIAorICAgICAgICBtX2NhY2hlZERvbWFpbkFjdGlvbnMuY2xlYXIoKTsKKyAg
ICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBkb21haW5BY3Rpb25zKQorICAgICAgICAgICAg
bV9jYWNoZWREb21haW5BY3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uKSwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbiA+PiAzMikpOworICAgICAgICBtX2NhY2hlZERv
bWFpbiA9IGRvbWFpbjsKKyAgICB9CisgICAgcmV0dXJuIG1fY2FjaGVkRG9tYWluQWN0aW9uczsK
K30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4NjQ3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2lu
Y2x1ZGUgIkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CiAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVu
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KICAgICBT
dHlsZVNoZWV0Q29udGVudHMqIGdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOworICAgIGNv
bnN0IENhY2hlZERvbWFpbkFjdGlvbnMmIGNhY2hlZERvbWFpbkFjdGlvbnMoY29uc3QgU3RyaW5n
JiBkb21haW4pOwogCiBwcml2YXRlOgogICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKQEAgLTU1LDYg
KzU3LDkgQEAgcHJpdmF0ZToKICAgICBSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX2Nv
bXBpbGVkRXh0ZW5zaW9uOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG1fZ2xvYmFs
RGlzcGxheU5vbmVTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9wYXJzZWRHbG9iYWxEaXNwbGF5Tm9u
ZVN0eWxlU2hlZXQ7CisgICAgCisgICAgU3RyaW5nIG1fY2FjaGVkRG9tYWluOworICAgIENhY2hl
ZERvbWFpbkFjdGlvbnMgbV9jYWNoZWREb21haW5BY3Rpb25zOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2
aXNpb24gMTg2NDc1KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNDcgKzkwLDIyIEBA
IFZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAgY29uc3Qg
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVuc2lvbiA9IGNvbnRlbnRFeHRl
bnNpb24tPmNvbXBpbGVkRXh0ZW5zaW9uKCk7CiAgICAgICAgIAogICAgICAgICBERkFCeXRlY29k
ZUludGVycHJldGVyIHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRFeHRlbnNpb24u
ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgY29tcGlsZWRFeHRlbnNpb24uZmlsdGVy
c1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJw
cmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKKyAgICAgICAgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6QWN0aW9ucyB3aXRob3V0RG9tYWluc0FjdGlvbnMgPSB3aXRob3V0RG9tYWlu
c0ludGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CiAgICAgICAgIAotICAg
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBhY3Rpb25zIHRyaWdnZXJlZCB3
aXRoIGlmLSBvciB1bmxlc3MtZG9tYWluIGFuZCBjaGVjayB0aGUgZG9tYWluIGlmIHRoZXJlIGFy
ZS4KICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciB3aXRoRG9tYWluc0ludGVycHJldGVy
KGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCksIGNvbXBpbGVk
RXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkpOwotICAgICAgICAK
LSAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc1Bvc3Np
YmxlQWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcs
IGZsYWdzKTsKLSAgICAgICAgaWYgKCF3aXRoRG9tYWluc1Bvc3NpYmxlQWN0aW9ucy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgZG9tYWluc0ludGVycHJl
dGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBjb21waWxlZEV4
dGVuc2lvbi5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAgICAgICBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGRvbWFpbnNBY3Rpb25zID0gZG9tYWluc0ludGVy
cHJldGVyLmludGVycHJldChyZXNvdXJjZUxvYWRJbmZvLm1haW5Eb2N1bWVudFVSTC5ob3N0KCku
dXRmOCgpLCBmbGFncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgaWZEb21haW5BY3Rpb25zOwotICAgICAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB1bmxlc3NEb21haW5BY3Rpb25zOwotICAgICAgICAgICAg
Zm9yICh1aW50NjRfdCBhY3Rpb24gOiBkb21haW5zQWN0aW9ucykgewotICAgICAgICAgICAgICAg
IGlmIChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGlmRG9tYWlu
QWN0aW9ucy5hZGQoYWN0aW9uKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHVubGVzc0RvbWFpbkFjdGlvbnMuYWRkKGFjdGlvbik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogd2l0aERvbWFp
bnNQb3NzaWJsZUFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWZEb21haW5BY3Rpb25z
LmNvbnRhaW5zKGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW4gaWYtZG9t
YWluIHRyaWdnZXIgbWF0Y2hlcywgYWRkIHRoZSBhY3Rpb24uCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpOwotICAgICAgICAgICAgICAgICAgICB0cmln
Z2VyZWRBY3Rpb25zLmFkZChhY3Rpb24gJiB+SWZEb21haW5GbGFnKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCEoYWN0aW9uICYgSWZEb21haW5GbGFnKSAmJiAhdW5sZXNzRG9tYWluQWN0
aW9ucy5jb250YWlucyhhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
YWN0aW9uIGRpZCBub3QgbmVlZCBhbiBpZi1kb21haW4sIGl0IG11c3QgaGF2ZSBiZWVuIGFuIHVu
bGVzcy1kb21haW4gcnVsZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBhY3Rpb24g
dW5sZXNzIGl0IG1hdGNoZWQgYW4gdW5sZXNzLWRvbWFpbiB0cmlnZ2VyLgotICAgICAgICAgICAg
ICAgICAgICB0cmlnZ2VyZWRBY3Rpb25zLmFkZChhY3Rpb24pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVy
OjpBY3Rpb25zIHdpdGhEb21haW5zQWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50
ZXJwcmV0V2l0aERvbWFpbnModXJsQ1N0cmluZywgZmxhZ3MsIGNvbnRlbnRFeHRlbnNpb24tPmNh
Y2hlZERvbWFpbkFjdGlvbnMocmVzb3VyY2VMb2FkSW5mby5tYWluRG9jdW1lbnRVUkwuaG9zdCgp
KSk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9u
cyA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnMoKTsKICAgICAgICAgY29uc3QgdW5zaWduZWQg
YWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnNMZW5ndGgoKTsKICAgICAg
ICAgCiAgICAgICAgIGJvb2wgc2F3SWdub3JlUHJldmlvdXNSdWxlcyA9IGZhbHNlOwotICAgICAg
ICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8
dW5zaWduZWQ+IGFjdGlvbkxvY2F0aW9uczsKLSAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRyaWdnZXJlZEFjdGlvbnMuc2l6ZSgpKTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byBhY3Rpb25Mb2NhdGlvbiA6IHRyaWdnZXJlZEFjdGlvbnMpCi0gICAgICAg
ICAgICAgICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0
aW9uTG9jYXRpb24pKTsKKyAgICAgICAgaWYgKCF3aXRob3V0RG9tYWluc0FjdGlvbnMuaXNFbXB0
eSgpIHx8ICF3aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWZWN0
b3I8dWludDMyX3Q+IGFjdGlvbkxvY2F0aW9uczsKKyAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9u
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdpdGhvdXREb21haW5zQWN0aW9ucy5zaXplKCkgKyB3
aXRoRG9tYWluc0FjdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0
aW9uTG9jYXRpb24gOiB3aXRob3V0RG9tYWluc0FjdGlvbnMpCisgICAgICAgICAgICAgICAgYWN0
aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9u
TG9jYXRpb24pKTsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9jYXRpb24gOiB3
aXRoRG9tYWluc0FjdGlvbnMpCisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVuY2hl
Y2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uTG9jYXRpb24pKTsKICAgICAg
ICAgICAgIHN0ZDo6c29ydChhY3Rpb25Mb2NhdGlvbnMuYmVnaW4oKSwgYWN0aW9uTG9jYXRpb25z
LmVuZCgpKTsKIAogICAgICAgICAgICAgLy8gQWRkIGFjdGlvbnMgaW4gcmV2ZXJzZSBvcmRlciB0
byBwcm9wZXJseSBkZWFsIHdpdGggSWdub3JlUHJldmlvdXNSdWxlcy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODY0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsMTIgKzgyLDM2IEBAIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBnZXRKdW1wRGlzdGFuY2UoY28K
ICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaGVzRmxhZ3ModWludDE2X3QgZmxh
Z3NGcm9tTG9hZCwgdWludDE2X3QgZmxhZ3NUb0NoZWNrKQoreworICAgIHVpbnQxNl90IGxvYWRU
eXBlRmxhZ3MgPSBmbGFnc1RvQ2hlY2sgJiBMb2FkVHlwZU1hc2s7CisgICAgdWludDE2X3QgcmVz
c291cmNlVHlwZUZsYWdzID0gZmxhZ3NUb0NoZWNrICYgUmVzb3VyY2VUeXBlTWFzazsKKyAgICBi
b29sIGxvYWRUeXBlTWF0Y2hlcyA9IGxvYWRUeXBlRmxhZ3MgPyAobG9hZFR5cGVGbGFncyAmIGZs
YWdzRnJvbUxvYWQpIDogdHJ1ZTsKKyAgICBib29sIHJlc3NvdXJjZVR5cGVNYXRjaGVzID0gcmVz
c291cmNlVHlwZUZsYWdzID8gKHJlc3NvdXJjZVR5cGVGbGFncyAmIGZsYWdzRnJvbUxvYWQpIDog
dHJ1ZTsKKyAgICByZXR1cm4gbG9hZFR5cGVNYXRjaGVzICYmIHJlc3NvdXJjZVR5cGVNYXRjaGVz
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hlc0RvbWFpbih1aW50NjRfdCBhY3Rpb25B
bmRGbGFncywgY29uc3QgQ2FjaGVkRG9tYWluQWN0aW9ucyYgZG9tYWluQWN0aW9ucykKK3sKKyAg
ICBhdXRvIGl0ID0gZG9tYWluQWN0aW9ucy5maW5kKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rp
b25BbmRGbGFncykpOworICAgIGlmIChpdCA9PSBkb21haW5BY3Rpb25zLmVuZCgpKQorICAgICAg
ICByZXR1cm4gIShhY3Rpb25BbmRGbGFncyAmIElmRG9tYWluRmxhZyk7CisgICAgCisgICAgdWlu
dDMyX3QgZmxhZ3MgPSBpdC0+dmFsdWU7CisgICAgaWYgKGZsYWdzICYgKElmRG9tYWluRmxhZyA+
PiAzMikpCisgICAgICAgIHJldHVybiBtYXRjaGVzRmxhZ3Moc3RhdGljX2Nhc3Q8dWludDE2X3Q+
KGFjdGlvbkFuZEZsYWdzID4+IDMyKSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGZsYWdzKSk7Cisg
ICAgcmV0dXJuICFtYXRjaGVzRmxhZ3Moc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlvbkFuZEZs
YWdzID4+IDMyKSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGZsYWdzKSk7Cit9CisKIHZvaWQgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9n
cmFtQ291bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKIHsKICAgICBBU1NF
UlQoZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNv
dW50ZXIpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgogICAgICAgICB8
fCBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291
bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWlu
CiAgICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgs
IHByb2dyYW1Db3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25E
ZWZhdWx0U3R5bGVzaGVldCk7Ci0gICAgYWN0aW9ucy5hZGQoKGlmRG9tYWluID8gSWZEb21haW5G
bGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1aW50MzJfdD4obV9ieXRl
Y29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbikpKSk7CisgICAgdWludDY0X3QgYWN0aW9uID0gKGlmRG9tYWluID8gSWZE
b21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1aW50MzJfdD4o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbikpKTsKKyAgICBpZiAoIW1fZG9tYWluQWN0aW9ucyB8fCBtYXRj
aGVzRG9tYWluKGFjdGlvbiwgKm1fZG9tYWluQWN0aW9ucykpCisgICAgICAgIGFjdGlvbnMuYWRk
KGFjdGlvbik7CisgICAgCiAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0
aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOwogICAgIEFT
U0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKICAgICBBU1NFUlQoaW5z
dHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRB
Y3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpKTsKQEAgLTk4LDE1ICsxMjIsMTIg
QEAgdm9pZCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRUZQogICAgIEFTU0VSVChn
ZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
cikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uCiAg
ICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgIHVpbnQxNl90IGZsYWdzVG9DaGVjayA9IGdldEJp
dHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVy
ICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKTsKLQotICAgIHVpbnQxNl90IGxvYWRU
eXBlRmxhZ3MgPSBmbGFnc1RvQ2hlY2sgJiBMb2FkVHlwZU1hc2s7Ci0gICAgdWludDE2X3QgcmVz
c291cmNlVHlwZUZsYWdzID0gZmxhZ3NUb0NoZWNrICYgUmVzb3VyY2VUeXBlTWFzazsKICAgICAK
LSAgICBib29sIGxvYWRUeXBlTWF0Y2hlcyA9IGxvYWRUeXBlRmxhZ3MgPyAobG9hZFR5cGVGbGFn
cyAmIGZsYWdzKSA6IHRydWU7Ci0gICAgYm9vbCByZXNzb3VyY2VUeXBlTWF0Y2hlcyA9IHJlc3Nv
dXJjZVR5cGVGbGFncyA/IChyZXNzb3VyY2VUeXBlRmxhZ3MgJiBmbGFncykgOiB0cnVlOwotICAg
IAotICAgIGlmIChsb2FkVHlwZU1hdGNoZXMgJiYgcmVzc291cmNlVHlwZU1hdGNoZXMpCi0gICAg
ICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6
ZW9mKHVpbnQxNl90KSkpKTsKKyAgICBpZiAobWF0Y2hlc0ZsYWdzKGZsYWdzLCBmbGFnc1RvQ2hl
Y2spKSB7CisgICAgICAgIHVpbnQ2NF90IGFjdGlvbkFuZEZsYWdzID0gKGlmRG9tYWluID8gSWZE
b21haW5GbGFnIDogMCkgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZsYWdzVG9DaGVjaykgPDwg
MzIpIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQxNl90KSkpOworICAgICAgICBpZiAoIW1fZG9tYWluQWN0
aW9ucyB8fCBtYXRjaGVzRG9tYWluKGFjdGlvbkFuZEZsYWdzLCAqbV9kb21haW5BY3Rpb25zKSkK
KyAgICAgICAgICAgIGFjdGlvbnMuYWRkKGFjdGlvbkFuZEZsYWdzKTsKKyAgICB9CiAgICAgcHJv
Z3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOwogICAgIEFTU0VSVChpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKIH0K
QEAgLTEzOCw2ICsxNTksMTUgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFC
eXRlYwogICAgIHJldHVybiBhY3Rpb25zOwogfQogICAgIAorREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRXaXRoRG9tYWlucyhj
b25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nLCB1aW50MTZfdCBmbGFncywgY29uc3QgQ2FjaGVkRG9t
YWluQWN0aW9ucyYgZG9tYWluQWN0aW9ucykKK3sKKyAgICBBU1NFUlQoIW1fZG9tYWluQWN0aW9u
cyk7CisgICAgbV9kb21haW5BY3Rpb25zID0gJmRvbWFpbkFjdGlvbnM7CisgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBhY3Rpb25zID0gaW50ZXJwcmV0KHVybENTdHJpbmcsIGZs
YWdzKTsKKyAgICBtX2RvbWFpbkFjdGlvbnMgPSBudWxscHRyOworICAgIHJldHVybiBhY3Rpb25z
OworfQorCiBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OmludGVycHJldChjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nLCB1aW50MTZfdCBmbGFn
cykKIHsKICAgICBjb25zdCBjaGFyKiB1cmwgPSB1cmxDU3RyaW5nLmRhdGEoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZUludGVycHJldGVyLmgJKHJldmlzaW9uIDE4NjQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgewogCit0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90LCBEZWZh
dWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dWludDMyX3Q+PiBDYWNoZWREb21haW5BY3Rpb25zOyAvLyBLZXlzIGFyZSBsb2NhdGlvbnMs
IHZhbHVlcyBhcmUgZmxhZ3MuCisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIgewogcHVibGljOgogICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIoY29uc3QgREZB
Qnl0ZWNvZGUqIGJ5dGVjb2RlLCB1bnNpZ25lZCBieXRlY29kZUxlbmd0aCkKQEAgLTUwLDYgKzUy
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8
dWludDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90Pj4gQWN0aW9uczsKICAgICAKICAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBDU3RyaW5n
JiwgdWludDE2X3QgZmxhZ3MpOworICAgIEFjdGlvbnMgaW50ZXJwcmV0V2l0aERvbWFpbnMoY29u
c3QgQ1N0cmluZyYsIHVpbnQxNl90IGZsYWdzLCBjb25zdCBDYWNoZWREb21haW5BY3Rpb25zJik7
CiAgICAgQWN0aW9ucyBhY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpOwog
CiBwcml2YXRlOgpAQCAtNTcsNiArNjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW50ZXJwcmV0
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2
X3QgZmxhZ3MsIEFjdGlvbnMmLCBib29sIGlmRG9tYWluKTsKICAgICBjb25zdCBERkFCeXRlY29k
ZSogbV9ieXRlY29kZTsKICAgICBjb25zdCB1bnNpZ25lZCBtX2J5dGVjb2RlTGVuZ3RoOworICAg
IGNvbnN0IENhY2hlZERvbWFpbkFjdGlvbnMqIG1fZG9tYWluQWN0aW9ucyB7IG51bGxwdHIgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256635</attachid>
            <date>2015-07-10 18:21:27 -0700</date>
            <delta_ts>2015-07-14 15:24:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146817-20150710182024.patch</filename>
            <type>text/plain</type>
            <size>19310</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA3LTEwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgZG9tYWluIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjgxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJpZ2h0IG5vdyB3ZSBydW4gcmVndWxhciBleHByZXNz
aW9ucyBvbiB0aGUgZG9tYWluIGV2ZXJ5IHRpbWUgd2UgaGF2ZSBhbnkgcnVsZXMgdGhhdCBtYXRj
aCB3aXRoIGlmLWRvbWFpbiBvciB1bmxlc3MtZG9tYWluLiAgCisgICAgICAgIFRoaXMgY2FjaGVz
IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgcmVndWxhciBleHByZXNzaW9ucyBvbiB0aGUgZG9tYWlu
IG9mIHRoZSBtYWluIGRvY3VtZW50J3MgdXJsIHNvIHdlIG9ubHkgbmVlZCB0byAKKyAgICAgICAg
cnVuIHRob3NlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlbiB0aGUgbWFpbiBkb2N1bWVudCBjaGFu
Z2VzIGRvbWFpbi4gIFdlIGFsc28gc3BlbmQgbGVzcyB0aW1lIGFkZGluZyB1bnVzZWQgYWN0aW9u
cyBpbnRvIEhhc2hTZXRzLgorCisgICAgICAgIEFsbCBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIGFwaSB0ZXN0cywgYnV0IEkgdXBkYXRlZCBzb21lIHRvIGV4cGxpY2l0bHkgdGVzdCBp
Zi1kb21haW4gYW5kIHVubGVzcy1kb21haW4gd2l0aCBtdWx0aXBsZSBsb2FkIHR5cGVzLgorCisg
ICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlz
cGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5BY3Rpb25zKToKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6aWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Y29tcGlsZWRFeHRl
bnNpb24pOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKToKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZXRKdW1wRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6Om1hdGNoZXNGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6bWF0Y2hlc0RvbWFpbik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUlu
dGVycHJldGVyOjppbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmFjdGlv
bnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRXaXRoRG9t
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZUludGVycHJldGVyLmg6CisKIDIwMTUtMDctMTAgIE5hbiBXYW5nICA8bl93YW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGRlZCBBUklBIDEuMSAiY2VsbCIgYW5kICJ0YWJsZSIgcm9s
ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTg2NjkzKQorKysgU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDYgKzc1LDIxIEBAIFN0eWxlU2hlZXRDb250ZW50cyogQ29udGVudEV4dGVuc2lvbjo6Z2wK
ICAgICByZXR1cm4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKK2Nv
bnN0IENhY2hlZERvbWFpbkFjdGlvbnMmIENvbnRlbnRFeHRlbnNpb246OmNhY2hlZERvbWFpbkFj
dGlvbnMoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgaWYgKG1fY2FjaGVkRG9tYWluICE9
IGRvbWFpbikgeworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKG1f
Y29tcGlsZWRFeHRlbnNpb24tPmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBtX2NvbXBpbGVkRXh0
ZW5zaW9uLT5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgICAgIGNvbnN0IHVp
bnQxNl90IGFsbExvYWRUeXBlc0FuZFJlc291cmNlVHlwZXMgPSBMb2FkVHlwZU1hc2sgfCBSZXNv
dXJjZVR5cGVNYXNrOworICAgICAgICBhdXRvIGRvbWFpbkFjdGlvbnMgPSBpbnRlcnByZXRlci5p
bnRlcnByZXQoZG9tYWluLnV0ZjgoKSwgYWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyk7Cisg
ICAgICAgIAorICAgICAgICBtX2NhY2hlZERvbWFpbkFjdGlvbnMuY2xlYXIoKTsKKyAgICAgICAg
Zm9yICh1aW50NjRfdCBhY3Rpb24gOiBkb21haW5BY3Rpb25zKQorICAgICAgICAgICAgbV9jYWNo
ZWREb21haW5BY3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uKSwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGFjdGlvbiA+PiAzMikpOworICAgICAgICBtX2NhY2hlZERvbWFpbiA9
IGRvbWFpbjsKKyAgICB9CisgICAgcmV0dXJuIG1fY2FjaGVkRG9tYWluQWN0aW9uczsKK30KKyAg
ICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4NjY5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUg
IkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CiAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KICAgICBTdHlsZVNo
ZWV0Q29udGVudHMqIGdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOworICAgIGNvbnN0IENh
Y2hlZERvbWFpbkFjdGlvbnMmIGNhY2hlZERvbWFpbkFjdGlvbnMoY29uc3QgU3RyaW5nJiBkb21h
aW4pOwogCiBwcml2YXRlOgogICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyLCBSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKQEAgLTU1LDYgKzU3LDkg
QEAgcHJpdmF0ZToKICAgICBSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVk
RXh0ZW5zaW9uOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG1fZ2xvYmFsRGlzcGxh
eU5vbmVTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9wYXJzZWRHbG9iYWxEaXNwbGF5Tm9uZVN0eWxl
U2hlZXQ7CisgICAgCisgICAgU3RyaW5nIG1fY2FjaGVkRG9tYWluOworICAgIENhY2hlZERvbWFp
bkFjdGlvbnMgbV9jYWNoZWREb21haW5BY3Rpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24g
MTg2NjkzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNDcgKzkwLDIyIEBAIFZlY3Rv
cjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAgY29uc3QgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVuc2lvbiA9IGNvbnRlbnRFeHRlbnNpb24t
PmNvbXBpbGVkRXh0ZW5zaW9uKCk7CiAgICAgICAgIAogICAgICAgICBERkFCeXRlY29kZUludGVy
cHJldGVyIHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRFeHRlbnNpb24uZmlsdGVy
c1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgY29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhv
dXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIu
aW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKKyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6QWN0aW9ucyB3aXRob3V0RG9tYWluc0FjdGlvbnMgPSB3aXRob3V0RG9tYWluc0ludGVy
cHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CiAgICAgICAgIAotICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBhY3Rpb25zIHRyaWdnZXJlZCB3aXRoIGlm
LSBvciB1bmxlc3MtZG9tYWluIGFuZCBjaGVjayB0aGUgZG9tYWluIGlmIHRoZXJlIGFyZS4KICAg
ICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciB3aXRoRG9tYWluc0ludGVycHJldGVyKGNvbXBp
bGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5z
aW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkpOwotICAgICAgICAKLSAgICAg
ICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc1Bvc3NpYmxlQWN0
aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdz
KTsKLSAgICAgICAgaWYgKCF3aXRoRG9tYWluc1Bvc3NpYmxlQWN0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgZG9tYWluc0ludGVycHJldGVyKGNv
bXBpbGVkRXh0ZW5zaW9uLmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lv
bi5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAgICAgICBERkFCeXRlY29k
ZUludGVycHJldGVyOjpBY3Rpb25zIGRvbWFpbnNBY3Rpb25zID0gZG9tYWluc0ludGVycHJldGVy
LmludGVycHJldChyZXNvdXJjZUxvYWRJbmZvLm1haW5Eb2N1bWVudFVSTC5ob3N0KCkudXRmOCgp
LCBmbGFncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OkFjdGlvbnMgaWZEb21haW5BY3Rpb25zOwotICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6QWN0aW9ucyB1bmxlc3NEb21haW5BY3Rpb25zOwotICAgICAgICAgICAgZm9yICh1
aW50NjRfdCBhY3Rpb24gOiBkb21haW5zQWN0aW9ucykgewotICAgICAgICAgICAgICAgIGlmIChh
Y3Rpb24gJiBJZkRvbWFpbkZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGlmRG9tYWluQWN0aW9u
cy5hZGQoYWN0aW9uKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHVubGVzc0RvbWFpbkFjdGlvbnMuYWRkKGFjdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogd2l0aERvbWFpbnNQb3Nz
aWJsZUFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWZEb21haW5BY3Rpb25zLmNvbnRh
aW5zKGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYW4gaWYtZG9tYWluIHRy
aWdnZXIgbWF0Y2hlcywgYWRkIHRoZSBhY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpOwotICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWRB
Y3Rpb25zLmFkZChhY3Rpb24gJiB+SWZEb21haW5GbGFnKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCEoYWN0aW9uICYgSWZEb21haW5GbGFnKSAmJiAhdW5sZXNzRG9tYWluQWN0aW9ucy5j
b250YWlucyhhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYWN0aW9u
IGRpZCBub3QgbmVlZCBhbiBpZi1kb21haW4sIGl0IG11c3QgaGF2ZSBiZWVuIGFuIHVubGVzcy1k
b21haW4gcnVsZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBhY3Rpb24gdW5sZXNz
IGl0IG1hdGNoZWQgYW4gdW5sZXNzLWRvbWFpbiB0cmlnZ2VyLgotICAgICAgICAgICAgICAgICAg
ICB0cmlnZ2VyZWRBY3Rpb25zLmFkZChhY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rp
b25zIHdpdGhEb21haW5zQWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0
V2l0aERvbWFpbnModXJsQ1N0cmluZywgZmxhZ3MsIGNvbnRlbnRFeHRlbnNpb24tPmNhY2hlZERv
bWFpbkFjdGlvbnMocmVzb3VyY2VMb2FkSW5mby5tYWluRG9jdW1lbnRVUkwuaG9zdCgpKSk7CiAg
ICAgICAgIAogICAgICAgICBjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucyA9IGNv
bXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnMoKTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgYWN0aW9u
c0xlbmd0aCA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnNMZW5ndGgoKTsKICAgICAgICAgCiAg
ICAgICAgIGJvb2wgc2F3SWdub3JlUHJldmlvdXNSdWxlcyA9IGZhbHNlOwotICAgICAgICBpZiAo
IXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IGFjdGlvbkxvY2F0aW9uczsKLSAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHRyaWdnZXJlZEFjdGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byBhY3Rpb25Mb2NhdGlvbiA6IHRyaWdnZXJlZEFjdGlvbnMpCi0gICAgICAgICAgICAg
ICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uTG9j
YXRpb24pKTsKKyAgICAgICAgaWYgKCF3aXRob3V0RG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpIHx8
ICF3aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWZWN0b3I8dWlu
dDMyX3Q+IGFjdGlvbkxvY2F0aW9uczsKKyAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHdpdGhvdXREb21haW5zQWN0aW9ucy5zaXplKCkgKyB3aXRoRG9t
YWluc0FjdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9j
YXRpb24gOiB3aXRob3V0RG9tYWluc0FjdGlvbnMpCisgICAgICAgICAgICAgICAgYWN0aW9uTG9j
YXRpb25zLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uTG9jYXRp
b24pKTsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9jYXRpb24gOiB3aXRoRG9t
YWluc0FjdGlvbnMpCisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFw
cGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uTG9jYXRpb24pKTsKICAgICAgICAgICAg
IHN0ZDo6c29ydChhY3Rpb25Mb2NhdGlvbnMuYmVnaW4oKSwgYWN0aW9uTG9jYXRpb25zLmVuZCgp
KTsKIAogICAgICAgICAgICAgLy8gQWRkIGFjdGlvbnMgaW4gcmV2ZXJzZSBvcmRlciB0byBwcm9w
ZXJseSBkZWFsIHdpdGggSWdub3JlUHJldmlvdXNSdWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuY3BwCShyZXZpc2lvbiAxODY2OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTIg
Kzg2LDM2IEBAIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBnZXRKdW1wRGlzdGFuY2UoY28KICAgICB9
CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaGVzRmxhZ3ModWludDE2X3QgZmxhZ3NGcm9t
TG9hZCwgdWludDE2X3QgZmxhZ3NUb0NoZWNrKQoreworICAgIHVpbnQxNl90IGxvYWRUeXBlRmxh
Z3MgPSBmbGFnc1RvQ2hlY2sgJiBMb2FkVHlwZU1hc2s7CisgICAgdWludDE2X3QgcmVzc291cmNl
VHlwZUZsYWdzID0gZmxhZ3NUb0NoZWNrICYgUmVzb3VyY2VUeXBlTWFzazsKKyAgICBib29sIGxv
YWRUeXBlTWF0Y2hlcyA9IGxvYWRUeXBlRmxhZ3MgPyAobG9hZFR5cGVGbGFncyAmIGZsYWdzRnJv
bUxvYWQpIDogdHJ1ZTsKKyAgICBib29sIHJlc3NvdXJjZVR5cGVNYXRjaGVzID0gcmVzc291cmNl
VHlwZUZsYWdzID8gKHJlc3NvdXJjZVR5cGVGbGFncyAmIGZsYWdzRnJvbUxvYWQpIDogdHJ1ZTsK
KyAgICByZXR1cm4gbG9hZFR5cGVNYXRjaGVzICYmIHJlc3NvdXJjZVR5cGVNYXRjaGVzOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hlc0RvbWFpbih1aW50NjRfdCBhY3Rpb25BbmRGbGFn
cywgY29uc3QgQ2FjaGVkRG9tYWluQWN0aW9ucyYgZG9tYWluQWN0aW9ucykKK3sKKyAgICBhdXRv
IGl0ID0gZG9tYWluQWN0aW9ucy5maW5kKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb25BbmRG
bGFncykpOworICAgIGlmIChpdCA9PSBkb21haW5BY3Rpb25zLmVuZCgpKQorICAgICAgICByZXR1
cm4gIShhY3Rpb25BbmRGbGFncyAmIElmRG9tYWluRmxhZyk7CisgICAgCisgICAgdWludDMyX3Qg
ZmxhZ3MgPSBpdC0+dmFsdWU7CisgICAgaWYgKGZsYWdzICYgKElmRG9tYWluRmxhZyA+PiAzMikp
CisgICAgICAgIHJldHVybiBtYXRjaGVzRmxhZ3Moc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlv
bkFuZEZsYWdzID4+IDMyKSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGZsYWdzKSk7CisgICAgcmV0
dXJuICFtYXRjaGVzRmxhZ3Moc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlvbkFuZEZsYWdzID4+
IDMyKSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGZsYWdzKSk7Cit9CisKIHZvaWQgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9ncmFtQ291
bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKIHsKICAgICBBU1NFUlQoZ2V0
SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIp
ID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgogICAgICAgICB8fCBnZXRJ
bnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikg
PT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCiAgICAg
ICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dy
YW1Db3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0
U3R5bGVzaGVldCk7Ci0gICAgYWN0aW9ucy5hZGQoKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDog
MCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwg
bV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbikpKSk7CisgICAgdWludDY0X3QgYWN0aW9uID0gKGlmRG9tYWluID8gSWZEb21haW5G
bGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1aW50MzJfdD4obV9ieXRl
Y29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbikpKTsKKyAgICBpZiAoIW1fZG9tYWluQWN0aW9ucyB8fCBtYXRjaGVzRG9t
YWluKGFjdGlvbiwgKm1fZG9tYWluQWN0aW9ucykpCisgICAgICAgIGFjdGlvbnMuYWRkKGFjdGlv
bik7CisgICAgCiAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3Vt
ZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOwogICAgIEFTU0VSVChp
bnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rp
b25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24p
ID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpKTsKQEAgLTEwMiwxNSArMTI2LDEyIEBAIHZv
aWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGUKICAgICBBU1NFUlQoZ2V0SW5z
dHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpID09
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbgogICAgICAg
ICB8fCBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFt
Q291bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKTsKICAgICB1aW50MTZfdCBmbGFnc1RvQ2hlY2sgPSBnZXRCaXRzPHVp
bnQxNl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNp
emVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSk7Ci0KLSAgICB1aW50MTZfdCBsb2FkVHlwZUZs
YWdzID0gZmxhZ3NUb0NoZWNrICYgTG9hZFR5cGVNYXNrOwotICAgIHVpbnQxNl90IHJlc3NvdXJj
ZVR5cGVGbGFncyA9IGZsYWdzVG9DaGVjayAmIFJlc291cmNlVHlwZU1hc2s7CiAgICAgCi0gICAg
Ym9vbCBsb2FkVHlwZU1hdGNoZXMgPSBsb2FkVHlwZUZsYWdzID8gKGxvYWRUeXBlRmxhZ3MgJiBm
bGFncykgOiB0cnVlOwotICAgIGJvb2wgcmVzc291cmNlVHlwZU1hdGNoZXMgPSByZXNzb3VyY2VU
eXBlRmxhZ3MgPyAocmVzc291cmNlVHlwZUZsYWdzICYgZmxhZ3MpIDogdHJ1ZTsKLSAgICAKLSAg
ICBpZiAobG9hZFR5cGVNYXRjaGVzICYmIHJlc3NvdXJjZVR5cGVNYXRjaGVzKQotICAgICAgICBh
Y3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihnZXRCaXRzPHVpbnQzMl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBw
cm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1
aW50MTZfdCkpKSk7CisgICAgaWYgKG1hdGNoZXNGbGFncyhmbGFncywgZmxhZ3NUb0NoZWNrKSkg
eworICAgICAgICB1aW50NjRfdCBhY3Rpb25BbmRGbGFncyA9IChpZkRvbWFpbiA/IElmRG9tYWlu
RmxhZyA6IDApIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmbGFnc1RvQ2hlY2spIDw8IDMyKSB8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVpbnQzMl90PihtX2J5dGVjb2RlLCBtX2J5
dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0
aW9uKSArIHNpemVvZih1aW50MTZfdCkpKTsKKyAgICAgICAgaWYgKCFtX2RvbWFpbkFjdGlvbnMg
fHwgbWF0Y2hlc0RvbWFpbihhY3Rpb25BbmRGbGFncywgKm1fZG9tYWluQWN0aW9ucykpCisgICAg
ICAgICAgICBhY3Rpb25zLmFkZChhY3Rpb25BbmRGbGFncyk7CisgICAgfQogICAgIHByb2dyYW1D
b3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25T
aXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CiB9CkBAIC0x
NDIsNiArMTYzLDE1IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMK
ICAgICByZXR1cm4gYWN0aW9uczsKIH0KICAgICAKK0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFj
dGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0V2l0aERvbWFpbnMoY29uc3Qg
Q1N0cmluZyYgdXJsQ1N0cmluZywgdWludDE2X3QgZmxhZ3MsIGNvbnN0IENhY2hlZERvbWFpbkFj
dGlvbnMmIGRvbWFpbkFjdGlvbnMpCit7CisgICAgQVNTRVJUKCFtX2RvbWFpbkFjdGlvbnMpOwor
ICAgIG1fZG9tYWluQWN0aW9ucyA9ICZkb21haW5BY3Rpb25zOworICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OkFjdGlvbnMgYWN0aW9ucyA9IGludGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7
CisgICAgbV9kb21haW5BY3Rpb25zID0gbnVsbHB0cjsKKyAgICByZXR1cm4gYWN0aW9uczsKK30K
KwogREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVy
OjppbnRlcnByZXQoY29uc3QgQ1N0cmluZyYgdXJsQ1N0cmluZywgdWludDE2X3QgZmxhZ3MpCiB7
CiAgICAgY29uc3QgY2hhciogdXJsID0gdXJsQ1N0cmluZy5kYXRhKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5oCShyZXZpc2lvbiAxODY2OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zIHsKIAordHlwZWRlZiBIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJfdCwgRGVmYXVsdEhh
c2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVp
bnQzMl90Pj4gQ2FjaGVkRG9tYWluQWN0aW9uczsgLy8gS2V5cyBhcmUgbG9jYXRpb25zLCB2YWx1
ZXMgYXJlIGZsYWdzLgorCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBERkFCeXRlY29kZUludGVycHJl
dGVyIHsKIHB1YmxpYzoKICAgICBERkFCeXRlY29kZUludGVycHJldGVyKGNvbnN0IERGQUJ5dGVj
b2RlKiBieXRlY29kZSwgdW5zaWduZWQgYnl0ZWNvZGVMZW5ndGgpCkBAIC01MCw2ICs1Miw3IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVpbnQ2
NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+
IEFjdGlvbnM7CiAgICAgCiAgICAgQWN0aW9ucyBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYsIHVp
bnQxNl90IGZsYWdzKTsKKyAgICBBY3Rpb25zIGludGVycHJldFdpdGhEb21haW5zKGNvbnN0IENT
dHJpbmcmLCB1aW50MTZfdCBmbGFncywgY29uc3QgQ2FjaGVkRG9tYWluQWN0aW9ucyYpOwogICAg
IEFjdGlvbnMgYWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QoKTsKIAogcHJp
dmF0ZToKQEAgLTU3LDYgKzYwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGludGVycHJldFRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZs
YWdzLCBBY3Rpb25zJiwgYm9vbCBpZkRvbWFpbik7CiAgICAgY29uc3QgREZBQnl0ZWNvZGUqIG1f
Ynl0ZWNvZGU7CiAgICAgY29uc3QgdW5zaWduZWQgbV9ieXRlY29kZUxlbmd0aDsKKyAgICBjb25z
dCBDYWNoZWREb21haW5BY3Rpb25zKiBtX2RvbWFpbkFjdGlvbnMgeyBudWxscHRyIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg2NzAwKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDctMTAg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBb
Q29udGVudCBFeHRlbnNpb25zXSBDYWNoZSBkb21haW4gYWN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2ODE3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VF9GKToKKyAgICAgICAgVGVzdCBpZi1kb21haW4gYW5kIHVubGVzcy1kb21haW4gd2l0aCBtdWx0
aXBsZSBsb2FkIHR5cGVzLgorCiAyMDE1LTA3LTEwICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVuYWJsZSB0byBkaXNtaXNzIGNvbnRleHQgbWVu
dSBkdXJpbmcgdGVzdCBydW5zCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4NjY5MykK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NSwxNyArNTQ1LDIxIEBAIFRFU1RfRihDb250ZW50RXh0
ZW5zaW9uVGVzdCwgRG9tYWluVHJpZ2cKICAgICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQy
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3czYy5vcmcvdGVzdF9ibG9ja19jb29r
aWVzLmh0bWwiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVz
IH0pOwogICAgIHRlc3RSZXF1ZXN0KGNvbWJpbmVkQmFja2VuZDIsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly9ub3RfdzNjLm9yZy90ZXN0X2Nzcy5odG1sL3Rlc3RfYmxvY2tfY29va2llcy5o
dG1sIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CiAK
LSAgICBhdXRvIGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
dGVzdFwiLCBcImlmLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl0sXCJyZXNvdXJjZS10eXBlXCI6
W1wiaW1hZ2VcIl19fV0iKTsKKyAgICBhdXRvIGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCA9IG1h
a2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwidGVzdFwiLCBcImlmLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl0s
XCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2VcIixcInNjcmlwdFwiXX19XSIpOwogICAgIHRlc3RS
ZXF1ZXN0KGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL3dlYmtpdC5vcmcvdGVzdC5odG1sIiksIHsgfSk7CiAgICAgdGVzdFJlcXVlc3QoaWZEb21h
aW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy90ZXN0LnBuZyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxh
Z3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90ZXN0Lmpz
IiwgUmVzb3VyY2VUeXBlOjpTY3JpcHQpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CiAgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxhZ3NCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5odG1sIiks
IHsgfSk7CiAgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5wbmciLCBSZXNvdXJjZVR5
cGU6OkltYWdlKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChpZkRvbWFpbldpdGhGbGFnc0JhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0LmpzIiwg
UmVzb3VyY2VUeXBlOjpTY3JpcHQpLCB7IH0pOwogCi0gICAgYXV0byB1bmxlc3NEb21haW5XaXRo
RmxhZ3NCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0XCIsIFwidW5sZXNzLWRvbWFp
blwiOltcIndlYmtpdC5vcmdcIl0sXCJyZXNvdXJjZS10eXBlXCI6W1wiaW1hZ2VcIl19fV0iKTsK
KyAgICBhdXRvIHVubGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcInRlc3RcIiwgXCJ1bmxlc3MtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wiXSxcInJlc291cmNl
LXR5cGVcIjpbXCJpbWFnZVwiLFwibWVkaWFcIl19fV0iKTsKICAgICB0ZXN0UmVxdWVzdCh1bmxl
c3NEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKICAgICB0ZXN0UmVxdWVzdCh1bmxlc3NEb21haW5X
aXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy90
ZXN0LnBuZyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHVu
bGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93
ZWJraXQub3JnL3Rlc3QubXA0IiwgUmVzb3VyY2VUeXBlOjpNZWRpYSksIHsgfSk7CiAgICAgdGVz
dFJlcXVlc3QodW5sZXNzRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOwogICAgIHRlc3RSZXF1
ZXN0KHVubGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHA6Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0LnBuZyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QodW5sZXNzRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL25vdF93ZWJraXQub3JnL3Rlc3QubXA0IiwgUmVzb3VyY2VUeXBlOjpNZWRpYSksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKIAogICAgIC8vIERvbWFp
bnMgc2hvdWxkIG5vdCBiZSBpbnRlcmVwdGVkIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgICAg
YXV0byBkb21haW5SZWdleEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RcXFxcLmh0
bWxcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZT9ia2l0Lm9yZ1wiXX19XSIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256802</attachid>
            <date>2015-07-14 15:24:32 -0700</date>
            <delta_ts>2015-07-14 16:45:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146817-20150714152324.patch</filename>
            <type>text/plain</type>
            <size>23806</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Njc4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA3LTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgZG9tYWluIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjgxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJpZ2h0IG5vdyB3ZSBydW4gcmVndWxhciBleHByZXNz
aW9ucyBvbiB0aGUgZG9tYWluIGV2ZXJ5IHRpbWUgd2UgaGF2ZSBhbnkgcnVsZXMgdGhhdCBtYXRj
aCB3aXRoIGlmLWRvbWFpbiBvciB1bmxlc3MtZG9tYWluLiAgCisgICAgICAgIFRoaXMgY2FjaGVz
IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgcmVndWxhciBleHByZXNzaW9ucyBvbiB0aGUgZG9tYWlu
IG9mIHRoZSBtYWluIGRvY3VtZW50J3MgdXJsIHNvIHdlIG9ubHkgbmVlZCB0byAKKyAgICAgICAg
cnVuIHRob3NlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlbiB0aGUgbWFpbiBkb2N1bWVudCBjaGFu
Z2VzIGRvbWFpbi4gIFdlIGFsc28gc3BlbmQgbGVzcyB0aW1lIGFkZGluZyB1bnVzZWQgYWN0aW9u
cyBpbnRvIEhhc2hTZXRzLgorCisgICAgICAgIEFsbCBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIGFwaSB0ZXN0cywgYnV0IEkgYWRkZWQgc29tZSB0byBleHBsaWNpdGx5IHRlc3QgaWYt
ZG9tYWluIGFuZCB1bmxlc3MtZG9tYWluIHdpdGggbXVsdGlwbGUgbG9hZCB0eXBlcy4KKworICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246Omdsb2JhbERpc3Bs
YXlOb25lU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbjo6Y2FjaGVkRG9tYWluQWN0aW9ucyk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246OmlkZW50aWZpZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246OmNvbXBpbGVkRXh0ZW5z
aW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291cmNlTG9hZCk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0SnVtcERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjptYXRjaGVzRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6Om1hdGNoZXNEb21haW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25z
Rm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0V2l0aERvbWFp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXI6OmludGVycHJldCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oOgorCiAyMDE1LTA3LTEzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdo
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBXZWJDb3JlIEZlYXR1cmVzLmpzb24KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODY3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiAr
NzUsMjEgQEAgU3R5bGVTaGVldENvbnRlbnRzKiBDb250ZW50RXh0ZW5zaW9uOjpnbAogICAgIHJl
dHVybiBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldC5nZXQoKTsKIH0KIAorY29uc3QgQ2Fj
aGVkRG9tYWluQWN0aW9ucyYgQ29udGVudEV4dGVuc2lvbjo6Y2FjaGVkRG9tYWluQWN0aW9ucyhj
b25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBpZiAobV9jYWNoZWREb21haW4gIT0gZG9tYWlu
KSB7CisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIobV9jb21waWxl
ZEV4dGVuc2lvbi0+ZG9tYWluRmlsdGVyc0J5dGVjb2RlKCksIG1fY29tcGlsZWRFeHRlbnNpb24t
PmRvbWFpbkZpbHRlcnNCeXRlY29kZUxlbmd0aCgpKTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qg
YWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyA9IExvYWRUeXBlTWFzayB8IFJlc291cmNlVHlw
ZU1hc2s7CisgICAgICAgIGF1dG8gZG9tYWluQWN0aW9ucyA9IGludGVycHJldGVyLmludGVycHJl
dChkb21haW4udXRmOCgpLCBhbGxMb2FkVHlwZXNBbmRSZXNvdXJjZVR5cGVzKTsKKyAgICAgICAg
CisgICAgICAgIG1fY2FjaGVkRG9tYWluQWN0aW9ucy5jbGVhcigpOworICAgICAgICBmb3IgKHVp
bnQ2NF90IGFjdGlvbiA6IGRvbWFpbkFjdGlvbnMpCisgICAgICAgICAgICBtX2NhY2hlZERvbWFp
bkFjdGlvbnMuYWRkKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb24pLCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYWN0aW9uID4+IDMyKSk7CisgICAgICAgIG1fY2FjaGVkRG9tYWluID0gZG9tYWlu
OworICAgIH0KKyAgICByZXR1cm4gbV9jYWNoZWREb21haW5BY3Rpb25zOworfQorICAgIAogfSAv
LyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uaAkocmV2aXNpb24gMTg2NzY2KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSAiREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBj
b25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVkRXh0ZW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsgfQogICAgIFN0eWxlU2hlZXRDb250
ZW50cyogZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7CisgICAgY29uc3QgQ2FjaGVkRG9t
YWluQWN0aW9ucyYgY2FjaGVkRG9tYWluQWN0aW9ucyhjb25zdCBTdHJpbmcmIGRvbWFpbik7CiAK
IHByaXZhdGU6CiAgICAgQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYpOwpAQCAtNTUsNiArNTcsOSBAQCBwcml2
YXRlOgogICAgIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNp
b247CiAgICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQ7CiAgICAgYm9vbCBtX3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldDsK
KyAgICAKKyAgICBTdHJpbmcgbV9jYWNoZWREb21haW47CisgICAgQ2FjaGVkRG9tYWluQWN0aW9u
cyBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxODY3NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw0NyArOTAsMjIgQEAgVmVjdG9yPEFjdGlv
bj4gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOgogICAgICAgICBjb25zdCBDb21waWxlZENvbnRl
bnRFeHRlbnNpb24mIGNvbXBpbGVkRXh0ZW5zaW9uID0gY29udGVudEV4dGVuc2lvbi0+Y29tcGls
ZWRFeHRlbnNpb24oKTsKICAgICAgICAgCiAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIg
d2l0aG91dERvbWFpbnNJbnRlcnByZXRlcihjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aG91
dERvbWFpbnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aG91dERvbWFp
bnNCeXRlY29kZUxlbmd0aCgpKTsKLSAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gd2l0aG91dERvbWFpbnNJbnRlcnByZXRlci5pbnRlcnBy
ZXQodXJsQ1N0cmluZywgZmxhZ3MpOworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpB
Y3Rpb25zIHdpdGhvdXREb21haW5zQWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIu
aW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKICAgICAgICAgCi0gICAgICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGFjdGlvbnMgdHJpZ2dlcmVkIHdpdGggaWYtIG9yIHVu
bGVzcy1kb21haW4gYW5kIGNoZWNrIHRoZSBkb21haW4gaWYgdGhlcmUgYXJlLgogICAgICAgICBE
RkFCeXRlY29kZUludGVycHJldGVyIHdpdGhEb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRFeHRl
bnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSwgY29tcGlsZWRFeHRlbnNpb24uZmls
dGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAgIAotICAgICAgICBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIHdpdGhEb21haW5zUG9zc2libGVBY3Rpb25zID0g
d2l0aERvbWFpbnNJbnRlcnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZywgZmxhZ3MpOwotICAg
ICAgICBpZiAoIXdpdGhEb21haW5zUG9zc2libGVBY3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBkb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRF
eHRlbnNpb24uZG9tYWluRmlsdGVyc0J5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5zaW9uLmRvbWFp
bkZpbHRlcnNCeXRlY29kZUxlbmd0aCgpKTsKLSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OkFjdGlvbnMgZG9tYWluc0FjdGlvbnMgPSBkb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJw
cmV0KHJlc291cmNlTG9hZEluZm8ubWFpbkRvY3VtZW50VVJMLmhvc3QoKS51dGY4KCksIGZsYWdz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyBpZkRvbWFpbkFjdGlvbnM7Ci0gICAgICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVy
OjpBY3Rpb25zIHVubGVzc0RvbWFpbkFjdGlvbnM7Ci0gICAgICAgICAgICBmb3IgKHVpbnQ2NF90
IGFjdGlvbiA6IGRvbWFpbnNBY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiAm
IElmRG9tYWluRmxhZykKLSAgICAgICAgICAgICAgICAgICAgaWZEb21haW5BY3Rpb25zLmFkZChh
Y3Rpb24pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdW5sZXNz
RG9tYWluQWN0aW9ucy5hZGQoYWN0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiB3aXRoRG9tYWluc1Bvc3NpYmxlQWN0
aW9ucykgewotICAgICAgICAgICAgICAgIGlmIChpZkRvbWFpbkFjdGlvbnMuY29udGFpbnMoYWN0
aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBpZi1kb21haW4gdHJpZ2dlciBt
YXRjaGVzLCBhZGQgdGhlIGFjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFjdGlv
biAmIElmRG9tYWluRmxhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZEFjdGlvbnMu
YWRkKGFjdGlvbiAmIH5JZkRvbWFpbkZsYWcpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IShhY3Rpb24gJiBJZkRvbWFpbkZsYWcpICYmICF1bmxlc3NEb21haW5BY3Rpb25zLmNvbnRhaW5z
KGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhY3Rpb24gZGlkIG5v
dCBuZWVkIGFuIGlmLWRvbWFpbiwgaXQgbXVzdCBoYXZlIGJlZW4gYW4gdW5sZXNzLWRvbWFpbiBy
dWxlLgotICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGFjdGlvbiB1bmxlc3MgaXQgbWF0
Y2hlZCBhbiB1bmxlc3MtZG9tYWluIHRyaWdnZXIuCi0gICAgICAgICAgICAgICAgICAgIHRyaWdn
ZXJlZEFjdGlvbnMuYWRkKGFjdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgd2l0
aERvbWFpbnNBY3Rpb25zID0gd2l0aERvbWFpbnNJbnRlcnByZXRlci5pbnRlcnByZXRXaXRoRG9t
YWlucyh1cmxDU3RyaW5nLCBmbGFncywgY29udGVudEV4dGVuc2lvbi0+Y2FjaGVkRG9tYWluQWN0
aW9ucyhyZXNvdXJjZUxvYWRJbmZvLm1haW5Eb2N1bWVudFVSTC5ob3N0KCkpKTsKICAgICAgICAg
CiAgICAgICAgIGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zID0gY29tcGlsZWRF
eHRlbnNpb24uYWN0aW9ucygpOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3Ro
ID0gY29tcGlsZWRFeHRlbnNpb24uYWN0aW9uc0xlbmd0aCgpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBzYXdJZ25vcmVQcmV2aW91c1J1bGVzID0gZmFsc2U7Ci0gICAgICAgIGlmICghdHJpZ2dl
cmVkQWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWN0
aW9uTG9jYXRpb25zOwotICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkodHJpZ2dlcmVkQWN0aW9ucy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRv
IGFjdGlvbkxvY2F0aW9uIDogdHJpZ2dlcmVkQWN0aW9ucykKLSAgICAgICAgICAgICAgICBhY3Rp
b25Mb2NhdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb25Mb2NhdGlvbikp
OworICAgICAgICBpZiAoIXdpdGhvdXREb21haW5zQWN0aW9ucy5pc0VtcHR5KCkgfHwgIXdpdGhE
b21haW5zQWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4g
YWN0aW9uTG9jYXRpb25zOworICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkod2l0aG91dERvbWFpbnNBY3Rpb25zLnNpemUoKSArIHdpdGhEb21haW5zQWN0
aW9ucy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6
IHdpdGhvdXREb21haW5zQWN0aW9ucykKKyAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMu
dW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb25Mb2NhdGlvbikpOwor
ICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6IHdpdGhEb21haW5zQWN0
aW9ucykKKyAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMudW5jaGVja2VkQXBwZW5kKHN0
YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb25Mb2NhdGlvbikpOwogICAgICAgICAgICAgc3RkOjpz
b3J0KGFjdGlvbkxvY2F0aW9ucy5iZWdpbigpLCBhY3Rpb25Mb2NhdGlvbnMuZW5kKCkpOwogCiAg
ICAgICAgICAgICAvLyBBZGQgYWN0aW9ucyBpbiByZXZlcnNlIG9yZGVyIHRvIHByb3Blcmx5IGRl
YWwgd2l0aCBJZ25vcmVQcmV2aW91c1J1bGVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJ
KHJldmlzaW9uIDE4Njc2NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMzYg
QEAgc3RhdGljIGlubGluZSBpbnQzMl90IGdldEp1bXBEaXN0YW5jZShjbwogICAgIH0KIH0KIAor
c3RhdGljIGlubGluZSBib29sIG1hdGNoZXNGbGFncyh1aW50MTZfdCBmbGFnc0Zyb21Mb2FkLCB1
aW50MTZfdCBmbGFnc1RvQ2hlY2spCit7CisgICAgdWludDE2X3QgbG9hZFR5cGVGbGFncyA9IGZs
YWdzVG9DaGVjayAmIExvYWRUeXBlTWFzazsKKyAgICB1aW50MTZfdCByZXNzb3VyY2VUeXBlRmxh
Z3MgPSBmbGFnc1RvQ2hlY2sgJiBSZXNvdXJjZVR5cGVNYXNrOworICAgIGJvb2wgbG9hZFR5cGVN
YXRjaGVzID0gbG9hZFR5cGVGbGFncyA/IChsb2FkVHlwZUZsYWdzICYgZmxhZ3NGcm9tTG9hZCkg
OiB0cnVlOworICAgIGJvb2wgcmVzc291cmNlVHlwZU1hdGNoZXMgPSByZXNzb3VyY2VUeXBlRmxh
Z3MgPyAocmVzc291cmNlVHlwZUZsYWdzICYgZmxhZ3NGcm9tTG9hZCkgOiB0cnVlOworICAgIHJl
dHVybiBsb2FkVHlwZU1hdGNoZXMgJiYgcmVzc291cmNlVHlwZU1hdGNoZXM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBtYXRjaGVzRG9tYWluKHVpbnQ2NF90IGFjdGlvbkFuZEZsYWdzLCBjb25z
dCBDYWNoZWREb21haW5BY3Rpb25zJiBkb21haW5BY3Rpb25zKQoreworICAgIGF1dG8gaXQgPSBk
b21haW5BY3Rpb25zLmZpbmQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbkFuZEZsYWdzKSk7
CisgICAgaWYgKGl0ID09IGRvbWFpbkFjdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybiAhKGFj
dGlvbkFuZEZsYWdzICYgSWZEb21haW5GbGFnKTsKKyAgICAKKyAgICB1aW50MzJfdCBmbGFncyA9
IGl0LT52YWx1ZTsKKyAgICBpZiAoZmxhZ3MgJiAoSWZEb21haW5GbGFnID4+IDMyKSkKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXNGbGFncyhzdGF0aWNfY2FzdDx1aW50MTZfdD4oYWN0aW9uQW5kRmxh
Z3MgPj4gMzIpLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZmxhZ3MpKTsKKyAgICByZXR1cm4gIW1h
dGNoZXNGbGFncyhzdGF0aWNfY2FzdDx1aW50MTZfdD4oYWN0aW9uQW5kRmxhZ3MgPj4gMzIpLCBz
dGF0aWNfY2FzdDx1aW50MTZfdD4oZmxhZ3MpKTsKK30KKwogdm9pZCBERkFCeXRlY29kZUludGVy
cHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24odWludDMyX3QmIHByb2dyYW1Db3VudGVyLCBB
Y3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQogewogICAgIEFTU0VSVChnZXRJbnN0cnVj
dGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgPT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCiAgICAgICAgIHx8IGdldEluc3RydWN0
aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSA9PSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4KICAgICAgICAgfHwg
Z2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNo
ZWV0KTsKLSAgICBhY3Rpb25zLmFkZCgoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVpbnQzMl90PihtX2J5dGVjb2RlLCBtX2J5dGVj
b2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSkpKTsKKyAgICB1aW50NjRfdCBhY3Rpb24gPSAoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAw
KSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVpbnQzMl90PihtX2J5dGVjb2RlLCBt
X2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3Ry
dWN0aW9uKSkpOworICAgIGlmICghbV9kb21haW5BY3Rpb25zIHx8IG1hdGNoZXNEb21haW4oYWN0
aW9uLCAqbV9kb21haW5BY3Rpb25zKSkKKyAgICAgICAgYWN0aW9ucy5hZGQoYWN0aW9uKTsKKyAg
ICAKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgQVNTRVJUKGluc3RydWN0
aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9u
KSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikgPT0gaW5z
dHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRB
Y3Rpb25EZWZhdWx0U3R5bGVzaGVldCkpOwpAQCAtMTAyLDE1ICsxMjYsMTIgQEAgdm9pZCBERkFC
eXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRUZQogICAgIEFTU0VSVChnZXRJbnN0cnVjdGlv
bihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uCiAgICAgICAgIHx8IGdl
dEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVy
KSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRo
SWZEb21haW4pOwogICAgIHVpbnQxNl90IGZsYWdzVG9DaGVjayA9IGdldEJpdHM8dWludDE2X3Q+
KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKTsKLQotICAgIHVpbnQxNl90IGxvYWRUeXBlRmxhZ3MgPSBm
bGFnc1RvQ2hlY2sgJiBMb2FkVHlwZU1hc2s7Ci0gICAgdWludDE2X3QgcmVzc291cmNlVHlwZUZs
YWdzID0gZmxhZ3NUb0NoZWNrICYgUmVzb3VyY2VUeXBlTWFzazsKICAgICAKLSAgICBib29sIGxv
YWRUeXBlTWF0Y2hlcyA9IGxvYWRUeXBlRmxhZ3MgPyAobG9hZFR5cGVGbGFncyAmIGZsYWdzKSA6
IHRydWU7Ci0gICAgYm9vbCByZXNzb3VyY2VUeXBlTWF0Y2hlcyA9IHJlc3NvdXJjZVR5cGVGbGFn
cyA/IChyZXNzb3VyY2VUeXBlRmxhZ3MgJiBmbGFncykgOiB0cnVlOwotICAgIAotICAgIGlmIChs
b2FkVHlwZU1hdGNoZXMgJiYgcmVzc291cmNlVHlwZU1hdGNoZXMpCi0gICAgICAgIGFjdGlvbnMu
YWRkKChpZkRvbWFpbiA/IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQxNl90
KSkpKTsKKyAgICBpZiAobWF0Y2hlc0ZsYWdzKGZsYWdzLCBmbGFnc1RvQ2hlY2spKSB7CisgICAg
ICAgIHVpbnQ2NF90IGFjdGlvbkFuZEZsYWdzID0gKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDog
MCkgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZsYWdzVG9DaGVjaykgPDwgMzIpIHwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVM
ZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsg
c2l6ZW9mKHVpbnQxNl90KSkpOworICAgICAgICBpZiAoIW1fZG9tYWluQWN0aW9ucyB8fCBtYXRj
aGVzRG9tYWluKGFjdGlvbkFuZEZsYWdzLCAqbV9kb21haW5BY3Rpb25zKSkKKyAgICAgICAgICAg
IGFjdGlvbnMuYWRkKGFjdGlvbkFuZEZsYWdzKTsKKyAgICB9CiAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpU
ZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pOwogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9u
OjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKIH0KQEAgLTE0Miw2ICsx
NjMsMTUgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgIHJl
dHVybiBhY3Rpb25zOwogfQogICAgIAorREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBE
RkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRXaXRoRG9tYWlucyhjb25zdCBDU3RyaW5n
JiB1cmxDU3RyaW5nLCB1aW50MTZfdCBmbGFncywgY29uc3QgQ2FjaGVkRG9tYWluQWN0aW9ucyYg
ZG9tYWluQWN0aW9ucykKK3sKKyAgICBBU1NFUlQoIW1fZG9tYWluQWN0aW9ucyk7CisgICAgbV9k
b21haW5BY3Rpb25zID0gJmRvbWFpbkFjdGlvbnM7CisgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyBhY3Rpb25zID0gaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKKyAgICBt
X2RvbWFpbkFjdGlvbnMgPSBudWxscHRyOworICAgIHJldHVybiBhY3Rpb25zOworfQorCiBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVy
cHJldChjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nLCB1aW50MTZfdCBmbGFncykKIHsKICAgICBj
b25zdCBjaGFyKiB1cmwgPSB1cmxDU3RyaW5nLmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmgJKHJldmlzaW9uIDE4Njc2NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMg
ewogCit0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90LCBEZWZhdWx0SGFzaDx1aW50
MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+
PiBDYWNoZWREb21haW5BY3Rpb25zOyAvLyBLZXlzIGFyZSBsb2NhdGlvbnMsIHZhbHVlcyBhcmUg
ZmxhZ3MuCisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgewog
cHVibGljOgogICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIoY29uc3QgREZBQnl0ZWNvZGUqIGJ5
dGVjb2RlLCB1bnNpZ25lZCBieXRlY29kZUxlbmd0aCkKQEAgLTUwLDYgKzUyLDcgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWludDY0X3Q+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4gQWN0aW9u
czsKICAgICAKICAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBDU3RyaW5nJiwgdWludDE2X3Qg
ZmxhZ3MpOworICAgIEFjdGlvbnMgaW50ZXJwcmV0V2l0aERvbWFpbnMoY29uc3QgQ1N0cmluZyYs
IHVpbnQxNl90IGZsYWdzLCBjb25zdCBDYWNoZWREb21haW5BY3Rpb25zJik7CiAgICAgQWN0aW9u
cyBhY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpOwogCiBwcml2YXRlOgpA
QCAtNTcsNiArNjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW50ZXJwcmV0VGVzdEZsYWdzQW5k
QXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFj
dGlvbnMmLCBib29sIGlmRG9tYWluKTsKICAgICBjb25zdCBERkFCeXRlY29kZSogbV9ieXRlY29k
ZTsKICAgICBjb25zdCB1bnNpZ25lZCBtX2J5dGVjb2RlTGVuZ3RoOworICAgIGNvbnN0IENhY2hl
ZERvbWFpbkFjdGlvbnMqIG1fZG9tYWluQWN0aW9ucyB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODY1MTcpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wNy0xNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50
IEV4dGVuc2lvbnNdIENhY2hlIGRvbWFpbiBhY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY4MTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgor
ICAgICAgICBUZXN0IGlmLWRvbWFpbiBhbmQgdW5sZXNzLWRvbWFpbiB3aXRoIG11bHRpcGxlIGxv
YWQgdHlwZXMuCisKIDIwMTUtMDctMDggIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xv
cGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gW1dheWxhbmRdIEFsbG93IGJ1aWxkaW5n
IGFuZCB0ZXN0aW5nIHRoZSBXYXlsYW5kIHRhcmdldCB3aXRoIHRoZSBkZWZhdWx0IEpIQnVpbGQg
bW9kdWxlc2V0LgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRl
bnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODY3NjYpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NDUsMTcgKzU0NSwyMSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRl
c3QsIERvbWFpblRyaWdnCiAgICAgdGVzdFJlcXVlc3QoY29tYmluZWRCYWNrZW5kMiwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93M2Mub3JnL3Rlc3RfYmxvY2tfY29va2llcy5odG1s
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9KTsKICAg
ICB0ZXN0UmVxdWVzdChjb21iaW5lZEJhY2tlbmQyLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vbm90X3czYy5vcmcvdGVzdF9jc3MuaHRtbC90ZXN0X2Jsb2NrX2Nvb2tpZXMuaHRtbCIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzIH0pOwogCi0gICAgYXV0
byBpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInRlc3RcIiwg
XCJpZi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdLFwicmVzb3VyY2UtdHlwZVwiOltcImltYWdl
XCJdfX1dIik7CisgICAgYXV0byBpZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcInRlc3RcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdLFwicmVzb3Vy
Y2UtdHlwZVwiOltcImltYWdlXCIsXCJzY3JpcHRcIl19fV0iKTsKICAgICB0ZXN0UmVxdWVzdChp
ZkRvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOwogICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluV2l0aEZs
YWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5w
bmciLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluV2l0aEZsYWdzQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5qcyIsIFJlc291
cmNlVHlwZTo6U2NyaXB0KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOwogICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3QuaHRtbCIpLCB7IH0pOwog
ICAgIHRlc3RSZXF1ZXN0KGlmRG9tYWluV2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiaHR0cDovL25vdF93ZWJraXQub3JnL3Rlc3QucG5nIiwgUmVzb3VyY2VUeXBlOjpJbWFn
ZSksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoaWZEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90X3dlYmtpdC5vcmcvdGVzdC5qcyIsIFJlc291cmNl
VHlwZTo6U2NyaXB0KSwgeyB9KTsKIAotICAgIGF1dG8gdW5sZXNzRG9tYWluV2l0aEZsYWdzQmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdFwiLCBcInVubGVzcy1kb21haW5cIjpbXCJ3
ZWJraXQub3JnXCJdLFwicmVzb3VyY2UtdHlwZVwiOltcImltYWdlXCJdfX1dIik7CisgICAgYXV0
byB1bmxlc3NEb21haW5XaXRoRmxhZ3NCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0
XCIsIFwidW5sZXNzLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl0sXCJyZXNvdXJjZS10eXBlXCI6
W1wiaW1hZ2VcIixcIm1lZGlhXCJdfX1dIik7CiAgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWlu
V2l0aEZsYWdzQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
dGVzdC5odG1sIiksIHsgfSk7CiAgICAgdGVzdFJlcXVlc3QodW5sZXNzRG9tYWluV2l0aEZsYWdz
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdGVzdC5wbmci
LCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCh1bmxlc3NEb21h
aW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy90ZXN0Lm1wNCIsIFJlc291cmNlVHlwZTo6TWVkaWEpLCB7IH0pOwogICAgIHRlc3RSZXF1ZXN0
KHVubGVzc0RvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly9ub3Rfd2Via2l0Lm9yZy90ZXN0Lmh0bWwiKSwgeyB9KTsKICAgICB0ZXN0UmVxdWVzdCh1bmxl
c3NEb21haW5XaXRoRmxhZ3NCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vbm90
X3dlYmtpdC5vcmcvdGVzdC5wbmciLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHVubGVz
c0RvbWFpbldpdGhGbGFnc0JhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9ub3Rf
d2Via2l0Lm9yZy90ZXN0Lm1wNCIsIFJlc291cmNlVHlwZTo6TWVkaWEpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CiAKICAgICAvLyBEb21haW5zIHNob3Vs
ZCBub3QgYmUgaW50ZXJlcHRlZCBhcyByZWd1bGFyIGV4cHJlc3Npb25zLgogICAgIGF1dG8gZG9t
YWluUmVnZXhCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ0ZXN0XFxcXC5odG1sXCIsIFwi
aWYtZG9tYWluXCI6W1wid2U/YmtpdC5vcmdcIl19fV0iKTsKQEAgLTEwNDUsNiArMTA0OSwzOCBA
QCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIE1hdGNoZXNFdmVyCiAgICAgICAgICJ7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhp
ZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwifX1dIik7CiAgICAgRVhQ
RUNUX0VRKG51bGxwdHIsIGJhY2tlbmQ1Lmdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldChBU0NJ
SUxpdGVyYWwoInRlc3RGaWx0ZXIiKSkpOwogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ1LCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0sIHRydWUpOworICAgIAorICAg
IGF1dG8gYmFja2VuZDYgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJpZi1kb21haW5cIjpb
XCJ3ZWJraXQub3JnXCIsXCIqdzNjLm9yZ1wiXSxcInJlc291cmNlLXR5cGVcIjpbXCJkb2N1bWVu
dFwiLFwic2NyaXB0XCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdu
b3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImlnbm9y
ZVwiLFwiaWYtZG9tYWluXCI6W1wiKndlYmtpdC5vcmdcIixcInczYy5vcmdcIl19fSwiCisgICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIi4qXCIsXCJ1bmxlc3MtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wi
LFwid2hhdHdnLm9yZ1wiXSxcInJlc291cmNlLXR5cGVcIjpbXCJzY3JpcHRcIixcImltYWdlXCJd
LFwibG9hZC10eXBlXCI6W1widGhpcmQtcGFydHlcIl19fV0iKTsKKyAgICBFWFBFQ1RfRVEobnVs
bHB0ciwgYmFja2VuZDYuZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KEFTQ0lJTGl0ZXJhbCgi
dGVzdEZpbHRlciIpKSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHA6Ly93ZWJraXQub3JnIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3czYy5vcmciKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2hhdHdnLm9yZyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQ2LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vc3ViLndlYmtpdC5vcmciKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3N1
Yi53M2Mub3JnIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9
KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3N1Yi53aGF0d2cub3JnIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2lnbm9yZSIpLCB7IH0sIHRydWUpOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vdzNj
Lm9yZy9pZ25vcmUiKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmcvaWdub3JlIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZDYsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9zdWIud2Vi
a2l0Lm9yZy9pZ25vcmUiKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3N1Yi53M2Mub3JnL2lnbm9yZSIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZDYsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9zdWIud2hhdHdnLm9yZy9pZ25v
cmUiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0
KCJodHRwOi8vZXhhbXBsZS5jb20vaW1hZ2UucG5nIiwgImh0dHA6Ly93ZWJraXQub3JnLyIsIFJl
c291cmNlVHlwZTo6SW1hZ2UpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBzdWJS
ZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS9pbWFnZS5wbmciLCAiaHR0cDovL3cz
Yy5vcmcvIiwgUmVzb3VyY2VUeXBlOjpJbWFnZSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVz
b3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vZG9jLmh0bWwiLCAiaHR0cDovL3dlYmtp
dC5vcmcvIiwgUmVzb3VyY2VUeXBlOjpEb2N1bWVudCksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVz
b3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vc2NyaXB0LmpzIiwgImh0dHA6Ly93ZWJr
aXQub3JnLyIsIFJlc291cmNlVHlwZTo6U2NyaXB0KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBzdWJSZXNv
dXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS9zY3JpcHQuanMiLCAiaHR0cDovL3czYy5v
cmcvIiwgUmVzb3VyY2VUeXBlOjpTY3JpcHQpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0
cDovL2V4YW1wbGUuY29tL3NjcmlwdC5qcyIsICJodHRwOi8vZXhhbXBsZS5jb20vIiwgUmVzb3Vy
Y2VUeXBlOjpTY3JpcHQpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBzdWJSZXNv
dXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS9pZ25vcmUvaW1hZ2UucG5nIiwgImh0dHA6
Ly93ZWJraXQub3JnLyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IH0sIHRydWUpOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQ2LCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNv
bS9pZ25vcmUvaW1hZ2UucG5nIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBSZXNvdXJjZVR5cGU6
OkltYWdlKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1
ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vaWdub3JlL2ltYWdlLnBuZyIsICJodHRwOi8vZXhhbXBs
ZS5vcmcvIiwgUmVzb3VyY2VUeXBlOjpJbWFnZSksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVz
b3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vZG9jLmh0bWwiLCAiaHR0cDovL2V4YW1w
bGUub3JnLyIsIFJlc291cmNlVHlwZTo6RG9jdW1lbnQpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0
KGJhY2tlbmQ2LCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAiaHR0
cDovL2V4YW1wbGUuY29tLyIsIFJlc291cmNlVHlwZTo6Rm9udCksIHsgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL2ln
bm9yZSIsICJodHRwOi8vd2Via2l0Lm9yZy8iLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyB9LCB0
cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRw
Oi8vZXhhbXBsZS5jb20vaWdub3JlIiwgImh0dHA6Ly93ZWJraXQub3JnLyIsIFJlc291cmNlVHlw
ZTo6Rm9udCksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIHN1YlJlc291
cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJodHRwOi8vZXhhbXBsZS5jb20vIiwg
UmVzb3VyY2VUeXBlOjpTY3JpcHQpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBz
dWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS9pZ25vcmUiLCAiaHR0cDovL2V4
YW1wbGUuY29tLyIsIFJlc291cmNlVHlwZTo6U2NyaXB0KSwgeyB9KTsKIH0KICAgICAKIFRFU1Rf
RihDb250ZW50RXh0ZW5zaW9uVGVzdCwgSW52YWxpZEpTT04pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256809</attachid>
            <date>2015-07-14 16:45:39 -0700</date>
            <delta_ts>2015-07-16 14:41:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146817-20150714164432.patch</filename>
            <type>text/plain</type>
            <size>19496</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Njc4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTA3LTE0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgZG9tYWluIGFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjgxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJpZ2h0IG5vdyB3ZSBydW4gcmVndWxhciBleHByZXNz
aW9ucyBvbiB0aGUgZG9tYWluIGV2ZXJ5IHRpbWUgd2UgaGF2ZSBhbnkgcnVsZXMgdGhhdCBtYXRj
aCB3aXRoIGlmLWRvbWFpbiBvciB1bmxlc3MtZG9tYWluLiAgCisgICAgICAgIFRoaXMgY2FjaGVz
IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgcmVndWxhciBleHByZXNzaW9ucyBvbiB0aGUgZG9tYWlu
IG9mIHRoZSBtYWluIGRvY3VtZW50J3MgdXJsIHNvIHdlIG9ubHkgbmVlZCB0byAKKyAgICAgICAg
cnVuIHRob3NlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlbiB0aGUgbWFpbiBkb2N1bWVudCBjaGFu
Z2VzIGRvbWFpbi4gIFdlIGFsc28gc3BlbmQgbGVzcyB0aW1lIGFkZGluZyB1bnVzZWQgYWN0aW9u
cyBpbnRvIEhhc2hTZXRzLgorCisgICAgICAgIEFsbCBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIGFwaSB0ZXN0cywgYnV0IEkgYWRkZWQgc29tZSB0byBleHBsaWNpdGx5IHRlc3QgaWYt
ZG9tYWluIGFuZCB1bmxlc3MtZG9tYWluIHdpdGggbXVsdGlwbGUgbG9hZCB0eXBlcy4KKworICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246Omdsb2JhbERpc3Bs
YXlOb25lU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbjo6Y2FjaGVkRG9tYWluQWN0aW9ucyk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246OmlkZW50aWZpZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246OmNvbXBpbGVkRXh0ZW5z
aW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291cmNlTG9hZCk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0SnVtcERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjptYXRjaGVzRG9tYWluKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRB
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0
aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFdpdGhE
b21haW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUludGVycHJldGVyOjppbnRlcnByZXQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaDoKKwogMjAxNS0wNy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgV2ViQ29yZSBGZWF0dXJlcy5qc29u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTg2NzY2KQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDYgKzc1LDIxIEBAIFN0eWxlU2hlZXRDb250ZW50cyogQ29udGVudEV4dGVuc2lvbjo6Z2wKICAg
ICByZXR1cm4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKK2NvbnN0
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIENvbnRlbnRFeHRlbnNpb246OmNhY2hl
ZERvbWFpbkFjdGlvbnMoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgaWYgKG1fY2FjaGVk
RG9tYWluICE9IGRvbWFpbikgeworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVy
cHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBtX2Nv
bXBpbGVkRXh0ZW5zaW9uLT5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgICAg
IGNvbnN0IHVpbnQxNl90IGFsbExvYWRUeXBlc0FuZFJlc291cmNlVHlwZXMgPSBMb2FkVHlwZU1h
c2sgfCBSZXNvdXJjZVR5cGVNYXNrOworICAgICAgICBhdXRvIGRvbWFpbkFjdGlvbnMgPSBpbnRl
cnByZXRlci5pbnRlcnByZXQoZG9tYWluLnV0ZjgoKSwgYWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VU
eXBlcyk7CisgICAgICAgIAorICAgICAgICBtX2NhY2hlZERvbWFpbkFjdGlvbnMuY2xlYXIoKTsK
KyAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBkb21haW5BY3Rpb25zKQorICAgICAgICAg
ICAgbV9jYWNoZWREb21haW5BY3Rpb25zLmFkZChhY3Rpb24pOworICAgICAgICBtX2NhY2hlZERv
bWFpbiA9IGRvbWFpbjsKKyAgICB9CisgICAgcmV0dXJuIG1fY2FjaGVkRG9tYWluQWN0aW9uczsK
K30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4Njc2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2lu
Y2x1ZGUgIkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNiArNDgsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CiAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVu
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KICAgICBT
dHlsZVNoZWV0Q29udGVudHMqIGdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOworICAgIGNv
bnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIGNhY2hlZERvbWFpbkFjdGlvbnMo
Y29uc3QgU3RyaW5nJiBkb21haW4pOwogCiBwcml2YXRlOgogICAgIENvbnRlbnRFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYm
KTsKQEAgLTU1LDYgKzU3LDkgQEAgcHJpdmF0ZToKICAgICBSZWY8Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVu
dHM+IG1fZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9wYXJzZWRHbG9i
YWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ7CisgICAgCisgICAgU3RyaW5nIG1fY2FjaGVkRG9tYWlu
OworICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgbV9jYWNoZWREb21haW5BY3Rp
b25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTg2NzY2KQorKysgU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNDcgKzkwLDIyIEBAIFZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25z
QmFja2VuZDoKICAgICAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxl
ZEV4dGVuc2lvbiA9IGNvbnRlbnRFeHRlbnNpb24tPmNvbXBpbGVkRXh0ZW5zaW9uKCk7CiAgICAg
ICAgIAogICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIHdpdGhvdXREb21haW5zSW50ZXJw
cmV0ZXIoY29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwg
Y29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7
Ci0gICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgdHJpZ2dlcmVkQWN0aW9u
cyA9IHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdz
KTsKKyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRob3V0RG9tYWlu
c0FjdGlvbnMgPSB3aXRob3V0RG9tYWluc0ludGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5n
LCBmbGFncyk7CiAgICAgICAgIAotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJl
IGFueSBhY3Rpb25zIHRyaWdnZXJlZCB3aXRoIGlmLSBvciB1bmxlc3MtZG9tYWluIGFuZCBjaGVj
ayB0aGUgZG9tYWluIGlmIHRoZXJlIGFyZS4KICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
ciB3aXRoRG9tYWluc0ludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9t
YWluc0J5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVj
b2RlTGVuZ3RoKCkpOwotICAgICAgICAKLSAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
QWN0aW9ucyB3aXRoRG9tYWluc1Bvc3NpYmxlQWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0
ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKLSAgICAgICAgaWYgKCF3aXRoRG9tYWlu
c1Bvc3NpYmxlQWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIgZG9tYWluc0ludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmRvbWFpbkZpbHRl
cnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5n
dGgoKSk7Ci0gICAgICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGRvbWFp
bnNBY3Rpb25zID0gZG9tYWluc0ludGVycHJldGVyLmludGVycHJldChyZXNvdXJjZUxvYWRJbmZv
Lm1haW5Eb2N1bWVudFVSTC5ob3N0KCkudXRmOCgpLCBmbGFncyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgaWZEb21haW5BY3Rpb25z
OwotICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB1bmxlc3NEb21h
aW5BY3Rpb25zOwotICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBkb21haW5zQWN0
aW9ucykgewotICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpCi0gICAg
ICAgICAgICAgICAgICAgIGlmRG9tYWluQWN0aW9ucy5hZGQoYWN0aW9uKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHVubGVzc0RvbWFpbkFjdGlvbnMuYWRkKGFj
dGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodWlu
dDY0X3QgYWN0aW9uIDogd2l0aERvbWFpbnNQb3NzaWJsZUFjdGlvbnMpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaWZEb21haW5BY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgYW4gaWYtZG9tYWluIHRyaWdnZXIgbWF0Y2hlcywgYWRkIHRoZSBhY3Rp
b24uCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpOwot
ICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWRBY3Rpb25zLmFkZChhY3Rpb24gJiB+SWZEb21h
aW5GbGFnKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoYWN0aW9uICYgSWZEb21haW5G
bGFnKSAmJiAhdW5sZXNzRG9tYWluQWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIElmIHRoaXMgYWN0aW9uIGRpZCBub3QgbmVlZCBhbiBpZi1kb21haW4s
IGl0IG11c3QgaGF2ZSBiZWVuIGFuIHVubGVzcy1kb21haW4gcnVsZS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gQWRkIHRoZSBhY3Rpb24gdW5sZXNzIGl0IG1hdGNoZWQgYW4gdW5sZXNzLWRvbWFp
biB0cmlnZ2VyLgotICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWRBY3Rpb25zLmFkZChhY3Rp
b24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAg
ICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIHdpdGhEb21haW5zQWN0aW9ucyA9IHdp
dGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0V2l0aERvbWFpbnModXJsQ1N0cmluZywgZmxh
Z3MsIGNvbnRlbnRFeHRlbnNpb24tPmNhY2hlZERvbWFpbkFjdGlvbnMocmVzb3VyY2VMb2FkSW5m
by5tYWluRG9jdW1lbnRVUkwuaG9zdCgpKSk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBTZXJp
YWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucyA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnMoKTsK
ICAgICAgICAgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkRXh0ZW5zaW9u
LmFjdGlvbnNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgc2F3SWdub3JlUHJldmlv
dXNSdWxlcyA9IGZhbHNlOwotICAgICAgICBpZiAoIXRyaWdnZXJlZEFjdGlvbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFjdGlvbkxvY2F0aW9uczsKLSAgICAg
ICAgICAgIGFjdGlvbkxvY2F0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRyaWdnZXJlZEFj
dGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0byBhY3Rpb25Mb2NhdGlvbiA6IHRy
aWdnZXJlZEFjdGlvbnMpCi0gICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uTG9jYXRpb24pKTsKKyAgICAgICAgaWYgKCF3aXRo
b3V0RG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpIHx8ICF3aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGFjdGlvbkxvY2F0aW9uczsKKyAg
ICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdpdGhvdXRE
b21haW5zQWN0aW9ucy5zaXplKCkgKyB3aXRoRG9tYWluc0FjdGlvbnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9jYXRpb24gOiB3aXRob3V0RG9tYWluc0FjdGlv
bnMpCisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uTG9jYXRpb24pKTsKKyAgICAgICAgICAgIGZvciAodWlu
dDY0X3QgYWN0aW9uTG9jYXRpb24gOiB3aXRoRG9tYWluc0FjdGlvbnMpCisgICAgICAgICAgICAg
ICAgYWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YWN0aW9uTG9jYXRpb24pKTsKICAgICAgICAgICAgIHN0ZDo6c29ydChhY3Rpb25Mb2NhdGlvbnMu
YmVnaW4oKSwgYWN0aW9uTG9jYXRpb25zLmVuZCgpKTsKIAogICAgICAgICAgICAgLy8gQWRkIGFj
dGlvbnMgaW4gcmV2ZXJzZSBvcmRlciB0byBwcm9wZXJseSBkZWFsIHdpdGggSWdub3JlUHJldmlv
dXNSdWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODY3NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTIgKzg2LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50
MzJfdCBnZXRKdW1wRGlzdGFuY2UoY28KICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBt
YXRjaGVzRG9tYWluKHVpbnQ2NF90IGFjdGlvbkFuZEZsYWdzLCBjb25zdCBERkFCeXRlY29kZUlu
dGVycHJldGVyOjpBY3Rpb25zJiBkb21haW5BY3Rpb25zKQoreworICAgIGJvb2wgaWZEb21haW4g
PSBhY3Rpb25BbmRGbGFncyAmIElmRG9tYWluRmxhZzsKKyAgICBib29sIGRvbWFpbiA9IGRvbWFp
bkFjdGlvbnMuY29udGFpbnMoYWN0aW9uQW5kRmxhZ3MpOworICAgIHJldHVybiBpZkRvbWFpbiA9
PSBkb21haW47Cit9CisKIHZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0QXBw
ZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9ncmFtQ291bnRlciwgQWN0aW9ucyYgYWN0aW9ucywgYm9v
bCBpZkRvbWFpbikKIHsKICAgICBBU1NFUlQoZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbgogICAgICAgICB8fCBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5
dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCiAgICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSA9PSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCk7Ci0gICAgYWN0aW9ucy5h
ZGQoKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Z2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNv
dW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikpKSk7CisgICAgdWludDY0X3Qg
YWN0aW9uID0gKGlmRG9tYWluID8gSWZEb21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZ2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikpKTsKKyAgICBpZiAo
IW1fZG9tYWluQWN0aW9ucyB8fCBtYXRjaGVzRG9tYWluKGFjdGlvbiwgKm1fZG9tYWluQWN0aW9u
cykpCisgICAgICAgIGFjdGlvbnMuYWRkKGFjdGlvbik7CisgICAgCiAgICAgcHJvZ3JhbUNvdW50
ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb24pOwogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRz
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZE
b21haW4pKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1
bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hl
ZXQpKTsKQEAgLTEwNCwxMyArMTE0LDE2IEBAIHZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
aW50ZXJwcmV0VGUKICAgICB1aW50MTZfdCBmbGFnc1RvQ2hlY2sgPSBnZXRCaXRzPHVpbnQxNl90
PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKSk7CiAKICAgICB1aW50MTZfdCBsb2FkVHlwZUZsYWdzID0g
ZmxhZ3NUb0NoZWNrICYgTG9hZFR5cGVNYXNrOwotICAgIHVpbnQxNl90IHJlc3NvdXJjZVR5cGVG
bGFncyA9IGZsYWdzVG9DaGVjayAmIFJlc291cmNlVHlwZU1hc2s7CisgICAgdWludDE2X3QgcmVz
b3VyY2VUeXBlRmxhZ3MgPSBmbGFnc1RvQ2hlY2sgJiBSZXNvdXJjZVR5cGVNYXNrOwogICAgIAog
ICAgIGJvb2wgbG9hZFR5cGVNYXRjaGVzID0gbG9hZFR5cGVGbGFncyA/IChsb2FkVHlwZUZsYWdz
ICYgZmxhZ3MpIDogdHJ1ZTsKLSAgICBib29sIHJlc3NvdXJjZVR5cGVNYXRjaGVzID0gcmVzc291
cmNlVHlwZUZsYWdzID8gKHJlc3NvdXJjZVR5cGVGbGFncyAmIGZsYWdzKSA6IHRydWU7CisgICAg
Ym9vbCByZXNvdXJjZVR5cGVNYXRjaGVzID0gcmVzb3VyY2VUeXBlRmxhZ3MgPyAocmVzb3VyY2VU
eXBlRmxhZ3MgJiBmbGFncykgOiB0cnVlOwogICAgIAotICAgIGlmIChsb2FkVHlwZU1hdGNoZXMg
JiYgcmVzc291cmNlVHlwZU1hdGNoZXMpCi0gICAgICAgIGFjdGlvbnMuYWRkKChpZkRvbWFpbiA/
IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMy
X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9m
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQxNl90KSkpKTsKKyAgICBpZiAo
bG9hZFR5cGVNYXRjaGVzICYmIHJlc291cmNlVHlwZU1hdGNoZXMpIHsKKyAgICAgICAgdWludDY0
X3QgYWN0aW9uQW5kRmxhZ3MgPSAoaWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oZmxhZ3NUb0NoZWNrKSA8PCAzMikgfCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZ2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWlu
dDE2X3QpKSk7CisgICAgICAgIGlmICghbV9kb21haW5BY3Rpb25zIHx8IG1hdGNoZXNEb21haW4o
YWN0aW9uQW5kRmxhZ3MsICptX2RvbWFpbkFjdGlvbnMpKQorICAgICAgICAgICAgYWN0aW9ucy5h
ZGQoYWN0aW9uQW5kRmxhZ3MpOworICAgIH0KICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbik7CiAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMo
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKSA9PSBpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFn
c0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwogfQpAQCAtMTQyLDYgKzE1NSwxNSBAQCBE
RkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgcmV0dXJuIGFjdGlv
bnM7CiB9CiAgICAgCitERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OmludGVycHJldFdpdGhEb21haW5zKGNvbnN0IENTdHJpbmcmIHVybENTdHJp
bmcsIHVpbnQxNl90IGZsYWdzLCBjb25zdCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25z
JiBkb21haW5BY3Rpb25zKQoreworICAgIEFTU0VSVCghbV9kb21haW5BY3Rpb25zKTsKKyAgICBt
X2RvbWFpbkFjdGlvbnMgPSAmZG9tYWluQWN0aW9uczsKKyAgICBERkFCeXRlY29kZUludGVycHJl
dGVyOjpBY3Rpb25zIGFjdGlvbnMgPSBpbnRlcnByZXQodXJsQ1N0cmluZywgZmxhZ3MpOworICAg
IG1fZG9tYWluQWN0aW9ucyA9IG51bGxwdHI7CisgICAgcmV0dXJuIGFjdGlvbnM7Cit9CisKIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50
ZXJwcmV0KGNvbnN0IENTdHJpbmcmIHVybENTdHJpbmcsIHVpbnQxNl90IGZsYWdzKQogewogICAg
IGNvbnN0IGNoYXIqIHVybCA9IHVybENTdHJpbmcuZGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIuaAkocmV2aXNpb24gMTg2NzY2KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVp
bnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRf
dD4+IEFjdGlvbnM7CiAgICAgCiAgICAgQWN0aW9ucyBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYs
IHVpbnQxNl90IGZsYWdzKTsKKyAgICBBY3Rpb25zIGludGVycHJldFdpdGhEb21haW5zKGNvbnN0
IENTdHJpbmcmLCB1aW50MTZfdCBmbGFncywgY29uc3QgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
QWN0aW9ucyYgZG9tYWluQWN0aW9ucyk7CiAgICAgQWN0aW9ucyBhY3Rpb25zRm9yRGVmYXVsdFN0
eWxlc2hlZXRGcm9tREZBUm9vdCgpOwogCiBwcml2YXRlOgpAQCAtNTcsNiArNTgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVuc2lnbmVk
JiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmLCBib29sIGlmRG9tYWlu
KTsKICAgICBjb25zdCBERkFCeXRlY29kZSogbV9ieXRlY29kZTsKICAgICBjb25zdCB1bnNpZ25l
ZCBtX2J5dGVjb2RlTGVuZ3RoOworICAgIGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFj
dGlvbnMqIG1fZG9tYWluQWN0aW9ucyB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODY1MTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wNy0xNCAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lv
bnNdIENhY2hlIGRvbWFpbiBhY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDY4MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0
ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICBU
ZXN0IGlmLWRvbWFpbiBhbmQgdW5sZXNzLWRvbWFpbiB3aXRoIG11bHRpcGxlIGxvYWQgdHlwZXMu
CisKIDIwMTUtMDctMDggIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gW1dheWxhbmRdIEFsbG93IGJ1aWxkaW5nIGFuZCB0ZXN0
aW5nIHRoZSBXYXlsYW5kIHRhcmdldCB3aXRoIHRoZSBkZWZhdWx0IEpIQnVpbGQgbW9kdWxlc2V0
LgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODY3NjYpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQ1LDYgKzEwNDUsMzggQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBNYXRj
aGVzRXZlcgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9u
ZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiLipcIn19XSIpOwogICAgIEVYUEVDVF9FUShudWxscHRyLCBiYWNrZW5kNS5nbG9iYWxEaXNw
bGF5Tm9uZVN0eWxlU2hlZXQoQVNDSUlMaXRlcmFsKCJ0ZXN0RmlsdGVyIikpKTsKICAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kNSwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmci
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rv
ciB9LCB0cnVlKTsKKyAgICAKKyAgICBhdXRvIGJhY2tlbmQ2ID0gbWFrZUJhY2tlbmQoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCIuKlwiLFwiaWYtZG9tYWluXCI6W1wid2Via2l0Lm9yZ1wiLFwiKnczYy5vcmdcIl0sXCJyZXNv
dXJjZS10eXBlXCI6W1wiZG9jdW1lbnRcIixcInNjcmlwdFwiXX19LCIKKyAgICAgICAgIntcImFj
dGlvblwiOntcInR5cGVcIjpcImlnbm9yZS1wcmV2aW91cy1ydWxlc1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJpZ25vcmVcIixcImlmLWRvbWFpblwiOltcIip3ZWJraXQub3JnXCIs
XCJ3M2Mub3JnXCJdfX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2st
Y29va2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKlwiLFwidW5sZXNzLWRv
bWFpblwiOltcIndlYmtpdC5vcmdcIixcIndoYXR3Zy5vcmdcIl0sXCJyZXNvdXJjZS10eXBlXCI6
W1wic2NyaXB0XCIsXCJpbWFnZVwiXSxcImxvYWQtdHlwZVwiOltcInRoaXJkLXBhcnR5XCJdfX1d
Iik7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGJhY2tlbmQ2Lmdsb2JhbERpc3BsYXlOb25lU3R5
bGVTaGVldChBU0NJSUxpdGVyYWwoInRlc3RGaWx0ZXIiKSkpOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQ2LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZyIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZDYsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93M2Mub3JnIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kNiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3doYXR3Zy5vcmciKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3N1
Yi53ZWJraXQub3JnIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly9zdWIudzNjLm9yZyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly9zdWIud2hhdHdnLm9yZyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQ2LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9p
Z25vcmUiKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL3czYy5vcmcvaWdub3JlIiksIHsgfSwgdHJ1ZSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZDYsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93aGF0d2cub3Jn
L2lnbm9yZSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vc3ViLndlYmtpdC5vcmcvaWdub3JlIiksIHsgfSwgdHJ1ZSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZDYsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9zdWIudzNj
Lm9yZy9pZ25vcmUiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vc3ViLndoYXR3Zy5vcmcvaWdub3JlIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL2ltYWdlLnBuZyIsICJo
dHRwOi8vd2Via2l0Lm9yZy8iLCBSZXNvdXJjZVR5cGU6OkltYWdlKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20v
aW1hZ2UucG5nIiwgImh0dHA6Ly93M2Mub3JnLyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL2Rv
Yy5odG1sIiwgImh0dHA6Ly93ZWJraXQub3JnLyIsIFJlc291cmNlVHlwZTo6RG9jdW1lbnQpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL3Nj
cmlwdC5qcyIsICJodHRwOi8vd2Via2l0Lm9yZy8iLCBSZXNvdXJjZVR5cGU6OlNjcmlwdCksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vc2Ny
aXB0LmpzIiwgImh0dHA6Ly93M2Mub3JnLyIsIFJlc291cmNlVHlwZTo6U2NyaXB0KSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBz
dWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS9zY3JpcHQuanMiLCAiaHR0cDov
L2V4YW1wbGUuY29tLyIsIFJlc291cmNlVHlwZTo6U2NyaXB0KSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vaWdu
b3JlL2ltYWdlLnBuZyIsICJodHRwOi8vd2Via2l0Lm9yZy8iLCBSZXNvdXJjZVR5cGU6OkltYWdl
KSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1
ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vaWdub3JlL2ltYWdlLnBuZyIsICJodHRwOi8vZXhhbXBs
ZS5jb20vIiwgUmVzb3VyY2VUeXBlOjpJbWFnZSksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL2lnbm9yZS9pbWFn
ZS5wbmciLCAiaHR0cDovL2V4YW1wbGUub3JnLyIsIFJlc291cmNlVHlwZTo6SW1hZ2UpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZDYsIHN1YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL2Rv
Yy5odG1sIiwgImh0dHA6Ly9leGFtcGxlLm9yZy8iLCBSZXNvdXJjZVR5cGU6OkRvY3VtZW50KSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRw
Oi8vZXhhbXBsZS5jb20vIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBSZXNvdXJjZVR5cGU6OkZv
bnQpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQ2LCBzdWJSZXNvdXJjZVJlcXVlc3Qo
Imh0dHA6Ly9leGFtcGxlLmNvbS9pZ25vcmUiLCAiaHR0cDovL3dlYmtpdC5vcmcvIiwgUmVzb3Vy
Y2VUeXBlOjpJbWFnZSksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZDYsIHN1
YlJlc291cmNlUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tL2lnbm9yZSIsICJodHRwOi8vd2Vi
a2l0Lm9yZy8iLCBSZXNvdXJjZVR5cGU6OkZvbnQpLCB7IH0sIHRydWUpOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQ2LCBzdWJSZXNvdXJjZVJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCAi
aHR0cDovL2V4YW1wbGUuY29tLyIsIFJlc291cmNlVHlwZTo6U2NyaXB0KSwgeyB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kNiwgc3ViUmVzb3VyY2VSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5j
b20vaWdub3JlIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBSZXNvdXJjZVR5cGU6OlNjcmlwdCks
IHsgfSk7CiB9CiAgICAgCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEludmFsaWRKU09O
KQo=
</data>
<flag name="review"
          id="281918"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>