nfTlWNl rn Ѻq$³*%yNk9S}WŁ ܓ\`Lٔ*ܝIc.곷PūUmpwYhP8aT#H9S]~yA'Z<ڈ&o1U*O?XUme \;5IGy(>t~_YK/'EτC!N Nk]e_; 43#6[yӸM٥{m6ZT%^4m˥ݩ: )(\:{DT\ r}c_"C1\>~pwj@o8(2ρ0-u$֩B(A^HiWX{9Bw,}F?^nH5pn_ EƨMdb1{tnfgUi=W&HkujkdOF)Fy0WW^r>tSm`MzkjVh _37 2DSS3XE햳ZJPX1y`?|ӗ?7Lb3[s/udk}*W}OYQ`~;J*D#ATwHd h$)u7yZλW0հ'^; ps 5-X pX7<}b31].*Y5j~V?۫Ju}]׺Wi7'Rؙ">ߴ4 ʖINBl>y ϡ Ȍ)yW= eȞ)-k+S9Bʡ:{o0*Y[uXR%n dfxpD.AfոYuu|l ww30x.D髶Du1>?WYQa63Fi?ī7gRe O0\~mZNe$m,)1!g{n jm{kP xVz$wM WScPMǦFA:tOdo|ZkZ$IpS+dz96qЄ+< #5o]|0v'4KīlSwnψ07lKT>ʁ]P1eTW' D9,93ZxO!\MXH1 N#G)y:xoCEu ';Znn TM{WߍHy{ѐ$ajNj=wF}{ USrYKVRꖐi=m2#y> aHM 1vIÒЄ;|e0 + 5,y *jZgiza#llG P]j5 d6DvFDj1p.+S5y)1lG͛WAvN#G)y:xTH(J聢Gsd Qirk <| "Gj^pѷM,L'IF%:f/8VP@Ax<\vGݴPq6 !9Zǖ3ѯV=Ibջ荔CŇu*19­2>20 W{EB)z}Fì'7yxIMO`}BeBvoDAZߖHF&/tN#d V1z=FY2NrA}M`JNFK%R7X íVgA-K{n<2UJ3Iz2E;Dž8C!Nt*O)X24ٗ?aiMGo_ޮ GilRiϮ[!vx ԠU1Ce:<NPB:ѓr!N>ME52m6x6hNZ+WQܓ~٭N aUs{?Bʡ:{o0*Y[߲:)Hʾ@'/f,!T vw'{=t${T@C'_UYyRm9]]co,&~CE_6m9qȑŪ^dKL̩bh)y>]Fivn(TldR ݋7Ȥ;e/̤d"0욵Ҷ0ժnk`#y 6k`8z=U?*4HO%:f/8VP@V)mJteWx7' ݋7Ȥ;e/̤r1`~K׳0ժnk`#z7ITj;DSl=yQw`=w]0Ux.=,!EZn+LyA)y>]FivX31]Mm(X`^2 R>]0eWG ĢQ$3{V쾂u: S:̿V[*V1z=FYVvmk,w*;- [ @`(U(ޔWӠv%ax TF>tjɺ Lq\@{Py5aٳeΏVC{p*ʒ6M3 <qVnԦ)S2:tk% %Lָ0hi3Yqw3OkE[f+z &.Io,Ňрg22 ݋7Ȥ;e/̤,`hticpJƨRm9]]coףtn}'VGD}l(9! <| >KotPQSISY>:0 5ߍ‚}t6H;%srWW[~Μ)FO_JF3!PP8p1 pپ+s/vC {xy2^i\[p݊fF<.!>ɲ,3r@elowNull($operand1, $operand2) == 0; } return $result; } /** * @param mixed $operand1 * @param mixed $operand2 */ private static function greaterThanOrEqual($operand1, $operand2, bool $useLowercaseFirstComparison): bool { if (is_numeric($operand1) && is_numeric($operand2)) { $result = ((abs($operand1 - $operand2) < self::DELTA) || ($operand1 > $operand2)); } elseif (($operand1 === null && is_numeric($operand2)) || ($operand2 === null && is_numeric($operand1))) { $result = $operand1 >= $operand2; } elseif ($useLowercaseFirstComparison) { $result = self::strcmpLowercaseFirst($operand1, $operand2) >= 0; } else { $result = self::strcmpAllowNull($operand1, $operand2) >= 0; } return $result; } /** * @param mixed $operand1 * @param mixed $operand2 */ private static function lessThanOrEqual($operand1, $operand2, bool $useLowercaseFirstComparison): bool { if (is_numeric($operand1) && is_numeric($operand2)) { $result = ((abs($operand1 - $operand2) < self::DELTA) || ($operand1 < $operand2)); } elseif (($operand1 === null && is_numeric($operand2)) || ($operand2 === null && is_numeric($operand1))) { $result = $operand1 <= $operand2; } elseif ($useLowercaseFirstComparison) { $result = self::strcmpLowercaseFirst($operand1, $operand2) <= 0; } else { $result = self::strcmpAllowNull($operand1, $operand2) <= 0; } return $result; } /** * @param mixed $operand1 * @param mixed $operand2 */ private static function greaterThan($operand1, $operand2, bool $useLowercaseFirstComparison): bool { return self::lessThanOrEqual($operand1, $operand2, $useLowercaseFirstComparison) !== true; } /** * @param mixed $operand1 * @param mixed $operand2 */ private static function lessThan($operand1, $operand2, bool $useLowercaseFirstComparison): bool { return self::greaterThanOrEqual($operand1, $operand2, $useLowercaseFirstComparison) !== true; } /** * @param mixed $operand1 * @param mixed $operand2 */ private static function notEqual($operand1, $operand2): bool { return self::equal($operand1, $operand2) !== true; } }