Bug 1519060 - Places maintenance doesn't properly replace malformed databases. r=Standard8
authorMarco Bonardo <mbonardo@mozilla.com>
Fri, 11 Jan 2019 11:58:24 +0000
changeset 453468 662d6d626c15b9a9dce3041541037bf74f465cec
parent 453467 da9f91aaa74bb24f8d52e5e445c661aef7402726
child 453469 70cf6c6c51b4e162394552140d92b7266603f47d
push id35357
push usernerli@mozilla.com
push dateFri, 11 Jan 2019 21:54:07 +0000
treeherdermozilla-central@0ce024c91511 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersStandard8
bugs1519060
milestone66.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1519060 - Places maintenance doesn't properly replace malformed databases. r=Standard8 Differential Revision: https://phabricator.services.mozilla.com/D16199
toolkit/components/contentprefs/ContentPrefService2.js
toolkit/components/places/PlacesDBUtils.jsm
toolkit/components/places/tests/maintenance/corruptPayload.sqlite
toolkit/components/places/tests/maintenance/test_integrity_replacement.js
toolkit/components/places/tests/maintenance/xpcshell.ini
toolkit/components/places/tests/migration/places_v43.sqlite
toolkit/components/places/tests/unit/missingBuiltIn.sqlite
toolkit/modules/Sqlite.jsm
toolkit/modules/tests/xpcshell/test_sqlite.js
--- a/toolkit/components/contentprefs/ContentPrefService2.js
+++ b/toolkit/components/contentprefs/ContentPrefService2.js
@@ -1046,17 +1046,17 @@ ContentPrefService2.prototype = {
       Services.console.logStringMessage("ContentPrefService2: " + aMessage);
     }
   },
 
   async _getConnection(aAttemptNum = 0) {
     let path = OS.Path.join(OS.Constants.Path.profileDir, "content-prefs.sqlite");
     let conn;
     let resetAndRetry = async e => {
-      if (e.status != Cr.NS_ERROR_FILE_CORRUPTED) {
+      if (e.result != Cr.NS_ERROR_FILE_CORRUPTED) {
         throw e;
       }
 
       if (aAttemptNum >= this.MAX_ATTEMPTS) {
         if (conn) {
           await conn.close();
         }
         this.log("Establishing connection failed too many times. Giving up.");
--- a/toolkit/components/places/PlacesDBUtils.jsm
+++ b/toolkit/components/places/PlacesDBUtils.jsm
@@ -109,17 +109,17 @@ var PlacesDBUtils = {
     let logs = [];
 
     async function check(dbName) {
       try {
         await integrity(dbName);
         logs.push(`The ${dbName} database is sane`);
       } catch (ex) {
         PlacesDBUtils.clearPendingTasks();
-        if (ex.status == Cr.NS_ERROR_FILE_CORRUPTED) {
+        if (ex.result == Cr.NS_ERROR_FILE_CORRUPTED) {
           logs.push(`The ${dbName} database is corrupt`);
           Services.prefs.setCharPref("places.database.replaceDatabaseOnStartup", dbName);
           throw new Error(`Unable to fix corruption, ${dbName} will be replaced on next startup`);
         }
         throw new Error(`Unable to check ${dbName} integrity: ${ex}`);
       }
     }
 
@@ -1171,37 +1171,35 @@ async function integrity(dbName) {
       row = r;
       cancel();
     });
     return row.getResultByIndex(0) === "ok";
   }
 
   // Create a new connection for this check, so we can operate independently
   // from a broken Places service.
-  // openConnection returns an exception with .status == Cr.NS_ERROR_FILE_CORRUPTED,
+  // openConnection returns an exception with .result == Cr.NS_ERROR_FILE_CORRUPTED,
   // we should do the same everywhere we want maintenance to try replacing the
   // database on next startup.
   let path = OS.Path.join(OS.Constants.Path.profileDir, dbName);
   let db = await Sqlite.openConnection({ path });
   try {
     if (await check(db))
       return;
 
     // We stopped due to an integrity corruption, try to fix it if possible.
     // First, try to reindex, this often fixes simple indices problems.
     try {
       await db.execute("REINDEX");
     } catch (ex) {
-      let error = new Error("Impossible to reindex database");
-      error.status = Cr.NS_ERROR_FILE_CORRUPTED;
-      throw error;
+      throw new Components.Exception("Impossible to reindex database",
+                                     Cr.NS_ERROR_FILE_CORRUPTED);
     }
 
     // Check again.
     if (!await check(db)) {
-      let error = new Error("The database is still corrupt");
-      error.status = Cr.NS_ERROR_FILE_CORRUPTED;
-      throw error;
+      throw new Components.Exception("The database is still corrupt",
+                                     Cr.NS_ERROR_FILE_CORRUPTED);
     }
   } finally {
     await db.close();
   }
 }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..16717bda80052f35294ab4040ab7c02127f98501
GIT binary patch
literal 1146880
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
zaieMW^)r9W(R_b@zV;T|@^~dzzM3mPmM;&?pX2odm$SuUuJG9UZM`#lTYKTf9Y>?t
zPF_8n9Vnh389jD%-^NvsUwX|Odz(5Ek3`#BpDfzmY=3FI`lf+$wsJXFiMs4Mbmq)J
z{?fj4PaNBsNc`wee5CtVfA*P7w8S-wop$X-Sh>qxS8FhP-8aQ=<y?7FwNxrp7VJ-@
zSQ;G6M$@037#}ZQm>52CVC2lkRX4XDIe4+LBXKmbXW`p9o_jENHCHH&<;qL$dO0^%
zDnzXYqk%U~?S7)?_?d~FJFaYM*tqJ)fAI28Ur2W(4kvcqIdcE_aDBj~2Cn79<NeXN
z`?u~tbAJEGh3wP&hoW(R>#I+{;~lAv#OcK2ckWhyp)|aCW-pc;d$LfyJe)6X9xfH)
z@y{LIbatwEt#bHC<?O~)KmDy6zcbR%ktqFj-ZD!*`HR19o^N~Gv0Z%wyZZO+898(K
z+{RU({@j)4D#?yS`0KsWN>Aqos+GA}cW&LhHQV#;CVkguKX^8G^7O$ghbu>pZojs1
z)n6SQ+u9y|7-YiVPlP`UpAG*u{PXZ*Q2+n{000000000000000000000000000000
z000000I#l<nWjW@GLvjxlV}_oX?yv_=EhZxO^IY&l<ugN-TY)r<BD{xSxa+!y=dLa
zRjHX)4a;gpFHCecu54&ZwA9LKMbEdrt+68+b!>?`)=J*>*$=kIvp)AKpEUpg00000
z0000000000000000000000000000000KCdt<K($lc@Y2r00000000000000000000
z0000000000000000PrenkN!1<w<N-!gx?4s34cF~g||l`00000000000000000000
z0000000000000000002|ce$@Aljvz^PK*_@#awmsXlW{6C}cO6%EO79t1_9ygHhdR
zzP~?T-8@hlP27BKV<xdHDjUpQ%@s;xx$?p;uSsVTJEH3T@!@*ug4*s>Ch=HYTPO{0
zF6M_XR|}I1Tin-BUru&#uvDxptm{l>5)a4AnP1o%okLR?OoTrUFNdEGFNSxAXQB`Q
z000000000000000000000000000000000000092RtxfeL#|qhEuDW@&G?gzDvYSig
z;il!Ohg;^w%To^~NAvyt`Re9@(rD)1)UM=U?rN@38q1aE_iMZ-wIkU-K3p%DSCM{A
z>ak>hp)|a?m><4eElkd@OvQ`H4i1)zmHEXD?a}(~n_8O)p9wF8k+3JErav|Pcc%|b
zH(dY4>sPPudiKws{phpLJo}bsGtd0)GynLR{4+bI{%Y!9Pu-k46?Fmt0000000000
z0000000000000000000000000_*-M=y5)(MWJ~hFL?V+}-_o+S>EOiP_{XF7o$O6C
z4vn<E{9^NLo|~xstaNW*<a_Rm`z2d8&GcJy&s@I?`AWW;8(gCIwz&6>duzR$ADHRA
z`d05Hy7k1}dhc1DNJbsk&2($X%ye6#Q{1QT&0V#*l8@9oB|AG)dkcl`eWlXKXtq33
zxxMf3laohEJ4&aXJb&y$YTMd+=QT5(S9La=%MQ=<d4Kn8e(>1gokx3$$48zx^h9ds
zn)=qvoLq8c=Yi6-Vxg2ByrbX5;lr2Tdc3!P=i%a0sqL%ln=*5D$rYVP@|9|-JXvr3
z-rci#dF$Y%zHNPz+eZr%sZE{rJxR>;YG|xCd(WBK6MFL0iP3Avj_f>KeQHnB?v?dP
z9-e8wyy0waAXlt*&z;uItsk%FXA*~YA3HaB?(EZ7298!5_N=J)TtCyZEp@U~sdmr5
z+Alm%pY-PT51k*#jh^q#9T_+^KGd+gqrM~cuFWm2sl&Ny_tE0jQsL@M*LQ#ErP=(%
zfnA4opWAz)u<O9~H!rX6|Av{KElrs-wcl6oK3V^1^IE6pUwUpf&rKXWb@}N%=TDt1
z?%Us9@4RQGb8}PUfqZ3Pyi(~tRsY@e?ozS)=-K_Z4{~W}{P3lb{`|44<>AMc)d$%$
zGe}cYI=+1-OXKD4fpWHTIaj&8`{mrOi<?HTTs!mB`HOqo>fLwDbk8)UX6HVat5kF4
z?sKJ5;f^8p?z%FRKY#ARXz@_*;nw;PkJpDtHa0cPoP76z*`JN?K9#FpE0srXA7|v`
z<i)+kL)*_C-Zs_nmX`Wu=$#oT-84JSzVYGibLH&7NUnVQ2nR;{ckMkgcJ=Imi<O4A
zG}rHe*|SMC9m<z;L#2ti4UK=5{`Mg@9Xx)b{Pe}4t$TJ~KGYQ7u5%~T($LUw`w(Yy
zm1uJZ?%dbvzNw*!1LggbyNic=Gxgj4-r3teJzDC|7jm_>Q`cwu{J<a9OKUHJzJ~3M
z3*H~ehSYd*D5@U3z1K`}z1P-sz1N!Aw@yQK_F0+j66JAO-;CZ=tw+n;Jk{tL_h-us
z`a}=QOmVGGdTT?iQ}gVrreQQ!9AD5QdLrYp*;yJNO~yT%o7-o5ENC6Q0m`LPb+&a&
zd;Ge8?$!Nk0{{R300000000000000000000000000000000000ueR1WdG1wS1ONa4
z00000000000000000000000000000000000yvo|6f9ddYB78mkN%(AZ0000000000
z000000000000000000000000000000|BG9mZcMy3naE9K2M0^VZEM<7jfr)0@#>a_
z#zbebeRQzc*qm%ktW37|Po-O<e(CTZ65$)+tKpBL0{{R300000000000000000000
z000000000000000_-@ja>P(If78{nOUYpEKWCsUJ#ck=f)VkRq)tFk@(m&N6HBE-E
zCZhiV00000000000000000000000000000000000006+>5-XCa^~urFRNqK$@>;1p
zSV^}>rH$d~MEGL(RQS2@p6Cz&00000000000000000000000000000000000006#&
z9&Ah{j-DxG2Xd9u<>72GKb0$QnLB!7JXfB4D4j|iU$V)eQeiMxUYANG9viE**^-+W
zD2xy04wXxz`?3Qg<6~V7sl<-@09&3M&6cbCN~Mt~AL&X)6{Ds8d?B}`f2OQ*wp6ON
zMk{L!BZ=_E@UO#5;eU$`0RR910000000000000000000000000000000002sJLxs4
z$C6`(>_D!vB{wlp7$3|XDwjt0Wd}ya$5LIX9WA4!{(K>~rN2}f8O@eQDrZZj>O-lc
z$uqT1r_00HVty)D-ZFRe#CWbe+4ykk_|i=dl?sEoa{8Xsj+r)Fo{Yw>?wgsTp*>#N
zbFcEw000000000000000000000000000000000000002MtE@fxw|shaBK&dqmGFb1
z8qS4Hp?&%b)4w+T()4rF=cczul>h($00000000000000000000000000000000000
ze@orJyfu+bb~GnjGMRf)J?TW_&`8_MFE-ES_qX4w?^>k(jmzTt_07p-RNuI_P}o;0
zjf`f?Bb9XOj<MQqjkR`etoL`%<`1>T^=oQlt!+G)9iAKGR-5}<ZjG^Kkue@=j_V(&
zjj^WjK<QesP|6N2Hc->8fmY8A^xoaG`T9&;zpggW>c%7aO0`s;oE_#?v-=xw4bz$4
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
z+LRqXyKQ+~u<Ov7GXwcc`_4UaY-dwkuygCkw&R7Vk>bIV7godto2GU@(R2LF#LgX8
zHZ`_J8=nauN`$`%UkJY){-5wKq5uE@00000000000000000000000000000000000
z0RAVnJe|xW*CZN;M%rF}u{l!<J8I$0PqsAH!uEQ&Ze_X_E~|wvOmwDdVM8r^zU^%d
z%hD~GmRj_#&wj8q8aosIC=tFD{#*F-@TcL6Q2+n{0000000000000000000000000
z00000000000N-sIQ^{nyF-{v&=~PRyA)RVYX5u8BN;S8%Molu|=M&*C!xzIV;gjLx
zQ2+n{000000000000000000000000000000000000RQt_mdYd(jYA`CFTdEFnG0@y
zvZe7>ux@2~E_h+0Gc^}H-}bhKwp6C27QE}TA8d^Vye}M2gl~ku2ww^RDg1u;-SFw~
ziSVo8UxxoHd?fsn@T1{}!+XQK!}o<}!+0o$;qZ6DrEoUt1ONa4000000000000000
z00000000000000000000cgm!bEy=a(YT26mYT4?0YguPkEnBs=maSY<%T}zeWy@FA
zvbGhqthJ+-wJfh?&F!_UX<04HwAHf4)>@Wssb#6=OgfQFHr!LsI_p_eJ<HUy#(I{n
zXQ_JD&=_Sc4Xx3_?+b?#;hW*VhCd5m3V#${3BMU$4*w?nO8DpDXTpcVKMo%V?+fn^
z?+jC+97e)mczZY(PDY&o00000000000000000000000000000000000003ZtOgh<;
zyyw0sYfj#CZ&Ny%Om?Qa>UqQ3T5ac=T5ad*T4_^ec|C7zujlDy^*q&9&l_56y_#BT
zy_%Y9QL3XBrB>A1G&D5T!iJTZbW7A_T`kMpQ_C7VYgsx|%TkTCtRdZ)Zi$A8(x_WH
z-Q3*L8m<1m>F-a3KM!9BzZ3p#_@(gS@T1|q;rl{0<idq;IP4A^!hNA_`dia~I{o|8
zzcKys>7SeavFU#hbpikY00000000000000000000000000000000000;BVCObTX4%
zn`j&wX?yv_=5@7j&1`sIEnGbt-dhVhXTz>qxT+q$zk6*hTsa%Asf8=*;d^(lu7%5M
z;mtFNm9?;~9&Z28idxuO3*Y^vmpW=;OD%l<rRSE{!sgkqy%sjjhRbSUW;SfAg^jae
zYb{LAhAp))H5)d!rxTgv><QhoAnIHeMfEkj{GKzns-o35+=^a!;7saP6b;!lFZzK$
z%q)l+Z$(qrpG&t!`+wi`&m_WMhA)O!!Y9MW!_S9*5?%~9LkQ)N3m3!j@V%iYye@Qw
z*6IIm`oBzne)@N&KQaBwQ6~TZ000000000000000000000000000000000000A4N2
zQZv6@|MH8?>*fdd%@6LKAKWuP=(-iWzkBWcV9l-Iy}MW63f^<3b1t~K_2Vn&f)^e*
zvtllI_m^Jkm<yhN>AB_egZBBsviU*V{GfGy&@w-0o*y*L1yk3b%ghfN=LhNeL27=`
z(3Z-y%m%H|rrtMwI1&CV{C@ak_~r0Z;RE6MFcF5sg>W!z4-bb`AvyhDrvG62Q`7(V
z^oOT^Wcr2asp<Um#i$bi00000000000000000000000000000000000006gJky@Xe
zIDGi>TaWkl?>t<5YE4`)UL497a)W)b#<-wbDi!*(<yt|iR*)U8^vy`u3ieG6O&loi
zpWIzM+|-d;-%>7>s<SQP2IZ}Tm-@E#O>Q48OstLzMoazCB=rWFT0yQjKHH-qE*LpE
zd2w&?(DrkOw@tOi1($QXE^ZpVa_!7h=Pxdc3x=PZJW|?GI`!oFV;8#Og4{%QaIjRY
zjd9Psg5J1b-MoTralw7_3VPy#d+P-UPhEa`&-qg)i~E+x1($}#4__MT&mX&59&V2d
z&JW~9&-dnz44fJtS`imKdFsUIwPQzi9<DyMr!y`%abVY>-RJh6DC|10y(2C-wENh(
z$#Z9)zA|vMvNA3>c<k`bqdmprBTpQ9Vr^V-V6=bN-XmjI&mOo~X^9K=?z%FRKY#AR
zXz@^QTU@Z|;PDgXr!Nj|-Lw00b8B?*(&0ZP!Z*TSgs(&g00000000000000000000
z0000000000000000002+-71q#CX#E?wQO}N%G#5S4UJLOl5UObpL><p2LJ#700000
z000000000000000000000000000000ud>$Y-}3OjMEFMd^YG>Hx$sK(O!$ApuZCX=
z|1A8|@MGZvQ6&HX000000000000000000000000000000000000Q?Wvlujm-_oSBB
z@~*~Z^*q&H%hxux*7H<bEnm~vT+dT2wS0ABrk<yoYI$e6v7V>WwR~kms+O;4XlP6)
ITUs*zKeA%8^8f$<
new file mode 100644
--- /dev/null
+++ b/toolkit/components/places/tests/maintenance/test_integrity_replacement.js
@@ -0,0 +1,13 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Tests that integrity check will replace a corrupt database.
+
+add_task(async function() {
+  await setupPlacesDatabase("corruptPayload.sqlite");
+  await Assert.rejects(PlacesDBUtils.checkIntegrity(),
+                       /will be replaced on next startup/,
+                       "Should reject on corruption");
+  Assert.equal(Services.prefs.getCharPref("places.database.replaceDatabaseOnStartup"),
+               DB_FILENAME);
+});
--- a/toolkit/components/places/tests/maintenance/xpcshell.ini
+++ b/toolkit/components/places/tests/maintenance/xpcshell.ini
@@ -1,17 +1,19 @@
 [DEFAULT]
 head = head.js
 firefox-appdir = browser
 support-files =
   corruptDB.sqlite
+  corruptPayload.sqlite
 
 [test_corrupt_favicons.js]
 [test_corrupt_favicons_schema.js]
 [test_corrupt_places_schema.js]
 [test_corrupt_telemetry.js]
 [test_favicons_replaceOnStartup.js]
 [test_favicons_replaceOnStartup_clone.js]
+[test_integrity_replacement.js]
 [test_places_replaceOnStartup.js]
 [test_places_replaceOnStartup_clone.js]
 [test_preventive_maintenance.js]
 [test_preventive_maintenance_checkAndFixDatabase.js]
 [test_preventive_maintenance_runTasks.js]
index 8ce5766f15cb40fbc441b2622880d4f7f9d38578..9210f215fa8df4475513add0dfe924465325da91
GIT binary patch
literal 1146880
zc%1Fsd30R&eHi)~%wVt)1WAyDB-#=rnU-ma3ka@u6q)<Jh$1P{%RvXg032a31I`Rc
z021*Now$9n=-1edo5&}9Q4^=nY3wY`bDN}jv74sv)GxB*I$Ntco9)()<2ZGax;eJr
zIq%*X00c;YPS1&}*7<yn`TO1PZ@<60;L88ZlTVz;S99G%rSfRD+TELYF454CcuRM8
zB9Ul{{ym(yB`!<Pi<8m6jfuN!N^DNPwf%ZE@zBUCiRnYvpM7@fdhato{OsYW&65Ww
zKR+=txoqOzYmZ<1%+)p3SE}!+-e36_mE+~lmfwEm3s;Vf{o2^~mVUi-qWBBNH;sOD
zw6ky{8Uz3U000000000000000000000000000000z9VkD?xCixCpIQ;T*?;*a}%Sb
zslI$QH(Ke-7K^1y?KoSlmh=7N)!bq&9^QZU;NEiwyU(9G`o#Hz-A7LyIC!!9+mF(H
z`qb^My5A57efhyhyW_ZTu0vF`;YP=UO<ji{NZvR&w}|@CV}<NM?#>m~Dj!;EZA*5Y
zUDnKkYAu#p(F5I0U6<A;Z=9T)bR;)<tyCVI8F{Q!sSakV*}m~&{>pgnj#dvYwYqOV
z%<M8}Th3o;+`cdFu;E6-15I5=A4%SLaBlAYQfXu~TOO(O4UgvsZ(rG5ZTC`3Te|=3
zl5UOhhPcUwXYX(7IvB0t-bL0BtumJ#9Lx>gS@*!q3KpAsVYfvljvMTa8*I3-^0iG}
zPe#-4SY-P6b}M8n)zQ*meki}#D(=6_Di-a%$YO>@9_^0Xot$a6;reTux*lKRs*GjJ
zxnlLsir3y{A@lkyGJU<ac3b4D`BHJim32*BZ;qyKUt&k@EPl<m*@e5Ed3ACux8X+W
zzNW7ITjrng<$R@DDo<X`N2{t|(Z#FQ-7)tPJ!j`%P~H88T3%}vt>WIhuVScN8eP2V
zzHhUNxt>d`BChYN1siU3-P6={GFrvsORS>yBrm-o_kNqDEbP9-dTzZf=Izhbu4sE6
zOx{>CH*u}m;;)K&)jdnSCzj|ryPSIU%o}2QZS-b;aQ<bP=^Z~cwe>C7je2F*9ow*E
zr`souTlCF4@6k0)U5`ccx7<GeP&qe{D-KNFR=#$rsTZ`reb(8^4NtFb>e{u~bhRZ7
zl*WtITZL<un(J2M+b61@S*>bAuCu9YM>JRR_PH)ce<W@zTfNj&b8T;*shqo7tK2ZU
zYKa{jFBkeQXDgR)EAL!tss-(DpKi8t!||1wuJ!AaZ>whe3%SabLi7&mt5mbqp83bC
zX687zci)MF-ScbSQ0*@~njf5aG>$gBbN7m-u8kX$-~UK$xZA!-ZVOi~81#<sm+tQT
zV02RF4jw*uw)@Q4qbK*Cz0`gD;H5{qXTEIaDo>q0*L~{zi4%)_Sj@J0w0odbtVZwd
z?h~g^9lo&l?EWKrqr#y=cDOP(&Vhr6_MSg+u6ygF-MNXed^sDx;uoup-@}WQ&;6-f
ztaARJtvl;Cyz`NcrmhDbNPhoo=eBNc(`pAR?%1wxyHT@mrthwuy0N0YsjIg)dE@Yc
zow{{4l|_n{FS>j48r*Fki`mg!_smwjp?BMc*;n-Jc5XPhJkxclH<_qCYBP^VcD!1u
z#eIv+*4ML0VaJ(enfU3swBT9HMeqCK!0loCqEF;Z<s0G!KN>|FZrtD66hGcK!rWfX
ze&)_UZo6Z5ZhZ_dwJqIy&!0Pe^i<UI<iS(t9_^m#(S7dV#d9+obmtv7?~A(DaKo;)
zOxN-CciXwS5BQ$>(Xt!snxj|$uH=pLb7wa1qc&H_Rda)j7Pj1Ru6HzvPdff<T0fTs
zw?cg5o{eU^n!EF<ns<*LZOL@KW7pkI>yAn5=XXbO>pO>=nz|l&B>ArPJ5O{$(7g1C
z-R<U{|A<D<`N$nlT>XVn|MXpO9rN>_`e>khwUAr*)|k0k3vPg+QeiMx?yF53@9!cn
zgT-F~kKVc_k9Jokivv$ae{#kvcexDpX8SK^i^IA7@!#-VdFj?Y8*V(>SbGJ(^VVOl
z_%Cv0?jUo=4%dqBw!3kI`fW5f;q0?9`w=s52ctc?+iex?dO0_gpQt}NJ(*0`!3XYk
zkJVOJzprYCO*eL?nz}Y^O1|@fTYsO6W8>ACFWTGV^qqg9=heoieV4y5wWjlLhk145
zm0bO!>eji>f3wW{q^^y!VZ-C;OxKf}?sl&8S5`me`6Z2sM54L&|Ii$6XzJRsCHc<B
zZe8Q~pYwMVr0%@t3qSvtzV^5NLuKA$bH@wu*2nYhWecCoO0H6w_q=WRzFo<tt_L4X
z{@p!uXHx&TyLHrX$J%E<|GJl6b@XMp@F8C0xt{%4U06ErV|lSZ>zDJ<Grq`I!o2%p
z;RCQ(i`yTXxkj6M=C!)*ze?sBFL;FvmCCvNaB-;x&%a$~K9=v&C>nY&R~abh$7(Od
z`V7(2dNrTB)|Vg64(H<U@%n??9^Hp)ul-3Pyb$i6{@C>Jbo=!mxc;_h|Mb}pJo`P*
zeCwIlO#Q;t*yMXBFHNqS`255_n<!0ej2Z&~000000000000000000000000000000
z0002McaQH~+mYCkc(A#-xgoK>r7@AXT&<41Y0H+LZN1xf?A$z18XYYSY~HzJd+)ZM
z#Le79c5tv%yxiN@*H?c1m;d3>b^F$IBsL~q+tS>e%&bq|>R-)Os<XYTm0Wc&(Ks~H
z_VSC(vqNl)hG;0i{+`l1kMCXGk?2W0TwlYyF`}lUV};!8FuB6mXm%oZYZZO<AwK=+
zL%+DCvm>!Sk!X(A5uHXRk*NKS^qb<JYkq9^_|%EX(>qRIzWCNNPbLz7xxMt|Z+w2|
zs*XhO5*>EFzEUbzAM3eT*mr*4p;P&Zp3<hc--bVa@2T%u*^zjBk$&ZDvHo-OkL{}W
z-hO`T-lv}4bK&&CC;N(V?+<U>^fNnGEIn)QOuwC5N46a=OpO!|p1ctE3t#xjKe+Ms
zjunY~ep7v$n;R21y5c>mM4NQ&+O^H2rKx<OklkD=4{ym8H=TcS%UC&oH9Ii5Whh_H
z4V5Og9IEHt{gd5;xuNWMq1s)!oGs@n@o(E_yQ`%)b${-;AM8F^A85E-+MF#E@>8YJ
z&GGp4i+A&rEl=gQZr%3O?xWi_ov3bHHT2OvmzG+_Xl^i{-I5=Tj!ILtf_mkqZP8t|
zeb=_FySDcXZtvN;d-Ky{!-tl4B%Vlg-1TB?e|>cE&*m!8(kqYkY~8%O_ta4J^rcPN
z@w40FZ90GKw;%0q??}8Ov8knHW|tC6t?u^ix&4Iit)K9^l~ZTl+JF4W)a8>SJNq`S
z%5=PM^2R%stw=m`bl#<S<nEVZc8+3x_;R&So3m0aj~C~z$*Fop_o29=`|NnJ`%HE?
zcl(mI)t2<aL}zt)>d?^nC$2s<bl}p)RUdoht5?7MHMo5ZW6=bgYCrnDdC%aU!JgjU
zo!S1Oq0M8(;qPthNbJ4yTGTGW?%S?GZv0?x@8Hzr!JdKh@io}_AAj<P-rm}g=u2!`
z_(EBFcLqwuYB}FOUd`Qc5fV2icAg!a8oM@fc<4e;bh~}#rDvXK=}7EP^xipow8~<x
zx?qC&<5hFTY+)=K@<cJat$JbWiN2A6-i@nHU0?IMLi38mji%Yx&-^h*^Zot#+FNYP
z<CR?bYOefPzC190j@J)d&K8Tg!ei^V_0H^V?S&V29F1l>dG&C1pm=^{^w`mT8&^Gk
z={0ZcZR$uo5^ZmNvS@p={iX5hn+D3+%H>=o>ay$5nKJ|VOZ(0}acpNI@uNTSk?vpp
z*=I7*64xwt+O-#9<t}$!t-<Vd-xR-<bLCCdQmIf`us@YzX>c$bO@De~e7tyJV))2`
zkuw`t-Q0TQ;Kjy{#L>i_g>UD0?!nyET%k0UD=)e0<=j}Q5VabN2HrHa`-z_8XC`*;
zxU#8X<EkJ3!OK5=A>ENUoY-~e$o=EP^#PX}xRwu(_ebOI-@5<I`TZjovQO_HipKq|
zuRi^bcceNJrxTCgxm*2(((vY)y;ySW$wKw=aK5;CxKxP8KX-J~*{R~S%HboGvm00a
z^tW#O&PYQ?qV(5!%PjfiFaElDzU^(tcJ&SH>ff_x<jmo78&`e$b61|LBs&t}ulGtT
zJ)Ik<R_12ixpni_Y|pow^j)9*;Mv^C(+95{t{geK{o2M=e|2<hYkTxzkO_Z35&kTE
zHvHT0&%=*J0RR9100000000000000000000000000000000000yt-Cqni9>)OtN`R
zqH$=X?d2Dn8&@?pC6aMbx}#Qh^OG%&E7G-QEzRxqqID}*rDj?+EUOj0Fwxn#vY{!_
zQY)(!J>T}W#*Spvu_fwQD|y#vKiD46`rNC0)&Kwi0000000000000000000000000
z0000000000@G5JKljmOLMF0Q*00000000000000000000000000000000000z^kl1
z`qvcRk_dkiej|J&{QWQ%-X4Vj00000000000000000000000000000000000008jc
z<-Vp&qNkxbF;>VHbJfkGrKx<OklkD=4<~M}%48A`Ms=h4{{DP*^FV1dar3o}nZ&NB
zY%q5<S166;$_u-^CY?#_h^qU?hwG&aYP(aJ#A9)7p)|a?m><4eEle(KabH7yIoZL%
zQn9kIt}~fQJRC1)eqn2L4ozV&5&k&59DY8$7~UP8i9!GX00000000000000000000
z0000000000000000QeiXHr10HD`bng>gLhXRK8HiZZ4IFo0g{@ZkZP^Pd%6%&G+}`
ztD6T(qnUeCyOM*stGPmHELWc2ukoJLj%5G%aJ^t&Mfx?V$CCYp((vYDe)w{=Fgd?6
z6)z$?I9MuH<`*}#N9((9YHcEXCcG3z!k&<t{?zo}ojx$#aQzprU%kHT**|~wqt8C`
z>|37AJoCHH{Nrcx&+M4`tEqoIb#v-e)Cm9p000000000000000000000000000000
z0002sZ;hSnmM2=0Ey)KHiA-jFOUv4(gA;q>ACKO5vNzE<G}89+i_NonZld<H(!G6=
z@3}ATmu%TI({If^bNw#lEBR_}aEadA;@&&%t@UnxV5ax#TfLX)))RN@y=QqM8FgGY
z)2$&h(`|`Pai6|7ch%-fK2q<L?CebKEfl)<l}aO{+44x`_P)bUP97=kD4lxp{ILtE
zZENeD*UWTY)!A?^J3Q0p{oS+q!DEMa9_=X}A9>=?6RDkR>RU5&a><pQ2TIq9g;I9#
zj(!t|4_|)k@!tNOhl@|8wy&;l%FNj%S9Bi9SE{A*WWDu!chBbKt%H~Pw)IVJA1zFz
zHg(qbBr(&gp|RfVJ!fW5=*d$jMz0+^vh#5DsXa}*SJo$ac&7RChO@bWT(R0ccUm{M
ze!QNaNgUdJ?A+wJvrk_cI9h4gv!dQ}{Y=lc)X7q%+CBejzwkhP(wo~qbbcT=dcHSz
zWZ=~JP{Zzy`i|7QHn+5<4(F=fM~hcWg{w1N-~FYRX7dvVb{*P%Ztsc0t^?cOyu7~u
z8)ka8G-b}zeqX)&Wc{bjYn`5d>ABfFH*xUP<)`<YKXtOWZ-0Be^PZW`%}tF5@|A({
zN~QZ${dd#5OU3S^XZPPe$fcq2!<R<-^T)21haX#3A7s<aAWco_`1YABjhDLz%Gt{0
zT;=xemvg%=ZW_IE?aWi>FYaxtci%D7J=2t$o%>v_Qq7gS&y`ArJBHZ1>&j66{J9IG
z#Y4S^TkAtSULPXa*wip{^4$k!e>T4RRIYlhR35o~oRO207xxwqZ9jK-+f>6_TI!df
zcV?h;)9g6=#)rGlm9qmQx$^BJ92o82wfD%_)w2gKRvO;YT)ziq&nDG$C|}MEl_usk
zH2zik+lSb6@c4=H(-()f?%93$P*Z%n&Yet4Lqo&uL!8Z3qRkz+b6>0briLaCl=n~W
zE*|d9)NlKHXK(xTXsJJ6$kp0TU7zXm1AkaAt-T2P8n!nscz+}tQsc#;sCw}BUNgn@
zUR%@kUTbFGIt|s?XJxial*eU#GkR0C9xZe8RHJL$pDi!w6Fn?5#kD@^tqrwK&9kqX
zhS6Mcd_j-siHyr;XK8#i8TV*zZlCS3pmp>HD3?mr+14%X@$3G%SNE?C0000000000
z00000000000000000000000000002I+FIk}xmS4+0000000000000000000000000
z00000000000002+Dr=AarNhgK@b&N~;j_^J000000000000000000000000000000
z000000002|FK&6dG4a}DA~%s894r;Lt!Ym+Cf3cxt6Lfx6P?NS(ZOP4bFwk9GTGig
zm2QptrNe(ngl~kehChl9000000000000000000000000000000000000002syGc{3
zGdVg~Y*?0hZ8A5J9ULqbx24-s>t=&gV`^nf|5SU_G#S2{i2erv000000000000000
z00000000000000000000004hWtVpKTCr3+DeIvQaYo+pFCEXsCHioAY;fvu@;pf78
zqC)@x000000000000000000000000000000000000Qe4iurZZ5dZv&a$W>04hqJ}}
zRIa>b?&yi}TzT@LbSiOt$tH(Ng~42TT`HA$Y^>I1OKxJIFg}<&R4$F~%MOf;k99Sq
z5<BVxY<Y4tTdwXal}4g`q$?R!jF$TIh1{0@nX<~+QmNV+t*kMOB*GWNzYZ^j|1CNM
z00000000000000000000000000000000000004mRq}QY#OO6$?1G&nU+{8d(d@y&Y
zTpHb%9T*uOOLe7ow2YSe^M%}&{!(dVG+Q32oGq2A52cPK&(u1dE)Qpm`Kera%iPfu
z<GJ!=<HM=rOE)=GDh%ez>3dQ;X4-6dG8((OZ)T2$_IPE_y~;ZS000000000000000
z0000000000000000000000025vi9iT^6Axy@W<g-!ViXOI2SgB_USK7|Jw9R)6Y$x
zo8BH(0ssI20000000000000000000000000000000002|Ep`9$)<iPd(VT3_WbR4z
zq!W!pBW*9g*gTux-+rsUYmxdlE{p5eHz$)(edFFjVPB~<GMX)qRMM$C#%jAY*4nwT
z-rqf&Khzr6uc?i-w((qccy5eaZSHTmHO87n#(1PTu7995#+t?hrEA4PDLc5>Kuxy>
zT0J+=dw0*~>oalvy4pai8;|5G)lzwKc9>hu?r*#`OlNxc%rNgcGn?O^o>xCN&8_-3
zq~iJqYtyW3IGY>D6|3{k{N|a&Y`&o(ZuxMn<%))rrAqZezLKxz24|aY|Ilo{CK)wt
zi6>2`Gd=0Hsq4?h|JtMLz2e#bkO==SycDY8Sa@jq>(l>g`sVbR>2=q?bp6BEr>-Bn
z-X1jo000000000000000000000000000000000000092iwQWUu{qfGx(p29_Zt_~G
zJXon*DdelUzU+9llrIkECi>=A_VsM*?s;=Zdi|xY`Na#Gj1{s2xv^5EI+(3y`^Jm;
zE91G^NKx1Bp3TeCkG%QbxI_Q!&)qKw`l884>&<(+w{>sZ+Ma&o@w>Gj%a(J+>THkg
z-92wwmVV^PZ#P3BTd9tg2J=Jt+~B;~dfL*D99(mkzR@}5vV()SI`#IprXM+aw=Tou
z`N0L-&>O9>CB5ZjZ3{2wE7ekY@@o8p^p!gb>YEu)TI;$a-of7H^p^dde~rFF<<jU(
zw{5*mf6Y$w=Xzr%{orG@Q>!hba_gvXyj<wJoUL50HSO8c-Shg!^n*JVZ+khq7iQb_
zz9F4{a97u&?P@C+D2*4Z@qk<3m|Al7p>l2@R~(p}9d-MbhV+An7jGM1>DtJ1XBKzZ
zluSRkfAJ2tU$1yEt<j^hHY5|_zlJY|KM21SJ`sK;{CxOO_($P=;qQg(p&W+8+r#Ow
zFYE|!2<yV~s4)Nl000000000000000000000000000000000000N;I<r83Dx;xD&<
zc;lv@SveboFZ|>mte6c-U;f7DJ7<IQ$A0_K<+H)g|M-(X)HWMz_~ZAUT2&8z^d~;j
z{i{FQ)S7BcmS6wne|U7=+WO(AAART-SJw~kDZTUfnwC^!%f?lIb#!cNT)1)7Z+-RY
zccklwpZ?sH=NjsVAA9AiSC`cffBIWDekWBw{P7>W{L_u~!<$==9L&@Yhd%StGp#d+
zAKi1Qqkeem`kL3Z)DIuO^qMy|*AFut@0)CIjkaLz^#73v-wa<5UkhIe|2h0&cqM#1
z{6u(97!TQSBJ2teh4$&cnto;a*QfvG^iM^N0RR910000000000000000000000000
z000000002^A8c9bwaL-az~*WtS6$PQdbl3s`}^~wo116jTw!c9JCR$xJoR8L-nnCY
z@3x+`uT4Fk94?nOXA6b=RB3ecWTAR_IA7d6Tq^W$POVODT2OoK+O^FcixsvnR=8}j
z!q&wK8#+^)T5d1wO7$*iSj`o)g|W>ox0hFnrNP1M=FEMmJqyaqxv^3qcQrS-x$)lA
zt_4-Ke0aQnbGk9rk=(qzmbTT>rgSQi?2MCDak4T_R<uUDyf*xUMEGX-diYxSO88><
zT=>24@566~PlZo}Uke`#zZ5<iel~nK{GZ{+!aoW>95n_200000000000000000000
z0000000000000000D$kjbgCt}CQdryq&-fS#Ysad)zXqqH7D1`$?7=ijFVMyvNBFq
z#L4nFX^WHAIH~n$j+3T1$;3%xoTTF<)f!E>HcTeMH^bM%*TPrA7sKbm?}gtD|1SJ`
z_&4EW;TOWsg?}1;Jp4#_fB4_S-wV%0jR61v000000000000000000000000000000
z00000;BQJM)sRfwTwBjp*R$4o)>6-!>seDh%ha>RdX}zdsm4??Ik={lcEstnWpR3M
zdo689r;;uArc=$y&Nx{WCoAJ*MVu^;leX4qDQm+(B78G^J$x;EC44b_F8p5j_u)6g
zr@|+~uZ53=UkV=$KN~(6eki;<Tn}SWV*mgE000000000000000000000000000000
z00000`0uwYl}RQVheq07ezAGYTyXP~EgiRlbt~KFf)^$_m(2ywx4o^QEtP4h1@HRo
z2h*uUa&4Tfj+4$fSrsQM<77pgERU16IBAWOmN;pSlcqSy#7SeEq~j#j8ZB_`^b3jb
zXW{q5C&Mp?p9&uc&xeUH9G(h?!jAB|&>0%0zc&4c)4wtOE7KpD{*kCL0000000000
z00000000000000000000000000002rNh?z8lT&Bj+JF4W)a8>SJNw$>f{C4H2dBoa
zjT|1j(9;?hj8C1IJiX)e<%@4U^JHgSP#vB+G<5!nt4|FbxU?)T$W3Gi2TR4veUa7k
z3woo1wet(MMFneW1>*;Mdk3c`5B3b4Z;J~q7WSRrcj#1pqNlWJRb22?e(Tn4PwhUs
zZPSTrM_h1z>)xlH-gDvf!6*BQE8~K5M>n0FDqgD`K2kZG>PW3`Ih#9q`rwtrl_N*D
zUyB=@o){l5UYHm@a$w|4CN4O6^>B8ecz$H`*wKB>alwgVc3btr))Rdr1HCPA!LeO^
z1H1b7>=`+8_*_F=uz&0RGw1h@T*yAXe<&Rn?Cw1^R6TuZQ+E99w&iibu0v<e4CF8E
zJNLw~olSAU&aETcju)mziU&_#SP>U&n%ezD&+#)8J9k{!)Yuwrd?tJ-5&j~4A^dju
zf5N|r0ssI200000000000000000000000000000000000_@C7BbTX4%lV}_oX?yv_
z=1eW@sD(E_+0s}G+w0-FmFZfztQNj7(V41+4Ylz3wzoAbOSfcNYSFts`@z;|>`eHh
zMEF+tZ{g3wpN20+0RR9100000000000000000000000000000000000e79*#C6npK
zIBiI!Q!UAcbgDU-iIa3H)!fn=HOYjZPlUe=UktB=Plk_20RR91000000000000000
z00000000000000000000{LgP$Dw9k!4vn<E{9<!vF1Y#0md0Dbx|Qj<;Dw3K)Lig<
z+uIu2Qkj-o@UG8(ur(U+zHmGdz7hT+d?oy+@cZF+!>7Y1!moyZ8UC;Ek?>E#kA@!(
z?+xz`-xr<@<DnRa!`}&)!r7=3000000000000000000000000000000000000002o
zDU(jNB-gI1Woz!MWvlP4Wu0BMY}MLYwsK7^Td}&9Eniv7+E&!E){a`%vb>fxx7V_!
zWwk8RR?8Y&YgxLbmZh3A=|nQwa8Et!tY=O2EK|=K>sh*<rRrHjW0bWtv_=cRFC0pQ
zZ-)OG{w#bc{84x%{APGL{G0GA;h%?}2_FjoID8<yFT6XvGfahY7zu;n?crQF8Fc~x
z000000000000000000000000000000000000DuKD>10dtp8KM#IeE{$P3dGZ*_rC9
z=M8IXwVi8fwVkVLrA?XT^}MmYo~M`9^Hf_sZ)mOcYHF$VYHF@Usg7EdT2X7$(9l#1
z8&+o0Em4<swJdW_Eo<zoW$8>UOEuQAhIC`PB^oA5qi*SRb8|~;wEFv|zdsTFJbWSi
zPWZRsm%@j`kB0Y#?+ewC3m3xSusduB_l36UZ%zN{^zTpq#`MRhe{TB6rvE|I2><{9
z0000000000000000000000000000000001hzfsH6$xL!>qH$=X?d2Dn*VV!`v*CTU
zaP@3>Z!PSc4ZCXLs(SeT?zOdW<!rd77Otp=@7=w+7A~)aH_s$i*21=Wxcx&bYGG?F
zeD{}L>ZpY+web0uo?BiEn`guJTG%ujE~|x^*|4n^HqM5vwJ<#!w$#GZY}nkMPGpj^
zCv?w(sB>8q)z|Ryd(PadidNrnD|+F9GpSoqG-T7f=m-8Vvmk1`6-`}#F5MdK|9#Ux
zlL&tqz8GE!p9~)lKOg={crn}zA(TTdTnxv<_lBPEy3iF`r~kj{|1$mg>ED_D#Plym
zod5s;00000000000000000000000000000000000c(p7`&HQ%#%P%&sn;+aaKe%^(
zaL@dp>sIjo?zQuSHMfHI?p}Q>c+Z*6x!~s3kFT5yUU=Zlin-w3UwWxyE_nW>=a$b8
z+UEz$<_B%_gVy;$%lx2ue$X@*OkIC2Ge2mYAEf68srf-eTPo8s8?;87df)WnMEJAt
z`{9$}m%~qm4}|B#L>LYi!ojdTJRDYq<n(`;{)6dHP5<B1AD;e^=@+J_rt{MmqfP(-
z000000000000000000000000000000000000NidxYJGCz@ZrmEJ>J{D^KkL0HF3ds
zaVTHN4fe$v<AQ3bROru^YXzxVL3X&(HzQpu*f%vaaiF|^a(D4?Q%7ojOSx34&bEjf
zl(!CE>f6>gxqY-Su{tgoE%ir})Ei`K1-at*Y>$SxVC3ZF#l6Kt+s_@|Hq{yzT+Z#f
zxM}ptwKGqhzql+e7=Ci{NNGpu)RX6rUFeDnaueCX!BVj{#y#^2dgFq1^9r`b1^3M>
z=!pyNtrr|Tb@}N%=TDt1?pq!gTpAibd}*XVf9z^`xIHd7Kad+e-<vx!aB6&LMO^UY
zsS~5ujvd)~xcbzd&bZ*jfnA4opWAz)u<O9~j=12^?qlaB&z*hx%D~ae%DCX*vBNu$
z_7sngJaOoWwQ<3L(f(a~kBnVCd*EWFB`(;z>&j66{J9IG#Y4Sqalxj8$4``>zBsgX
z&+g03t<l9xhyRoa-w1yZz7ib(00000000000000000000000000000000000006*u
zt4unXNUllOvel_5Yfm;dG)7rVx;3tU?p0nN000000000000000000000000000000
z000000002I%37m;%ftH;;Tz%4!<WP7!Yko3;r|W48h$DKv+z&DkA)9Jl>h($00000
z000000000000000000000000000000@IPErI+;w~lUiQOyBe3(^Hh5+U)$JP&r@x+
rd`)9>Jx{gN^3{!*dY)>k<(=uqdY($x@|6v#TE3#8p)s9oY03QmS~IaQ
index 72f217bf70f1672eb0c7c865a7929e860018833a..4dbbb1ac75aabd19ef78e529c44e81522da5c420
GIT binary patch
literal 1179648
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
z^ZU<A<yE(ksd6PKOqVvBaQo%D{91m4N>SI7L3N^1m}}e=n<GTKb)gU}jumF}(?R{s
zzqxU{qw6sH+&_zj9}kDFe*bFa>cdyQeC4?-Z+Y%pQ4jzC00000000000000000000
z000000000000000`2WCT*{!jsV_Um2U0tzVna)_O@wejNQU8<d4<CA4wOpw^JaFJ`
zv-wM>gX(;-R(*J&zi;kH{>b3L`NgLW9<Ie=KRR&ci9g=^tC_8_BkTKVbnxJs_EYCi
zP0T$rck#sWsVD304}J4fANu=UTVrFf-mb2$MAW_`7MrQn=Bn@5w{LNAv2V7#R45kn
zedWsZzM#~5=9zsH<x;Iu7@w~N`=%@9zI?G*SSru<)howdoH=?v7<%yF=u^SzXYb!J
z_0^BP_v!T3*wNVj^}R>4ECsby1GM*73rhLoT-4=KW%$6{#nHu~VsYXA9m7{{e`~RG
zTkKjocJKN=XA9%wg<9W4d3N6;)u6HvR30u=Cfdh%+r&)1R0@g@?|NW=sW3fLD_)*0
zPxRI54QHd#o<2Eo_QI)iM~aKbiudn$Wc04L@9)?e+Z`=$bFgT6^W)|D+B+sH`RYti
zt)KJgZ11^emPQ}HbbLA%`{*Y>o%_OP-<yi2c>6}Dou8a6m#Q1A>r|l<OqDM+E9_gI
zTW>9>)`CiJtz0fvSFKOARGys7N5fz2?O(clW~4u;o{g6L#s0?!&nCCVhGGvj$Bws+
zJsB(n#qwNG*>u$_!Cbi*)tZbt9veP)pg44~|NQi5f8zcfpZLw0&peyh8ap04yuRo0
z`RQhdn|0hsr{~9`e$Na)HoQ<gbaJtO=|a@+OW!;Hp7+GJ#-55jvVOJ3i{<IQ<+a$f
z@5{y7%ygmDH(f5)`yZIDj?GLD92={SpS^#_XI{PbweI?Md;TVGcK`qY0000000000
z0000000000000000000000000xXHTfhv#qdBme*a0000000000000000000000000
z0000000000;3mt~56|D^NdN!<00000000000000000000000000000000000z)jX2
z{iMT3W8t5NUkLwY_#5HH@Jy5i00000000000000000000000000000000000004l$
zliSjrv3nC;vDxxcp;*lKl`GS+7vI#`85@X#bH#iqsP(NX+tJY(+gWc=7#}ax`X<V=
zu@~=7b;b@yvB_W|D3<4f%IYR}B|BpWqvG-T>1K3QX)e(jd$?X&EKm293ez*S;^oyf
z-V|?6CqFq^E>%~TWutRQhm*1JFTyW{p9?=6{-f}{Q5FCI00000000000000000000
z0000000000000000REqQV{#xqSIn1!THkDWsZcED`^uH+&aKIN<8Ar$t;wD7*~0jE
zq1HE1p6$3Zc{n~9ECj{!Tu^Cmn7Si*Fg`v%-3+u9B=1T-93L;1r~68U>6u#ba(iLo
z_T)e&KRH=0Rolbe(fqbOcPtkEm+<3ZIeh5qUtj&~)zZ~nSH6Aa6IcGhm7UMM{M_$6
zSBWYB000000000000000000000000000000000000093-_U^bf7LUa<(Z|ltU71WW
z5$iZV(Dmy3&$iNF?8*KUONSmhc7E>ogWGS7W#aL!dz-c6*~IB!A}G~zBl+oSqruNU
zbYHXKRR8eExzm^Cdxr)N9<L=H+SY8jYq@16d9qxs<(@563$<Xf(d3oS&osOE;G?I8
z@}naImrMOimmf+zxV6zV(`?$6=}I0CYPq4(Lb<rG-1MhEy`z;LI6Qo`*xP@sSUJA<
z&RZKT<9n7{rqi9L8h^_@ce43c)EkX{@{ze#x_GR2rgv)oq4C8t3rD+~jUQTW+?nn;
zR;W(QSF5?<=AUTKl}ovy(?{2KQkgzmJbe7bvBA=bCm!C??4)<Ola6%iNU@l^T%NDw
zCMx;rOi*3hyi}?To;x=>SX&r5bL5t0^MlLHQ|V-D?2({a3o5yha=Ey!i^Zo;9~d}Q
z4#o#YFC5P{yLhD8MLd~KET4StSnDs;=Z1sYV!3i*Z9n-V`;RW}ul7E0?1^_L9?dkr
zhW*POCDN^a-Zej+8>!?cE(DdeJq({J4nJ|`(D-O+;IYIbT~QC2cvtIe(vKA?!BqLu
z%6g6$%hPLnICE;@^rd|7)DsUp*#B6%aj~|}C6h=b)^>3^s77l$v3^<44xOGWome<D
z_t=U2fsT4VnfRNRFUCZ2zBE-RE?-P9fAQ<hM(>L)hsWv?{i$ZF+n2XWB2jBy^{pmR
zT91t_>rXUVblu(>XErF!uWAtOuX?Q2pyU2{y+v17cWaEbwJYUvtyR0bzJZ^=x%UqM
z00000000000000000000000000000000000006kzvh~CBH+d2O000000000000000
z00000000000000000000003~4bw@vm@PEd_zljb20000000000000000000000000
z0000000000008jIFO%qq-4^ejoh&80;vKQ=@$T`ZL^di&gg=OduS5p`0000000000
z0000000000000000000000000004O1NGETL&rX&S9m(yP@ulu45)Z!@i~a!s00000
z0000000000000000000000000000000Kn_Sws>+^e73wab|JXDSguS~6WviX9=;rl
z{s90000000000000000000000000000000000000z%RR=crteIR53phRQEkIo3GT~
zRW4tM(hJ$BFdlw47X1SN000000000000000000000000000000000000Dxb5J;{Ta
zQ^ov5P~G>;Y`#)^SGjy4N-uQR3!lHqlLG(%000000000000000000000000000000
z00000fSas4`bmVJj)h-~4gdfE00000000000000000000000000000000000@QYw~
zA{&cmc6P<%ot@iH2NOZ5Hj<yNrjoIa^8;P4PW89a`{MPA_ckhSJ6W#Qo-I@hwP13&
z=FdL(Xe-Uu`+fc<pBDfC000000000000000000000000000000000000NiBV^`9$O
zW8qiAkA~H7DBOAV$5(&<>Ibeqef6Fz-@o#2q9OnQ0000000000000000000000000
z0000000000fS-d0x>LKJylu9;G<G4lyjZSGR;w3_g<3F{pRbh*rODvZSbO2vzyrB~
zcWz1T8trKhuc|Uv%ufV!<!Ws*U(1ipmkJl>gGNtL)7(JcEven_ytCe5yj;F8o3C7`
zuF8x>gU>dq4?LKAAooCjHnsba8`Yo7SAtTl)#5;I;2oLN?q^<Wgkrv0n=MZkrV7Di
z+h_w_sojIO-=J-DPC<Th@_M8F`_rl2LpN$NJztn?UxujBz}q`hJ0ET|YOGfE`lqq^
zN^xu^U!7^z?avLots}Mb;Kp@lqE&9yd*HrQYUkme4eKows)gD_dA?Muci8{-<ffxf
zRf372G;z7r>%sm+YUlBdd#$fwqv!gftW3ARH=f#gbmQLFEk#s68(oFj@B^{%$KhXu
ze;U3N{$cog;pf8N4nG_P0RR910000000000000000000000000000000002sX4sPK
zjK^X>I&kKRKi->dWe$DwQy<DSGavorr*mKUY)3ZP5x;-OOW!;Ho<t_uk-2}zXI{Pb
zwPx@Wzd7@nWb@;T{f`f(njfdW`my(RH9rntx&5u_=Ep}y?|OS@HX1e?9*>2ugg*+u
z7rqq!yYS=T`@>rJ?kETV00000000000000000000000000000000000004hCTa)+3
zXUh|PwZiy#VYaXHuH++`=}NgTUn~}u%Cmi!i?x~QLaA@MTpaIvL$WvCUbwip*w@vQ
z+`lSV3rhLoTwi)^yjm(xPUibkZ%RJ2DqacZ%Ee$InCwg5nLNCzsF6<3kM|`yl3U|_
z*~T%`ICf;C$!Eha$HG^`zYTv7{$=>x@H^qR!f%8xML_@n00000000000000000000
z0000000000000000Qkj}N_NGw^+Tq9=&B#m^+RX<&{036>W5_gkVq!GGTEq6HvGL<
z__OeD!oLdtNBHgVo8e30m%{%T1pxp600000000000000000000000000000000000
z;1@$@G7*ox*wswZ&7`xLbTpGxGf6g+L`O1_iGs<lc(#7XWTQ^9;g@6KtKr{<KM4Oa
z{BHQ2@LS<G!k3~T000000000000000000000000000000000000002|VoD`r@ofE&
zsUN!PhjjhWSwD2t52^YgSwAF_$yg>EHOhwXj)i{}{%QE1!v7HdPWUgve;8g4XQChg
z00000000000000000000000000000000000008{o*_PZDU#birn7cT-I8-byr0ao;
zz5Pp<&y4g3)w9p0>Vdf<`6Gh|=NF$kc(|6W2WCcRd(S<yH2V0Z<I^3Dz|r%;(1Qm@
zp9)St+f@%toj)}(_srbI6UV2X%+v#8!{-hZhc5P?pC0W`)&pmT9~)jM9y+<$zjPr{
z4?KNx;_QV}=Z+K?j}<$&CU<29rmJH!(*wuGs^e#~_1QjulUEA>000000000000000
z00000000000000000000003^XZ2j>3O`Ze*000000000000000000000000000000
z00000007)%+4|x6n>+~s00000000000000000000000000000000000006kjveD1B
z@SnuOSHd5L|113O;kUy78h$1Gqwo*H&xgMoekT0w@MGa`MHK)5000000000000000
z000000000000000000000O04UGZoLov)da<W?Lia+S*9cw>FZ_?nctFrIDm=X(Y*P
zBS~aBQkkehXDSwtCwDZGM7o)DG?P>_NpwU>CXtOs+!lTy7XB>!arnLP<?zqKZ-ie7
z|0w)}@blsChMx{U8Ga=Er%?p}00000000000000000000000000000000000008)T
zNvGoRc)Ih}X4=u+OjBE$Y4Vn4n#gvh;+c3l6D3{obXOyn+}g+`w>9b{66r=Xv7-@9
zZ0}5E;_+lhBT1w>Qkf{2N_BN*veB^H!aHK&55hkWzZU*s`0v9{haV09ad<7PgcIRN
zI2axZcSjWf00000000000000000000000000000000000004Mhx-}K=jAvsV=Lfo8
zo$BA-$YvVZpMCJrZH;VKBm2{z-m$fjO*gVX`N-U@jcjKt+ug`^w6a?o*;FfgOCy_X
zWwVWJqLs~br!t-KR<5f%6<f}|`u?*!R^<{~qFknxyIvGEOSk3T7wfp5d-;oBPi3QX
z-4+hS!XJe%hkp`&Dg6EL--iDx{H^fCFbpeU5S|U641YDM00000000000000000000
z00000000000000000000?Y1O4<FStO16{Aa|Ll&H%+Ee_-}aTvE1#d)wvzejPw&{e
zlKII;=5B4zbhl@=v}bN<&t%&(nf6RqdnUb-dHIW9?`Y4Y+B1n;lAW1WCL5j7wyS>~
z3%?(JEBsRU`S4$d9}eFiUJ9qfXT!npVEESXwlEP@0000000000000000000000000
z00000000000002sm&>-~uK429rw<IADhJ~OqZe*z1djF2^iIt`G`@Id;nsR!zBE-R
z29slT9rZvhKV2PLmfD)!m8q1=wN{{Bp)!58c=-5<V}qp=PjuG<rBY?^+_}-g+QP`0
zE%m@`P?~SGNYn$t*pvMymJU61?EKvE9rZx|$o`{?`>VYV9DCy3*?QpY(CN9-iG@RR
zkDbV;>wz<;7EWKv_f9?Wz=Qo=^}wm2{OHKQ<x>CB<%hP_1H&WdPG6eu9U3@zytcg&
zI8_{e;>@A((bB+UnR?*B;o+mj-u`37%JIdm*=R`;;SXcsE71V}000000000000000
z00000000000000000000003S;I#coPcrwuuC7DFF9(n#I&j<hj000000000000000
z000000000000000000000B*8u^pgmG7z<yC4gdfE0000000000000000000000000
b0000000000@cPl2if7{66CF{K+4jEy9LewR
--- a/toolkit/modules/Sqlite.jsm
+++ b/toolkit/modules/Sqlite.jsm
@@ -977,18 +977,18 @@ function openConnection(options) {
       dbOptions.setProperty("readOnly", true);
     }
 
     dbOptions = dbOptions.enumerator.hasMoreElements() ? dbOptions : null;
 
     Services.storage.openAsyncDatabase(file, dbOptions, (status, connection) => {
       if (!connection) {
         log.warn(`Could not open connection to ${path}: ${status}`);
-        let error = new Error(`Could not open connection to ${path}: ${status}`);
-        error.status = status;
+        let error = new Components.Exception(`Could not open connection to ${path}: ${status}`,
+                                              status);
         reject(error);
         return;
       }
       log.info("Connection opened");
       try {
         resolve(
           new OpenedConnection(connection.QueryInterface(Ci.mozIStorageAsyncConnection),
                                identifier, openedOptions));
--- a/toolkit/modules/tests/xpcshell/test_sqlite.js
+++ b/toolkit/modules/tests/xpcshell/test_sqlite.js
@@ -105,17 +105,17 @@ add_task(async function test_open_normal
   // Ensure that our database doesn't already exist.
   let path = OS.Path.join(OS.Constants.Path.profileDir, "corrupt.sqlite");
   Assert.ok(!(await OS.File.exists(path)), "Database file should not exist yet");
 
   await OS.File.copy(src, path);
 
   let openPromise = Sqlite.openConnection({path});
   await Assert.rejects(openPromise, reason => {
-    return reason.status == Cr.NS_ERROR_FILE_CORRUPTED;
+    return reason.result == Cr.NS_ERROR_FILE_CORRUPTED;
   }, "Check error status");
 });
 
 add_task(async function test_open_unshared() {
   let path = OS.Path.join(OS.Constants.Path.profileDir, "test_open_unshared.sqlite");
 
   let c = await Sqlite.openConnection({path, sharedMemoryCache: false});
   await c.close();