1:45 PM 11/12/2025 ���� 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 ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2021 Paul Ramsey * Copyright (C) 2021 Martin Davis * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #pragma once #include #include #include #include #include #include // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { // geos. namespace operation { // geos.operation namespace valid { // geos.operation.valid using geos::geom::CoordinateXY; using geos::geom::CoordinateSequence; using geos::geom::Geometry; using geos::geom::LinearRing; class GEOS_DLL PolygonTopologyAnalyzer { private: // const Geometry* inputGeom; bool isInvertedRingValid = false; PolygonIntersectionAnalyzer segInt; std::vector polyRings; geom::CoordinateXY disconnectionPt; // holding area for PolygonRings and SegmentStrings so we // can pass around pointers with abandon std::deque polyRingStore; std::deque segStringStore; // when building SegmentStrings we sometimes want // to use deduped CoordinateSequences so we will // keep the deduped ones here so they get cleaned // up when processing is complete std::vector> coordSeqStore; PolygonRing* createPolygonRing(const LinearRing* p_ring); PolygonRing* createPolygonRing(const LinearRing* p_ring, int p_index, PolygonRing* p_shell); static const CoordinateXY& findNonEqualVertex(const LinearRing* ring, const CoordinateXY& p); /** * Tests whether a touching segment is interior to a ring. * * Preconditions: * * * The segment does not cross the ring * * The segment vertex p0 lies on the ring * * The ring is valid * * This works for both shells and holes, but the caller must know * the ring role. * * @param p0 the first vertex of the segment * @param p1 the second vertex of the segment * @param ringPts the points of the ring * @return true if the segment is inside the ring. */ static bool isIncidentSegmentInRing(const CoordinateXY* p0, const CoordinateXY* p1, const CoordinateSequence* ringPts); static const CoordinateXY& findRingVertexPrev(const CoordinateSequence* ringPts, std::size_t index, const CoordinateXY& node); static const CoordinateXY& findRingVertexNext(const CoordinateSequence* ringPts, std::size_t index, const CoordinateXY& node); static std::size_t ringIndexPrev(const CoordinateSequence* ringPts, std::size_t index); static std::size_t ringIndexNext(const CoordinateSequence* ringPts, std::size_t index); /** * Computes the index of the segment which intersects a given point. * @param ringPts the ring points * @param pt the intersection point * @return the intersection segment index, or -1 if no intersection is found */ static std::size_t intersectingSegIndex(const CoordinateSequence* ringPts, const CoordinateXY* pt); std::vector createSegmentStrings(const Geometry* geom, bool isInvertedRingValid); std::vector getPolygonRings(const std::vector& segStrings); SegmentString* createSegString(const LinearRing* ring, const PolygonRing* polyRing); // Declare type as noncopyable PolygonTopologyAnalyzer(const PolygonTopologyAnalyzer& other) = delete; PolygonTopologyAnalyzer& operator=(const PolygonTopologyAnalyzer& rhs) = delete; public: /* public */ PolygonTopologyAnalyzer(const Geometry* geom, bool p_isInvertedRingValid); /** * Finds a self-intersection (if any) in a LinearRing. * * @param ring the ring to analyze * @return a self-intersection point if one exists, or null */ static CoordinateXY findSelfIntersection(const LinearRing* ring); /** * Tests whether a ring is nested inside another ring. * * Preconditions: * * * The rings do not cross (i.e. the test is wholly inside or outside the target) * * The rings may touch at discrete points only * * The target ring does not self-cross, but it may self-touch * * If the test ring start point is properly inside or outside, that provides the result. * Otherwise the start point is on the target ring, * and the incident start segment (accounting for repeated points) is * tested for its topology relative to the target ring. * * @param test the ring to test * @param target the ring to test against * @return true if the test ring lies inside the target ring */ static bool isRingNested(const LinearRing* test, const LinearRing* target); bool hasInvalidIntersection() { return segInt.isInvalid(); } int getInvalidCode() { return segInt.getInvalidCode(); } const CoordinateXY& getInvalidLocation() { return segInt.getInvalidLocation(); } /** * Tests whether the interior of the polygonal geometry is * disconnected. * If true, the disconnection location is available from * getDisconnectionLocation(). * * @return true if the interior is disconnected */ bool isInteriorDisconnected(); const CoordinateXY& getDisconnectionLocation() const { return disconnectionPt; }; /** * Tests whether any polygon with holes has a disconnected interior * by virtue of the holes (and possibly shell) forming a hole cycle. * * This is a global check, which relies on determining * the touching graph of all holes in a polygon. * * If inverted rings disconnect the interior * via a self-touch, this is checked by the PolygonIntersectionAnalyzer. * If inverted rings are part of a hole cycle * this is detected here as well. */ void checkInteriorDisconnectedByHoleCycle(); /** * Tests if an area interior is disconnected by a self-touching ring. * This must be evaluated after other self-intersections have been analyzed * and determined to not exist, since the logic relies on * the rings not self-crossing (winding). *

* If self-touching rings are not allowed, * then the self-touch will previously trigger a self-intersection error. */ void checkInteriorDisconnectedBySelfTouch(); }; } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos