^Et6R wZ5IH WMʦ)kqN| ^lb`iD##y&1J]m2pЃ ,+=1w|%ؗvE*+)}ZNjz)5$uѡ-y7!IJ|Pp-b)G{rL.%zV~I8D pIw(pCPС)FыIIQS-@ʳ)sCA[#ȪzDW3w},،HG`:Z']Pxǭ ~l4C#7׋B#m bzT9Y- 1E; S9j\osI[Q`oIXԏ9=D_ޏ:#>aR{93ʒo'\}I\)))Ӭm3̴vˬ>4B`ֵJЩͶZF_T$9Qn(]V)xFgO#&CnAlÐK*pd;҂ ޶ %Qa)6夗(e\aUUՓ * VLB]MK/x!{’Oծ)ejSطd۶݄N.| o)afL+ߌdLީ3ީ?&yx( >@ey5GIIT2Zd\usB^_XL}vre8QuƖC|:`deH5V[O!$ݫmgSNjΛ&ˤ"?@vJ\(Nrr_φ']I96X>l@W8r0#6A0(t3r&ѿx~9)'PeQ2ݓCN~_#n#c?j$hLdQXɋ&NZ1k)ezdԇ?eNo <߇KHogONɳȟnVC/sl)ZP4%k2-gS$5$ʤC=:7 2goudVwAծ$6DWe}^2/1]%+/s9a5RG]{q27V+ 4M CS,QFkY cٌ/hsߨH$gj2A FFYȹ$( kl${:CeAԐ(D  |NNTNЗ o@bǵ`:PO3B{X3.9ы=ivquK|eP1׈iG-Yh6]1M~q,r0,0DV3rH͓7lbޖ+Zo{'WXy!RB_6ɿF%&SY Z2XZJ؊e{yUC'BMJJ>5Nhp^k:n&|r{z9?]Hяa}*+J5[w+Jx%E!otir3ΩT[dz\5KF@`^N=Erfr~J@x T~̟E`_Hm?˜T fRGhY-[ih$eIQ=;מPOCmb [1dܣiR,U7{iT!zFeB#fC0@+[°YXo Bӎַ>5NhpF4}qԋ﮴ʌRm9]]coFA ZY9X{_ Q (a!kB^E{]wص*kyN$V^LDx[{̈>"Uio[soQzxxʄ~ "<[EN5崿 IVhJ<\;fRi0MWG갼Dqn$:ӰsŽfw-pT˙l)_o9IĴ*+mIFω!KJ0ujઇ~\N< Լgҍ*8Ýn/9R@`2ߋWǯR xHX9Udx)^y m[4ʨަMK^ @~P7XLgbMP 㫏p/ [l5λW0հ'^; p>ݶ'%҈hHƊy<'E97b+幗,,JThCޤrHѯ2_^ cS;bw "<[EN5Bj H?,2b} mo]:) #B+r"C-N4ZWu%Vm";D%  ->'٤ke'ZZQ9T[~ƪF= to ߌ=t\nf־>7i鸣VEs3x[Y˵w wxo5>T rʽOKo'1^Dׁm;}Xe&9{zd3'n<+prP 1f9IYk`?gzSR_A;3x Y8,u.G ZO^[&82Hܲ07ABRw8 Ӽ':`X`<YM+1%+Ҋ<[n)^%BWfLYMVm ;S9gǶsafcq:  tg fDZ?UܶQq*zհ8Q((~ma[  :@"|T6э2gO*Ѐ#_3&,I̭Oc|s x}V&: dn{椻Ӹ?׼\5[hV A*B/#PE$e g\W^h~Hpp)JPHG"#o\6sjR0&p:CVi(|x HfO"ݭ 0/{]Edߟ fuՃ1G|9~\Lm@.Ϩ=]ِ, G)M^Iq 5/Kn2/.~P7XLgbMpsuf˷-ot}\Dԃ=5X_駬)^f* * Returns instances of the Enum class of all Enum constants * * @psalm-pure * @psalm-return array * @return static[] Constant name in key, Enum instance in value */ public static function values() { $values = array(); /** @psalm-var T $value */ foreach (static::toArray() as $key => $value) { $values[$key] = new static($value); } return $values; } /** * Returns all possible values as an array * * @psalm-pure * @psalm-suppress ImpureStaticProperty * * @psalm-return array * @return array Constant name in key, constant value in value */ public static function toArray() { $class = static::class; if (!isset(static::$cache[$class])) { /** @psalm-suppress ImpureMethodCall this reflection API usage has no side-effects here */ $reflection = new \ReflectionClass($class); /** @psalm-suppress ImpureMethodCall this reflection API usage has no side-effects here */ static::$cache[$class] = $reflection->getConstants(); } return static::$cache[$class]; } /** * Check if is valid enum value * * @param $value * @psalm-param mixed $value * @psalm-pure * @psalm-assert-if-true T $value * @return bool */ public static function isValid($value) { return \in_array($value, static::toArray(), true); } /** * Asserts valid enum value * * @psalm-pure * @psalm-assert T $value * @param mixed $value */ public static function assertValidValue($value): void { self::assertValidValueReturningKey($value); } /** * Asserts valid enum value * * @psalm-pure * @psalm-assert T $value * @param mixed $value * @return string */ private static function assertValidValueReturningKey($value): string { if (false === ($key = static::search($value))) { throw new \UnexpectedValueException("Value '$value' is not part of the enum " . static::class); } return $key; } /** * Check if is valid enum key * * @param $key * @psalm-param string $key * @psalm-pure * @return bool */ public static function isValidKey($key) { $array = static::toArray(); return isset($array[$key]) || \array_key_exists($key, $array); } /** * Return key for value * * @param mixed $value * * @psalm-param mixed $value * @psalm-pure * @return string|false */ public static function search($value) { return \array_search($value, static::toArray(), true); } /** * Returns a value when called statically like so: MyEnum::SOME_VALUE() given SOME_VALUE is a class constant * * @param string $name * @param array $arguments * * @return static * @throws \BadMethodCallException * * @psalm-pure */ public static function __callStatic($name, $arguments) { $class = static::class; if (!isset(self::$instances[$class][$name])) { $array = static::toArray(); if (!isset($array[$name]) && !\array_key_exists($name, $array)) { $message = "No static method or enum constant '$name' in class " . static::class; throw new \BadMethodCallException($message); } return self::$instances[$class][$name] = new static($array[$name]); } return clone self::$instances[$class][$name]; } /** * Specify data which should be serialized to JSON. This method returns data that can be serialized by json_encode() * natively. * * @return mixed * @link http://php.net/manual/en/jsonserializable.jsonserialize.php * @psalm-pure */ #[\ReturnTypeWillChange] public function jsonSerialize() { return $this->getValue(); } }