Bug 361923 - Can't use remote search engine icons larger than 10KB. r=florian
MozReview-Commit-ID: D0lmhAwabb3
--- a/toolkit/components/search/nsSearchService.js
+++ b/toolkit/components/search/nsSearchService.js
@@ -26,16 +26,23 @@ XPCOMUtils.defineLazyModuleGetters(this,
});
XPCOMUtils.defineLazyServiceGetters(this, {
gTextToSubURI: ["@mozilla.org/intl/texttosuburi;1", "nsITextToSubURI"],
gEnvironment: ["@mozilla.org/process/environment;1", "nsIEnvironment"],
gChromeReg: ["@mozilla.org/chrome/chrome-registry;1", "nsIChromeRegistry"],
});
+const ArrayBufferInputStream = Components.Constructor(
+ "@mozilla.org/io/arraybuffer-input-stream;1",
+ "nsIArrayBufferInputStream", "setData");
+const BinaryInputStream = Components.Constructor(
+ "@mozilla.org/binaryinputstream;1",
+ "nsIBinaryInputStream", "setInputStream");
+
Cu.importGlobalProperties(["XMLHttpRequest"]);
// A text encoder to UTF8, used whenever we commit the cache to disk.
XPCOMUtils.defineLazyGetter(this, "gEncoder",
function() {
return new TextEncoder();
});
@@ -93,17 +100,17 @@ const CACHE_INVALIDATION_DELAY = 1000;
const CACHE_VERSION = 1;
const CACHE_FILENAME = "search.json.mozlz4";
const NEW_LINES = /(\r\n|\r|\n)/;
// Set an arbitrary cap on the maximum icon size. Without this, large icons can
// cause big delays when loading them at startup.
-const MAX_ICON_SIZE = 10000;
+const MAX_ICON_SIZE = 20000;
// Default charset to use for sending search parameters. ISO-8859-1 is used to
// match previous nsInternetSearchService behavior as a URL parameter. Label
// resolution causes windows-1252 to be actually used.
const DEFAULT_QUERY_CHARSET = "ISO-8859-1";
const SEARCH_BUNDLE = "chrome://global/locale/search/search.properties";
const BRAND_BUNDLE = "chrome://branding/locale/brand.properties";
@@ -301,21 +308,21 @@ loadListener.prototype = {
var requestFailed = !Components.isSuccessCode(aStatusCode);
if (!requestFailed && (aRequest instanceof Ci.nsIHttpChannel))
requestFailed = !aRequest.requestSucceeded;
if (requestFailed || this._countRead == 0) {
LOG("loadListener: request failed!");
// send null so the callback can deal with the failure
- this._callback(null, this._engine);
- } else
- this._callback(this._bytes, this._engine);
+ this._bytes = null;
+ }
+ this._callback(this._bytes, this._engine);
this._channel = null;
- this._engine = null;
+ this._engine = null;
},
// nsIStreamListener
onDataAvailable: function SRCH_loadDAvailable(aRequest, aContext,
aInputStream, aOffset,
aCount) {
this._stream.setInputStream(aInputStream);
@@ -336,16 +343,39 @@ loadListener.prototype = {
return this.QueryInterface(aIID);
},
// nsIProgressEventSink
onProgress(aRequest, aContext, aProgress, aProgressMax) {},
onStatus(aRequest, aContext, aStatus, aStatusArg) {}
};
+/**
+ * Tries to rescale an icon to a given size.
+ *
+ * @param aByteArray Byte array containing the icon payload.
+ * @param aContentType Mime type of the payload.
+ * @param [optional] aSize desired icon size.
+ * @throws if the icon cannot be rescaled or the rescaled icon is too big.
+ */
+function rescaleIcon(aByteArray, aContentType, aSize = 32) {
+ if (aContentType == "image/svg+xml")
+ throw new Error("Cannot rescale SVG image");
+ let buffer = Uint8Array.from(aByteArray).buffer;
+ let imgTools = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools);
+ let input = new ArrayBufferInputStream(buffer, 0, buffer.byteLength);
+ let container = imgTools.decodeImage(input, aContentType);
+ let stream = imgTools.encodeScaledImage(container, "image/png", aSize, aSize);
+ let size = stream.available();
+ if (size > MAX_ICON_SIZE)
+ throw new Error("Icon is too big");
+ let bis = new BinaryInputStream(stream);
+ return [bis.readByteArray(size), "image/png"];
+}
+
function isPartnerBuild() {
try {
let distroID = Services.prefs.getCharPref("distribution.id");
// Mozilla-provided builds (i.e. funnelcake) are not partner builds
if (distroID && !distroID.startsWith("mozilla")) {
return true;
}
@@ -1735,25 +1765,36 @@ Engine.prototype = {
var chan = makeChannel(uri);
let iconLoadCallback = function(aByteArray, aEngine) {
// This callback may run after we've already set a preferred icon,
// so check again.
if (aEngine._hasPreferredIcon && !aIsPreferred)
return;
- if (!aByteArray || aByteArray.length > MAX_ICON_SIZE) {
- LOG("iconLoadCallback: load failed, or the icon was too large!");
+ if (!aByteArray) {
+ LOG("iconLoadCallback: load failed");
return;
}
- let type = chan.contentType;
- if (!type.startsWith("image/"))
- type = "image/x-icon";
- let dataURL = "data:" + type + ";base64," +
+ let contentType = chan.contentType;
+ if (aByteArray.length > MAX_ICON_SIZE) {
+ try {
+ LOG("iconLoadCallback: rescaling icon");
+ [aByteArray, contentType] = rescaleIcon(aByteArray, contentType);
+ } catch (ex) {
+ LOG("iconLoadCallback: got exception: " + ex);
+ Cu.reportError("Unable to set an icon for the search engine because: " + ex);
+ return;
+ }
+ }
+
+ if (!contentType.startsWith("image/"))
+ contentType = "image/x-icon";
+ let dataURL = "data:" + contentType + ";base64," +
btoa(String.fromCharCode.apply(null, aByteArray));
aEngine._iconURI = makeURI(dataURL);
if (aWidth && aHeight) {
aEngine._addIconToMap(aWidth, aHeight, dataURL);
}
new file mode 100644
index 0000000000000000000000000000000000000000..f22522411d3d74a57d347db1295dbce3cb111d8b
GIT binary patch
literal 56646
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	eMP!oNB)Xa^fston
zyD4h$MzZytZ_P^A>z`j0uciKs_p$3b&VNrwJuoZlr!}9#|I^-g$5Z{j{~vp1i)=DO
z_EvUAkr9b9lNFIo_K3`i$cU6kj!-B&yE042CZnvQ#0hbJultnVNWJUx`F+2?e}4Dl
zaX;iZulv64Yd){*x?hi0VQ~tcFPASqkC~uOrF(zl@XGpzWdNTBFZb9Q<m&qqk0ntB
zefT6gasQ&nRU%eyD#GS#Zubs`f1Q~tiW;z}6e&0t#oF4SA<ZbzjCfrrA>l<Wmp;@l
zIo)@R)KV}7=cLESLZaT<J8y|%tX5QbuTEe;cDJT@+aN`>*H)xB*$2yTJoH&;Bj!fZ
z@d*nY|9V8*;aMD9dmhw->g5M(<@u?Vv4>J_usS*#rZ#w3l#^phch_qg(;rO{a%Q;B
ze);&^;S!DnQOa85+isa}`S(0|e~Xt%{u+DzM;6#X<V2%zpzeu-204d~Io|L@haS=n
zUc8;W(%@Ag^w2)kz4!gG<EtDpE%zF!Ur&6Px3`<}^XC+4sT65KY_wPVynpzi7gHVz
z5(aE9XkL{29kc#4Tfq|Z&hda$4eqsbuc*`bk0+cmDZ2OAXL>K457n73uW=60@Txv4
zbiLbgG2DmINc?u8r|2UR)qb2_Y+tT(URGYnb%!Q8y<6F^xarTQ-w)31+gJa<z_kl`
zDPGrr)jPKT)Z@K{138rNbfsG=F_uIy=S%`Qe7yC!H5OaWspMsEIb~<%xv=7l6o&MH
z^z7S#>@jeK7gDW{WB6f7Ew6kN>n5s%Q`!j2uym%BKiNGL<hR7pt|b#<=T3aN#um|_
zsX6D}S~AyW{$QyW6LvH0JmH1VyRCDrif#NCYvU&>nURrFx0{K)M)_q}rKE%+<jOoA
zNLuENzrFb6d^U0Wz8C=*jQ09bnYoLJGF;?+XB(FjMO@~M(tQ-qsax45k41a7T=K#_
z)wf?y6j3g*m!3}`O)lZK<sMigEgkdh#R`#`w9vyZ$rMLozhF~7iy5QE>Xm={_UV}q
z7gttZeyLk~9hoOFE$Wy?oN)W>A*rI|`j5B)#A9Op(|xVA-QEv07EXnd1(}@|k}6a!
z`|PEN8&R_S@xB(pE&OG65zZ@^Vv|BHwqesmZw?jTC8e~rf55O|KI%!?5~Fd9=_8XU
zeTQRlyCw{#tsw8@liXKZ8^gvk#nkA?_S`#Y6^HjQ-4J1Cv_nh+qts%izR>a!S<WUZ
z1+P95n&{LZvl)Ex<8?{IU!G(54Jw!(mjiVYqsPe643QW!S(Y-gQT15m^!5Wwj${(>
zfdME=3!b@EV)r~6{>fIiZyzwBH`Wij*SUL=WHt1z2g^%hir<H2@he?|d3~n*$ko*P
zq)Beb?Mzqri^214?J?CjBwwo9KR4LU1U*u@;}0v4U9}m!IQ{0ybQ#UfmXXA~Xs@TI
z=e_qfUt1E8%rPBx9x+knd_d?cXh~Kl^sq=Wrkt5&{7!NfoLNhiVny~D@=|WQfrF8Z
z8IEJ*31b&3OJZG(p!)&SMEW(j9cBYB;t-N=J!;L2!amo{8NbVX5*@Ok(4wHCQ!j5P
zY$=Fj<${7oW<(Fu>805glXNamj@TDjgbz`pGvX{HF&M@f#f;T&_@lXGgNQItX5-AW
zkxZ8;$eKRJJlpVF#9Dh+HwqVAfumMSGpDnr3mpW~syrUkxmnfv_6&Y%x@YU{*uqlo
zH2ZbU)r&3*SL|9^$JOIK{Ly4%T?aSt6x57suz3qTI@TA=19%0_2tkaTyXb|y^VC-b
z_g+?nfjDMBc{GNas@Ft?0{%0I^%;%07-n3wmV1=S_l@zGd^NIv)xE3=^WbKVXg`lp
z;2W?gH-6!|#F&tXh$Tmiu4byTs+Pi=rv@Wu1tW}IuV%qXYNiY*`U0QdSAS9ZLiqtX
zgnJJi4#bjQ<8l}~cZt(Z`M#ErOo3%q{1X)#C4b?7c?vztE4%_GtXJ6jB>E5OuiTL@
zALKN7#GDat@L+CezkKTKnU#sWnnhW3IhCi@m~~V`%~j@w3<s90B!~6wBNi8J3+6`l
z5~T<SEC*)WrnQ<rzc&6R(KM9UPQp&r$W5GIrngfH^ZZ9x%lSPSgVO8de$@-Amk1j$
z70AweVow&0eq=P3ywbBjQ<5}(ibtyX(}(9Gf+kFm2sE@6HO}f7J#cbyDtv#7-56hC
z;e<R#en#;<_dDk<NCxHPO3<5)=fdaXj<Q{w56v@P{Ys4?p@3gFcV52e7MX<QE1B*S
zV(JvHBvodTx@e<H9I_53tP;;&v!-qwKhS~HeHY4)Tds6aGR@gpb1i_}?C5=Ed~>l^
z!iFYBM`p%t*zZTX9iB_ICDM9Ecz7tH9Gmt|>yc!SE0MD6VG?7b(VuZ~UkjrPkjGqQ
z*iT2`U$`tT__)oG#VJE@d~9vw{`*BlNZZ(OegRh~JATkD=P70S&lr?r4vAOeuYGC|
zu3jHr7k{`uWUoBhnI>|FI~!YOxpprvW-@(g_I(GMTp=-hOk^M#rr5oOL+Ox6bMFmS
z)=bh&dab8Cyf9PkNq0Lw^IN^_?V98QL6FeBe!^i)^HTw5I<Hstz~)!(BUVlb=)=Xt
z#A+98^6u+7w6EkpCLd(HsNT!1HhqKBmJ`BRPahHVQ(p92bMKx}#D67fHNVQRihnno
zbk9>!kCmyHC(<AEz3b!|qAEKa*MF>$Q1$a!N!+6W(l$MoP0nVl*hAq>vo87v5)bt2
zx{zWS%^bX`6rICQC@^QxzgMlTrp=9kOfjR8`lLyfq9A#y$<3upMHjpeWI%L((woq$
z{POHYkm>_+TOVG$3~la=MygN?*6N3>8wIfrHECq0xkc>r8aj=8hH4qiKG{eVNPFIs
z!GE`R@K(Q@UcV@hh;O#aEgCf*$dNwzT04<X*Jc~Sr=Gu2IXrZ|v|c^T_Eg|?2a$kG
z`Dh~n<w0R~O)TH{p0bkXq%&@5pWf)RdfeSbzj%4tFteC*T~I~R!r1xp=en-8J;cHR
zSPE1Qg%Vn`+$D~;GQ9%=KApG;3X`<M$sD%~l5VgP);Y+W(e2IPkG!T#pDAN&dS$U(
zBl&K8eENaw_jn`)t0nzytef)bH2kVuE}sdZ8f;Orcc2czC4PccN57c!_0mln{!I5u
zcROh;DAWt+=Nvw%a-%KmY_jdXF&Uxf;(>-#aCO`4nwurW&act~DrfYra}%C3O`Th2
zu`hGyJ|M;@Hb4U2bUUEP=zih&wUEaNY^@(?5wg#@P4hZ%Ye^MlbbYQxh<cenx_Dn>
z;_dX!S4X2#D))a(8C^SU=W0o!Os|yJ|9Gunc{z{3@aFx62dIgM!g>dd6+)H55G!By
zS1QKNx%*tOtHqkd*P%M5bxe3|jBn%p2DVr%VG;XHU*{XsF5OID`B>GjF{+MLUb`$;
z^6~9sV~0#bW;Oh~SgO(72xb&1%1{&cx}&v3g03#@f!QxCgRj2qzrrmoJE3byJPMC%
zT#L>Rwrh7_4#^>KyXPMGE{IS4TzU#ejAbA5J=HOd@{?-Eb$L#nM~+2|v{?B$Gf)l=
zv0~AFEWb0t89ZJW{5-%R3@hiU$7EM+YckbJY9V3;$#ue2wuLnK{H;?y<Be;3?0W3G
z9J@-0D`+iqF1taBy6(T>g3pTmEHq&H7|vi9duv}rE)G5`eo(-)i~c!3^U1E#wGx(K
z&%tRrN3Y>UM?-6>)AmZad+r_AizRWDT$a~*LU6M7%;R47TZVlS!h&<+#q?s6j$N~t
zkmCI0*H0;36=jqpT%vqqZQa=@SS{#(kuZql%dNZK_cfND-YNWeSa+O66#{{xh?_NT
z;(QG<Hy!ibhTTzLd3skBtQp$otBC3~HFL!{+l5Oi@kL(Zy^q2}7~uH@tSM2=X{~*V
z6fnLq;%rYgNtr8vdhy^!lsmRq_MNcjvpN#$CAo)*n*5kj9)09iS9e8;SG_C7?Z>@m
z)sb@9uSBWjHq7OMuUP<A4Te}|>BdviV?yfAfND`~26ZA;_Ek>(65!MXxSv$zuj_
zVP5jT1EXz7{-TA#T#O)s`6#%`$QJDjUBuL(${~0uDbt3-g?;R}=EWt%X_e>)A}2r3
z)X*y3>FjmiFvWj1-o@_6Lkhdu3L86z5*5<&fEo5by(nF?!4gs<u=1se@AjFeC$d&+
zXK$K*h48e+J!Hva#s{dAw+_7XVrrDP6l0xReE#(W9&E5{(6T0AU$0!RLcyTVEF*5b
zF1MRIjhtabIfRFeTdJm>%p~MhJT)%DWGS=Cd03xBy5^IXJ`FRAdJ}wsPrNPEe&On~
zLL#SXt@8B%?kggu1Df5Gd-v`wnb=sXg0OoQJ?!<3+l9%QYZaYo(=eF3cfn8&g8Pna
z%@8XCFXz~em})Z58{|zwOQEYJZy(5w=~X2impVr_6YouXb@>$KViz6^E=J^E*71Nq
zt|stye638wv@{oErvq>2J!9j`-e=XvVpk1FmGCLxF4F?OQ|B0L(@x?)u$v}b3;%i=
z%BV<BJRDqhma=~_ZmL?k-^Y<5$(n)TDO>!^Dwa%<lH#3CGpW-<%a!_+SIjOc<#A{b
zkFIu0E66#0!Kk?{(=d_9ejw@WxpQGbdeHYct6b7Mhe#-M*$INwUx<iMDF?oHuTSwX
zQN3WHEOvt~=c5AbJ&m#s%UyY@hMS%Jazf1+RVTRm@<ZopT)mQ6dTHH_Od<*H)P4LQ
zIRJ}m|BR;qT2vzt<fC%z%o@rOsTQnW3{8-8Uw(S(K)V5cP>pov*)XdMH~W0VTzRKs
z*n4PZuqiPTZoasg&%n$fT^5D4cy;61<GclHR~fdarAu7mk0rXE3^rf8r;mytJ%B35
zVvzT_MMHzFAoB<dO8N7skOyPBGP&baFk%WE532<7p1y0Xw;V%Lu4@<BXqsDk++JD7
zFso-O_r$pa1_W7p<ZT)7zIcHfw$}6{N7O}FiIpJd7er)z!Dv=;Btf<-yw6X~D!^C4
z9^??Z{)khiXDEA5ufC+sdDy7jTBnY}Nd44sF|RSf{qpJ88|uaZa}Tqn2laJYSHGNk
z6)rbxJVC+ZKyO<=T$o@f9BgYl?@JRxg-vPj{^JV))3?)~rUL{ds3OZ5?65lR>c6(G
zh-flNX*{XRpKBPVQaw!17Lvi@&ZI7v(9B{Kn^Z2OdTEMjGTm|*F`acFzh%%r`ZhVI
zZ`Q^T(G>hbWmf;3JMrCs*@}+J^&8OwK6lHI-Zf6*kB1=7Kj=&znVIqFd?=*%bVunK
zAZ5-O%oAFBmB+{+6+H0qPKaqy!uxlg%x{|CzV=qT7Bb;<lbg6SXN3?iK0C?Rd@m12
zWAF3oRgFtFALPcF=hS=ov*NM!zA$>zZr%mJIO(_YBDnoy+mSLV_z}K=)3A#c9cf9S
zDMVBUsTUgCx^Y~);&g94Rq;$sGEL2PcW~?%@)jf4t}>i=JngJUnLl2it|aTnNJ7f;
z(%3D6vrnO-gVu5``Yo;e(@)pVd@V0~&j4j~;)YZzrDw8Ix?c+#F{c`n60(L+TOFEw
zmZ2BhGQVNI|861GvPoiF7|T&e^<s!sUx~I1U$JHW^nAuVfcyCrLPk0G%*KptV^W)3
zIh1qWAC9>%#x}Y4j>Ct@dsbz*%vA_ID4=~3sIJInRE_4nC!mFtzBeAU_vPrPr{WZI
zM4uvG^D{ZanvI*RaT;l-i5B^WhfEfSk>|zfWvN{e%ndwC2{{5~{>Wgg0<y+%Rf~}Q
zPF5Hz8R6+~*-Y}_!>KC-^%0zo#X|f_eMNF2H=lWMoIL12?R4IHE?-lB>1nP$!w{Zq
z`@4xmlgT9s6E0hhGw^`WP@GHc!$<^UjUs-aM6O!#hvdgh%Zn>RAH-K?70yxn4|`iX
z_IJ9SqB@aYeLh-lvHGdA@uLblX2L~;i6rd8#tfN+>1SPh_r;-<)KF_-8!TzDq!#Z4
zhoObg{q850KG;+y2*e{bM?M}s3?&+(d#5DMC%9N!wu84lJj$uCW*KpG<fD0C_R3xf
zd4VxXNErI46C=EP|6a!~Lz7cO!k>6UYMAw*Joui^Iz84>LXy**O_UKsfDQkIWDb)e
zem_#SrZ=0L5DE=JpG0-8xu!*3XTSZ?FBsCt+{D~qSiy1pri;P@h$ZM?bPO{=E_)C2
zTN0boewr`tD``9W>e1cw=VnF5E2KS?bZJ8<@)5(!fzl1JSjW?(1lI=g#KH$cJozV=
z<SzO8Jk7#z$HS;{jctiI#gd0HxzEWjrUzcOR6AB%VvTwpp`L$fP9u?*(!O=T;_TXn
z>WP}e-H^v;En_@&WCY`OBh_oY*E#ZTy!XqXG>Z+&L_$h&Uzx83I$_T*bf!HIEpSVF
zJ&&}GGKbLaqC{zSIi4Pdh=@oI7gcRxSo)~<i%Yaf-*Kd$<T6a#G#9DjYe0qb?1cQ1
zu3Ip6{LzCwj$JmQxS6bLL0CiKJ;hmvzfQe0j?I?D>M(l!#Uywo)a&S-A!07BqSg~h
zRgw-K{!Q*<bi4%4B8LhlkS0#E7%aqfjxq}w_>FL{`pFWOeWH68NiA6zORVwD8x+QM
z=9;CR&vcbwxLl9z8TL%$9+<Xg4Uvytg@kjiZip{fP~-maVeg)qchuO=BV?AcyiIjo
zbsp2q%tk&s!<$7i9qDGW7TlwixMx|t_F%aZp2}_Q8s?AAk=c6D&24wOlB%VSXQEKc
zRR`;%?Tr^LI|BLR%xRjnafCmIIjV^{hAR`Rj(vHCDR)=%;9X73!kdBnT-xgPw7m4C
zZ(Ed|X!E5NCKWl0J0F*NIg&AHgd|GAPf(3US}l;|OrZFzyu@tK-Y#4sJEiH-!+E){
zE|jjR!VkP%t*M{y9lU0TDDE+tF&>sUBkJZT<@sq!pzvv-I+h%H$I2U3WO0!6sft|v
z<ty^!9c%Y5cfagDJ=rETWiw=->FqP1{S2}8p<Svq)GhS2`KfM2(N)91tk+I2ap7Xp
zX(aBZB{>rk``?ap#2l$quoq!_@X+9Rt;{PT&2`GN%rJR_vvVgMKKsp|dHXR@$c{*S
zTC=OfuI|LEINbh4=JdLLq(NIP4fYg6!;Cl)51#;eGjVf4$)IiBj8`_(*(jj{7lm;h
zh)KSl9pR$ae0drhMhj)dmzIXBf{=YFFAr6ERY%MnFKzOiJtt56tUGdVg$eS7+&f=P
z-U54pmcl3UC9aR~g!&Qvh$<D2hraVm4<0KZw9l;7w4Z8Lh1C>TA?M`$kM;!e;$j$B
z<T&booG`5lIkWGkK)B6;nUz@n=AH+cBVOhS@JEbyreKXyPe=G(PvVWNPmjJGzV)mh
zVZ!$)3a0$_1>6d$!-d8CJSEoHeNHPyi@s5fW}Wbjb(4F?*Czx#haPLnEL9?7eO>*g
zYo1PIc%@&Oy1_qjTGTVb)W^K7kU_GvXp!v+@wok~j9%ZTL=)C7vDJjaM6d=$@(N|_
z@J{@kH9Gi7ejB*isqQ4{X_aRhe2#mr%@zB-)nJZ`rx^Z<xM1c?WbmA>ox&hVvCyz$
zndSM*)S!>ooM041?enqaJUG5@<K9vSxR5m6gp1!PKH@Q4cM`S4JG=4ZXpw263Wm*q
z1DXC4Bj$H_?*kiOBhoXMrl(KFcraG9m=9JA5!Z|v+;dc>QMd*#F)dCs5?$&OfngPi
zjim-^+N=p3$s4>6r!mFzUONOEzuo<$|B0)3jg;z=7WFfhfMMkA7z>_@Sj|eLa2oys
z%xI448TS*34Qy8eDq46bUwZASLHfG-oRMAI*eBawE?U>6jQfnGek{ED^^=WQX<=<F
ztfr($hanro;zSKa`#p<XSfkf$CsbbR=#WDyTAO&-2-O#KjiOPTxum@3h$Q|qDOCr1
z%1a!<Vxes1L%i~A2WEO#+F*~n-!GThtUrnDj_eL4^o%ML(kK=Rc(})@HIv!eob@Ek
zvX)n0dfk$Fcw@2j%XE5GEyRXbuEQK5M^#itUZTEolpw^Oy{yyBFIKovecAtOw!gB^
zg_4u~Yb50sro)rRQo~;u<VO}ZCVd|FU#^=E?O`dEs)sv=*(C|_icLK?h%yXpzRvU+
zNjFq=`AB8pblQOdH{@3Yn-KlVS-iaZk8>Wwipcd7ZO1estcT@-nQUe+m0h1{NFvC$
zEUs_AYw}R5vvd)AF#9^HyxRBjydP2*uWwvZ|Hgg)pcYJ6@v5ZOeax1SPF&riIs0+m
zoYbxgs$lfN?8A&ox2)SMuS82Ogk>yXe7`hcAFV6${pcqO)j2JPtSdfg;g5>!Dz8kg
z&z<fo+oz;;*rZ))MxSV~ayf}(uxNj|xLKhZF8&?NxT&bzb7mbgpGTHt@mV{b^vExo
zi11Ss)fy+A#i5|`{rX<$Yt?ZrwZfwhy6NUB#ZQ=yGWW^_6nYG2Z&a9tKPXx3$mP}U
zeCSsi!{zUFO<?sxJZ%pxx2ZX@>C9u3;_xvaonxQQTnw8*U@8arS>AixvCp!eFH%q5
zz>LNbc{BW#J2m%X(_)><GmLGgs#Wmf5@_qoYObR`W2d^zZWJ8#K-qXQewjpF!h$c|
z<m5n5QuJ{0WH+4_`0Q&@g=)LQD2fnsDP6gKz`y+U5kxl039{3x>wQ)vQ#X=$@RRZQ
z*s<_&ac>LN<h<%{evTMmBND=LnWlPkjQwh##98aT*l|r1b6WJZ)V%|}cTX+r1z}hc
zzv<Txx$s`R+nfBjb3+dXq!xp{x9r}qVPElo;>{J{f?GIhv3A`-bUJ#VKyckM{g_Nv
z{j*VpRUcGu_16!rFxJze^WrSA>`$yZ6NGPS3bB5rJoK9Ttd5~PeVkU;sS8EnY_t|c
zxzW91o)7n+ghkfK4=JO1Rq+_{PiA<RYY3aupB2&Pqs}%8kB~n4@yJy>*xDJJ;dC2v
zTr-ZaJ_CnYjH(MG&fRy9i=J=|gRk+`D>Ba;%&vX;P<K95ZfwRxFynP)X^&EAj|!rP
zDZXOFCnXe<1$)Kd33J@I#Jfw!P_Jl%N9Y`?+k($W21w9e%acEWU4po<|2<wunae~D
zHz~*X?fQAr@)2=WhX-MhQhQgDWRD%g30zfmdopvdYQxm@-3rR*RvC%CL&t}u5ylN_
z(~b2+&xMb{$Q$B(hn+r74Esl1=#_Y1F)P2}?uW||>5K5F>V3AnKGza#Q#)>7X?Gjx
zLK;XIc0|}E=RyHR-JN!(+XnDf&5zU41#wM+yh%nJWq6tL;-j|-?h7KBnd=T1+f>>-
zJ8h+VV8eq`xT7kzgjKy@O5j$u`@}rn!Fv9y(sV9ug^SNgz9>hM;dWeYe1u4cLR@cE
zwWf~m^H5%aE93JUUpg(JIQ2NtWLB%y<(OjL+niyCOfP@MJLWp!w!@z!2tIf%m>g~1
zA5p_a%>;KdLOm6x9U-KVNuSGbPLw^E?TX<NV((97j*T7cB%Ni^(DnK_>3a+(Eju1T
zPL4C|9-ki6(AIpRlfH#Jo?7>G0t#x9F<9nAPAS>B67vo;q$SMS67m{$Ys&1WEus{@
za4IjFP^K8CAkL%+lAm^dL6Rzr$1CJ1=M$%T@$`UL{zrUPZImS=DQbRnEa+UtXz*d3
z>fq}EMvc0<WRjl`dbG+CMKleEMK)IAGF|!#t7y3$Lw(;w6<5XJu083P*i9_98cYjk
zd@(`%a~1t(c|y#S?wO{#h|Y_d54w_Vw3FSMYCY3*+<p%{LK|DVY*Lb>zD(Zj0b!w*
zc<U(QtlK>|hG&|WisLA%5SBg#(UX;v7b6W#C@NZXs(X}|w6NN%{KZcg34hKr3=HgN
z=tq_o`c@No)IKtI3@3Va2ero)=EXj`K6|@#xGvBm?&6_*oY337Q_EcamOaXr#FvII
zN7y)UVd+bkbiAay$!{zjs?xWir>e9_V#3xGU%io7J@&R*R%r%RdeC*af;&n`Ta{v3
zc{HO(<*E=%zUSr9C_%=^D>)Emh`g+7Dw~|kTOk11$6RdbsN+)}O#?<A$(Ud+f4`t<
z18S{_WbS(Bms(7Em0b4+9#jPp5GyJz_qiNJ91lFh>C&Fo&ZJ`?sVE{rZWX1jeGE6Z
zHazchQKN+??3wF>U?K5ic$NnoE%qi;=?u8p(Y!5**2)eJUZ4M}C&A(-9VWD(>K&K*
zNH6m05&CAO>C2Z#*L*l&-1JUI52iVB5am8JOW-T=7HGe1f9=GqTk0!33|CX7CF-E-
zu(IRct48+NT+?u|h^HCyp_)DLOoNBFH=3kZw6z{zX{{l9%O}jeH{VomG}Dlb)a=L}
z*hkkBh4@qf9U&b?u>wh$+Uo^`I^<60#|S;EJ+(Csj<Z%rf3n3DB3Hlv+34z%ioHZC
z0S$pMX~Ahv#?`)JG4!jaFR6G^o)wj0x48N|Z=didEvl}<Orzk3EU~`aS^4X(={N>#
z?m1+l=6yL5BSW{`Yj6V=G?Pdk7Sh+*%3H?SqU4@Ie6g<Ryen`aDp1;BgyXP2_n1`-
z#CV-@J*62dqV{TkEiE}Iwc8Z0Iv|vyEKh-%IaYI#p|>PjGf}tp?(2p8{REygipt)r
z8a&c(i-SJ1j|)WyKA==N#l|V_12NIL`RZyXO>B6B=MnSQw81R+W^4y8a_!5U#?#*C
z0t>*orLLf+bHUYtim1UAyGxmBq9HkHJ#a6q{QMoSQUd3rBW5UAS|tg!XAI4V(VBR@
zZLY_A1xB9abOGVn8}2;&!>2xY-K;A!C#QbPslv`{9?p8JT!4S&>oYZKrf`3M#S|9x
ziD;qtDpFCiW62zx)wL3=QJo*vZ^E58$!M-zkg^$a$Xqq2o)42eIoL!i@_MxmcC(tx
zED)oH7R!Nnwv&|a+-0H0fG@$)izi}zr_cA_b9HGATzeEilfGBu{`qwjTkf7zyE|zu
zhvI4TG86VTc}CP-%#m)P#S(C)I@;j+<y_HA?XODClAlGf?qE!@(P~z<2X)hpBKBvW
ztX+<h^P%iScKYV#Kw-+;nk`rxuOnG^jYSQ!Ce&ndtY*w&snz^)j(hfz&!1edZ7hi~
zl>%cE-ru~dMinU1sE8#mDOgkAe2`a&il~cHze>^b)}##sehF_qSK>nscmDwhR1<lz
zzt&?XC3hz-q^4U9AVr<VVtf9)Zr@S<N2iWu7CE+bzkeq*@j3HUNVoJki(9M?>oQIY
zt7d#^?Aa>`kLee&k5Kz$&(^r%<St3md1zHnrQ?c(2U}n`ImVb$f2I#+SzE8J;SIpp
z#}XAlor7v~G}P9}Qcj5sNDP1S?nDmWjMsSEtHGJccXm!Hw3ZongOWXUnPd)m-o<H(
zJUr;xf^;ZOxNq$m<Nt`yjM(W6O|i_L6LPt=Zf6WRW^}Rd$?JvH1(>r+uJ||BguL}X
zN7MqVwH4M5#0@+W89>8S%iR%F>X7oPxCqPnXohpPQ0n|AlK0+)QM#tt=kpWZtfZ2a
zriPM{*#~it*<&hp+`dRHLIt-~q{b1~=R1~Pf6DUqNtg&NijKEn)YU}Uc3l6Jdn4@|
z`~%|C{(0FhgYFGsm-t7Kz99-py0I=EDu$!0<km+jsPw8|y4pN3K4@nw_M~+1sgO)C
zOF(DcjU0Ujlea+%;SB6BqAJW|Rqrs(1|MsmZ7^hglRnIo)<rPuaNfUSj~CzQoKIo1
zQmh@$1HI4dN);>iZ|IVd$#ow(>_=?bWy9EC(k9fgFup+M>`B^-p;|N6#l0_19y@3M
zG){Z#<%8smh0k3~&g08|DaX@RB^<IB$coF|pAhN(ns5<^S7*je?|f~3FByIOwDAp`
z?AZ!^sp$jSO%yLq+QK6fEsi=}C#4fCsDWh+(^?=jzkXH^Bzcql;l3BW4kvcP_*!y5
z?)-&=<DG)AFTUxyBV5w_BYBv$7Xw{zBV|S;r1-SH5;i&KILt~q9cZh4-{+U7ixW4a
zbCuehO}F_477>}D84MqfwactgnZ=U3Xq30ph%|IxK6zgK$dLQ%?ieB5PsPWwo5t-4
zP|d1>_(wQf$M6!bUq+hjpB%d*c=yyJ%-~+KURQ|^ZyoDHE27l&pQXUgWqc63cVi0I
zD5Yf`M!`2v=+xLa8iS=n9@lj3@MGfKJ5g5$67*P;t!-?mB%hPrjgNcC(RKCMnXr@1
zBm^{a_Xi@~RuS9;c124iHnf_j9-iS;B5RX6hAoXhT*?cR_h7D;o1?Tz$TMUjX3ub<
z;QM5il{8kU8ldMq;`pSF=W)`D+%-Cl`|*<3mDfDfMGo5+P+WEH-7~%Slx$UL(}zO>
zdK|+C`#+>F283*+oQ+i{j}yX$w;oHF%`51Dk<rO7i=7rfyl}n4^!ke9o0Ha;5^>n_
zb)4E*yPGt5$1mKaO;J1gfhFJ-T_AHD_YuAjx(%j#NABVZiSTie%IQ%ZX%-S%%s1pC
zLAB5_%-_AzY4A3vz@b-h{OFNOxD+Dfmc%vkkC^x8cLj<+)yBfydnkjh;Xux^=iSMP
z+eUW6MkyZQVj6NYI=-_roWcu!OJUa?e5pOese%HZUQ3yk2|l5~#k3d$Z&C^EO1VCK
zd~h()DpeY@D?-C+zP>EuqZ915P~7^+`V1y4VC9fF!ObsaR;Qd8=%UoaG<2QgDlEq+
zq5MLaoLT|i&dreGMmmJ8w0PC>=EmVuf*;a-#ZI%6hh2A(YGFFxf25O+q-=o#$8|4F
zb>1}`zw6?U^h<PGFIyBQox{-c@DN8;ea$pu3uYM_zk@3YYdtg(5mM3%Biq+pbxW8)
z{ndHc2hN)mc&FG3D12l*WUJ;wbdrYl)eYA@ekb@LU>50njVtA}<VV_1#p&FkS0D6Y
z=cRP__UNHP+2PFlE|h#Je;7$dqNv70UPYi&p%Y?ts?OppHn%385>r7h%nbGcPfvK%
z;5l1*%{bzNAp^UKGJ@UW-dF;8r0r>snRuZa%WqCf(yJeROH7=aa^lIc{((mM+y^>C
zQxOe&G47Bl)ChVJjHJfuJ0)-uSR;cYqfM(4xwW%vpNSD%h#5)S)94ZwLEPE5AIpG^
zn#I6OFsvw8*8JH?SWEY(qbHoZ&)b+@ADJw?OG@@Y1u4#_0w4Dcx}6*?G>&67$WAj`
zaSRqSHq8GyTSeYX@tS|~ZHiPfsUQi3{JD4o!%<OM%U5)JGszDs1+og_K1)GL!Ri-|
zw@{gf39V+-s3|$-5mwa_9>pB&=^Bi9b~M%Q5Y7v~^;Gf(VFFm7`fTlGv#7fdX)VVa
zU-z(+mb}0;Fl58_=8nE0NKH9jh#RL4>+oJZc;c)|_!XA)0DQp<EuV6~<Sh&-+DFSb
zPzH2+z7!E0{j7Yx(eM&1{4#4$gqoxg7A(h-B{sjhvbdITQJD;zCn3${7F{4rIY>|H
zPLQ<=PKWmaii>Tdej_nYvULT-I^GiF!V7AxGVr9cie#*;Tet)nXme!MFk)FAv5n-}
z*(i#ebG*Vo{oEa1a2|iPj>N!1iqtFzJ3f&ogZAxNSg@e@<)jV&7^ON^&MT_H!TPub
zwHKi{?whH{#WFRi9Tg%jcQIiDYab3QfRN4Z)dz_ZR1se!u0@gi>M8TkMK(6e6f;5D
zg1jOXy?pYF)pJIB<?x!%cQw*Z<0gGdGCaWNV<@E=#nxKW!jLb7g>|T-u3ICpjNqlT
z^5fc1waT~~g>nXuCpkz=GS3?<2M@Tx0*Ff^#Bnt)JKgzsa&*AeMv(i~m80jTRU)vZ
z9&=uclh(cOsg}%9zpq~9Yrlb^`N44cF+pjyLpc1A+%@4a#$zs~p8{Gi<pl+`xxB9+
zF7%5t9A-GL!^NH#NT_dEX?h4sw>$mb1jS#xqSO46fmF^vJngu<0ft#<=riTJn0MFc
zQk|dBJ0=$=hxhqQRbZU;#KE_I&DM|%^9Z9qxi-G<{Rsxy^~7wOYP;)~N6bn}%J$Jd
zHZ9Rc6?mJAG*KHo5oObTL^y<9Z+kzykQJW6Jnl$_-z<ui;nUgjyvA@u$9|93?46~e
zP%MPm`}Z!m>3uadA+PI>@a8$CsVSe15-&JU6ywzB3iEYno4QnKcGeJ^-65cccERTK
zMns}yJwM(Mi^0&Ipv6;uG_W?wkaG3?NxXRl_{wStnbAUKDlcGp6mN=xFg}`GOoE;5
z!Npc%u0b4c$1#-P4|k*CCdLbH%erR_OEo58^8IMT!C6#Wn^DY3P!Ol(*$5*iE%^}0
zN}ZRgRdTM6PlWvWeu5ONtkE8?h&pGRFmEG8SA3t=#>qy`(}@gb=iAIrk<{Z^+;bl!
z<UNgt$ry)iSn+(HrBio(5~=(UzC1zE+zr)$X?tueta8~`Q~oa>Sa9I>xB;BJ<W6m&
zM67w_<T}cODWVrL@md8*aiJF)g=J2GS?3rcJrC(>)O56$zNjmvO@4yqH1}}qVzX;`
z2sw+Jq#I60^8Ci5SND{UZ;V=#c2@MK#uiKxuBh-`zh&gm#FnE#7DYAWYV^6-K_-oh
zycFA^`I?xcvhb8Xa|J<$1%XVHGmGP%{@y;?9KSevfg1I*mvHb|6PPH~1smm=G#~}B
zw!?U$PeUr_8xG}ty?5UbBA8kN9<%!R9AaQ#ile_ScQE#_?T1^mVVLrT+SsMEeEosE
zry&St@p>?I?e^{BFb{6M{bYwTQ_mB-!Qv?QEvTQpC5R_IAKMruk2pz+w}!V+Ea!Hi
zh*zA>gU+UVhPMn+9^U(|X6?;>k#0+ZEGQ{qQ%vf%E(x#>T!G2xLZP|LgeFswGqc!k
zkHz}*c^$ae(iclYr!mu{yw;iy*2JC?*GVxLCB`%QY3v0GrP7{IWM5rZ)_qu4t{A|E
zCX^!8gM=?5m5&~WPKfMV@Vm|8^u}D!5@u<m2z~U~kaS>jA(lON3HNm3>C}VeltF&5
zYDD%-g3Dpor&rXl**jKb*8}sg<cSXn;^X3`3VE(Ejo(gPK_(+pa`f$q{M>j?OGF9T
zc=UNL*NHrqnX?zu7Hh0QwKhqhkTOqDeM*adl*c!|j=#b=TaAc)ddj%FBg@d<sK@Kb
zK}?tcgvK-C+fV8Vn^m+x87$e@x&wm4{k63%JLiiRFUKBO<KkAP`*>EZ$!f0AOx|K3
zMLaf{Wy8mm{rZ(PxAXzc#z5CqHu_T9R2NBcE0~6TPU?NwakhRdU09wjdG{V&*eBUo
zTz}5J0dB7q7fr4o?&UD-JsBv(ndV81`6^KYi_+!!umuU-aV5^7OA*{zdNH9qpFX`+
z5$%05|G3k;Q*lP$e$s^*hgWEUBG^jmem4^@EH$<#=v7Rh&<Rs%9qsHcl9n2IjR+PN
zQaNS$rMgHQ46kFM&+9dY4v@lY5=d^l9JEdRaLo)yUXp>N6bh)H{pPRw%yW;a3|91C
z^2lC0Vsz#Jli&2b4!^Q`!i!_+G^rwzrOj2R&xgnJnkVFiE;Y6XG1)+A?w92Y!<juF
z(r&$BhnG{_S?;5wUKntb5M!sFd8Z^{G!uVghS6JcfuuSAjP5xpbuNjpV@Bz6J|xO#
zAGyzCx(LHuGiwOh?PSW1xD}LPrbbxY#y2+};lPDc-}MkIrZtphVDCO?n)6)dYgO#L
z2@RZv-}B+2Y3HWbF^N}Ida$ruxLIS_4KJJb^o2U~_YU+aL+q?SDMEP9$leuM_GPu&
ze-BTk2v1RoW*<pwd29S^f?))gy}59bGgG8fFRsOz46la~@^}lfr0_(3=!u2cY^>a2
zWal8F)^{S)3&n6*bD*%pm*R<4)U!fHLy0gEZacC^Fqf#7hp^ho0uAC<653UA#UoyC
z@8wRHm#kR&EG(PQo3z(Go55;UB7m<yAdRl)lcG(IITo&8g-~MTfpQMF6OJc`9W4*5
zCIu?2QB$u~C|#IzqT#)&aBQjW0F;n~@40%VJXOYp$BdSn>}88HQOvuVK_@6q9Jx>}
zF=QSN<KQq7FwQY}aDkt2I`Ezu+%_|TT7F+m_;ZJhV4jt=3f4v500$vKTyGfHYbDAy
z&8alYwVN0bs-KtpJU22`B0ow;s_1+bAq5ayZ)`y`ycOQs;B<g(%=58HNr#_Q%6P*|
zhWRl0Ij#MzCnhN}2;()`tN9!iNI#!Q=|n)BEsxW!Jz#8o4x^El!4pqV{aINJOSiI}
z%Y|d95fd^P&C*zA1se7JBz1!NdW@m^F%i@VvI^5fvcAhy?N$CIPMvy|FfVS_Eaj<e
z5~lSvRnM;t@9axA#2ZIGJj(8xl(9M~I^R{W*sxy|A^y<8iZkWJ3SoKY!MhT#F2=lG
z9XftUH~a8@SV%D0tLykf^^^gjhMi^g=ENh6?X1_0VMVPldH$M5!sVSO96yj_l-sz@
z1i)Z;i{LJR-25vZ&&DHaaeJ$~RdR2nKEC<N$4NQi{o`=YyE$pzch3#EshURW5|+!&
z*3t$ynaWm`m>(GIc|Tv=xt1j%()@^`?j34@wzb@K+7y{P&Ji<ryyUhPRebzAdNItq
zpEHirS^JS%5?Ayv73UGjf5crvy(S;I1A9iH9ME#1yP@>FW8=PJn;Q&9_RT#M<pS=<
z`IRx^ab;q#n(jS_eZnzvf<aOu&9#8zlnue9VO1NO16s%rRRXab@$qr{F>|jY9Yiv^
zd0~becEu)5Zbw%L)3oTP)iirN&&M1o4x3x+Up%@p9ELfPU+xqtUw%H;U%W8X*Av%c
zm=?<|Q!VYlxq`luG~9_A+UBY-f|D2{FA5wDU&?)^Oi2Z@8PuY$l5-|(JRa!6CM!0*
zM|57atyRBt?n65l0q$I-ICZ7pd}qkSS^D#4BXd4qj`(A>NhMEA4u~9d%k0>&JyQM<
z_9Q<t&9KJmDvml8%v#gT#nPqs96!wL><72*+jpSQzK~RI_O>gAujtFLa=_=hH`Hc0
zLEUtfCZrI<+eBroaBv-6WH-JF(JdY6>#urInJOfmP=dH{$2mI?3jrHmpOb;KuY(e!
zxnBG{{3O5OjnLKf>BNnv*P&>+R$rISw{Yc3bf3YVXqo5+#|_&2nM}WjTImtpqIUE6
zq6mr6{PcY8tV=j6{RQqd{6s1ADYheBjq(TN66pf2H~Yfyhp;<*nGH>cFf!)-Xyz*2
z?dYTk+x88>4=`Q&1bbtb&~<jIcpsr_b;-W0>;?<+u>|>YC3q7R`TDe5&KLdl9O+U%
z`I+7Ut8N>l!JapyH2qf?LM>%Lk*fI$zAMZi!^976BqOp&sD;^l#~fzHK~ipUJxCuL
zJ8Twlg9W46A12s$H=)}qL<o0CfT_Z?;v-5Y<3(Y)enW69v)R<^v>9Iay*UuV(@R_Z
zfP<T5Q{nEK@M4&~!k6^L$vVY%)K?2Wol`hZrYFQJ*vQh2Q(vZ5E;L1OqzVyh1>0My
zc8UEU%#N|+%LOgf0M)Dax!-#^of1ENFs`N4M}(7sNcp1omk&y_m)xUM{4wVpEXu^D
zqi+W5=RWNC;5ylTOB5^E>DmyZ(g|g0$?IZ<5ot1%SDUW&UH*tWm1+m$hH22}T%S1g
z@NF(;F#B~)Y^q3=Ui;;)Bie`cA19JG(l+-Lp6SB&jCl8K8S6=Y`GR=1A*JWnm3KFZ
zUyiWXC_I#r^HbD%<0KHO9CQBc*Pi^|4`1cv$C=-@BVirfkX2`f@Kd|ozaXub8Ze@K
zb$FGcRykXSfvZ70yXXsLoC^sOi)Ow|=ExbGv5biaBK>AG7?#A@<cD-0Ugijl2-m#7
zR=4zi;9_GDtr)(G9H#7*sE4q-H!Rrh)=?$pT;jr_dHGmdw?2$qq(Sp2aWVW+q-GC+
zfdyH9fQySP>}GR|8)v#RNz=vfrG&He&gJ}3wOLQNxC9%?qP_3lV?AKOhb4G{*mdDX
z;T!|2izV58wY{=eS4%kO%{iCPAl3&`PN|q`6nx+*;fssHi)HQJpOkntG)McYW^WL-
zjDo{)=cDo`ZnQj;!W_SSdE~4tmYOGRBRd<*OTEW!273o!Lxqa1ZX<nr?cUJ2`w!p<
z)?SN*`6`Z)XR-xA(SW<-(#kmJqnGZJ?^^TZm-R_JI+QMaS)#aXNV!O)jZ-st@#DC_
z@s2q+y@`QVxaRq?l%pM&uaH~2d@_ud(#;NS2^aSlG|bQA#48$+&rm85%e_m{N^QxP
zD~|_(s1r{Qnws&6S_(FfI6leo)!sk1N>;-RLt-U13!JKo#WW+LpT9x0lEU6M&731|
zSZ#bfyKfRhhrHl$A&WS6tss=AJN3|*eyt#+SR{3$aG@hS(L7;AVvxB}{Tb_hDp9~O
zHWz)fH>9^Q_fTG?h|IxPn~(0aD(=3!r`jK;Lw;0*DfRPBkHf=(<r9jGyag0>lii%H
zW7ZWI^~p8MP5n*>NGeM(S-K;x$oBN?eQEUuB`Fs+no0g1HYA`VEfQ<beIM4`?B;$m
zE)u&1L9b?dr%a1b@b07To2x!h*q5{->Q6``Hkp`U?Z(b43hfBt-h1U~+=K??j131A
z1@Ye(7dkhjQR7Ffs9sAJZfu&QId-=Bz4#QN{PpGr%fky;;rnBz%c7?ZsD~ahdHYm;
ze3pO@A&NOI`WUiAU8h#Uyn3_5PdAI%>HUfrpVZ=yb=o3M3bewmNL=Y1=w<I0s+T5O
z|H=!~WTP=wI}jZ_OcmwK+Kn?ndRnrSLHINSPtN<QBiXO9X!qldzPR*07s}4|QWSRU
zh+DrZ)|f{<t6{<a^bjT*aaubtnt;_ey1Sjih@Oso{VZOpX1d0!M4L*R(HYc7G4Dr5
zj-50#Z&S;vR;_u*3!6&q_1`#Or8;yqk{Cull1@82??qOE)8yWfBhfLl1ZhjtWp!en
zCnYit?*oq%pJaTY>_QT0{J_;c^eNj_?V~jgB!%KFhwB2L7o&zxsbL0S#_^0E7Gy2E
z9Kc1LmrJW5jimOz{`xHLLagr>UuG!LxL=U<PLhl|u(7hS__;BBVMAes&@O(%=XK!z
zFukZgGL+oIy(8K3m<!kWUtzUQp7n4&5}**?EkH4gTep0fy`^K&{!Y*0IaCTeSyZ!q
z#2yS)$u8?Qo3=}#9z@<5O_Nd-rCHeZu$G57UwArTLH=0!A{MlaMCv%;{}EDG(NfM=
zGz$X%ZyWf(N6paxix3O?{}>A3`1$`GO0^P-hvv}ESsY_IWba@<Bqggj1kZ&Jp-`y*
zwK+94HKePrJJePb{}Ww1W*ao&&_wN=mAR=X9&R2~_v>!d@5a#Z5Gw0l*6x2?L!sht
z#G{al$Zenf+nQkL>KmcDn<{^zYsW<VivFzRRFsCg#=q`USyhP=5*0!r5Qv}t2IvGl
zfcW|2v$pm&l#rkh`W(L-Q87`d%93JKmV?xPM1Ly8H%oKNf2ALZM51&xb<t-nE~!M*
zI`wV}EfXn8DU^?!&$jP_zk@S@bN{p!Bqv=RT@+#lfogl%hCTy4%;-O(|5_AEQRUzH
z4+h|UNKgoxudFPr=&2~Hh)RWIxEr5=PJuH3`hfm{?+o=1q3mt#(a(Y30bjuHjrXGd
zBl;VQve0`pHZ}gy8Mg9po4)^IRF+kud5u0V!?!aVoih4%p6|oO*#*^I1^<ueN6t*4
zG&D8PJdM8=kLJh!!~kanH1Bq1uy0%4Z*6#2`m@{=(d)T5xS;hI@}p>-{NEmxRgEaf
zccZeLe`&+J(qDYd9@X8`jn>oumjl>3kil<kcvt${^5fCxZmjz|-T%KnAUg(rq4Ji`
zU(r9*RE!D<3;DgyfH(xn2%Zl|#mB^>T-;pH{ubCI@TH0>irXgm+~|xE+9so}M4|Zu
zV!^-Jm5*--s;wmTujoe%cSFzl{N($9odKT+`~>h#Xut8_PIeyj*`gpG>=u`S{`|%V
z{Y<|t<a-to-{}9&XW;7q%|CqIE;N7`tf=r0pMmcNb`O4n-vJ)bfZ_>=X}>%>h#Qcs
zvNE%N$OSE@s^UMVABxvtgoH(*V+w?$w$shd`fY#cGoYJ52Y{aaiGKxg8SogyJFs>!
zgb#o&fiv$s6NqEL{?N1R&*_JIX`tx=dWw#x-}wS`I`vj6s<@~a%_Fe)-wb$uF^Y!|
zk`td0+Ar=LU{7F6+vE)K3Y-t@^~dyweT#vcYXEGs8G`}O(0uvJm<$G5j$8B%(E6(Z
zWCXCwChy=-4EhC*`-%SI7<=^d;5mR#Hf<R22k7^ILOU4X*{%Aap{e`Z?{Dr0z6*Q?
zh^f2MZ!5K(ekgVU><4uF$AHcNY!KMhe>9-ycj`Cz{oiZ`_-CMVfRBK#-ROtT1qWx#
za#lp!?k4@<+06lD{U=!ZR|DAXZoUS5{%-^D4A^0Jdn4L6?xer%Wg{HO3IX9Y#MBT9
z@oosMKfvz+{(uSOxD^-v?EwCFH-FjI{_lAhkR9+(K3+bk#>}7MFoK7jr)|?#flLAB
zjDmb8_zc(_cn<iY|7HLmvK#$>icdhU1JQ}<e)*FO5YRepzm1P9tY{zq-wY!tcI~z{
z@Wp>LAQ=F^2k_($EQf&ndZVS4<#zwJ8P}nG(fQDSG0-;1zI(g{dc8F_{@nmF1iH~y
z6u*srNU!1OymJTrAkF~4wKISHn*nSG?D;$Sg1`Ssz6N{>h-ckR#oOucAA$p0{b^k&
zez-ui|E<piG=n$?@*d!G{{+JU8~c-Wfi71T!O?zllYV<E`{Lc!1U3s|`QPLKXkVqG
z_(wEvodD<kTRjB~fc>&=ZHr~Uv|oVxfZyC22mWn<IPsrgXrS9dqEg@L4Zn%+0L!3j
zD!#hEryr8jX8it>7_&J5=KgE?A=?J}v-$h)^cCnMI`;|sJ^jFz!T4+b-}`(1Tb{8*
zNkP2dj6VQtf;~aJ1U6d?;a1>BLZCbh$mmb#2ReqXpFlSJH~NppeSb(dpcU|EllDKI
zARo(uF#fOTN5{FkV$@K3C7L$?^Z)UHY!L9z(#n3j&u96zE}$3a7{C*oxizq}zo9=X
zGj(e{<tO@qFQ`m*LFdc>gZ`)30nnFvBNZ)gpbx;ugP$OlZ^cr;&;Bwm-DOsmz_((E
z?eqix3UVFj@0B;~(Yypc>rZ^!&H?B}%ldn59psFFeso<I(ixy@n?C)Ibq>PPZDm=%
z#6KWM+>FlvPftNu6zD0iqravf`K^|`S$_n6Womc|omXwj6v*PQY#qYzKsSCxKRQp_
zlIKjlZbSiW^e6Fgw*jyX@Ym>=#=`m|hXHyC^d6k!Z|FzUx4oA5gMKMlshzSx>k#li
zKyJJBC;oJRXQgESJ}z&az<2JXZ!7(vU$G^w{ip>^4R@pQFFF_g%K>l@x|ZSQ@(mL~
zI;8j?o&%i&|Km5e(GP5Nm$UuIhtYi?2#;>{8$dVyttJipB(NP2M?ek&Yy!vv;DEoO
z{hM9xT0=zBpPIZ2?|0NgfeixN19$?^0rUar+`r}El_ix>-jRx~r-FC_atg54ANw58
zLjm=xU(`<^8rpuv`^^b#2Jx;NZOgzG(0!B5cyjA!yaMd<M^AF?TmHA{CxNVi{r(aC
z&@*5ic+juw=MYwCg#WBpKTRMXklUl{V_WtB^z6((&^?D8Jynn^{#DJF<r`M0yy5aY
zx)8-TTz2o@?REwz_XIHk=)u;#Hft6CHX57S{;5g+3+=#Ocli2U>4$vGAJhL$4jO2m
z1oU}p>;yIn;xz*C`*WcC-H^_KiLP_(^pnu}ilH0})B*p1o?rJ*e`gPnEp^v@>(A`0
z3!?GH9}b{*Tl<edj%^Tj+{I7+U!{MmZ=LFIL-TU;9Dsg++t77#;9s|5r?qdm4&Vmx
z9dylr{aX$Ia93ky$Zj>Z|1tW}6OHwt_|)ErYJ~g@==T6!0=5b!&<AiPFu}jkHFW4F
z@B^Tp1Nhx|FXZ3u3H;B|zg4dwxr1IC&@FHtP%i^I26zi%Sz}!#x}S^Iy?fvDsK4X)
zZuI*=v+}>1w%@0NR3(I4(KB`Hbkq3u(_zQw(D%{P_CMYm{_~BX|3CgW2e_xj0!?|?
zmU~)cKYtIBRq=OyLr?fM9|VLWK>ZGYxb1Td^=F^$m=LZ&K=y;!y3h9s?pif&)qNib
z)BdVf1boBRcnW-;J(QDgj$h?705=q8?t0$^xpRLPD9`>?PXS;L;9EiM0K{Q*4{l2x
z1mLT!{WE}t0Y(SdGWEuv?H}dq^4nSySPNhtbWGlXv(a}$AQ}J;1UVtPuKYbm1$hX%
z7xcURA)f_&8HhOmBmKwYdpz34JLpWsF_ypGA7DWsE07EPH+kJ|1IVQk#KGU}kH%HI
z;O4CZoD1Y!Al7b95R*6ahhGhJ&FyC$+_pc+Wwy#5$P>sK=ny(~{-WQo6(52c2#`I9
zp<8Q=fS*}E>)^KiK|Tcd56%K=^jmTDW^4wZgW3^Tf71@YJrR&Q0GtGJvLDZ}e8Z1u
zn}Bozp7~R*wtasnwgMYQKM(K=WZOWW(Kz}yy@<{G2%EioAO|29KqtT#=o$%>BLO;o
zw?ByMfM#&N3fM02LqG0o{AT><!$HsfbbsLcT~F{gaJC)!9ul&-f8^g(iCzl~u>YUd
z|F_m#epMF)xE}CvM?Q>%@|;G1ZGdfp^Ka@5=r8^0-LkEDJMcZbj_>_aaDR5|{+4Hq
zx&clFbOU_?z6aRAAN!vjJ#_H=uLkhdz`t+d0TOy<Xr~PU-TTwC@2u5<{@m|;7qE}Y
zf9_r)+nU<iw)Sy>p8j!9e(l?R;GKQ|*y*qI2HfA-5{r<Ky*F;n_kbKgPvCb0*c*_~
zPrcPG^H(tp*hh%(4?93YyxzutaNp|R?g#$3gYugR&H((<&OYqs9fI%m&~5TZ*JL0a
z`CSY^=Z62{hk*{DZ35!!w!33%-}D9ewePv)w*5EzWPtA9pa0jjzRmv0kNd*k?~Z|=
zAjjIwXLmb4h!5aS7~1drW&nJ&>03cu0Qw4k2ebp<yLr#&S2X%~x%?yl@B4$bK)%>r
zmWAfspA4|yX1yQ$1attq1-|Qd@=1*e`N{sH!a{!ZC(!qc|KJV?z=Ob^H}5_I+eOPq
z;WxEd5F>7F-yg`Oa`Q8YFCee{)BZm2HJi1w&Aj?|yazl2wVti}gSfO68#d-fp=$^K
z)?)>+;+wssqWg)PvG#XohbM2tAV`Sjp~_o3a2dn{kWYiYDzG<zF?Q?M0lA~=*O0FP
z_~YN|uR!m1-1kC4zG!F{T#U})0Tu%FeSo_FZ@2n&U_<ENA)5wrNBiAh+-KSJ$-C6P
zknkA$wq5c9^aS4rX9MvF?H{(_ft~M;0F3zCy?3v7Zo?nD(hz2Z?(J>%V?j=lb#M1O
zg1{cZ9mpU4iRBy5e{n}`*ZgO<3FOmOl7+@Fz_$V&2YYSuf0GC3+z8S`V1MAu@LN&;
zR<rw~{eS2Lgc}<3<I%lZU^D3Zw~%i|-_1Ss?QU-Tl@K(}|Cjeew(g$=&F(**w$OBt
z>V|0PF23f{4PiI*gyh=|=`8wh=<nG6(RywFYXym43{a<_g?)RcY_m>bM)33ZzRL++
zHwbaFL_k=6Ta5vd{jR@5cJfobBL2!xwTP+j{6NcPw>kp)y(Q4Ag6t0D5u5l1eV=}d
zUjXqv>*szZa_jm4gZ`AytbNN-H}3^+4s;CxV6w1pJ%6D0==^_sF8$B?Pz(e8RNxQ(
z=G_)FJ>P8!#8UV*mtEHfJ)gh5BmL7}5M5a@KD(|DauHBd-TWTl`DTv|;6C7ofc<aQ
zkHLLk;1@w0*mk!yGk(|gK_7qfemU?Z=$sk!z975^)<D;apuYniqk9?9_W<9~nDhI6
zaX?e$_Pgg>)=x#Rht5ZfiqY%-Djxvf0seF|*Vue71;iQ<&$iT%k>BkZ@;|9Rdd7gZ
z-{r-dc@g@3u`L6{Z1lb5e_|oB@m^GSV{Sb9-9n(l=pOBF?so!Of5g>Ya%9j0g5UTd
zV<g18sm=Eg0N(jGd;|KcTXFHu0eFh;XMV?#kgSF_@dxn7zq`i{#<qSV6km6{%K_H^
z9=njxzq_|$D3Al~Hh^rl_F*^YZtq-zJSQv0WfO-@ZN|)<K4o*D?^^yM#)Cb9ZEU3r
z=yGb<_Vt0j0e#r*ek%I?f?wnmXx_4X%MXEn1UvwJ^3*W<ZR<yQL6`-?c)z+I2K?7%
zO$Y5$fvs=BP&+3)=AZQe9pLv$NKZHGB)bh@cW8g``de>&tFCU#(;y!Lzhd-bec+dY
z%>mzvuA}^__OkZ<y$`?_i08k;eVgl{*JtOMg2(*hQ;YAV{^(`zv|)6;7{a?i-XK@}
zl}zAQe&8yki>>9<*4h%luOO#EzZ1&$&wb?0yCXn8Kqq&*ql@m52f1wXKUraxLp$*c
zunlm=AJ`Q2tv>qW4jj0*xHA_4`VDaScFeskK5p9sk_Et20E2_PaHpLDodr6zDbLg}
zpWWU|{N?(o-|;2L$wGi$L;3>j51n%)f4koSYMy}RE&SeXebD#%{d?sOQbQ2WK)y2s
zPlo1=kfGvapCL$ALlCcj_iXq71`Y%5A(kyTOdfkz90uq?Lb`=Seghat$j;C|A-h0A
zF&GKS<lFDigye;UFaz>Ck2bN^wwMI;1>h+#H{SsR`VZ^_$U8M?8`eSVIlwso`tHYf
z`z^k;E$5s9ISo3$U;E}$(Q*#@CT9?rfXu<(o4$0%duCIhPXK%uupdz01~{P+%6mY(
z1a<}DAy^ar{(;W7JaXIqH+;}_IPlEQGobI}F#HpbfG+^PcGI?_eC?-ze?|8*%6@)V
z9q<iZ%h_^I2A!k(e&ZoT6Sy1otxmd&f7^_Uo3)J15f$_;mP7Fy?dJiHwhmx}fFIj@
zcP{+L9_U_yEjm6U(0+GEd<ORxw)tkhZ+8MV?Qk>JgXitdby4v#+xJIfN>Dex@vR=P
zGgj*AXrTQW<bM#Uz7Y1g;_}mboj?x(UIUnNXFT$;`c^ZxJf#cn)_lt=ljG6y+4QZz
zj|0AgHMTwrV#JR;)Jqrf!$)7S{NaPa0Q3M1yS07<e0RK;(RTgcnv;fEqU^uF=dy_z
z&^0hf2X#TL_xdRhZA;zRhjoxbK)wwT<z)%wR?tr<zsd@NCiMA^?@s-<e&+uGC-^;Q
--- a/toolkit/components/search/tests/xpcshell/head_search.js
+++ b/toolkit/components/search/tests/xpcshell/head_search.js
@@ -5,16 +5,18 @@ var { classes: Cc, interfaces: Ci, utils
Cu.import("resource://gre/modules/FileUtils.jsm");
Cu.import("resource://gre/modules/osfile.jsm");
Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://testing-common/AppInfo.jsm");
Cu.import("resource://testing-common/httpd.js");
+XPCOMUtils.defineLazyModuleGetter(this, "TestUtils",
+ "resource://testing-common/TestUtils.jsm");
const BROWSER_SEARCH_PREF = "browser.search.";
const NS_APP_SEARCH_DIR = "SrchPlugns";
const MODE_RDONLY = FileUtils.MODE_RDONLY;
const MODE_WRONLY = FileUtils.MODE_WRONLY;
const MODE_CREATE = FileUtils.MODE_CREATE;
const MODE_TRUNCATE = FileUtils.MODE_TRUNCATE;
new file mode 100644
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_big_icon.js
@@ -0,0 +1,26 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_big_icon() {
+ let srv = useHttpServer();
+ srv.registerContentType("ico", "image/x-icon");
+ await asyncInit();
+
+ let promiseChanged = TestUtils.topicObserved("browser-search-engine-modified",
+ (engine, verb) => verb == "engine-changed" && engine.name == "BigIcon" && engine.iconURI);
+
+ let iconUrl = gDataUrl + "big_icon.ico";
+ await addTestEngines([
+ { name: "BigIcon",
+ details: [iconUrl, "", "Big icon", "GET",
+ "http://test_big_icon/search?q={searchTerms}"] },
+ ]);
+
+ await promiseAfterCache();
+
+ let [engine] = await promiseChanged;
+ Assert.ok(engine.iconURI.spec.startsWith("data:image/png"),
+ "The icon is saved as a PNG data url");
+});
--- a/toolkit/components/search/tests/xpcshell/xpcshell.ini
+++ b/toolkit/components/search/tests/xpcshell/xpcshell.ini
@@ -1,13 +1,14 @@
[DEFAULT]
head = head_search.js
firefox-appdir = browser
skip-if = toolkit == 'android'
support-files =
+ data/big_icon.ico
data/chrome.manifest
data/engine.xml
data/engine2.xml
data/engine-addon.xml
data/engine-override.xml
data/engine-app.xml
data/engine-fr.xml
data/engineMaker.sjs
@@ -27,16 +28,17 @@ support-files =
data/metadata.json
data/search.json
data/search.sqlite
data/searchSuggestions.sjs
data/searchTest.jar
[test_nocache.js]
[test_645970.js]
+[test_big_icon.js]
[test_bug930456.js]
[test_bug930456_child.js]
[test_engine_set_alias.js]
[test_hasEngineWithURL.js]
[test_identifiers.js]
[test_invalid_engine_from_dir.js]
[test_init_async_multiple.js]
[test_init_async_multiple_then_sync.js]