���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC formatOutput = true; $dom->registerNodeClass('DOMElement','LocoConfig_DOMElement'); $this->xpath = new DOMXPath($dom); $this->dom = $dom; } /** * @return DOMDocument */ public function getDom(){ return $this->dom; } /** * {@inheritdoc} * @return LocoConfigNodeListIterator */ public function query( $query, $context = null ){ $list = $this->xpath->query( $query, $context ); return new LocoConfigNodeListIterator( $list ); } /** * @return void */ public function loadXml( $source ){ if( ! $source ){ throw new Loco_error_XmlParseException( __('XML supplied is empty','loco-translate') ); } $dom = $this->getDom(); // parse with silent errors, clearing after $used_errors = libxml_use_internal_errors(true); $dom->loadXML( $source, LIBXML_NONET ); unset( $source ); // fetch errors and ensure clean for next run. $errors = libxml_get_errors(); $used_errors || libxml_use_internal_errors(false); libxml_clear_errors(); // Throw exception if error level exceeds current tolerance if( $errors ){ foreach( $errors as $error ){ if( $error->level >= LIBXML_ERR_FATAL ){ throw new Loco_error_XmlParseException( trim($error->message) ); // ->setContext( $error->line, $error->column, $source ); } } } // Not currently validating against a DTD, but will preempt generic model loading errors $root = $dom->documentElement; if( ! $root instanceof DOMNode ){ throw new Loco_error_XmlParseException('Expected document element'); } if( 'bundle' !== strtolower($root->nodeName) ){ throw new Loco_error_XmlParseException('Expected document element, got <'.$root->nodeName.'>'); } $this->xpath = new DOMXPath($dom); } /** * {@inheritdoc} * Overridden to avoid empty text nodes in XML files, preferring . to */ protected function setFileElementPath( $node, $path ){ if( ! $path && '0' !== $path ){ $path = '.'; } return parent::setFileElementPath( $node, $path ); } } /** * @internal */ class LocoConfig_DOMElement extends DOMElement implements IteratorAggregate, Countable { #[ReturnTypeWillChange] public function getIterator(){ return new LocoConfigNodeListIterator( $this->childNodes ); } #[ReturnTypeWillChange] public function count(){ return $this->childNodes->length; } } /** * @internal * Cos NodeList doesn't iterate */ class LocoConfigNodeListIterator implements Iterator, Countable, ArrayAccess { /** * @var DOMNodeList */ private $nodes; /** * @var int */ private $i; /** * @var int */ private $n; public function __construct( DOMNodeList $nodes ){ $this->nodes = $nodes; $this->n = $nodes->length; } #[ReturnTypeWillChange] public function count(){ return $this->n; } #[ReturnTypeWillChange] public function rewind(){ $this->i = -1; $this->next(); } #[ReturnTypeWillChange] public function key(){ return $this->i; } #[ReturnTypeWillChange] public function current(){ return $this->nodes->item( $this->i ); } #[ReturnTypeWillChange] public function valid(){ return is_int($this->i); } #[ReturnTypeWillChange] public function next(){ while( true ){ $this->i++; if( $child = $this->nodes->item($this->i) ){ break; } $this->i = null; break; } } #[ReturnTypeWillChange] public function offsetExists( $i ){ return $i >= 0 && $i < $this->n; } #[ReturnTypeWillChange] public function offsetGet( $i ){ return $this->nodes->item($i); } /** * @codeCoverageIgnore */ #[ReturnTypeWillChange] public function offsetSet( $i, $value ){ throw new Exception('Read only'); } /** * @codeCoverageIgnore */ #[ReturnTypeWillChange] public function offsetUnset( $i ){ throw new Exception('Read only'); } }