Page MenuHomePhabricator

D19407.id.diff
No OneTemporary

D19407.id.diff

diff --git a/src/parser/ArcanistBundle.php b/src/parser/ArcanistBundle.php
--- a/src/parser/ArcanistBundle.php
+++ b/src/parser/ArcanistBundle.php
@@ -781,21 +781,46 @@
private function emitBinaryDiffBody($data) {
$eol = $this->getEOL('git');
+ return self::newBase85Data($data, $eol);
+ }
+
+ public static function newBase85Data($data, $eol, $mode = null) {
+ // The "32bit" and "64bit" modes are used by unit tests to verify that all
+ // of the encoding pathways here work identically. In these modes, we skip
+ // compression because `gzcompress()` may not be stable and we just want
+ // to test that the output matches some expected result.
+
+ if ($mode === null) {
+ if (!function_exists('gzcompress')) {
+ throw new Exception(
+ pht(
+ 'This patch has binary data. The PHP zlib extension is required '.
+ 'to apply patches with binary data to git. Install the PHP zlib '.
+ 'extension to continue.'));
+ }
- if (!function_exists('gzcompress')) {
- throw new Exception(
- pht(
- 'This patch has binary data. The PHP zlib extension is required to '.
- 'apply patches with binary data to git. Install the PHP zlib '.
- 'extension to continue.'));
+ $input = gzcompress($data);
+ } else {
+ switch ($mode) {
+ case '32bit':
+ $input = $data;
+ break;
+ case '64bit':
+ $input = $data;
+ break;
+ default:
+ throw new Exception(
+ pht(
+ 'Unsupported base85 encoding mode "%s".',
+ $mode));
+ }
}
// See emit_binary_diff_body() in diff.c for git's implementation.
$buf = '';
- $deflated = gzcompress($data);
- $lines = str_split($deflated, 52);
+ $lines = str_split($input, 52);
foreach ($lines as $line) {
$len = strlen($line);
// The first character encodes the line length.
@@ -811,7 +836,7 @@
return $buf;
}
- public static function encodeBase85($data) {
+ private static function encodeBase85($data) {
// This is implemented awkwardly in order to closely mirror git's
// implementation in base85.c
diff --git a/src/parser/__tests__/ArcanistBundleTestCase.php b/src/parser/__tests__/ArcanistBundleTestCase.php
--- a/src/parser/__tests__/ArcanistBundleTestCase.php
+++ b/src/parser/__tests__/ArcanistBundleTestCase.php
@@ -663,11 +663,7 @@
}
$expect = Filesystem::readFile(dirname(__FILE__).'/base85/expect1.txt');
- $expect = trim($expect);
-
- $this->assertEqual(
- $expect,
- ArcanistBundle::encodeBase85($data));
+ $this->assertBase85($expect, $data, pht('Byte Sequences'));
// This is just a large block of random binary data, it has no special
// significance.
@@ -948,11 +944,27 @@
"\xe8\x1d\xa4\x18\xf3\x73\x82\xb4\x50\x59\xc2\x34\x36\x05\xeb";
$expect = Filesystem::readFile(dirname(__FILE__).'/base85/expect2.txt');
- $expect = trim($expect);
- $this->assertEqual(
- $expect,
- ArcanistBundle::encodeBase85($data));
+ $this->assertBase85($expect, $data, pht('Random Data'));
+ }
+
+ private function assertBase85($expect, $data, $label) {
+ $modes = array(
+ '32bit',
+ );
+
+ // If this is a 64-bit machine, we can also test 64-bit mode.
+ $has_64bit = (PHP_INT_SIZE >= 8);
+ if ($has_64bit) {
+ $modes[] = '64bit';
+ }
+
+ foreach ($modes as $mode) {
+ $this->assertEqual(
+ $expect,
+ ArcanistBundle::newBase85Data($data, "\n", $mode),
+ pht('base85/%s: %s', $mode, $label));
+ }
}
}
diff --git a/src/parser/__tests__/base85/expect1.txt b/src/parser/__tests__/base85/expect1.txt
--- a/src/parser/__tests__/base85/expect1.txt
+++ b/src/parser/__tests__/base85/expect1.txt
@@ -1 +1,10 @@
-009C61O)~M2nh-c3=Iws5D^j+6crX17#SKH9337XAR!_nBqb&%C@Cr{EG;fCFflSSG&MFiI5|2yJUu=?KtV!7L`6nNNJ&adOifNtP*GA-R8>}2SXo+ITwPvYU}0ioWMyV&XlZI|Y;A6DaB*^Tbai%jczJqze0_d@fPsR8goTEOh>41ejE#<ukdcy;l$Dm3n3<ZJoSmMZprN9pq@|{(sHv)}tgWuEu(7hUw6(UkxVgH!yuH4^z`?@9#Kp$P$jQpf%+1cv(9zP<)YaD4*xB0K+}+;a;Njxq<mKk)=;`X~?CtLF@bU8V^!4`l`1$(#{Qds_|Ni~_`}+C#_xAPl^YZcV@9ypF>+0#~=jP?)<Kp4q-`?Ha+uGUK*Vfh4)6&t<&(6)v%gV{f$Hv9P!@|M9zrMY^ySll!x3;ykv$C<Uudc1EtE#D}r>3Q(qoSdppPrqZo0^%JmzI^3lai5;kB*Iui;9VehlYiOgMxv8e|~*@dwO|zcXoAjb8>NTZ*FaDYiem|XJ%z&V`5=oUtV2YTUuFIS5{S2Q&Le-PfkrtOG-&dM@B_NLqb77KR!J?J32WyH#RjiGcqwSFD@-CD=H}{CnhB%BO)OnA08bX8yXoH7Zw#16A}>+4-O3s3knGc2L=TM0|Eg6
+z009C61O)~M2nh-c3=Iws5D^j+6crX17#SKH9337XAR!_nBqb&%C@Cr{EG;fCFflSS
+zG&MFiI5|2yJUu=?KtV!7L`6nNNJ&adOifNtP*GA-R8>}2SXo+ITwPvYU}0ioWMyV&
+zXlZI|Y;A6DaB*^Tbai%jczJqze0_d@fPsR8goTEOh>41ejE#<ukdcy;l$Dm3n3<ZJ
+zoSmMZprN9pq@|{(sHv)}tgWuEu(7hUw6(UkxVgH!yuH4^z`?@9#Kp$P$jQpf%+1cv
+z(9zP<)YaD4*xB0K+}+;a;Njxq<mKk)=;`X~?CtLF@bU8V^!4`l`1$(#{Qds_|Ni~_
+z`}+C#_xAPl^YZcV@9ypF>+0#~=jP?)<Kp4q-`?Ha+uGUK*Vfh4)6&t<&(6)v%gV{f
+z$Hv9P!@|M9zrMY^ySll!x3;ykv$C<Uudc1EtE#D}r>3Q(qoSdppPrqZo0^%JmzI^3
+zlai5;kB*Iui;9VehlYiOgMxv8e|~*@dwO|zcXoAjb8>NTZ*FaDYiem|XJ%z&V`5=o
+zUtV2YTUuFIS5{S2Q&Le-PfkrtOG-&dM@B_NLqb77KR!J?J32WyH#RjiGcqwSFD@-C
+rD=H}{CnhB%BO)OnA08bX8yXoH7Zw#16A}>+4-O3s3knGc2L=TM0|Eg6
diff --git a/src/parser/__tests__/base85/expect2.txt b/src/parser/__tests__/base85/expect2.txt
--- a/src/parser/__tests__/base85/expect2.txt
+++ b/src/parser/__tests__/base85/expect2.txt
@@ -1 +1,79 @@
-R!p;F<w~CeqfFghg@zC?Kfx$b*s>bKc@>2*X8DfcAdeEEln%ePoVCCeLp`nS06Z4@b}#LjI(R<Ok@&F6xhekC4;FA4t=U2qw2#)0fMV%Lcb_<IKh_RFXlRqJb!~rjoPcSRB8RrXVr#2OxRL3WzXZZiFs|ysaE_7Cw(M3Ec-4xGQqer#Wg+a7tIvM*{cSC2xh|tZdrhVLC~b73dpgB5d}FEkjx-cPu<;J!(9#5f|6<kIMmsi$ij!3WEdQTK)_TjoYBQ>92uzlkiBndzvzrF7pc85OYN!or+OltA3#j&4DMoz+MC*`m*T=TX#p~V>o4xX8j?fF*jO&ndb2H~}CRa}UmEinhlcy-=3`TR^0nS64P8M`qHj-LqOyi!AEt(oVX*p*E*7#pV?z_}u&y1TfX_y+AS4*i$_8WF6*W-_4m0JelsAgdKNlrjhGMjWZz*h7#?1R!QX<$_mJ5SaM_5?U}w!(r<`h!-wHA2J7+$i*ENU7jaL3w8WVbSuRd)~x8kB_#T3Uv5!12;D?jVfx%QK8~A<wDy}VNMqOBXSZ(QxbwcL}Md@s;hpDaAxt8h62StoOu@>pA(5aB}K_Q9-tZnARK{f{I$vA+OdZ;pt5o{Xc7fed}wPPDpo3ff6$y0sj^Jwie=Ylt@HCMoahh-isB$=<WWb#B9R3mIU4U&(u#;xKZCk+)Ro7$qWw)yUH{#$8p3|H`i5VVI9<w`T7I`j)m&@yG6NAr=}8hmf@ggyT48~`B&yeZ$<ME_KCna0&LQL*TGl}I4kPby^v2THHrF89jX6f@{CHKO0@imS$d?}9Mc$LAbl6!CB#P+G=>WA(=1H*L6dGOKI7hI@9_)N}$ss&Cg->yp?Mjp^QAnIakZ|b^gjLd{Nc#O$5)rvF{2gZJLgQX#^gZetQ{#I}?%Q<EFw+Ff+N9mBm^yaox*G#i?M7Yi)HK44@2*ib4^2R-I@?ehzF&*DBtRLDifcqqo8a`EOT;5L@U!7qoetTl_dbS0n_G}Pz#yQ-hEK-Jwae6q#&TDuS1dFpkwg`!^oYuIR-O`U-%{_uv|JYGs`s|@eA>-I`5ZuqL}*VNT6>SfM@ZB2<@IJYNWNs>{x$K#<f#0H`)MG_^cI%EdQlX2q;3=FSv4f_<^JiI4bkY%oPYQ`c{w^Aqj&F5OIdRRv;MAdDmw6aoqn6Du^9P7Y4cS^tvI6b%g#5ch#)xX87Y;Fbq1Xsp7OV3m?1WhlK8lZ9$Z}sJ5t4Jhki!NjNj+Vse2J)51vArKH!Uho{@HlnxW#BuKO4{+>)6z{g@!AiD4`z;JAaQ=TJhA{5EE5CB<#DG2u-QF8D;^wrXwugPtr0FBL)a=cX7dgnsKo%)8sER9w7SYTPC&^jW8Mq^#|8j}}7>mk=y)@1C;B-{z;A2zjITne|!Z)rk=0$@k|eat6j!!_CnDY53n6@@5=qK)jdnNnUtjQbvEzL{N)g=cwz|gd~B$EM@nVz4DGj`)Wx%YUL_9@cM~aUpaNOZv^q+EX{W`>}y39;}|3bxoE*oaZCS*80rmHNmbwFuvy!5o(nhwpAc`^GzUZ}2(i?6#)J*Kwbcm)83AG`MN%EcPbGMMysihc)ZiJB1J;c%0LijuJ5D`y_amA<q}6|QN6@^($ST~032Y3IIN0yc^m-e|cHrBAs2eMd)HaZI-inaOTLl2?vmnlHT)8zpl{$G!VCy3h`;aa6w*^W=L3vTC=8y_;hk(AYi4W6+8P06^yBifv4>M)=o;ul#0z=Q=vS7hX>7_ic`avzZA4M|DIWLs1L~Uuo$ybc!^rSkraAEnoLEL!o_rIu)<9AWcB`@D6YX>l&&f8g7s<JNJkdlH`{v|d^e{C%}QSUv-qlXLU@~n`c9oWa}lT$k(gf3ES`%f|2(dtD$-0M<-j4SjiyaB}LXf~YHEx}>SnqL?IYRH;S{V`k4kWNMaf9kR(t-(4WspxzZu7MuDqix!f8|(6Ec0Tbd_Zmgjvw^X`fPW;q4%KKhKN=|&4#Fm4463OhOkrh72fk_a$?Pv2`dKb=z!$|#`noS<tEsfh+{-0j&kTpm@HQ*Xfm$Mkpioekj@mYWbhRD=Ki9}95$hd2be|>~q&@i#@GV@aL%&gMjplgZXIJpZ4wsx)BQUIE-$t0EuTH1stTDaoYM`*>lzvh6iGe<=Ph_{nQE|<50;vL-T&oTgM>_<;n^_u@l1y<RUvAU$r$-w(K67c}?8{QKTzZuyKNgr^sG?oOT4&@D1_t?hv=rdHdlMZG^2!U;s&O?w)-Enxdlkte8mS~PNYu|t^fDKl9ZUX6Y1Y7xx!ZD5Ea>yZ{6_V-8wCc>%p)|vC2HzC$7IyivuEujC(~!ay`Ou183bI>mVTwjyRw96m^cxT`(hRS=C>qwvUtaHk;z~kk!=JkLFvi*<d{^0nr?QCA^DLwAKd;E2{6}FV`94FEO6EQcr`Y8UA7K2Jw}K7^<*DD{VyE5?UgOoW89}|Igh=|d6nr!zvMmzRRG&FC^~H7HM^{EQY)-Z5ky!PA+)XyYPsBnU62tbh1<jMIB$yo67b2M@cgcn5lzmPDG6-!Ds0*wOiH4bTJOd<TwtOo6IgSW-dQSFWNZ|aiY|^JKcYk4_AMiHT)lb_+ZU*l&~%2KGY3fStQc)%VS8aKq@t^tS-u(989^Rlhpj+cX^b-Uwn@Gpt=JDf*<!3ZcHT0hvO$%t7bB~oH=L_;d2rTd4Q@?~pseFW9t!U8bY$2>(QKyGHZIv!ZjfWQ_m0LWqd)*)nmqph127R7k}q2$;ZB+4g2_?h6>4@|XRf27oP|-~M2Taiahbd=oU5AqAU9anEsK3Z6E#Fk5tn8s7pz3+Y6Ezph{iT?T3T9iqv>)Ckum(Pd!Th83c*X2%j3fC0}r^eQOC%fjcq#TPAsbHUP+VSkD*kP=X_l;#{~c=6jw*H1uYknC`ImtI$5@+1i)MeALd&&Q(}T-)wc5WXBiRh(s0ETW5IRdB;^5FQhbOPwBQx#5(UkOde!Ph!@FhF-3{J0l$Z@H`#djc&?w@C*(dXQtx#x|R9@@6Ds<lSPKzfB&rD!I=*4oYjQ#1W|54@E>Yg-n;pX^Tu@Lb2Eh7&8<@AlVZ8sF{RF{%mXh4YZLn-fGmUp7)Jg$GSnHQ%FZ{kBTn-oLx6>Ad^XjTiV1}?z(-kwyQy8m`2ZC;*;IxCwXL%A9bSY_<no|m}$18lH=qVe=6Bq2vpAwWeaardEXz7EJgo7!TXbN63xY`Pxn7F;ew3L*k*zPV|W{iQP|WF&0DJumaom)>AQ91R<kvq(jJ)zEQGt-quSA}0hmgc)XI@bmnz^BwBCx#Z=5?c?!yB*P^qae>0@RPD@T_c_gj-!h26JJe#h>NMETygG?EWMD+zwsu*um1-sk@bqydi}-=v4KIx1aKe_t*qh`(?2G-q$u={$yjeFH2{2yoXRc>Ratrh-g8$3c*_~~CrXWI4D+(_~nOk;knK`MpG6oU&8PPw$)*om3)vkJRjJ!RxUtEEFp*e607bLeLhEUia$ZT1f-0*P$+SpT=9CJ4D35Ln1CMCcFJ`+wU>+p@^I0IDfH~Ud8wDuAovW#YR05DtcS@~nBbO({-oVUq|*{M;J%dw|q2zigRZ3)-KzY5z>;2eX>_|K<-y9?&e8x9KK&1mA@#4Wm2$HyLQUdo#wb(WNpgzWVqC3t7ez5)JIrOawTGlQghM3W2oOtO`>eoLgthW?82cR*GX!7(h1N~nop3^_A+jMY#(iNn)?9H+K6!T^m5f6UV$bYO5cecIf_Nd)lbY|*~U`|+aI)Z~{xH3?hV25W7GQzHx}Q7RRx;&c1QK~&sbnF|UY)Z1{Qj{RHks6LzjSD3unDpu1O`3u=+4-lLq<!chgwoB0r=|wi*RBz1wwamHx-pIAd1X*Eq9&$HS{l>$7bgoq~YP^crMUmo-AeV9HRo05Qf+{CZ+*64t_d5Ou?_jbre7qCHJ=)j%xM6*1t`3@U)&M4#|J&xiMS8UWG5v7N*EERa1!47a9Tf0>klPN&+SK!z)L_}C$XhcswIg&aUu#yCoEs{v`Tj=3@tY)mOUfl!K@el;=V;o@woO})$*D2xTq@6<iPce)fH3sQER48}V%9Ugm7n?<@<=ENbIDU-lsaN)Y{u3Kw5}(X`zhB(XAyenI+{Q9nsx0YXGMA3iy89oSE|Q^|D7$vsD)Iwo#ECi=`o#bxK4IZfJ8=*UVb2|po%tY@6mPmKOo%+bHAncw1=`pzz-0>l`e`x`ol>VxwRU@fRhZ^<ISWvVR|BSjxvu`oRJ9GWvK!v##zWwG9XCmEUpfwHCy6i`SP7#<3-#-y8A%PjoxfMP?w#9pxQxUy07?j(jj{Z%!A<w0R%$M%j_L%w{H(i)KidEJI|k!xUJ4#6N9sfZ(19q^_5GsA|f3%s`|$ijLlGH6i5GOviK4Svx?<?xXI*+_oTIO`Yr2~iR`;cS<=C64hH02)e{p9a&GW#snzFHXf@5y)u!dL<gpp#@#BhCOglZe1O6f}#@vW|%3Q|X7c>YW@E2hYV4SokS1@k4Pu(SZ@1Bl`YuFGY!bDSZWRE~1;pn2UKZ*xt&16rU9*K4YZL7k&7KMNTrLp1?1THy;jPAVq2W<mPI;DG++1J+YE9uMT?5KolLiw^K$n$EdG&|XH*>Hh7)Lv$n8|EvBae||Yn6MVvyO)bsc|lfg!jIqjTgPZyxCucqd>P@DE(J`iIDy);i#{BAnlY?CJ#DM=T3*L)jycVHZ({DbbKQbMZwchXu9D~&nV?>x67=HW=9O4FMXmlLd0&Fgm56ieM#uoH!z$c<tDE?{MqH>yy#1N3Os9A2d|1D`QfOj53wdNXWv9z~>9RAmSyFo!v;r#!4LT85lBFUmyylk$5(Vdx<NB@@z98jXaU_6+$!5V*T#pFUQsEG`)*uK0c{86Iy`ZanvDw_pL?TJIw>^ZclJxot$;GllE1F}wih=|$_vtVNXEM=28fk91_+M?e<xYhm`WA{r{r1_SUuY}y;yj9J(!n_GgYOMfhLbWQ#uN;&wr+Q%AP=!_;?Bx%lN>sa(9&9NFxHM=OQr9rV(TcNUO&OS3TUg>`l7dw60n)PlOVX2jmpQT*)AEZ2DwgFj&$!T1lV;1I4Z}Wq>1ySiqtGDSZ@FWBe<^uNPSR7Z(0aJ<5q3U;!o<1t8~rz@6Y)j@%XuHsyjE)Awp;D)<jh^=pCdO^K*i<P+7t>HU;Yd
+zR!p;F<w~CeqfFghg@zC?Kfx$b*s>bKc@>2*X8DfcAdeEEln%ePoVCCeLp`nS06Z4@
+zb}#LjI(R<Ok@&F6xhekC4;FA4t=U2qw2#)0fMV%Lcb_<IKh_RFXlRqJb!~rjoPcSR
+zB8RrXVr#2OxRL3WzXZZiFs|ysaE_7Cw(M3Ec-4xGQqer#Wg+a7tIvM*{cSC2xh|tZ
+zdrhVLC~b73dpgB5d}FEkjx-cPu<;J!(9#5f|6<kIMmsi$ij!3WEdQTK)_TjoYBQ>9
+z2uzlkiBndzvzrF7pc85OYN!or+OltA3#j&4DMoz+MC*`m*T=TX#p~V>o4xX8j?fF*
+zjO&ndb2H~}CRa}UmEinhlcy-=3`TR^0nS64P8M`qHj-LqOyi!AEt(oVX*p*E*7#pV
+z?z_}u&y1TfX_y+AS4*i$_8WF6*W-_4m0JelsAgdKNlrjhGMjWZz*h7#?1R!QX<$_m
+zJ5SaM_5?U}w!(r<`h!-wHA2J7+$i*ENU7jaL3w8WVbSuRd)~x8kB_#T3Uv5!12;D?
+zjVfx%QK8~A<wDy}VNMqOBXSZ(QxbwcL}Md@s;hpDaAxt8h62StoOu@>pA(5aB}K_Q
+z9-tZnARK{f{I$vA+OdZ;pt5o{Xc7fed}wPPDpo3ff6$y0sj^Jwie=Ylt@HCMoahh-
+zisB$=<WWb#B9R3mIU4U&(u#;xKZCk+)Ro7$qWw)yUH{#$8p3|H`i5VVI9<w`T7I`j
+z)m&@yG6NAr=}8hmf@ggyT48~`B&yeZ$<ME_KCna0&LQL*TGl}I4kPby^v2THHrF89
+zjX6f@{CHKO0@imS$d?}9Mc$LAbl6!CB#P+G=>WA(=1H*L6dGOKI7hI@9_)N}$ss&C
+zg->yp?Mjp^QAnIakZ|b^gjLd{Nc#O$5)rvF{2gZJLgQX#^gZetQ{#I}?%Q<EFw+Ff
+z+N9mBm^yaox*G#i?M7Yi)HK44@2*ib4^2R-I@?ehzF&*DBtRLDifcqqo8a`EOT;5L
+z@U!7qoetTl_dbS0n_G}Pz#yQ-hEK-Jwae6q#&TDuS1dFpkwg`!^oYuIR-O`U-%{_u
+zv|JYGs`s|@eA>-I`5ZuqL}*VNT6>SfM@ZB2<@IJYNWNs>{x$K#<f#0H`)MG_^cI%E
+zdQlX2q;3=FSv4f_<^JiI4bkY%oPYQ`c{w^Aqj&F5OIdRRv;MAdDmw6aoqn6Du^9P7
+zY4cS^tvI6b%g#5ch#)xX87Y;Fbq1Xsp7OV3m?1WhlK8lZ9$Z}sJ5t4Jhki!NjNj+V
+zse2J)51vArKH!Uho{@HlnxW#BuKO4{+>)6z{g@!AiD4`z;JAaQ=TJhA{5EE5CB<#D
+zG2u-QF8D;^wrXwugPtr0FBL)a=cX7dgnsKo%)8sER9w7SYTPC&^jW8Mq^#|8j}}7>
+zmk=y)@1C;B-{z;A2zjITne|!Z)rk=0$@k|eat6j!!_CnDY53n6@@5=qK)jdnNnUtj
+zQbvEzL{N)g=cwz|gd~B$EM@nVz4DGj`)Wx%YUL_9@cM~aUpaNOZv^q+EX{W`>}y39
+z;}|3bxoE*oaZCS*80rmHNmbwFuvy!5o(nhwpAc`^GzUZ}2(i?6#)J*Kwbcm)83AG`
+zMN%EcPbGMMysihc)ZiJB1J;c%0LijuJ5D`y_amA<q}6|QN6@^($ST~032Y3IIN0yc
+z^m-e|cHrBAs2eMd)HaZI-inaOTLl2?vmnlHT)8zpl{$G!VCy3h`;aa6w*^W=L3vTC
+z=8y_;hk(AYi4W6+8P06^yBifv4>M)=o;ul#0z=Q=vS7hX>7_ic`avzZA4M|DIWLs1
+zL~Uuo$ybc!^rSkraAEnoLEL!o_rIu)<9AWcB`@D6YX>l&&f8g7s<JNJkdlH`{v|d^
+ze{C%}QSUv-qlXLU@~n`c9oWa}lT$k(gf3ES`%f|2(dtD$-0M<-j4SjiyaB}LXf~YH
+zEx}>SnqL?IYRH;S{V`k4kWNMaf9kR(t-(4WspxzZu7MuDqix!f8|(6Ec0Tbd_Zmgj
+zvw^X`fPW;q4%KKhKN=|&4#Fm4463OhOkrh72fk_a$?Pv2`dKb=z!$|#`noS<tEsfh
+z+{-0j&kTpm@HQ*Xfm$Mkpioekj@mYWbhRD=Ki9}95$hd2be|>~q&@i#@GV@aL%&gM
+zjplgZXIJpZ4wsx)BQUIE-$t0EuTH1stTDaoYM`*>lzvh6iGe<=Ph_{nQE|<50;vL-
+zT&oTgM>_<;n^_u@l1y<RUvAU$r$-w(K67c}?8{QKTzZuyKNgr^sG?oOT4&@D1_t?h
+zv=rdHdlMZG^2!U;s&O?w)-Enxdlkte8mS~PNYu|t^fDKl9ZUX6Y1Y7xx!ZD5Ea>yZ
+z{6_V-8wCc>%p)|vC2HzC$7IyivuEujC(~!ay`Ou183bI>mVTwjyRw96m^cxT`(hRS
+z=C>qwvUtaHk;z~kk!=JkLFvi*<d{^0nr?QCA^DLwAKd;E2{6}FV`94FEO6EQcr`Y8
+zUA7K2Jw}K7^<*DD{VyE5?UgOoW89}|Igh=|d6nr!zvMmzRRG&FC^~H7HM^{EQY)-Z
+z5ky!PA+)XyYPsBnU62tbh1<jMIB$yo67b2M@cgcn5lzmPDG6-!Ds0*wOiH4bTJOd<
+zTwtOo6IgSW-dQSFWNZ|aiY|^JKcYk4_AMiHT)lb_+ZU*l&~%2KGY3fStQc)%VS8aK
+zq@t^tS-u(989^Rlhpj+cX^b-Uwn@Gpt=JDf*<!3ZcHT0hvO$%t7bB~oH=L_;d2rTd
+z4Q@?~pseFW9t!U8bY$2>(QKyGHZIv!ZjfWQ_m0LWqd)*)nmqph127R7k}q2$;ZB+4
+zg2_?h6>4@|XRf27oP|-~M2Taiahbd=oU5AqAU9anEsK3Z6E#Fk5tn8s7pz3+Y6Ezp
+zh{iT?T3T9iqv>)Ckum(Pd!Th83c*X2%j3fC0}r^eQOC%fjcq#TPAsbHUP+VSkD*kP
+z=X_l;#{~c=6jw*H1uYknC`ImtI$5@+1i)MeALd&&Q(}T-)wc5WXBiRh(s0ETW5IRd
+zB;^5FQhbOPwBQx#5(UkOde!Ph!@FhF-3{J0l$Z@H`#djc&?w@C*(dXQtx#x|R9@@6
+zDs<lSPKzfB&rD!I=*4oYjQ#1W|54@E>Yg-n;pX^Tu@Lb2Eh7&8<@AlVZ8sF{RF{%m
+zXh4YZLn-fGmUp7)Jg$GSnHQ%FZ{kBTn-oLx6>Ad^XjTiV1}?z(-kwyQy8m`2ZC;*;
+zIxCwXL%A9bSY_<no|m}$18lH=qVe=6Bq2vpAwWeaardEXz7EJgo7!TXbN63xY`Pxn
+z7F;ew3L*k*zPV|W{iQP|WF&0DJumaom)>AQ91R<kvq(jJ)zEQGt-quSA}0hmgc)XI
+z@bmnz^BwBCx#Z=5?c?!yB*P^qae>0@RPD@T_c_gj-!h26JJe#h>NMETygG?EWMD+z
+zwsu*um1-sk@bqydi}-=v4KIx1aKe_t*qh`(?2G-q$u={$yjeFH2{2yoXRc>Ratrh-
+zg8$3c*_~~CrXWI4D+(_~nOk;knK`MpG6oU&8PPw$)*om3)vkJRjJ!RxUtEEFp*e60
+z7bLeLhEUia$ZT1f-0*P$+SpT=9CJ4D35Ln1CMCcFJ`+wU>+p@^I0IDfH~Ud8wDuAo
+zvW#YR05DtcS@~nBbO({-oVUq|*{M;J%dw|q2zigRZ3)-KzY5z>;2eX>_|K<-y9?&e
+z8x9KK&1mA@#4Wm2$HyLQUdo#wb(WNpgzWVqC3t7ez5)JIrOawTGlQghM3W2oOtO`>
+zeoLgthW?82cR*GX!7(h1N~nop3^_A+jMY#(iNn)?9H+K6!T^m5f6UV$bYO5cecIf_
+zNd)lbY|*~U`|+aI)Z~{xH3?hV25W7GQzHx}Q7RRx;&c1QK~&sbnF|UY)Z1{Qj{RHk
+zs6LzjSD3unDpu1O`3u=+4-lLq<!chgwoB0r=|wi*RBz1wwamHx-pIAd1X*Eq9&$HS
+z{l>$7bgoq~YP^crMUmo-AeV9HRo05Qf+{CZ+*64t_d5Ou?_jbre7qCHJ=)j%xM6*1
+zt`3@U)&M4#|J&xiMS8UWG5v7N*EERa1!47a9Tf0>klPN&+SK!z)L_}C$XhcswIg&a
+zUu#yCoEs{v`Tj=3@tY)mOUfl!K@el;=V;o@woO})$*D2xTq@6<iPce)fH3sQER48}
+zV%9Ugm7n?<@<=ENbIDU-lsaN)Y{u3Kw5}(X`zhB(XAyenI+{Q9nsx0YXGMA3iy89o
+zSE|Q^|D7$vsD)Iwo#ECi=`o#bxK4IZfJ8=*UVb2|po%tY@6mPmKOo%+bHAncw1=`p
+zzz-0>l`e`x`ol>VxwRU@fRhZ^<ISWvVR|BSjxvu`oRJ9GWvK!v##zWwG9XCmEUpfw
+zHCy6i`SP7#<3-#-y8A%PjoxfMP?w#9pxQxUy07?j(jj{Z%!A<w0R%$M%j_L%w{H(i
+z)KidEJI|k!xUJ4#6N9sfZ(19q^_5GsA|f3%s`|$ijLlGH6i5GOviK4Svx?<?xXI*+
+z_oTIO`Yr2~iR`;cS<=C64hH02)e{p9a&GW#snzFHXf@5y)u!dL<gpp#@#BhCOglZe
+z1O6f}#@vW|%3Q|X7c>YW@E2hYV4SokS1@k4Pu(SZ@1Bl`YuFGY!bDSZWRE~1;pn2U
+zKZ*xt&16rU9*K4YZL7k&7KMNTrLp1?1THy;jPAVq2W<mPI;DG++1J+YE9uMT?5Kol
+zLiw^K$n$EdG&|XH*>Hh7)Lv$n8|EvBae||Yn6MVvyO)bsc|lfg!jIqjTgPZyxCucq
+zd>P@DE(J`iIDy);i#{BAnlY?CJ#DM=T3*L)jycVHZ({DbbKQbMZwchXu9D~&nV?>x
+z67=HW=9O4FMXmlLd0&Fgm56ieM#uoH!z$c<tDE?{MqH>yy#1N3Os9A2d|1D`QfOj5
+z3wdNXWv9z~>9RAmSyFo!v;r#!4LT85lBFUmyylk$5(Vdx<NB@@z98jXaU_6+$!5V*
+zT#pFUQsEG`)*uK0c{86Iy`ZanvDw_pL?TJIw>^ZclJxot$;GllE1F}wih=|$_vtVN
+zXEM=28fk91_+M?e<xYhm`WA{r{r1_SUuY}y;yj9J(!n_GgYOMfhLbWQ#uN;&wr+Q%
+zAP=!_;?Bx%lN>sa(9&9NFxHM=OQr9rV(TcNUO&OS3TUg>`l7dw60n)PlOVX2jmpQT
+z*)AEZ2DwgFj&$!T1lV;1I4Z}Wq>1ySiqtGDSZ@FWBe<^uNPSR7Z(0aJ<5q3U;!o<1
+mt8~rz@6Y)j@%XuHsyjE)Awp;D)<jh^=pCdO^K*i<P+7t>HU;Yd

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 30, 12:07 AM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7711840
Default Alt Text
D19407.id.diff (15 KB)

Event Timeline