From 5c100c0d69058415026db51ee051b854f922ffcb Mon Sep 17 00:00:00 2001 From: Chad Little Date: Mon, 22 Apr 2013 16:41:00 -0700 Subject: [PATCH] Payment sprite icons. Summary: Adds some icons for taking money. Test Plan: UIExamples Reviewers: epriestley, btrahan Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D5753 --- resources/sprite/manifest/payments.json | 45 +++++++++++++++++ .../sprite/payments_2x/americanexpress.png | Bin 0 -> 3303 bytes resources/sprite/payments_2x/discover.png | Bin 0 -> 2564 bytes .../sprite/payments_2x/googlecheckout.png | Bin 0 -> 2878 bytes resources/sprite/payments_2x/mastercard.png | Bin 0 -> 2611 bytes resources/sprite/payments_2x/paypal.png | Bin 0 -> 1889 bytes resources/sprite/payments_2x/visa.png | Bin 0 -> 2127 bytes resources/sprite/payments_2x/worldpay.png | Bin 0 -> 1650 bytes scripts/celerity/generate_sprites.php | 1 + src/__celerity_resource_map__.php | 25 +++++++++- .../uiexample/examples/PHUIIconExample.php | 43 +++++++++++++++- .../celerity/CeleritySpriteGenerator.php | 31 ++++++++++++ src/view/phui/PHUIIconView.php | 1 + webroot/rsrc/css/phui/phui-icon.css | 5 ++ webroot/rsrc/css/sprite-payments.css | 47 ++++++++++++++++++ webroot/rsrc/image/sprite-payments.png | Bin 0 -> 11941 bytes 16 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 resources/sprite/manifest/payments.json create mode 100644 resources/sprite/payments_2x/americanexpress.png create mode 100644 resources/sprite/payments_2x/discover.png create mode 100644 resources/sprite/payments_2x/googlecheckout.png create mode 100644 resources/sprite/payments_2x/mastercard.png create mode 100644 resources/sprite/payments_2x/paypal.png create mode 100644 resources/sprite/payments_2x/visa.png create mode 100644 resources/sprite/payments_2x/worldpay.png create mode 100644 webroot/rsrc/css/sprite-payments.css create mode 100644 webroot/rsrc/image/sprite-payments.png diff --git a/resources/sprite/manifest/payments.json b/resources/sprite/manifest/payments.json new file mode 100644 index 0000000000..29f40c7b1e --- /dev/null +++ b/resources/sprite/manifest/payments.json @@ -0,0 +1,45 @@ +{ + "version" : 1, + "sprites" : { + "payments-americanexpress" : { + "name" : "payments-americanexpress", + "rule" : ".payments-americanexpress", + "hash" : "ace986273a0bae308c4018e02cdd60f2" + }, + "payments-discover" : { + "name" : "payments-discover", + "rule" : ".payments-discover", + "hash" : "0b60e5e4c25e0d3bf2c3cb780d7eaf00" + }, + "payments-googlecheckout" : { + "name" : "payments-googlecheckout", + "rule" : ".payments-googlecheckout", + "hash" : "1f00e015545898e059ca09fa49b239e7" + }, + "payments-mastercard" : { + "name" : "payments-mastercard", + "rule" : ".payments-mastercard", + "hash" : "49a742b837610f7b37b565ba4899c95c" + }, + "payments-paypal" : { + "name" : "payments-paypal", + "rule" : ".payments-paypal", + "hash" : "5664cf7acd9fe65d60e1449a33f56ce2" + }, + "payments-visa" : { + "name" : "payments-visa", + "rule" : ".payments-visa", + "hash" : "ff2ffac55927dbe7a1bf02fdfac561ea" + }, + "payments-worldpay" : { + "name" : "payments-worldpay", + "rule" : ".payments-worldpay", + "hash" : "acc037ffa26f6caccf290006e39ba1fc" + } + }, + "scales" : [ + 1 + ], + "header" : "\/**\n * @provides sprite-payments-css\n * @generated\n *\/\n\n.sprite-payments {\n background-image: url(\/rsrc\/image\/sprite-payments.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5) {\n .sprite-payments {\n background-image: url(\/rsrc\/image\/sprite-payments-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n", + "type" : "standard" +} diff --git a/resources/sprite/payments_2x/americanexpress.png b/resources/sprite/payments_2x/americanexpress.png new file mode 100644 index 0000000000000000000000000000000000000000..022b0a770afb3cedf16542cfc327c52832c33808 GIT binary patch literal 3303 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 literal 0 HcmV?d00001 diff --git a/resources/sprite/payments_2x/googlecheckout.png b/resources/sprite/payments_2x/googlecheckout.png new file mode 100644 index 0000000000000000000000000000000000000000..da186abfd2a64bebb3f3036fd49de578b35afafd GIT binary patch literal 2878 zcmV-E3&He>P)tPkRYNW=pmYdqCHBjRZyt5_GmrT9(qK?2i4Xm3PnX)6(5LEP|(n* zknl<*3FQ6GCi~u0d~|v}x@?`` z`Uye)y)ZYpAGAKe{}W)Dp`e^s<3>}3ktHYntZF%UedfGDb3bN*pzO)LBE2>l*w9EX z%})=Up(}U;4s-5-t*qjbd#hmxb+(=+MT_TD~n&Gk8>Al_Qhs!NNqff-595be- z>7b&t%uj0ny#kiOK3lT|T!R{q&wB#Usn2_DF66PK-kBAtl~#N4(I@4YHzN|0vMkUW zj8G#0TepO__SfQ#mrF5!VG6Fz&Fph}1H;;oj*uD7tqi7O!bejKDfB;?Ndn8NL;cdg zIY$UL+)&I^weomtcPR=MX^}N01*}>ZqKJ6Dn?~r~dV!4GESmOwO7g2DZ0pH5%M}{Vb^1aCu3h0KTqDnK(Wf ztlk*5Q@u^(Ye?Mhf=U$)m1b-|nm$4wFOjtwutW$>j{u`aP40)r9`w2(v^GFPk|!o1 zRWU!igZ>+h5kwo(;Wnp)&h~S-W_|`ZjXtDOy;5Qr#l{B;!e3K?_I-OHO&}`X z+6?LBF{qL+M)KN?AsRtwfV=rM_=HLHUMC$?m`Zt)&L=O?(#@mj+cw%?QX-0I>A-5+rafD3}|8yxC5C`c6G6&eS40 z-hx07_(#nye17^X2tf(K^6yZ(=`jQsEJsq#)kwW_16rLTj&6SeW|Ik4YZ43^mf{)= znCzPDanID-hjk`Q*r%`YAH9PXqHnRuR_GXsnwM$H<(QCYq@Zox1POMb>0A(6%S;#z z%4}wf6^RqF;i{-c!--dL@Pr@rXHOtA)eK1+h5VdM%(*%XyLUH%m3-l5L0D^e@Yg7> zu0>pg9`5}+QN3+5+!<+5&sYeF8QLAH20}BM^awIBsBUmlXEN{shc}33qIPa#V{I-8 zBB2mkn&_BbtqwgSFBo~vG9{eUo`DpohL>09f+7=QT5o*_rbM8k^Z-6TsfD9Wgjdpq z!cFeA7Bbg4INM!ee6VBzbyF?9wv~K=s&+rvg0+~q`Zt(3^)dvBHi$GskcI}_n?78T zu5^9=jXmV-diOLy)acY%8x9?7$6t4}V#~H8#7_K_#?bCWV1Vi)CV^f$WwrMlK}*T| z;N2bJQG<&MU9Os|4BYj{(;=NY@ZJ&Jd+T`UqD*1Ti#^^aP+bXb&SIpmyd7iG#v|IG zp`s$JQZtcx7R6z9Se`J(q(*v{6MgqfH}cff4bq3qG8(XwI|I!}Cqw!J3gIaku^<5q}LGtW49@QBYOc4NK#~pdtEK4scyl^b53a0Dnv!cAT2o( zF?tCq1Br3u8-P}^D>;sLbt?{x#J@-_2bO5WK*!P8<^kikL1i=|CejQwr!4yVz9ziz zVlg(ZiNnOSSg@iWYoBOEY4KTn_Ff*QUz!0G@pOWy_zhOArJE!Wrt6z*5CSelMn)pm zY^DbbnIEQSX&JDyKVXkv3`-MxaSNhEy{U%%Y0EziT>;F=dj+pPnta(Vb{Qda@2v79S#^rvQ zMjoqe^QmJZ8?wx zl3x?{EwQn1)EvhTM}EM`LuKHJb`AzR!f8qIz)Z;2&0>91>1%}fQt?{F#IY8!a zrUIOPi2=1uB8tj9C{Rm3YIlb%;)y+a|K;0P;(;w?aFRp++nck{W_Q98p@D`Z2-7B+ z(3->Jk!Q-WzAzO_<|g9)treI$-hjJrNJf0L2K6M}GercbDg6GqQ`ov;D%za_o_MJo zD+`iHqG813OdZ*Ek(_GS9zIl1>q+d@_s^RZ-o~fsFyoR4EWav=-bX}u;UJlw>}16e zs;*LBbwlyeMpF!2J~2G!{F#gLG(VGuJiiZH#AAA5j%<$NC`I*19r4nR9xtsdCWVzs zXuxJhFVr#Uv;E;{2lfv|7sjtNv`E4PA@x;9MteoX^eeiAR9X<3k;>SkmAOZumHz8` z^5`|{;Tx+OV8e1w!Kow)`a*l%BJZvove+K=r!Uh$-@Qc8*n1%YR+Am|dEJUx{J*^} c{f__x0N0lE!~5RWU;qFB07*qoM6N<$g1;7WjQ{`u literal 0 HcmV?d00001 diff --git a/resources/sprite/payments_2x/mastercard.png b/resources/sprite/payments_2x/mastercard.png new file mode 100644 index 0000000000000000000000000000000000000000..405a68f8c04918477b91bf14cbd7d1c6995fefe4 GIT binary patch literal 2611 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 Vzvj_8`@#SK002ovPDHLkV1nkP>Hz=% literal 0 HcmV?d00001 diff --git a/resources/sprite/payments_2x/paypal.png b/resources/sprite/payments_2x/paypal.png new file mode 100644 index 0000000000000000000000000000000000000000..c52765e1eaa7f08eb77a7a319cf628be2b060750 GIT binary patch literal 1889 zcmV-n2cGzeP)kaNPuU7a$KcVrUd8hFJMu;czeV5P`#;#F8Ox;X#Ve??**_ z3)Bils4Wl_pj9i8nqc@>g=n(5&}R2SC6|Vdksv`XIXV(C5z1Shr?%aRb`J#?G8uGm zlMX>dQ*@OWqv@~kV2CcdT!)_uP6FCU(lj7SK_MEuYm(xzVa2>&oczP`b*Tx?W-B^; zesoi{*gWv}OuhL2aafZ*T3kue51j+b*3*?hTPK(K^@W+(S9Ad_S4`OW+RBiAH?(l0 zr9)IULIsUZ0}WZWtb(OpZfLj1H?8%>owA{4>D(dxaa!R+3WAXWOu1K5w(w9QgR#A88ZR zaJoHcr49IO|8c87^ejTNFg3qHneeN6H}9r zIxbB_1abfP@pF6*&ULmC)aLefQycKcwgMCtoQ8vx*!9*ksImo^!(fZzk%_}Y&|_BQ z1Bko<_!N(LPW*oj5NFA(bH~BaQc+HEC36+`iLgxbRyww={$K@OT3kvYnJ` zv$~L=*W=Tjhe4BK=0iCcmXwIR1B3v^1sdb=22kJW#MZM_#J{TmDShw6R2U+asN1xx zpNtdVD?n|101BCCv$J((LK4lRjKF;ppc`H`1KWLtHduARe`K~xZH$_@+vHvmrWZ|PKa>Q zCaAD~)AM}qPF1ytRG@LWy9$xJ%`c*Y<*+FRoOpQwUn}=;8TORbp~+(7(#zR8G;V5Y zJbzzY*UsfLBpGO`-eic~*<(mymO-#a^586IqAJ1BbCu{ItHA9;YH|Y9aWU}t2*yS| z7Ehai7=rH3W2HFta|!3O&S-!kN`n(+SJB>KBPXXN;|QEFRpw3(zxTgChKr`_e9@;L zp9h6f#hoFTB>u5wL*x z%StEnIi$q&5wSNvhdC{Sy$*lNp)>HbwDSdQNAd>@V)S}$(^lFL4;C$*jr?aHz?HAE)eI?<>VBZJ81;=teiPut?i}P;I1XO zYE{@v)}B8;3B@&L%r7rs-Uf>@?m|VY6@sUmqiha2zMIC<;yEl{&DJh>>YGU!FN_JX z-1+?VYO#@!4mUwpiOR-iY(IJi*)Qga-rDQM1DR=|zG=f~$H`&wGu&#&##Kv0?+#Ve z158kt2h&sZ5C*v#h|?m(CD>hFgZ#ouEZKHU9{g#I-lDiR~Xc!4bNT$xyIrLXI!|D_FkaN^fv_(#D?}77p=iqtx=oxGyB2~Q4 zj*@E807Q!nWAvc&gia}o#UeyS#}Zv{PxkP_C%dql_{)x-Eg!7KirHCrByXU&3HGjz z+nYR?S}dZn~}NaCb9HCEv3Jkprhj` zX<-hs(o-;d(wP57TFf}C)x}cqAHH7z7>6Snhix5wEIdR$TZZ!CU>GaRBH{u0a3C1I z3QPNBh;sHnNhT3^qdzEw-5&@^Po^Z}9||Pm&ouTz9YFzqAUqXjiIv;sqGw8uhT8Aa bKLi*6m7h4xVGVaa00000NkvXXu0mjfP!ou= literal 0 HcmV?d00001 diff --git a/resources/sprite/payments_2x/visa.png b/resources/sprite/payments_2x/visa.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d9661d26d53458979554ae7a776ba00cff4202 GIT binary patch literal 2127 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 literal 0 HcmV?d00001 diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index 1932945298..911fb5d761 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -34,6 +34,7 @@ $sheets = array( 'minicons' => $generator->buildMiniconsSheet(), 'conpherence' => $generator->buildConpherenceSheet(), 'apps-large' => $generator->buildAppsLargeSheet(), + 'payments' => $generator->buildPaymentsSheet(), 'tokens' => $generator->buildTokenSheet(), 'docs' => $generator->buildDocsSheet(), 'gradient' => $generator->buildGradientSheet(), diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 1d136539cf..9aca942fe8 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -637,6 +637,20 @@ celerity_register_resource_map(array( 'disk' => '/rsrc/image/sprite-minicons.png', 'type' => 'png', ), + '/rsrc/image/sprite-payments-X2.png' => + array( + 'hash' => 'a896e11842db04bde8c3dc18d6efacd3', + 'uri' => '/res/a896e118/rsrc/image/sprite-payments-X2.png', + 'disk' => '/rsrc/image/sprite-payments-X2.png', + 'type' => 'png', + ), + '/rsrc/image/sprite-payments.png' => + array( + 'hash' => '5ac5b872d19a862eabc508c8bf97a53b', + 'uri' => '/res/5ac5b872/rsrc/image/sprite-payments.png', + 'disk' => '/rsrc/image/sprite-payments.png', + 'type' => 'png', + ), '/rsrc/image/sprite-tokens.png' => array( 'hash' => '67c46fd75c885b76ecbfe46e71a476cc', @@ -3609,7 +3623,7 @@ celerity_register_resource_map(array( ), 'phui-icon-view-css' => array( - 'uri' => '/res/4d0588b4/rsrc/css/phui/phui-icon.css', + 'uri' => '/res/9d05b3f3/rsrc/css/phui/phui-icon.css', 'type' => 'css', 'requires' => array( @@ -3886,6 +3900,15 @@ celerity_register_resource_map(array( ), 'disk' => '/rsrc/css/sprite-minicons.css', ), + 'sprite-payments-css' => + array( + 'uri' => '/res/dcb6e856/rsrc/css/sprite-payments.css', + 'type' => 'css', + 'requires' => + array( + ), + 'disk' => '/rsrc/css/sprite-payments.css', + ), 'sprite-tokens-css' => array( 'uri' => '/res/edb4e341/rsrc/css/sprite-tokens.css', diff --git a/src/applications/uiexample/examples/PHUIIconExample.php b/src/applications/uiexample/examples/PHUIIconExample.php index a6a0116298..a2114a529f 100644 --- a/src/applications/uiexample/examples/PHUIIconExample.php +++ b/src/applications/uiexample/examples/PHUIIconExample.php @@ -48,6 +48,30 @@ final class PHUIIconExample extends PhabricatorUIExample { $person6->setImage( celerity_get_resource_uri('/rsrc/image/people/taft.png')); + $card1 = id(new PHUIIconView()) + ->setSpriteSheet(PHUIIconView::SPRITE_PAYMENTS) + ->setSpriteIcon('visa') + ->addClass(PHUI::MARGIN_SMALL_RIGHT); + + $card2 = id(new PHUIIconView()) + ->setSpriteSheet(PHUIIconView::SPRITE_PAYMENTS) + ->setSpriteIcon('mastercard') + ->addClass(PHUI::MARGIN_SMALL_RIGHT); + + $card3 = id(new PHUIIconView()) + ->setSpriteSheet(PHUIIconView::SPRITE_PAYMENTS) + ->setSpriteIcon('paypal') + ->addClass(PHUI::MARGIN_SMALL_RIGHT); + + $card4 = id(new PHUIIconView()) + ->setSpriteSheet(PHUIIconView::SPRITE_PAYMENTS) + ->setSpriteIcon('americanexpress') + ->addClass(PHUI::MARGIN_SMALL_RIGHT); + + $card5 = id(new PHUIIconView()) + ->setSpriteSheet(PHUIIconView::SPRITE_PAYMENTS) + ->setSpriteIcon('googlecheckout'); + $actions = array( 'settings-grey', 'heart-grey', @@ -108,6 +132,14 @@ final class PHUIIconExample extends PhabricatorUIExample { ->addPadding(PHUI::PADDING_SMALL) ->setShadow(true)); + $layout4 = + array( + id(new PHUIBoxView()) + ->appendChild(array($card1, $card2, $card3, $card4, $card5)) + ->addMargin(PHUI::MARGIN_MEDIUM) + ->addPadding(PHUI::PADDING_MEDIUM) + ->setShadow(true)); + $head1 = id(new PhabricatorHeaderView()) ->setHeader(pht('Action Icons!')); @@ -117,6 +149,9 @@ final class PHUIIconExample extends PhabricatorUIExample { $head3 = id(new PhabricatorHeaderView()) ->setHeader(pht('Tokens')); + $head4 = id(new PhabricatorHeaderView()) + ->setHeader(pht('Payments')); + $wrap1 = id(new PHUIBoxView()) ->appendChild($layout1) ->addMargin(PHUI::MARGIN_LARGE); @@ -129,6 +164,10 @@ final class PHUIIconExample extends PhabricatorUIExample { ->appendChild($layout3) ->addMargin(PHUI::MARGIN_LARGE); + $wrap4 = id(new PHUIBoxView()) + ->appendChild($layout4) + ->addMargin(PHUI::MARGIN_LARGE); + return phutil_tag( 'div', array(), @@ -138,7 +177,9 @@ final class PHUIIconExample extends PhabricatorUIExample { $head2, $wrap2, $head3, - $wrap3 + $wrap3, + $head4, + $wrap4 )); } } diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php index 75d1b68831..f7578468d0 100644 --- a/src/infrastructure/celerity/CeleritySpriteGenerator.php +++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php @@ -332,6 +332,37 @@ final class CeleritySpriteGenerator { return $sheet; } + public function buildPaymentsSheet() { + $icons = $this->getDirectoryList('payments_2x'); + $scales = array( + '2x' => 1, + ); + $template = id(new PhutilSprite()) + ->setSourceSize(60, 32); + + $sprites = array(); + $prefix = 'payments_'; + foreach ($icons as $icon) { + $sprite = id(clone $template) + ->setName('payments-'.$icon) + ->setTargetCSS('.payments-'.$icon); + + foreach ($scales as $scale_key => $scale) { + $path = $this->getPath($prefix.$scale_key.'/'.$icon.'.png'); + $sprite->setSourceFile($path, $scale); + } + $sprites[] = $sprite; + } + + $sheet = $this->buildSheet('payments', true); + $sheet->setScales($scales); + foreach ($sprites as $sprite) { + $sheet->addSprite($sprite); + } + + return $sheet; + } + public function buildConpherenceSheet() { $name = 'conpherence'; diff --git a/src/view/phui/PHUIIconView.php b/src/view/phui/PHUIIconView.php index 57abce3ecc..e25bf6d7b9 100644 --- a/src/view/phui/PHUIIconView.php +++ b/src/view/phui/PHUIIconView.php @@ -6,6 +6,7 @@ final class PHUIIconView extends AphrontTagView { const SPRITE_ACTIONS = 'actions'; const SPRITE_APPS = 'apps'; const SPRITE_TOKENS = 'tokens'; + const SPRITE_PAYMENTS = 'payments'; const HEAD_SMALL = 'phuihead-small'; const HEAD_MEDIUM = 'phuihead-medium'; diff --git a/webroot/rsrc/css/phui/phui-icon.css b/webroot/rsrc/css/phui/phui-icon.css index 6d55b6d4b6..2942f77e57 100644 --- a/webroot/rsrc/css/phui/phui-icon.css +++ b/webroot/rsrc/css/phui/phui-icon.css @@ -27,6 +27,11 @@ width: 16px; } +.phui-icon-item-link.sprite-payments { + height: 32px; + width: 60px; +} + .phui-icon-item-link.phuihead-medium { height: 50px; width: 50px; diff --git a/webroot/rsrc/css/sprite-payments.css b/webroot/rsrc/css/sprite-payments.css new file mode 100644 index 0000000000..b6ff1c9c23 --- /dev/null +++ b/webroot/rsrc/css/sprite-payments.css @@ -0,0 +1,47 @@ +/** + * @provides sprite-payments-css + * @generated + */ + +.sprite-payments { + background-image: url(/rsrc/image/sprite-payments.png); + background-repeat: no-repeat; +} + +@media +only screen and (min-device-pixel-ratio: 1.5), +only screen and (-webkit-min-device-pixel-ratio: 1.5) { + .sprite-payments { + background-image: url(/rsrc/image/sprite-payments-X2.png); + background-size: 122px 132px; + } +} + + +.payments-americanexpress { + background-position: 0px 0px; +} + +.payments-discover { + background-position: -61px 0px; +} + +.payments-googlecheckout { + background-position: 0px -33px; +} + +.payments-mastercard { + background-position: -61px -33px; +} + +.payments-paypal { + background-position: 0px -66px; +} + +.payments-visa { + background-position: -61px -66px; +} + +.payments-worldpay { + background-position: 0px -99px; +} diff --git a/webroot/rsrc/image/sprite-payments.png b/webroot/rsrc/image/sprite-payments.png new file mode 100644 index 0000000000000000000000000000000000000000..bf96741b7797bc900e464dcd042d743ffe7889ef GIT binary patch literal 11941 zcmV;WE?UuvP)gG zXRb~s{+gScsjjY$YHDgmrQqIhkNDG>|HjHa_w<c>trSygqBG@+#Fq80Ys+kv zYwK~0(|Qv{l(f^SqBaUHGSbNlMheU~l7D_H`Q)~crx5q7X4;+EL_0DXX=7>wtvc68 zbCV48RZ>06k~4L*@JuZ&jj2>+c~m*AiYQ}Q6RuYzteDn>n#I<7m?8`O^J#lT0pGa1 zXQRAi77H@I7^R^F7LY)`7ePsKP4k1*DQ!J>y|?brW@TjZVS6 zb&H#n_pE}BDecwBsFL1oZ5fu@a_f3Pjwn_jhZOdL_RH-HdRJQGfS|3lSp_X2pDGzV zXt55^wY9Z;(^#VCcXW=y*)8Oj+1EcqlU0o#Bb6U41&c>g6$=1cfF7hq=j9hs zcvvJwM#ZpTTl=6gGjq7!)Y+qMA3Eek-rl}_+8P>LC?qtD_U_$B9v+_DR$Jdze2$E% z{$xDoOYOOl)X`?-avUcpD1<7i>MYtfHn;Qfvd-s`zO0JE!=u#e3_TT2jZH@N`ehy3 zVP7n9JexjR0@em&0Amt6HW<69p{pHeHJ37}08+o}23 zSJWJ`o~7l)G8R)^A!X*4aC;YLSBvKmcs!WP;}cRCxb=1B7wXmPpE-SoS{@yfz#Rvj zq2FLk^}9j?v0c*8MO97RBr%Nd;$H4W& z0S(Q>!^z3JKy`*@en8k>x^x8}-^2YNeLig(wYGI}2beW;rh30A=g#x8vbvt3q7GV& zG91hASP(TDMJJASqSoM5)SBc)ZCN2K(CpSICu$E`DmqactzEZ;j{z-}$6vHyA(P#0tue3OIqn z|H2Pr8^8e{0??Q!fq#}7&7Gsr$bpyCVt@`SZ)ejD&`q8QTCm63|C{j`9O6E3a11>*pWHWzbU812i7m`gQABqhKPnn&)-+h}vFT&Qg)X znheM=*X?B)T-IKgNXE24?f|C3Fp5jb;$r|P_Jg^`Hm(KRvID|Y8%3vsS!d8fqo+-s zs-6$mIAi*BYU@z8ZELiZ>Bct9CNvq^l~vhJ9ztUQ37`QNAh3ilM?K)f3c#;JD-nc2 z%h5)w(TK1iFz4{osB;pX03AejgufifrLYUlbTYSr*I}j+e5F;iGi*NrAO3l`pu030 zEln^4zD+)4fR+yu4;dPRIy}sPfD`J&)oQv{puI5BfC?XNGE|bOv6f-CoeyKJhQbY?oZ9lv|g@UsisJO;NcQ1*fC)OsCZ*nznj~Fzx zKuBRx8JEFFO3HSK8W+V>Ee)#=s=%?3DV5p(tF?~Q+)fv??2+sTXV~=wHX7};OeC-2*W*@CrM2)(| zQbx5H7t077khGC9wr#DW4MZM8mdRmQZA*^|Qi_O07`Uv1$$slV4zEMgAy`i+Y*x## zj1=Y_p#QWsp6>c8hVEVzLw|C~U@aevM&m&xq-3&oVjB+(CKDiGrV#|eY@afTw*f z&}6CYuqeS{F#129ny8NDNs4p3BU-F;6D*P!yKbb&UT?rJAaLB ztV6JlPpaU9VX|KgtfYGmm(fjb#VijVQcSg!30t!12FG;zmu*rt}eq#zv z+I)_l-jdAb`qsHo^ytbs1`By~akL8h-mjwBtOGWd*!L5U^EN?aOspNYzz4$D$p;1S zsKaneYPu9Wd_=ow2e{IlOPMmojzI%Lo%2M3S^)L-4PX zWeCVHadOZ6(+nSS@0>`we@-~vH#?k{TF`h1@N=#0y#g(;mNt_aq>VbcUyH`|TrOf0 zwA8Yp$gO)yxI+NyUHb}IYauw+Rn8Z9Iuj?v^80&=xXtx0`K-l1*_K0Z_~|LH+Qh-v z9ow^5pw0N;BC4Q;e!Mt=qwM=c5C%Vu;Tz00v>4`j@~#XH!eF)^o*zZ`%#NV9x215M z1PuXTDO%8&Djdm!goZ(@3QKG0LP<4i9sDxPDEvKqCd#3O&^U~hD{5MKq6Pc!_wc6O zdp-FWDBrPjA0Ml_zMamc=aK*MQ(SjRK})|m6uH**0&6U^6JX)D5uroin^A`PtG4EH zAor|~o-G3|0#Ueb;aQ%;zS%L2A)u_Qx0+CV3>+hi8E=AXtF@F98l(HxvO#n0uIOtV{R+Y7klu zlMk3M`3=JNpd8u^O@=>)CPQ@eOZe33O_6TG9aU! z)aZL>gmRhIWUG*8h1v!!u4}jgZ45jaNiV$c5`%_s1bp~cXeBfn?En^S&>k>RhF}Z( zpbqP>28gt=4Xp;~z@YFEU0;(BjN>gp1JF+sRgTr3f^VM-G|8Pl8p@p+`;lSQ-*jYb&{tAqyM=@7;dHfF`JE;ahYovCUtCP4%8 z*8%#nl&VS|uj{8@L#3a6mzrJvYN^ox2hAIb046}gOv5j$pHU0{i*1x+DicfiRg^=E zp}ByF@iOY*gW+#s#<6_?(8V&lyp7E@KB>wxmth@csKc=!D1$(&(dM4HeYM#ZXpDc+ zel$pZl?dW|7f{*kpEBU`IX|QFc@r%`L!$u>S~plh`)fC5a-a=3ZKlcZ^zU9i4T73aeqe>0NQUWfUe;bQU(13HKRSZnhv!D<0B zTq`qe4Nj|-5Lu?Jv(-)uS%TK4M8q|~=Bw^v>KTJJdO2L-|tVR7aNq)Ly7R*me;b2NE5jW%3M{RtBhh zKqCm^mK;87kz@zKT(D7mGo-cs(hI(EG8n<<(fF!Slg}4q*!m2AjESXT$Ma-x{_C&> z+RWcRl}UEvX|tpIo^|7YWAG2;;j~9<@5a619=m(Scp|*f*v8)h9&HKXs)&EBtwswU z-DYeZ<%#e;e2=R6mU&2>qckBLf_uX~%Atlf5x%o)bV{E@c+1Sfo>42>tOeY>?A*hV z=GsOoOG=@9Z*R)n=|UM>x3c6OI6%cgC#WVZlT6|(!UG+nL;N$<=a5l7nQVis~I|ASsbUs z#Bf_P)=+EOii=CW2emer4a<@Z8uZ2TZ@)>%w$D%B7-&En3}9Qpq2V}&sWETxfUN|b z<7)wJk=xsWS)?u&)3*X#rt3CReq#w`SLgCXN5?k++GOe;v=-ZvHg^o^+`|P8A3R*hDXSF7xy~!8Ic^zCTjnKzEoStF2f7;xVwTzikboK* zolE8A6=Y~=rj~|!Dk-XC;Px|5koSoUwLNDyV5yZ3QnMa!x5>?3CmYd-29a+)d6PMslyipYeW8N3ro<-gUb|2 zchi@~Qv8`@9%EYvK~1eD+I293GBa{)ri*H&7r3%MP#f(v^d~Cli?p*i{xCq-7Zi;c zGW>H(@={fx(O8;tmMI!K0@#SyhX-1tIWWy@wgvJeLw^qs9iZLRY573Kzoxuw7GqO$ zzx%ee7K%tRg_r%c!B8l~Ruty;?m2*cgh92(-SwhqW0dTdQ$+;B9Q4ZEGDKbitN2lph>O`TJcdZ?-*e zYumK8>8bj{5-Q2{W~t8klto$%XmyeJBA{!ao@L6yV)}n}N?ZV!0nL2p%)1t#Ym#F5 zd^m5$;^}-|fCuE_l2Y;AD%+qjq0nC^liHlLbTK6_UO>sqmntIGQ8pNDhMd)`OF;*K zrc0mObmntvivEBa!d|6@$agG+>x48U%&~-gPO%V(;s>&1xJR3&8z7^zd)WVG=als3 z`I_t6tbDDkZ>=b!wE5F{pGJ|B1Wg2h=uhkv*xb&@P|w8&QMCbSu|4ej(*o{bLGDs@ zE71clo)%w>Pvm$2F~C(f_|a>2KIY8A9{N9?-=i1S{hdDwG^Qm|$ScoLPFX!)8?FQA zj8@Otd;LQJjiD64ViE+JEuqQD5y0k70QeH3SeIpq^XF3TmiZiI!%VkjF5)GmCFx^o zihPcmjz2(+2ft6XevdL#L*O5%_TWw8>$*3vR3Ey9YCLaN%7kFM*5}vU4jqHtf$-JC z0BueL4>o8(_gH{#w@UPuVsLe&;DxiOMkI*KeIPZ<9QeUkRHJ+soeQ#~?7Vs&8a0~} z+-mb)qu6yi%1&^l!)My*y8E1{C^wg(qRsE$5y=8S*~(h41&#IGKR-sBAG(+78``Kg zU_W=ZlaA{+w%~Zc92*Q3G+-its%|nVF^d447M-HF6ftQ6kkCrN$2ug%JZ8pz`pg3E zEPxGxxlWk!97R5TGt0?`uA{V%Cs20OVx@!2Bt7q&sP6DBRPTK!RlEH_fo_J6ZPaIM z{4WZLInR?Q0B>wpk^tK~1_@e1#KZo#Ljnby%2b0WEoh9TVP5fVM3{LVV+)`F-O^zh zc(tF6VbJM`8Pwi7m*V_iV$j;0VEF0`4;}fsyiFgw5<^8NlN!A6Py^|1{DP{AYb-#+ zXBR&BQw9yQeP)j<2ZtqfNZ?mGk=7Co1vE4>Wc_ApGH;)8^Q4k$CFa1?CqT*{gh6Bu z!FU_nvBA;QiaId`iVjm*Sjq85#^Gb+_>Y-j^*lA3EUSq+~=aD?*MgbZq_d5V1J>nQbHu9EF1FHZPv2^ww#peMZ< zq}F5ovzgA+*r@yhg9MFE1<>oS{SFo3R}zetzn}ovoNOlc!2=iyXlQ8g{v!+;fB^?f zJj7K0ljOVeAo(5&;xcGG+Lc!txIE&}F+N7*(O}9>%3-m$Tf*10>C3gsFE$i3(>9-U zzCLIxOnB_t>uBMUMJ(3=b zz9PMp*gwO3zq>4p{_tK3NB`9&#Y%p(u~TEZ1?bstleS~ zJ*HPcLo@MkvvbO*QFNBX?V72OwyJ zYudN{052W?XA%R0wpQ=fu~~*c#=N$^qDthPb<+8qbT-jdMG3Te!$#f@V4?l61PI>P zoDYyXtG#D)Qn;e6GO-(43ec~-8OT8Kpa2dcAtEAv?Zd4M9@_|teE$0phJs@u7&~~! zb+l=*@O9!#csK@vE~PfZ!w3|hjS^2Ez5JJ#*vvbEPHXDx+4mk%9NsxZ;M%f8Q= z4GBEFosu)E)$`_5iQm;aT|+Zna#^!+?)k2HT!%SsXfwq7v@ai1o);z@vghy5v3rpB z(jVx765*k7@PjbZhXN9*TKv!(9yY-43eM&>d8ZTACF;=upot7xlmn`4i+cEIXecbf z?(ck;{{E~zACI54Fw;){CA^N0C!5S>8uhi&(^!k^tgaE!I%G(owV8z$$<)GRRn?Sn z6pNX#1Kv>_q#;;>=3-w&!?L|W2!=Wk1Vsk(Z);d5X+wK)475Y)t1RE-Q%d(f>&54S zU&ndT!2lcMdUU8J@uhZH9Ej|kb;3HFE2yKS^TmA3x|VMBdgOhXtUwQx2=8J4CCypo zPKW;T68l$=KRu@`MLD#0rSl2a=&!!q$mKA@2(HjU01(=ZebE-jfj{0fWubZufcBmI zbNX=JQr2u}GhpJl`}XfkGru{oU=J)X=> zmSPjMtpsxMfbxP)(Z*|kNUjrZ=p*}Y{1Ka8m+P)k1#PiJovg>QdgV2gwf$Ni5*2T~ zMwPPdKj)zm0x{I+uR8t1?|hILYNF_*4w2d(DFTTI5(iR=6MlSy>l zBZYMD3+L(AFBj2Nk*lq}ZtJA9{y-0OZJv)mM(%gq%ChhF+bouYk=?ialHy+d1&^1t zg0jMmzo6PY+6x0b^vo7Gb^t7lE3TkJq2?7xHjG%W*Hjjzj=k3m$@UfUZ6=QH3~E zVQm(3-9rYAAqBGa@US6xFc?q&=H)XM=5NE{B7XSM;wPv80FXjc4GbQd55J84gOeK> z0NTO=06YNw!{Hpa!-W72+Tl1b&wNfXB?=P_6AoVu!0^}b=V}{qUFbNt7IYePD0Di` zIBe;?2d$tEGj^8QlyuSj<702UHDb`vU_tMoFb{P7xW|iv z1{i2BpaK}iw19)4M@GdcgXTdyVLky45j5Ii9E>v5p)I0slmRx@q2Xa^P25RjM^dz} zivvJ>AOY|Qx=@!ZLQotZ$41AI*MW1${cS-W31~#fFySMG9q{{KlFuWzvFV1%9tmWg z@4g7&0YO_l9P>lRa0uE1ErcfF;bJ(0s2SRe4ghfI4Dg)*2~C5Et~7LTJ)&S}9*%?Y zG&%;%JIbJm7_L=`VaY&=-?%1#mY;0Na<~(8Bx$ny0}UAtXh>yg-H2gh>NE89XB18L z9zJCFWoR-w?yx~)n4^_%I>{R_$etLpa*+xwe=>RL>VsVILDpJ zJ?8EnzBUVU4NV@(GwlOfe)$g?rIB)@_NluD`a{<+j>cpWBvL92Z|!9OS-e z({2TNIEnC>K*5-Luz=Ay@Bv6oWA8C)DhnA}smE=D6aQ!U!;Ya|Yrmjjrbnv)wk^=Z zO;X2fSol{&;?8h7Umh-__PZ1+{3*_ zbgn+2m89@4ekhk!V)!Kx+!IW9XJ@y?hZ@Q~_l&yxl>)8CSA#7Q;qhq{Ci%avr0{Q3 za8LZ9jkw3YiSWvY8Kdr=+s&y%=KCB^n;lDOv*UkbED?VEr!7YLJ!=!;NB7&&+pOLQ zKeq1KoD|+Orjo+P;ysTzDf~*2OPL6NCEoL}lfthwxfF@;SMoiNgB}Mx4tgB)IOr=B zbTL~FbQ|4lkFE)$X z)4o#H(?u5Kd6AjfQq$*n0JO|2gJp?l8f^|Z&*fnmm9*GBmCF|#I7gW!4Ho<5l(*2n z@B*46>Kt|?3W+BNmqgwtHmA1Fd5j(1+#bhU;giYjVzO&49q1PE8r}FDz4*3Br79`; z6_i_AcgZ0XiLdM=6xCB|X#>kSy?7O|-oSZHLpe@vWedd>HBh2ne6vMgP3a=jqNJu} z5E^X>yd%khIuaEzMGGm|+NW)3S|vHGjv|N6alG`7E8%kIkUVl&8?BUYh$VfkQQZe^ z95%)(vMt_HRz}g`*pfcy@lPyO&a>r=BI4Lvj^_*yw5^1*;N*OAShR~A)*TclIzSGq z_LIXJcV1t#|71VE`!zgS6qHU5drs2_&fzq9O9(x`{1`pELXl08d1_jy{Ed?Sj^p5+ zL=H|NR*DSRLZ(y)hHlDQ(WlMAL+J`2Xr<6d zd`gD$HU8NOknIUHYj29$J|eSJW@j$#^cIQcDGm%= z+p+V7l=^k_<-Lre?J5TSS39lWZUw?FzCVd*fmg16tUVI=}+>Dpd5MQ;dtgczy zfVVI`hiPAMl1LkEA_r$br9(j5H+XXU5GAe0G`9jblQ8=k4(t|bW4d^2hC&i3(yL&1KRrge$6a`zyQc=wRWG`c?wP%$d)SFQqKmnW z?ChqFVSt9ofF=X#ii4q+paFlwK?+a3pqO_7alLmWZS#*+G#>Q=I*tJ!3GIj3&o8fM zbM%>$(AJ56Bi-$P3=_j&yTle}F3KrRjeUrk620E$0zz`iaWmA~{X7MXPzLwhQr1;iF zhkGp>fb%}w0b<#Y^Se7l2hcsWi-AEq8Qdp+tiiVOn<1yO#kD>r?&tsR=Jp7{e)8TC zZ=lO|2y!a)D!nXH&-0S>S-MO6Cvk+X^^7vLUV8)WlAuz45z zeQ)|f-hO^ZBx||uT~`qi_gE%{n}!Zr)lMe?b*p$WclJTc4gi=N6qs_K<7dlNO@DuJ z1cj$psn_wg@Ws0OHVfc;71)3%v~|*)lkASH@9%#Xo+8~NqRsDJ=!b84DL?ZuKUmpM z$nWN!?6;HHx@Vh7;V``n8X5|4Fw17m1i1KYJ-0(t4sGUk!eq~OJthJTUpD9HS@6U6 zzq_1tzkQE=`WG&Nr2F+hc^jPvnU;4f4OFyK_-6+74`G)7wuP5~C{sYEd7q`5=O1OQ zM%(}R{2=cKbC3G#=ZF;Ff4cC}*1MF4k_azlu6vpiaBWT|=fET`a|teBvn+!ueBD^K z-yE1rf1MFT_y5b6H4na5dmVpX7N+=Im}8jWXGCZIt>S|d@*C84)lFTh=Ck$+3xaZJ zF}6|uy?=OI^!?E`6XCT<;h%5!qsa?gY4UP6TCndVn{O;#Pb5%9eJex6`ecW#-0st@ zK3oqi1=z=?ZsM#&obY?k&txq|+0`%1V$hRUx~mt&fCW5&dwOdan`Q`nvTXDHFAj51 z1`S5t9~?uJ{e;hk6+jzl0if9zyXk%t;Z2r;Vaz9D*aOYB-UE3g~AQpZl{9ebqLI=o#o!d$?YfBYp@Fte3TGgXd?0#`eZL3NJ@yepdw%Y&-m<5sv9`Xkq8H@tlb4b151%M? zSZa*E z!ed-3A2>9K%`dbJ=2vJXe5|%T+Hn1oO29SHu^A>h#4~1j+?gj+)Z;v zJ$t)S{-^1D+jB+%Qh3jh-w0nReuah~s(iRo0|gXlpth}E1dLpdwnAH<6#n#L$44a1K+T}bMMenx zyzaN#de8NYay%B8{Ac&7pwaOLPK37w+MH?$pR2p^c@~)B{*tU&Q_aycgA|&oyXy@u zOU$WM+s$w}###>Z4NIXt2K(GUuVV>Fue5m{Xe?_hV866UHQBr^*3kyza6XP`*WcUG z2b&0QEdZ+fy>ssah6oTCBWv4*rd2C}63p$x+jw#VAWRvdM<2Ev;>*f=Z(@ zMwTFjxrY`*sW=G3aiovNx&#f8k-I3zczmEY!kY&AX^TrOZ>-p_fEE^DM_|IY@&fI~ zen1aqUpChQoC;YyXpCpA+hImb)kL9fFtz++0w;y*xzkap10;>st3xgkjbqGRDm0ok z++03E45waP8O}kR6pjP1k2xTdzff_pd;VHMrxa8xkcG*XZs1A-jmZ(+J)6wKA!mm6 zx7Cq-+Hph;pa3YKCSEWw1O#!qTh}W4B2bfpZNL}p(FVtOX;qYR44g}x6ETAId4kib zlwlfT2eHI>d(fZV{qo;O>E`#3 zP*{3RpLT%%)3*Zz37}N#Vw^4O_k)y|a51zY*R#DSRycS-uf|Y^3CjgB}Mx z4tgB)IOuWE5^qeUam3@dK7?e@94Sc+vLYVj{?w`#II^>Q{JuF-&^QA zJI6tHT_&J=Ut`=?v^i0>_HDsSKx>=&fh^tz+tfM^nn8;Pc)}-*lH!VaT`#^kkL{|8 z7T%7H$fr|*+5NsO+?Jqy_{sBq%5jch-*jpdIZFpp^Jr;sJlXq3u&fMA5?K#z7tI}R z)#gjd7nX|*_T)P8%0%(&0&d%4$a!5jMTX>(zR@UNV%|0mT7sTu??qqQ9p-f(_hhoO z+d(Iert|hRy92a#!Es(M7HKbdfKjIk#A|^&)UuqcYJSM6B1ejkH`SZw+k2Y<_t4q+ z5^nS9oBQeKKbT5Q;!Sq{xl()&`u(}|JEz0+;ARhA*UfR{l#;B9Mp_b@NMD|aBhTbK z1{_mRNrzJMdA+W=i}uH7QgmUJniRh4NHV=Y?*JV;oJM|bXUR@vb8Oyyn%c*Gbgh~~ z3a9{Dsu!>IT^mLVr~8oW<|r!2tD~uQ`{`^_8AXNWahs(MehSFXj)*zrHg1PD*tWCV zMH#7;v~gK5trMLC$6miUh~9kBiT?M#RdnYM9O&T*;tl8G+RTOifnvP@@ zk?zwaq_bPZFt1zcM0aj*qv!VcaR->>;!TdxBGK$0pOIf?3BBzlvMOKtgj^D`Ih(Pv zqK#(1;X%i8^|USXJQZ}blaJ^iGrsU5LzQtHv;;NZFaT zf^_pYu_jMgx}9Oh6;;zCo81}mDhjhe)Z&8}YM%-V_!O>NreLr#ZC z_uA+5Z@)-d8j{3X4%nzmFK<+~KVC=y*?M)K(&83&Cw@g`v?Vr!_9o}h>@$hnu`-kN z}vUzWK*^s3iM_RUod9TuREXP441SMR1DE#6MAy9d$BZUJn% z>zX?mB02{&+d40Jt$Pf)hG$T6rII8*Yt0Fo_|h87T;Z__dN4`hmy57A3se8Y`CBNl zxK=GkPVo8aW=a&lzk+}af!Nx4L9|5VDV<0uroam&Mh!~Exq zUkX&;Z*6Xe2tK>oFb;aKN#U2PV3<`YT#CNNIJl(nu?+ef%U5nuH0@F!*D$~_8^=L^ z3!pE9MEEfa`rF7A{x