From 07fff965e983a1f9657c806dde9d42783deae86c Mon Sep 17 00:00:00 2001 From: "stuart.morgan%alumni.case.edu" Date: Fri, 4 Jan 2008 23:03:53 +0000 Subject: [PATCH] Camino only - Bug 402778: Allow expanding the scope of cookie exceptions. r/sr=mento git-svn-id: svn://10.0.0.236/trunk@242380 18797224-902f-48f8-a5cc-f745e15eee43 --- .../English.lproj/Localizable.strings.in | 16 +- .../English.lproj/Privacy.nib/classes.nib | 165 ++++++++---------- .../English.lproj/Privacy.nib/info.nib | 12 +- .../Privacy.nib/keyedobjects.nib | Bin 34672 -> 35118 bytes .../PreferencePanes/Privacy/PrivacyPane.h | 13 +- .../PreferencePanes/Privacy/PrivacyPane.mm | 84 ++++++++- 6 files changed, 168 insertions(+), 122 deletions(-) diff --git a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings.in b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings.in index 1b075460581..7074e395eb2 100644 --- a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings.in +++ b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Localizable.strings.in @@ -15,20 +15,24 @@ "RemoveAllCookiesWarningTitle" = "Are you sure you want to remove all cookies?"; "RemoveAllCookiesWarning" = "Removing cookies may cause websites to forget your identity, any online shopping carts, and other personalized site settings. You cannot undo this action."; +/* cookie permissions context menu */ +"ExpandException" = "Expand Exception"; +"ExpandExceptionForSite" = "Expand Exception to All of “%@”"; + /* cookie permissions removal warning */ "Remove All Exceptions" = "Remove All Exceptions"; "RemoveAllCookiePermissionsWarningTitle" = "Are you sure you want to remove all cookie site exceptions?"; "RemoveAllCookiePermissionsWarning" = "This will clear the list of sites for which you’ve made a decision about allowing or denying cookies. If you have “Ask before accepting each cookie” selected, you will be prompted again to accept cookies for any website that attempts to set them. You cannot undo this action."; /* cookies context menu */ -"AllowCookieFromSite" = "Allow all cookies from sites matching “%@”"; -"AllowCookiesFromSites" = "Allow all cookies from these sites"; +"AllowCookieFromSite" = "Allow All Cookies from Sites Matching “%@”"; +"AllowCookiesFromSites" = "Allow All Cookies from These Sites"; -"BlockCookieFromSite" = "Block cookies from sites matching “%@”"; -"BlockCookiesFromSites" = "Block cookies from these sites"; +"BlockCookieFromSite" = "Block Cookies from Sites Matching “%@”"; +"BlockCookiesFromSites" = "Block Cookies from These Sites"; -"RemoveAndBlockCookieFromSite" = "Remove and block cookies from sites matching “%@”"; -"RemoveAndBlockCookiesFromSites" = "Remove and block cookies from these sites"; +"RemoveAndBlockCookieFromSite" = "Remove and Block Cookies from Sites Matching “%@”"; +"RemoveAndBlockCookiesFromSites" = "Remove and Block Cookies from These Sites"; "RemoveAllKeychainExclusionsWarningTitle" = "Are you sure you want to remove all Keychain exclusions?"; "RemoveAllKeychainExclusionsWarning" = "This will clear the list of sites for which you’ve opted to never save passwords. If you log in to these sites in the future, Camino will offer to save your password. You cannot undo this action."; diff --git a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/classes.nib b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/classes.nib index 9a56e9c3fa9..1e181feb472 100644 --- a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/classes.nib +++ b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/classes.nib @@ -1,98 +1,73 @@ { - IBClasses = ( - { - CLASS = CookieDateFormatter; - LANGUAGE = ObjC; - SUPERCLASS = NSDateFormatter; - }, - { - CLASS = ExtendedTableView; - LANGUAGE = ObjC; - SUPERCLASS = NSTableView; - }, - { - CLASS = FirstResponder; - LANGUAGE = ObjC; - SUPERCLASS = NSObject; - }, - { - CLASS = NSPreferencePane; - LANGUAGE = ObjC; - OUTLETS = { - "_firstKeyView" = id; - "_initialKeyView" = id; - "_lastKeyView" = id; - "_window" = id; - }; - SUPERCLASS = NSObject; - }, - { - CLASS = NSTableView; - LANGUAGE = ObjC; - SUPERCLASS = NSControl; - }, - { - ACTIONS = { - allowCookiesFromSites = id; - blockCookiesFromSites = id; - clickAskAboutCookies = id; - clickCookieBehavior = id; - clickStorePasswords = id; - cookieFilterChanged = id; - editCookies = id; - editCookiesDone = id; - editKeychainExclusions = id; - editKeychainExclusionsDone = id; - editPermissions = id; - editPermissionsDone = id; - keychainExclusionsFilterChanged = id; - launchKeychainAccess = id; - permissionFilterChanged = id; - removeAllCookiePermissions = id; - removeAllCookies = id; - removeAllKeychainExclusions = id; - removeCookiePermissions = id; - removeCookies = id; - removeCookiesAndBlockSites = id; - removeKeychainExclusions = id; - }; - CLASS = OrgMozillaCaminoPreferencePrivacy; - LANGUAGE = ObjC; - OUTLETS = { - mAskAboutCookies = NSButton; - mCookieBehavior = NSMatrix; - mCookiesFilterField = NSSearchField; - mCookiesPanel = id; - mCookiesTable = ExtendedTableView; - mKeychainExclusionsFilterField = NSSearchField; - mKeychainExclusionsPanel = id; - mKeychainExclusionsTable = ExtendedTableView; - mPermissionColumn = NSTableColumn; - mPermissionFilterField = NSSearchField; - mPermissionsPanel = id; - mPermissionsTable = ExtendedTableView; - mStorePasswords = NSButton; - }; - SUPERCLASS = PreferencePaneBase; - }, - { - CLASS = PopupMenuButton; - LANGUAGE = ObjC; - SUPERCLASS = NSButton; - }, - { - CLASS = PreferencePaneBase; - LANGUAGE = ObjC; - SUPERCLASS = NSPreferencePane; - }, - { - ACTIONS = { - selectText = id; - }; - CLASS = SearchTextField; - LANGUAGE = ObjC; - SUPERCLASS = NSTextField; + IBClasses = ( + {CLASS = CookieDateFormatter; LANGUAGE = ObjC; SUPERCLASS = NSDateFormatter; }, + {CLASS = ExtendedTableView; LANGUAGE = ObjC; SUPERCLASS = NSTableView; }, + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + CLASS = NSPreferencePane; + LANGUAGE = ObjC; + OUTLETS = { + "_firstKeyView" = id; + "_initialKeyView" = id; + "_lastKeyView" = id; + "_window" = id; + }; + SUPERCLASS = NSObject; + }, + {CLASS = NSTableView; LANGUAGE = ObjC; SUPERCLASS = NSControl; }, + { + ACTIONS = { + allowCookiesFromSites = id; + blockCookiesFromSites = id; + clickAskAboutCookies = id; + clickCookieBehavior = id; + clickStorePasswords = id; + cookieFilterChanged = id; + editCookies = id; + editCookiesDone = id; + editKeychainExclusions = id; + editKeychainExclusionsDone = id; + editPermissions = id; + editPermissionsDone = id; + expandCookiePermission = id; + keychainExclusionsFilterChanged = id; + launchKeychainAccess = id; + permissionFilterChanged = id; + removeAllCookiePermissions = id; + removeAllCookies = id; + removeAllKeychainExclusions = id; + removeCookiePermissions = id; + removeCookies = id; + removeCookiesAndBlockSites = id; + removeKeychainExclusions = id; + }; + CLASS = OrgMozillaCaminoPreferencePrivacy; + LANGUAGE = ObjC; + OUTLETS = { + mAskAboutCookies = NSButton; + mCookieBehavior = NSMatrix; + mCookiesFilterField = NSSearchField; + mCookiesPanel = id; + mCookiesTable = ExtendedTableView; + mKeychainExclusionsFilterField = NSSearchField; + mKeychainExclusionsPanel = id; + mKeychainExclusionsTable = ExtendedTableView; + mPermissionColumn = NSTableColumn; + mPermissionFilterField = NSSearchField; + mPermissionsPanel = id; + mPermissionsTable = ExtendedTableView; + mStorePasswords = NSButton; + }; + SUPERCLASS = PreferencePaneBase; + }, + {CLASS = PopupMenuButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; }, + {CLASS = PreferencePaneBase; LANGUAGE = ObjC; SUPERCLASS = NSPreferencePane; }, + { + ACTIONS = {selectText = id; }; + CLASS = SearchTextField; + LANGUAGE = ObjC; + SUPERCLASS = NSTextField; } - ); - IBVersion = 1; + ); + IBVersion = 1; } \ No newline at end of file diff --git a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib index 55c7c9bef50..9b06bda33c1 100644 --- a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib +++ b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/info.nib @@ -1,5 +1,5 @@ - + IBDocumentLocation @@ -7,17 +7,17 @@ IBEditorPositions 622 - 208 247 252 169 0 0 1440 878 + 208 247 254 149 0 0 1440 878 635 - 725 436 126 76 0 0 1440 878 + 479 406 157 111 0 0 1440 878 709 - 60 401 126 76 0 0 1440 878 + 60 401 126 68 0 0 1440 878 IBFramework Version - 489.0 + 446.1 IBOldestOS 3 IBSystem Version - 9B18 + 8S2167 diff --git a/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/keyedobjects.nib b/mozilla/camino/PreferencePanes/Privacy/English.lproj/Privacy.nib/keyedobjects.nib index a7305e58a1ddead982eacf8178ec37bf0018453a..ec2724b401eaf8b3f5abcae5cb841c651a138a41 100644 GIT binary patch literal 35118 zcmb?^2YeJo)cDNoUfq=2kVccE2q@{jNXlJ$=%EXQkQ_-M$%Pa;vLlKJhyr2(RC*B+ z0TDq!1O!of6Ob-~6e%JgHUBrWcPR+^eZT*gWOIAFQ{KGy=CygVJD{|vu)HED=n%q) zAOVR;gS1G8jJ;aql;su_4z-o_Yytnu3+*LcTU6Lfd$zC-7-Y+>D9<*zcgV`Ljj-h< zItqFqJbuo8q(_Fn>6QSsSYA#=j)GUnf-jPg3kpWzC<48N+M-01jNU^Zqp#3f^fg+C zHlpv)PV_VS6`e~}+!VLQK{yyE;}o2V({X#;3HQJ~ zaUQneL3l7O!lm%P0uRHl;Ia5kJP}XB)A1}k8_&f{@KXE*UWtFgyYK=03qFBQ<1_di zzJjmfJNPbsfFEKrendo~A+E%Yc;E@dhcqOOh?z7a&y&`q4GAO>B$C9F1Y#lSB!hGz zS)?23L;8|DVk1SQm{gLXWH=c?Mv>8E40(l6@+uimCXx5Z`{V=iA(=(ykR{{`vXZPL z>&Z7{A2~`ckjsLL;3~KY?t-__L@*1@h1S9gf}ap9ScN1ZQ)nl26uJuCgq}iwAy+68 ziiL8aLU>bnTbL%iD|{e)Bz!E)73K*Gg+;`~aUjh26p)VXtsN zI3^qy&I;#*i^5IZQTS81B|H=!iC83}D7uKQViU22_`Db(28uyqv=}4CiK$|mn2zJb z46%dQQS2giBcsIbWQ^ED>?!tTP>V%kr8ra^Ei@5d7bgm>#TnwqLZ-L~j?cu;#V^GT z;zl^Oia&@u#eL#Y@faMZ#S7v!@j4v0#fKU}Bf??S$eIS4hHy01wAQ?!c~KLn3DSgX z;x!5615KjFs!7vyBwuK{Gt6oFX$EQrX$EV`g>N(!n$hrojIdinHLt28(@YW`YNl&u zXl83Z(kx~p(tIvPYu0Gi!H7C&z9XYFTgVvAR?RlePR);+-I@cMgPNn7W13T%)9`s7 zJ}+smX|8Mj(%jbE*F4Z7E!JwaI<1S=RqLUxr}fp=*FL9hqHUplUi+f94IDvmgu@Y| zjn^h=DXKfd44{aZ9Uv0j&Qae;TQaegJR;y@V)lSk*(@xjU)Xvh*)6Ul} z)2`C4)_$p7r(Li8PP;|BRlA*k{sdR|X%9mS$F=96g-hC-+P}5;beNUb>EUqIdFblt ze0BA8&*_@zTIinFy{H3tbO4VI;L*jv5f4X_E?t)apB>@os_Uie4WHR?V!Gitwjyy6{jpi@~D%NHl^4BYG2eh(l^z&*1y0gs1Mdh>7(^l zMjL&G7_IND@5X2YrTW4#0FHcpk-k`SN?)cQrXQ{!qkls`fqbBUQ$I;RT|ZMlOFvIP zpN!HkAY=3k^^5e&^q=WhYWwKF(to3^)Nf(<(eKpn(eKqC(jV3w)gOnJPQ$hH`b+xD z`s?}|(8Fyw?(3@z$dGK9X!u5OHC#3PVYp_vZn%Lv8UO=^KMl9w_b*|n;kMz9;VzW; zTNq&Y%W%_h5ANOJ;;x_*M;CX{*zS04#Oq0D0_bqmT>8IchS1B}Ed89j|l zq?e?&Qk)boB}j>qMY2jsQnHjHrAld1x|AVhO6{cfQU|G{)Jf_rb&;~9u2MItyVOJK zDfN6<_v8>LOsx6)?mJ86rwRoW(f zFKw50NIytBr5~l;(mv^6w-zOpMMbAg9>^8BA$Md#GV(z6kSFp&-pB{}qWY)-YKR)4 z#^^cJ1esA&)C@I8Ezt9*C2ECQqZiPNs15Q%{wM$iq9CrYI;zU6drncM4OCeD4q1u0 zxwi81!U2Uvg%u;L_L34%ZuT-&y;+NL%FAu#YU$n`vN{&#m4nJFf4M_ehn!*?KkwTi z%TbKo`Dc@?j@m#UwE<_}rVd%%3!&p8TaUt$Jo~Wn?k#dzf2=_j4A8mk8}CZ31>YPa zP&@N^0{&V6rj!AM!|Y{)p-zguq@sOJNlw14tQWLr8(skgyLZUyVz*aN(vb?Dlu*!A zlyss*p@KIh;}k6wd=xz;ohj)+1usRTAeo#{$N@lq2nt1EfCWBs2A?7-Lbj=C$FltP z_K}4}MLE`-;=&Spr!w0>TbZpS*Vd`5aA;2Mhyy4RMWJXE(^DO+t-QB-QUZ<4Loq0} zAGBIoUSTg*2ins);%t*C-D0)p+HVQ&F8cIhQC=<0q?NJBR5p_bHQ5Tejx}t8VJL-XY zqF$&sdKvXWeNjJ@jryY;GyvtIJY+)yQ9dd_g=i2OjEYb(DnWKsiiV&vRE{c8B^ru` zq2Xu*8i_`s(P#{M1&u`tqUcpL4!wq6N8`~OXaaf@O+=H>Wb_uAg5E~&ps8pYnvUL8 z49XbgcZz)}Za{G+#T_W_L~$32yHebp;+_=urnnEq{V48F@c@eRC>}_00mXwTE~2=E z;!=vsD6XJ*D8<7m9!c?Nilg=STl<{y!CW$^*DN`?g9}UYVV1NnEXgVy zX#+UaJ6#JaifX=b#s|hy?{xv00bjCm%WSq1_J!5Y8P4igm+4+;8wQtqbWJJB$!8LT zUEs}_+)P9nuDB?!ilhuvMkpqa(%}dxBNex7lkcceA>ko@=8))!F@EMz;nCrK=Fs4% zF=M)`T?0nclLKfyjQbn30XhjNuPB32bY)#A?&^Hlgub1RzD1i+EFZ3OM(~0Rt^DK= z+Jd&CZP3v7AT)QNA7Ex>RSp;m?Whuw$&N0z@=|+Ao~;b1!sntQD@dtShN`pbM>Jy@ z`U&kqyU`xB7wtp)(E)T29YTi{52d-%Mu|{jlz7Fe3{diwBBfO6_%rl*6nZ^|jziDC z0I61?Q|L50gU+IJfT^s?Qd=2=0fv@b!X|PaKs=Nq5~P^bR#c>z;J2PZ#x6=T#WUOF zHEL9NBw#HnM8%q)IXH66n4{=7bOBvNzoSdg(PeZ6T}6MOYv?+_dlUVMZgK8lJdj^z zuPn*4+KcRE06DTTJ8Jce}`QDQC=9_)(>Kr`HY5pIrK;OB8m+zQ1y zNXx7Ad0wS6{{nPo)MX@9Cn}VzX8WhGD{g~MV}Bfg134qM07i6GUR0jXHhGU46&xJu zXATcyj2Ijh4AVDc%$Son1c$1eh{JF=jsOfsqRTi6UBS`7k=O7`Xcvyd@i+k|Vhj2c zTXB-pTqb#bhm4TeJr5A&S2mNWOtf;V;aBd07HhFZ&>SQY`wC5G( zrUS#4K~11XOSdZQO<~LQ@vWvI{92_4eaZ!v{ag#u&I8%D)<@yYC@Irg6RjP zm4_Z7lx_0tSZXUVgK?5ukW*M-_DyRjXMu;pXH-He`IU)QEKn4G7lMkZ;lLsILfD9l^K_Gw-J;lg? zdp&~?R{S#V1ElB&qHGzEqJK3hash)K>}AC{MI7f!DI^smjKDMm zj5JRyA8anRnFrVg+RJR_956RaL9OMRZ8^CG=3GAe58{C^^FwexF2IFAKwvel<@oFi zRzj2@n6kVlCaH%NR^%3_h$+S;^Kl8bGyVroPz@(%Z4hRF%evPN;32?iWtb@--XQNH zObJ)ptHeX+;i0TGU;q`#yp*bRpN8*|4t$T{_>N@wj&g84;9FH%p-h4O&(ZxF=#9GQ zo=}b8XwV*jTN5C*RaVYWn|YXRfEf^5Y%T@U8O+_hax?HbF-llan4dWe=Ic{62YwH~4;l_M2cF5Ldz{i1bX!vol)xyz z&>`B*IY9Sv;FThCX`v0g4YPe90Lh@{#tlH5Q(-Q*1CzjL%0YaVo528vO7;@-2w()@ zlH$@zn7RSxt_8Lc=G>eTU?+2Bxh>CJVK3i0K_Xr&(fU^<1WDfh)Z-(91s`6OnN3}rJ9&|kwXpgI{Q%giO915Ot44(L&N^+(69%wg#&f57Ep0q$4&tMuxn1f1GIJwGzL-2Cm^zy z6pc{9Qm1RWna`|$@70R0@m_E8UT-mV0zL}U>>%G{{0_%P2gPd2WS!bgzTmvtQHi-e z_>pGtICJ6G2EL{Gtpt2ZGhDI5?_lshZKzz8;eX?M^YJ}=pS#iyGe5DcEN28T760s2 zt^c}@0`V3y<`<_91VbduX^Ma$atK$UYXsw45D6!s`>p}769CF?K(($OX;Dnib>sLy zjP8J8=S{RkNA$!%j6@Jc*amOX;ojJwSY+gZiWa7#TpL^pq56yv$Y(RuG^1%F9Zhj&i+C z?b}1x2Wfmk`TpCF05@wN|5oR`K9XKy?a&n@87RFe*AdVr=NaW)wOHaGfkQ_ zsf0?J+7)Y^YwFjpKccd-^6u8HTdN*Ee8?=afBYOebf{|d=+SqdfByLqPiaelaik0y zH0Z*bHEXK=_~VbN$B!RZACDeAs&XE8@7}H2wryM0uwlb4K))%_7Q=({$7r!w<}P2p zylVUQ?NwKCvwQE%e4jiajv0_D4Mn=Y5Xu#-f1U`L+ z4KkT-BaEd#b+w{(CmQldP_z z9R^p61q&AZ&F&vNcC6~mnKQinZ@>Lkb>YH=s*4vdRcZjVjesw{_~QPNBS(0-^XJc3UAlCMkMHW$tJUYMJ$8@v!}?pjdi8y1BcOIWAAR)E zRd%2C%f`g;z{bOln>TOrPj-#nV=$gQd$#Js4?n#6L^~}?N=o*!HW(ZXFAS%5?%d(L z!+40%iG62nGCDB01`i&*7us=-3r>+wKtRCsEnBwSXX9Y>VRdWMo}E8<@PN~e!N|(` z`T0#}by)+BA4WTCc6Rmw=;yJsjejs9TwweO<9f`>vN~|oraQwoYu7elz!d3h&TSw|gKxAqU4FHPXEg@%T1Q559{@Y6%aGwfjJ>>9hr$~ekCbB@7% z1{Z^O7#yF#vD$I4b9Rm0V`ZMz2HfI53{Ey?R+iC%@drEDIlIR0JvkP*^shgxeC^}e zh26kXVI?v0fPc8wIpOCb3}8DJ9M_>R);i7!oXZIALtTXQ*rQe%FUL9D#op?TT8?0j!(&+H%93-15@IPMzBE`cM6L=LjDGI_S^ZGCY6Ne9^f3#7EoG8+=;X@AIct zsk!J@1|7o4{NR#jzIvX(&IhRHUD^4tiqZ-wQ^3x_1(Qxip*0qZj&cVb&Zu#o@ z*X(?Ndj11DADWxb>K+9$d6eW8mLMd;?AONS*~)Vfl32fadF8pqaQ+UIdt6*>hxT3J z9JS6ZErYtQtWAH07x;vqe)SQG01aY{thqJ>;9O}(sQ$&8Ypn_q@{L4jg|6n>tu7o_ z*n4mJz|auh9Con)eNI(X-D-)DZW=<5rdCxwm{(QxXgR; z@QBFhnAn%v#>FRCtVzi!scGpM?b>(f*r{`utghXAz+hhP)3;xC|C|ANwt@Ktg@Xnc z6_?mchm@69R1O_Be8k96qsP25R-vzsd+qh{Z@e+#&54sHzcuCUccxC8{_c$T-v8jk znX_hp^zkQi=FXeHVBw<0OO}4R?6c*culQo+s?}ev`D*Rg>%ZBsanrY(zuU5P+xOdd z{IK)KpLXrpyKn!2g9i^CKJxR?W5<6vaq`sZGiT5Jdj9-x7cTyO>GI_(SO2(n?fQ)y zH~;+e)?a_!zH{g9-M{bMyMO<|gNF|vJp!4Fi1;7le}RubC^&?TKT1VFLSi)nGTXIR z5zviez=43=|HJ@8K^+YIk5I6VK4RWNDD?(kP5eb@)NTb#WuMS0Q{xAW_WV-}X(HoXRBVkFa7ic*On(I68 zRR4yYnsA(h-@)JEzhlfZ9)?xx4bokg5SL}HEnVliHFcZo-okyU`&Cn*>1)|4 z@Ac^Gajl->>E*f1^RAcG>!kMxA0MBue0%yntUtFwT7!=o+-x|zQF^1l8!vh8k}_5eQ`va48KNxH~n`6%n2M3)GatP z#3STZ=;5$+;d3J1h#V5tCptYQDz^1Y4cfZJ32_hN|4O))c-iuM(xv39DK}H^rd4Ga zGCkWhZ6DMjp<|a$13QoEGA(Oa*YCTX?OxUMxnA+Tb6$SE&$7M;`aS6Xd`_1EV{=#J zof+tnpIR`w@XJAe6tynSE173MJER%797`*%4~-Z$cKFVbUZZkHuNu?)6=7^QWht#1 z*Zs8>;|*`vCTyA5bP}EX>y*^DKbz_?ZPfJhGdjJu;r;Rt+I%=`mdot1AN}>opn1LL zA70pb(cUE;mhM^B`Ljcx_g-;kW#OtnzkCIj%0FE9!us_a&we}XJGU*1wN(|9tb84kxP4Hg-Br%|5K zeP))E@^jAqH|;mH-+0zZ`yHcp)@QWeJO9AVL$i(~AN%B&4yRV0$@_Jmlls^1-Wq*Z zUx)rrrGBlsUp@2d%=_B2zSf+tJL9V<&S!gVYO|SMO=~{SVV2jWGn?alhCfN;r_JtX z&24pN|C7G|Hnact^STyw$+PD5yEEC$u9?>#fBwm!8u~7t^2F@+uRXtk#y+*@IHU8A z>wlW4(wfb5M(v+(GJ2n=ViZ4D|JQxzKl^RM#Y8siuMWKyasBSib+<;}wlM17pZPeL z&41Ni1UUePA77#~x3ebkum5-dii;}2Cgnfw@ZY7dA|32XNfn_OO;1g^`bhKnZ zhmP>cJdOso^5iVXx!=ITlyo>Z!S%S(icYMqFPwK6SQS!r{nwmUgu44@oU-3`1cIU#htkrwDMJD#0wm;uWZ5OFy>vubVSYh{IT1WBo7w7E(eN{;m*fVp zWrLt_R*r`-Nn`TdeDWM=;#k(Q6jl`Hl=2`V#QY#&?mSgXH^ukov2dqjnV2+Z%fv}R z=IVuF(h?7vj|UN0@$CsKV!XDq@C$rRIoP?TO#F!dBH~X1YArUZ;q+cmQ$2giq6i65 z*MCVkUlhq@%V2ptj2;pWA=cnX9!3w2gawlSSp6kYZ1tDKq61H^{wf0@?CP!9Aa8<) zhrJ+!IuCe=g@coUGo8WVLZEU9(2dcUbFR5%t-$!xfKPS+pT>bNV89nT)&OAT+6jEv ze=l8=Ob&bpbnqX*59YuRQt}z_#gJQ70ALOSAQ@9uN3j1B)ShZu2zi-!6OK1n9*VF>7*$)cGvqT7g!F0Y(6rUDD#Non5&LtDO+)A5o9Fv$R5UX8`Xm2$ZPY-YvgrS z6k_-t3I}wogrq7+t#M>s!V(u;to~Y^6h_`46IfE1@``d%`M0buG8ru+Z;>hFZSoG8 zN~V$NEbEKRFzJ=wAm~SxvC4Vnf-(+rt6t@~Rl&h9=FlKDw~CEFG(3C^4B9K1EkI_$ z0;w4?BZ>fwWCcJtP8ko&(oKQW-r$@T7Q&XLLwOcS z5Cinzvq;D)&S`5P?O9&t|xio*HN;8Y((40CUl&9OE#15 zV8vw%*~($tPIizV$WHPj`HAcz+sPiXmnA`fe1{cUmiWXo5YlWpkQinyDlB#6LZv}c zoV}S0-^JOjf2V-zw{6>|ydyzEUPD zn>(6JiDrcOp};2`>Uz8<4U_?fW8I zyE+ZGI-WLpkt^gX`GZ_TTgi2D105qb(NXdz7%w5@7Ws?ZCU?kP@;6&HCilpF==%YH z{fIn9rv*f|3q%kEQP9Am+Yv!0=mi7bE=VAcL36SEomvaIJqq(G3IJ;=)>R_ZXDBVI zEG|i`WH|)og(G3bm!~?y>|)no5!}YIK7bCe{+woGS{cUJRUIR&zQV}Ma`N+8HJ*jS zQY2ICW$o;_IYlsO{t1TK2G1Gk2udDuHjAnggR@Odp3zw?gLi=WrfC!tCWqLZ>9m?Oj9-~YkH~uKrRxOi$YVO z*#e=NQzS!vDu<|ssD~Z-kqj7MS)nC>(uz0vzVd;p{h~lJt5Te$+CZwK+VYD+n*~A} zwdKCqwGqwPR`5qN<_Q5ppfXcg0MkSWfn7+ULYNRPLe}ui4v!Lq|EgY>0{KRhniF4F!+S_%;1CkL|Fd`4GoEo2FtHbKBCaMIv;V4nvdvS zz=c|MI--i&?m~}+LXVpC!@6W+<8eai$Th{=(I5CdavI$f`U%-ef5--ngK;+X@C<&O zAd9N$E93|R<_QB(EJ(&$41cs1T{u;MCN^Q9kS`Png~A}g0u3!{W@*q-X=ZuQYO}IX zS<=i3&XO{}d#N3gV@5b(`5mMX>8pF0*6+p%ON;3=@Xq zNT_*57=bPcBhf|3t_T-K0nW$ZI05`*6d+K*>owt3VI1hN(_k*W2YC&*a2zB7w6~R1 zGOmD+bjTj%>4wfsmUNhm!_@>tp0`wH%S+D7X9=i0tFb%_7WZvDiKQEC#9-A^AQ^-; z#VbKRgMC;hJ0xL%dRF2*#Kgy{EErE9F>$G)eqqao%4Z%dHfm6&7y#|94hj>Iw=fA? zg|~z$z^6RB8w8FM$a2UyTc&)f&XRY~j5#bR0gN4Cx==Y!s6?^qw;95Fi-q@u_iJ() zc?NMOdug}Qnj}VGd1t$fFKV%y@S!l%!EP&*&l$V*%6E!9C&PZCx-$Xcz^O23+i;#h z2-Zk8+q$X3F<)3PPgtOCo?v@OvWCF|mkmr*$b$wmP|bSe!Yw#Dbj+Aq5MZsa!~sDg z}y>r#v*C#TI)UK8bpDz$TS49d?)v4-_F&QO%!Bi{x7ErrVSj7e5eBmpQR-VFI z;cH`N0?#r4cmCbV1?^YyCyY?`A7M1&Bm`5z*(&nDRX1^&bH@NIJ_p-wjHjOLXXUk zX5N%K0%zYfklLQ=W3y-wiw@P~Q3}7ZJWAn0vqaEeJW*e2$k~wGg4yBR;}F8>dRe#v zI`t1Q_^t~#IBkDWc7oa80<4!Gl^rnML6lUMGU=g;6Rzz;7$>PL$ucg1BU%34GqRY4 zzl7W9nsApaWJ$Hcz3Lq1BxR4X3tWMpl;aT&JoMhoK%Sl#tvn1rc z>YeNXJiq+eK?OE6QHM^82GJ-=d|3NnPzL3kvY*ElLc~P}2IY`) zR{7b(bI9Wa4-*o>k+0ccv0ZHH5T*T zs=cUvh{2%GSsx+LD(fW-`UuB~Vx-y!B&st>Tx&06N7(icx(E!n#0tnK1)|%^l`{az zQ4f6rXO&}0t8TeP00mc*Vk`(m@g?QB((xdQ6XSt+38Ga@0qq(v7`8^v6B9*?a#A@p zPfQY%m0y$-%IUs|Jzc|^THD_B$wpc!CJ2YfNz8BI-=Cp9g?7dN?iPl znPR*7Vmq~uF!i_SOlB9!0y1M#kC>}JgiV1?+|;5y?MOj62(3& z;PJn7D#d=}oR}^4Cy&G&=2VLPnNum+#DPHce6c{#i-VX`sa&JjTe+%wPYKLAx(b5l zvT{Yasr&(M(_c#er#d-eu~-7Xy~r6j&WYvB$)UKl@+bUW0xt)^enD9Sqh-1IWUMA&pZz3gR7IgN^|HU}a4$|A-f#04=xT zWo{`S{7Ym*oFq<$-~Is1JK|Ip*$}4z(jc-yaVv_=@COLFPH_mu{uI9mUpA|({vMjK zNPJ)XK>SdgDb5mSE4P&g6cdVd6uVF?Khu|jvCk2H73YfcKs+vBz7$~KZZiuc04aA2 z%6(=26PCKTnE5v1rw&W~9`|kjR^~dbL+;Kfjh(gX_!?rbI=;pwrRg&~Jb>yefNHJy zH9)oA0o9{smN@{`Ljwh~Xnt1~GH~|d@FK)b9JcR-befgZ55Y9chxZ=XPA=&fIHo!)!a?GWcWAO4*={3#X|u55fyfd#b%aLgeVpO zdM!ZTDW{^~>Cm674L!vgW$ynCP`?9Em&D5e)Kw=?hGrI6KRDA zRTnJd{}ot|Ii0J}X$^LQ2g*w4uKU~-45Z?R+B4tKw+ zMKU?9@#7+S3dQxANPa?q*Db9H)`YOq6gQ+e<3B^zng~s#CQ1{niP6N0lUc}G6Gw3x z#f>R`j^aiXr&65G#1ZV?Zo&iCp+T?_7#5V6W1=b;2-c73!^75&0X!{Atw}-wniK?E zxSJ}#i7AdawI&_SSfI%eOEm2??I~`i{7G>r#WDW~Q!|07>7s_IHQiJhNpW*n5TUrm zzw83h^kCs=O>a%cli_HJTY_ojP4V-rU$8&9gwm(BHGV=~JZ)@5;=^aoU&D;Zuqkt7u zy1=3b=9@U5a8WrJAAqC-dtU<&6fpC@Sg`jgR`=AY27h!EU%mKW8T^{|%;4875F2V1 zF@v8OGkhw3an1@HO7V zO4VA{tX8dMij#Q*iOLHUTbw-m6%bLgmSStQ1*}=G*(j#eSiYJ~B2-LbrtecsL^gwa zj|ySih1veYYDrYrI7C63?V25Ao&x4ZJBr&YuR~KdSgxvNPO?QE)uh$@q}erJvrAoc zgB@e)`kK0X+p+3aE#si&y_y}G4Ayc-Xc;CXI8Ll-heYAc)-HY+&4wum#XEzHyVRRK z?Mq!Vs9oq6XQ3=ssAnE*V#|l9UhN`h(QH^ffp)qvARr9)6Qq2atBzs zTvl#?g9x?gTc@-;l-|Wk+gR!5APtLhDob(;oI58~udYrNFQ~GgRmo>ntiV9I5G5Y0 zlG!=RIyD+Xjoqw9A*;~_I^i{*Kw_OLO`*yjR%I}&65;HmE_!O!*sW~^xZJM*k%|GA z)|X3a78h%xC%=knw(RVQV3b%uuh>q>Y{cH3)Bc=HHJYA(l>h`E9qDStz9n7 zS#AU?2eF)NN7Mf(yGz@Fmu*flf2v8JYzX51qe*R+wkw-T6px{JDztg&5Ja)znGwPy zZBG`-*1k;fD=ctL@z|~`X2f-iwjY|YSevcwug%d8(B^9Mw7@3{#cxnNfnv}YlPLzH z=53|pQK3>>pe+<8Y6octYm1OK^jM;`YfH65uvJ^GtpF#teTl8uUQ(C~OLsib0%PHi zBWQ2WV@p90*zH)t6Ko&|>%0f=dR;9Ao8Va~-W^{%;QqRn3Pa}! zu&@2tKSnrC9V3j-F-CM6MwwooWh>1o%Ym5;@G|(Sfiye|OK&+_;PiR3Ru#6RmG3`x zh*5RtXxDd~A1}#PQ+`*7W#SPd0VS^vlY4EK&4L+yhzPd%WEn4k^ zB|((`j}Z4iM%D5Xos?MPJeTv^xwyUv0 zyS=DuVQHGJs1&#sf?-(&_OgoHO4uw9`}ElceBgT6^UL?#t6@-eyRCMc_WOC-?^)yt zRshp2tc98cmTE9|02n(ppsqjU-OdD?s(LuUfxFRcb`$3HY-Mzvd;7Hqmm{|iuA#+# zoe}U2U;z@A0lv3a-$Fq;(6m|`)r;Mt9%F3yPEZC^tcYxto8&ezk-*a3!YnT zK7EEl*MY9po?+F%eh21WoNa3OL^sc>2`X1RfYn^hYfc1bVgM5q4&d0@DWA@@v~G~D z6;#S)mDcb|ldHRP)JiPL(%X%`MS<h=iHC`+tB57KK7fbz%$wfH&`<+`roAo)Ze_qVihpAF znpIZ=MjHrbczZUc-JB#b%y#0U{uu*;=870_yt%z9boHEpjHiJHeUx#~ppX4^L4#Yv zI11p_!8#~_JEMVDau{HTIbah23H;F-|70+y=+jZ{Cfzt4=ywoeAaOw={rnVHRyQ7g zC+OZ(U0K*{^cKa(`5y?lU$`rKg5smq>2|ueQGjkL1Tx6;5Xc}eDntLp%hkQhyj-#-6JBmLL3FR_K0&i}AV`0v1T$=%`VeGbA~w+JdMh3YVgp&Z1&Z%Fa@BO-f}5&a2iN}B$!fZ-(Ec_UjALCvw}`DP z=yvLU#1nL@b-M(;ZVy{mp!hPycK~_=8yZNlixmG31EBblvYg`UN`FYT3IaFxiBv1y zI^97S_hJa9cyXAo@_}D@#_E9XC?EJ%7&rs$lsfRo&VgTM0|!8=c*Yg$4wmI>trhUf z=bbEZ?V$NoH#P6dye)cwvdcZuQ~&y4TG2>uWT>8|Onqtm*Zx<3UAAIG1~ ztUtuvp!g;r6fF5}2h2GPNd1&*Y0zCQXX`wPsI%nR6-iHwZdcOQ* z;)R34HHjAyYC=XZUnGaL=IRNpZ>)a~&DNVKf#;ig!h|Nm6Co`&h4n4eIHw-?gNq^} zvN$Kv@F9nWu}nMuctM^e@*nxQ`WIOMRPV1h|04iObUXk`v;YPZK~DoEOpUJTA)Kdz zVqnoV0{$vI+AJiLjWAk$R1ePr`JXPQ>l?G^nm$2nsJGOKt`S(HAQD8^h}$!xYx*R8 zB)+9j(Kmh~x<*_9GD=(kz5g0r(`Vvqya^VbgSBXVM@Mvx)Z-1fLv#%u2%|=X^<9AO z`YcLdam}&5tnaSxRXe(-?=2=%;=!V8HKaD{vq5&h2Dqifo5}8tE52)x$G<^{?v3>Bh5l z1^swR{3vNgNpnh?QqqPJe_$zCS0F9;x&lv#cRXwq_Ekfkc?3_0_vI@KPAHj$?m$4T zRR->V=qG~;)0+XeZ|hzI+ydSidRubkssG1<0-tE_0T)7glm0^|cejEJCrVoLiN<2# zp^)Ul9>>O~a@aFdob;dQ->#kFLl^lQc6K$ zv9PC;lWG{L#yEz_vmfT3nN@1b=bivQ$wV2Fd2?rIWx?}$_hO1DILz2qtMM4;;+Kv0ys{8eS0&5(G z5F<$k&M2)J!(shhxU)+sr6d#XG_Sc6q<;ve`6&iwd)6IZ0F%eY-D%Y}uW=bUTNp6$ zUSYC`?+b<69I+R;Y;*Bm{c>~&R)Y4!EZU>ZL#trl&3x?{w3jTBEY0?9D z@RKlcgcm6Blz=1+S3Hyl@MPlVJQxa|{~IinHI9c&E`ayObVnpSf{ZoLou9py~ z&4T5`$skzwqad^j7H(I;`6_J|Ji|H&2Dl#(2>&6uq8Gah=UFiLEVK&zsPT{?*GoSF z4EE`0KddbWLygmLHlNiOd+Elr+Q56up(fPktp-8eAo7NGziuw;Rli)h#Kty;xtC@p z#H|WZOmNQr9cTZ>z+l$F>hL1)4WdmjRQBLbz{YV%)4Rlw0jA?PXbB?1 z4WaH7IGw0A1>^zKgS7-a76Kp8l6nWKkAbqU@b=EBz_20?giT@y3xHt+p}kthTZe($ zUV{fj?}34oXb0%O76KXPk<;27-6icA;IJ&c8ST@p1GLOU2gw5c2*yv^T-ZtV25{p0 z=qLR;G9Nf~H`=eY2>}2KQDRv4z%QkojedqlO#|ngW5}7vD7=7k6&n{sy>Bp90>&A` zOfFapyue0l1pfIBP~c#Z$*@5RhBO!0(}R&8*e?`##L7bDGo54Gz{h6TXxL=<*09;| zoneb%t6`hrd&73a4#N+IorWI`KN)rzb{qB>_8RsX_8Sfu4jK*_4jYabel{F695Wm@ z{9-s^IB7U#IBhs%IBPg(_|3@dk{*=wq@))m zy(xK_l0KC5rKBGv*_8CBB!`j#l;l#9M~RJ+ft2J^Qb0)|C4(p#Oi2+X#gvp#Vy6Ve z$Ph}(C@H6;f|5!~hEg(&lHrt$pag7!QIvpH1Xy~7lCetPK49(GT9unS4ukDF5GH3C zmE1rH4hEf9BVo!RUJ*ir%8QxFV~Nv@}gNoPF= z(I3X8$_f zYakQaL2L~s9q{JQjBP`e?GCOpy0Bt4@VnoFXXQ+U%wh0yFG6%g0YMn1>~I$IV$3-e zQk!3eHypfz(qZalz$6?8&)3a^3AbC*9%R-5?HQ0-1L3^}Z)x|#)XPDcx=UyZOtSX6 zb?6O9qaIG)fQi@v??Z=CPoWT%u}O=@ux*XnT+|u8EY3y>2>Q2C7fm~un5WS&5cU*x zgOu(ekgk0YBKjlI1oRFh@9u)weg*2Un~SEwq|QYhK`eB_dxb!Fzd`}X$7~@0o~Sz( zq+%8%a`#13(QD#|C>6bn_CZ>BAta6uLa*a(S{v#CY1jMFXzdBu=KK?^77Wmy);AVs zYV#n=eG$g3(QpYWirl-2@qia5Vj%-(uE6##as%)yAxpU#4&LQQUnAFxCl2WNl4}BE*CCY293cBP zmRWd~;(q-73}3^G8rah3H1-Y#_HuUND$LOds^-Z+ie)kiuTtfQe#YFJl0C*oVIr;s^F(2vT23;Tm=T#T%IP z+r#y5CJ05mg}+f^5$Ig5ai=ix32lD>5*RjB8`*mwFvuG~KpDJLf+-7-Py&0o1bZn2 zn4>T8_ejj=3KwE)8T{oHE>8Yk%K6v$sd1U{GvjjO=f)MrFGP!Rm2tK4OXC{jSH`u* zuZ`=B>y6(SHyAe>HyOV*ZZ>{r++y5n+-CgVxZSwJ_=9n$@kirN#$CqU#y!Tp#(l>9 z#skKK#zV%##v{g`jYo~gjK__?7*7~a8c!Kd8_yWe8qXPjHJ&&AX1rj$X#CxH$#~g# z#dy{Dhw+;6y77kbrtweXE#qIt+r~S_yT-qb_l)&n^k}P>h^(0TpOY)X{Bwwk%)Ie$|HIf=j&q+-rv(!{-CN-B@ zNY6_xrB+gF=>_RUsg2|(`AY#(pcEtpOCeII6efjB5mKZSB}Gf{W({y}U#Da|C2vqN zfs!{VnW&tiWD+HlDS3;MDU`fT$vc!xrDPf<(nZt$k`0t>q+}B%-%+XpD5Wy$!<#aP{_$8`zYB@$pK0ZQgVor!;~DM1lZ;%CC4Z^PRTEnoS@_+B{25W zl$@dDEF~}_ex>9*CBIQ}fs%`qz#P9s$z@8eP;!-$KPb6I$#qI#2H&LQPfBi4@)sqy zDY-+*T}u9@!_fokaj8_?!Ho*;R4`FNrh*3*>M4C?vREctWZYUNt7QC{Oum-!a+z$EiJMG@$mDyO7-aI9 zjHk%NTPCAr@|8@6$)tx&_RD0HOoqy2wTutQWTQ+D$at2Ff0M}unfxe|T$wDBaT6I& zmGL#1%#q0+nY57cUov@L#gAnZ^>jh?0A*& z5}AA|W2pX}Oq$B%HJQ9ElW{Wfkx98sK9|W)GC3p@Xh$!T*JT2Y^pVLoGC3lXH8L42 zE8`n7`9#J`Wzt3_BV|$|lTsPO@ZDwdrHsuoc}^y8$fUbW4$EYljOUpe$mAE9 zc*q29z9JJq%vhQHAd`<}qR6DVOg@lFJ(+wVlQA+rFB6SSp!qzR9GA&D8ACBDlLVRU zmB|PhPnSue35x8NNjI77lu1vSOpr-4nXHw`B$@1z$#$9SlgSF19F<9#OxDZfXPLYx zV00jGA+C#kOI3$#`-*FBbx}-zW;d#G13*fjqqNzUm!z3Wo_Zg6k6I&r6L^bS3ws9?*`f2*P z`cL&6_1pFP^#|bnXD8vUXE*hC;XP-c80H%08x|Ut7?v46H>@;#X;^Dm5BBS3uv@o- zy}AqR)B|9j9tFGf6xgHZ!4AC)??k%+?=rh%xMz3>?=vGtjS(KuXmm5m@J2HqV*_Jj zquJQp*wXld(a#uY3^9fqql~e}IAfwQ$(U-)Ft#^#GG-aO8+#f17_*H7j5cF|aj>z( zIK)_C9A+G89Ai|Bl zjb-EEZDkYTO=VNyEoIZ-4Q21ad&xe6cap7#H;Vlz9h6Q==cMz}AJShgS{HX0vr8M7 zwl2vosV?a*nJ(>Jy1Nv+*jN?SN zmg_v%rLL=7*SfBA{l;~Z>rbwST#vb)alP&O$j#v9?bgDrrCV#a7v22a0^GvgEN&g$ zdbs7f+1&EoO5G~mCb~^_o8tD4+cdX@ZmZnZxUF^D?6%YG7q{QtZn`~oH@f?{H+66A z9_HTJJWA3DYUl8Pi$QucqHjRdSS^BB#k2 zayz+$+)3^t_mF$ZFU$Sq@$z(ep1eR_BrlP_kk`pumfWkHsEKJ(hVa_gLYv(qpy98jrOe>pXs~hw71fVm)m=T|Hwx zmwImXTGvajmsziUy^i%d*UPHctzK_W;#tqr*Rz3VBhMzDFL}m!CU{yrt)9uAsh<5k zspmM)*FE3xeA9E1=UZM)y^6esd%f!Qme>1UpLi|vTJLqh>x|cJue)CNydHQx@~ZNN zjq~23x7J(lZS;2cmc8qFdwB4ttZto-BM}1^?a$$X+hCYpbn)o#JY3}p9PY0hjeBSh#>@&sZ9iM4F@A|yw z^MTJypWQx3d`|jY_4&)^v9HEA#5c@0!Z*q{#y8$K(Kpq%k8iGTsc)HYh3`<`;l5*h z$NRqRJI(i9-}ih!@m=7%$ajhFr@pIwfArnuyT|VxzYqQ9_^tNa%;1%E#P(L6vpdesSKv6(RKxsf(Kt;gNfT;m917-)T3-~5r zW5Blon*+84Yzz1$;9GHv=aHz7_a( z;MBnBfinW%58M@aIPmAdYk_wI9|w5{H4TajN)2iklpT~GR2noaXiCsWL7xYG5wt4k z%b>4R1%DhoH+X*V!r)E8w}Nj6-wnPO{2=&Ia8(En(T3wj^wA*oLr8VVlFYgzX617q&m_VA$cX<6$SlPKBKb zI~R67>_XV@VVA@H2*=^B;ojka;lbhX)S2+e@R;zI!foOC;f3LY!;8c1;X}g9!z;tb zhEE8e8on@mefWm(P2rovw}c-HKNo%_{9Xi!&_x&`qzG4d)lzaqmx#U*wurI_8ZkNI z{fG}EW<|`2SQxQ5VoAiO5i25AMtl`Y{2}tk$X${9BacKLjXWNC zI`VAf?@^j4U6dh8igJx|kMfSni7JRHk9s}o{iuae>!Wr>?TI=Vbt39i)S0MDQCFgF zMBR+K74=utov6Q~HPNoo^`jd`H;!%+-8%Y(=r++|(b3VC=+4o$=!)n!qbEhb75#Sf z)aY5!OQM%YuZaFG`p4+K(Wj#C#7Hr&G43&POuZPtnDCgmnDm&Em|-zAW@60bm?<&u z#7v8MH|E2bSutP6d>8X$%;A_bv6@(2tRYs4b&WN}dc^v~){hO3jf+i;wZ6B|_<;DJ z_~7`^`0)71_?O}n!}km!-vI59XeCNVv+M`B6hh{U%NKTe#JI6rY=;^M@|7Gx1D8jG97-6C7+ zS-dPhmim^4md2JQmZp{rOM6R4OJ_@#rJJRPrMIPzCEuc0UbVbt8E=_jnP^#U`O5OO zWxZvCWs_yIWvk_T%W=yI%PGql%Q>r$wSl#<)og8MZDDO?ebMS~4YUSZW2~vxbZe%y zgSE4@tF?!^b;r&(86S6WwF*I3tD*IBn)f3W^$y=c8;y<+{t zdOgWEsX!;>SEqmyHk+a|{) zCnOgp4^A#gE>9ksJS=%+^62Do$#atDB`-)`l)N-~S@N#rJ<0o$43Q8d< zniPGCA;l%dEyX(}G$lMGG9^0YrIfgo?3A38+!R|%eo8^gpp@w;Gg3ZC`6y*x%EFXI zDN9q9rL0WZld>=6K+2(%pHq&d+)sI!@;DWxl2jp8lj@ObP7O{CO^ry6N{vbFkeZ!3 zAk~(dpIVqYGxej?IjQqg7o{#u{Va7w>dMqFQ}?ExNc}DKV(QvKYFb)aMq2x{SJPfkdn4`5w8?32r%g?po;EveaoWyYW zO`nuLCHZJw3&0})R{A9P9OG}z4w4}K@g-$6{INATOf)cD3=HrKuV}mLK-20kt!H^ zH^9w(-sfFEto28%=lOg`_(u9h`9Ai2;alqa*0h=J}15)<`WBvbwm!af!IiVPwXM~5(kKb z#9`t$;s$YxxJ%q89+EGR8Du8eiflu+BYTtYkweL9f0|@Sog6`aM2;fIke`q<$R*@5 zawWNj%qD*#50gj9(L+zzbQ$~Kox(WR%-H#qX zze)d#9!xWIls0IacIjdCSb8=+hn`0-pueQo&|B$TdI$Y8y^B6U7tn=tF@1(UM_-{I z(2waV`Z-gJNn+|VDNIA=b!K37w?t;DldjB1%*V`lW+F3%`HY#t%w`ratC+RSIwptN z!5n0cFvpnVOa*g|x#@52Z{u(8@96LB@8a*~@8Qq#bAG`u`@{Z-U-w)7$^LAAj(>xH zlYg`SNB=f|k^h1JvA@dyJWw-GCr~f&YJdzdfj}S_5CU=_98d$}0}}&N0@DIB0b|5>1{eV?j#13aaVn?xK*jelx zb{@Nc{ffD(-C1-G9&$Q|a6amTq+Tp?G)J>VX5RowGn z&0w8iyx48ypaPGZ+XOK`ZD6K@bL~2NwsI23G`E2eX6wf`!52 z;F(}~@Ok_+R;xd;wp{KND&QwS^?1o{%P_3z@MC`YvZP*8UnwqOX@oRV8ZC{L#!C~WDbh4)hBRMV zF0GQ*O6#R>rH#_}QmJ%SIww^~7p2S6pVD8_4e6ouM0zScmw8!|LvlpcWJ9)OR|Yba z6Y>aoq&!NVATO4e$t&eG@;W(3J|!2*C32bkn|xmWL%t+mk#8$?m1L!X(pYJ#ysEsR z^i=vN{S;lX6jzBWSV<@!Dx;M#$|7ZnvP@Z_tX9@4Ta+J_lS+Y7s1z$_l(Wj+(95BY zq0XVMp&p@Lp}wL1p+TX+Atm%_Xi{iuXnJT?==0DQp^c$!q3xlcL%TwSp~}#+aLsU? zaNTfnxI?&8xJ$TOxO=!qxH@_jo)n%Mo)(@Fo*kYWo)=ya-V)v#&JFJf?+oXK_k_#T z#%fdbMKx7zp{A=DYD=}1+E(RML6z08s;RnasteUc>JoLix>8-EW~-ajE$UWvo4QXu zq#jX^si)LJwOB1x|5X1{Z>qP|dy%9_{YXlrVWdfiL!?urON5SS5j|o>oXD`q zn8>)ugvg}Gl*qbBZe&L!FS0xGOXN=Ee&kW)@5nQ)rdCI*rzL9*w2sskZgfX9FSwcZn1>Mz$>2V$F!}VGEGJS=}~x0<=;4l~c(ZSFPq zn+MG!=C9@n^ORX=7Mo|xa`U`dVO}sVnODv0W~F)4ylvh!ADEBLD)YHj)2e<6S;yh=udTQ6OYuib7J^KZ_f!)Y%YB#rEveWEzJJWu} zZf&=<+uI%O&UP2Oo880iY4^7K*#qo<+Jo%3?04*U?V+~MCT+%MZQhpbkgeK|oo^qq zkJ!iT6Lx`JXqVV!cDa4duCOoIm+e38>-G)%mVL**Z$GmCwx2pRoZ3#3Q{PE(8aj=g zrcQI`CFdW`%T7zDmDAQ~?{suJJ6)V^&Kpja)7$Cm^mpENRy)~Fj~r#+!_G11gj3)YIi=27=bTgFTy(BD*PKe{mUGv6;5>G!oab&WH_5H`tN5npfO^?lst%$9Pt&OdZeG~gGwkftbwmp^~I}|$_J03e3I~^;EmBfArNuWMR z0S!SD&{H5!7HE*Xb(Dq&Y&yk26}*Apf4Bz-UM%fx52w$C?Eh0{D1=jkU3-O@H5yA_JaK&9~=h9zzI+Qia;qi3(kSx!3A&$TmjcWCAbCdg8Sehcmk@xbFY?{ zedVo;ABZ1{AB`W6 zpNbd8OX6km^7#4qAMs1^tMTjc8}Zxmd+~?yC-JAS2CNP1!erP0Hipe$DoleJuqA8_ z+rf^oGwcex!z|bv_JafAAUGHff$u{fq@W*iP=GQFLk$|xhB4?t1c$?q;3zl-j)N26 zWcV4J0cXRxa6bGJehrtx6>v4ohBE8GE_?tV!z%b3)j~aPdJlboNW>r(@kl};6hS(&kc$9>r=sWa1`T_k1{e*U+UFa9IA00$T(68tuI*p3a8B~tWqd(9kbQN7k zH_&Z#4?RRr&{JFk*T!{mGH!qy<7PM&r{N6T61T?fa7Wx3cg5Xt7VeGv;emJ%9*l?J z_puLC*pE3ZU>S$8h7D}v81^v2!>f6#QFsg1F2QB^H~c%kfG^`e@pXIy-^TawL;M6k zP1H!#PSi~#CmJLgCz>Tv6KRQzM9W0$MCZh7iLQy>i9U&biNT4t6GIYI;(vO4_0+0% Q0{=HD#s7Eze<$?+0#Q$|xc~qF literal 34672 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 F_%F@P9J2rb diff --git a/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.h b/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.h index 36344c5760b..f2f2fefc303 100644 --- a/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.h +++ b/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.h @@ -113,12 +113,13 @@ typedef enum ECookiePolicyPopupIndex -(IBAction) removeCookiesAndBlockSites:(id)aSender; // permission editing functions --(void) populatePermissionCache; --(IBAction) editPermissions:(id)aSender; --(IBAction) editPermissionsDone:(id)aSender; --(IBAction) removeCookiePermissions:(id)aSender; --(IBAction) removeAllCookiePermissions:(id)aSender; --(int) rowForPermissionWithHost:(NSString *)aHost; +- (void)populatePermissionCache; +- (IBAction)editPermissions:(id)aSender; +- (IBAction)editPermissionsDone:(id)aSender; +- (IBAction)expandCookiePermission:(id)aSender; +- (IBAction)removeCookiePermissions:(id)aSender; +- (IBAction)removeAllCookiePermissions:(id)aSender; +- (int)rowForPermissionWithHost:(NSString *)aHost; // keychain exclusion list editing functions - (void)loadKeychainExclusions; diff --git a/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.mm b/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.mm index b04cc125f12..1794c115a7c 100644 --- a/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.mm +++ b/mozilla/camino/PreferencePanes/Privacy/PrivacyPane.mm @@ -70,6 +70,8 @@ const int kSortReverse = 1; @interface OrgMozillaCaminoPreferencePrivacy(Private) ++ (NSString*)superdomainForHost:(NSString*)host; + // helper method for blocking/allowing multiple sites at once - (void)addPermissionForSelection:(int)inPermission; @@ -111,9 +113,9 @@ const int kSortReverse = 1; return result; } if (selfIndex < otherIndex) - return NSOrderedDescending; - else if (selfIndex > otherIndex) return NSOrderedAscending; + else if (selfIndex > otherIndex) + return NSOrderedDescending; else return NSOrderedSame; } @@ -520,6 +522,57 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, [mPermissionsPanel setMinSize:min]; } +// Note that this operates only a single row (enforced by menu validation), +// unlike many of the other context menu actions. +- (IBAction)expandCookiePermission:(id)aSender +{ + CHPermission* selectedPermission = [mCachedPermissions objectAtIndex:[mPermissionsTable selectedRow]]; + NSString* host = [selectedPermission host]; + NSString* superdomain = [[self class] superdomainForHost:host]; + int policy = [selectedPermission policy]; + + CHPermissionManager* permManager = [CHPermissionManager permissionManager]; + // Walk the permissions, cleaning up any that are superceded by the general + // policy (but leaving any that have a different policy). + NSString* domainSuffix = [NSString stringWithFormat:@".%@", superdomain]; + NSEnumerator* permEnumerator = [mCachedPermissions objectEnumerator]; + CHPermission* perm; + while ((perm = [permEnumerator nextObject])) { + if ([perm policy] == policy && [[perm host] hasSuffix:domainSuffix]) + [permManager removePermissionForHost:[perm host] + type:CHPermissionTypeCookie]; + } + // Add the new general policy. + [permManager setPolicy:policy forHost:superdomain type:CHPermissionTypeCookie]; + + [self populatePermissionCache]; + [mPermissionsTable reloadData]; + [self sortPermissionsByKey:[[mPermissionsTable highlightedTableColumn] identifier] + inAscendingOrder:mSortedAscending]; + + // Select the new permission. + if ([mPermissionsTable numberOfRows] > 0) { + int rowToSelect = [self rowForPermissionWithHost:superdomain]; + if ((rowToSelect >= 0) && (rowToSelect < [mPermissionsTable numberOfRows])) { + [mPermissionsTable selectRow:rowToSelect byExtendingSelection:NO]; + [mPermissionsTable scrollRowToVisible:rowToSelect]; + } + } +} + +// Returns the host that is one level more broad than the given host (e.g., +// foo.bar.com -> bar.com), or nil if the given host has only one component. ++ (NSString*)superdomainForHost:(NSString*)host +{ + NSRange dotRange = [host rangeOfString:@"."]; + if (dotRange.location == NSNotFound || dotRange.location == ([host length] - 1)) + return nil; + if (dotRange.location == 0) // .bar.com == bar.com + return [[self class] superdomainForHost:[host substringFromIndex:1]]; + else + return [host substringFromIndex:(dotRange.location + 1)]; +} + -(IBAction) removeCookiePermissions:(id)aSender { CHPermissionManager* permManager = [CHPermissionManager permissionManager]; @@ -584,7 +637,7 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, { int numRows = [mCachedPermissions count]; for (int row = 0; row < numRows; ++row) { - if ([[mCachedPermissions objectAtIndex:row] isEqualToString:aHost]) + if ([[[mCachedPermissions objectAtIndex:row] host] isEqualToString:aHost]) return row; } return -1; @@ -1099,8 +1152,7 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, return ([mCookiesTable numberOfRows] > 0 && [[mCookiesFilterField stringValue] length] == 0); - if (action == @selector(allowCookiesFromSites:)) - { + if (action == @selector(allowCookiesFromSites:)) { NSString* siteName = nil; int numCookieSites = [self numUniqueCookieSitesSelected:&siteName]; NSString* menuTitle = (numCookieSites == 1) ? @@ -1110,8 +1162,7 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, return (numCookieSites > 0); } - if (action == @selector(blockCookiesFromSites:)) - { + if (action == @selector(blockCookiesFromSites:)) { NSString* siteName = nil; int numCookieSites = [self numUniqueCookieSitesSelected:&siteName]; NSString* menuTitle = (numCookieSites == 1) ? @@ -1121,8 +1172,7 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, return (numCookieSites > 0); } - if (action == @selector(removeCookiesAndBlockSites:)) - { + if (action == @selector(removeCookiesAndBlockSites:)) { NSString* siteName = nil; int numCookieSites = [self numUniqueCookieSitesSelected:&siteName]; @@ -1133,6 +1183,22 @@ PR_STATIC_CALLBACK(int) compareValues(nsICookie* aCookie1, nsICookie* aCookie2, return (numCookieSites > 0); } + if (action == @selector(expandCookiePermission:)) { + // If there is excatly one row selected and it is expandable (i.e., not + // just a TLD already), enable the menu and give it a descriptive title, + // otherwise disable it and give it a generic title. + int selectedRowCount = [[mPermissionsTable selectedRowIndexes] count]; + NSString* superdomain = nil; + if (selectedRowCount == 1) { + NSString* selectedHost = [[mCachedPermissions objectAtIndex:[mPermissionsTable selectedRow]] host]; + superdomain = [[self class] superdomainForHost:selectedHost]; + } + NSString* menuTitle = superdomain ? [NSString stringWithFormat:[self localizedStringForKey:@"ExpandExceptionForSite"], superdomain] + : [self localizedStringForKey:@"ExpandException"]; + [inMenuItem setTitle:menuTitle]; + return (superdomain != nil); + } + // permissions context menu if (action == @selector(removeCookiePermissions:)) return ([self numPermissionsSelectedInPermissionsPanel] > 0);