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
//+------------------------------------------------------------------+ //| Tree.mqh | //| Copyright 2000-2026, MetaQuotes Ltd. | //| www.mql5.com | //+------------------------------------------------------------------+ #include "TreeNode.mqh" //+------------------------------------------------------------------+ //| Class CTree. | //| Purpose: Building a binary tree of instances of CTreeNode class | //| and its derviatives. | //| Derives from class CTreeNode. | //+------------------------------------------------------------------+ class CTree : public CTreeNode { protected: CTreeNode *m_root_node; // root node of the tree public: CTree(void); ~CTree(void); //--- methods of access to protected data CTreeNode *Root(void) const { return(m_root_node); } //--- method of identifying the object virtual int Type() const { return(0x9999); } //--- method of filling the tree CTreeNode *Insert(CTreeNode *new_node); //--- methods of removing tree nodes bool Detach(CTreeNode *node); bool Delete(CTreeNode *node); void Clear(void); //--- method of searching data in the tree CTreeNode *Find(const CTreeNode *node); //--- method to create elements in the tree virtual CTreeNode *CreateElement() { return(NULL); } //--- methods for working with files virtual bool Save(const int file_handle); virtual bool Load(const int file_handle); protected: void Balance(CTreeNode *node); }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CTree::CTree(void) : m_root_node(NULL) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CTree::~CTree(void) { Clear(); } //+------------------------------------------------------------------+ //| Method of adding a node to the tree | //+------------------------------------------------------------------+ CTreeNode *CTree::Insert(CTreeNode *new_node) { CTreeNode *p_node; CTreeNode *result=m_root_node; //--- check if(!CheckPointer(new_node)) return(NULL); //--- add if(result!=NULL) { p_node=NULL; result=m_root_node; while(result!=NULL && result.Compare(new_node)!=0) { p_node=result; result=result.GetNext(new_node); } if(result!=NULL) return(result); if(p_node.Compare(new_node)>0) p_node.Left(new_node); else p_node.Right(new_node); new_node.Parent(p_node); Balance(p_node); } else m_root_node=new_node; //--- result return(result); } //+------------------------------------------------------------------+ //| Method of removing a node from the tree | //+------------------------------------------------------------------+ bool CTree::Delete(CTreeNode *node) { //--- check if(!CheckPointer(node)) return(false); //--- delete if(Detach(node) && CheckPointer(node)==POINTER_DYNAMIC) delete node; //--- successful return(true); } //+------------------------------------------------------------------+ //| Method of detaching node from the tree | //+------------------------------------------------------------------+ bool CTree::Detach(CTreeNode *node) { CTreeNode *curr_node,*tmp_node; CTreeNode *nodeA,*nodeB; //--- check curr_node=node; if(!CheckPointer(curr_node)) return(false); //--- detach if(curr_node.BalanceL()>curr_node.BalanceR()) { nodeA=curr_node.Left(); while(nodeA.Right()!=NULL) nodeA=nodeA.Right(); nodeB=nodeA.Parent(); if(nodeB!=curr_node) { nodeB.Right(nodeA.Left()); tmp_node=nodeB.Right(); if(tmp_node!=NULL) tmp_node.Parent(nodeB); tmp_node=curr_node.Left(); nodeA.Left(tmp_node); tmp_node.Parent(nodeA); } //--- left link of curr_node is already installed as it should be curr_node.Left(NULL); //--- transferring the right link of curr_node to nodeA nodeA.Right(curr_node.Right()); tmp_node=curr_node.Right(); if(tmp_node!=NULL) tmp_node.Parent(nodeA); curr_node.Right(NULL); //--- transferring the root link of curr_node to nodeA tmp_node=curr_node.Parent(); nodeA.Parent(tmp_node); if(tmp_node!=NULL) { if(tmp_node.Left()==curr_node) tmp_node.Left(nodeA); else tmp_node.Right(nodeA); } else { curr_node.Parent(NULL); m_root_node=nodeA; tmp_node=nodeA; } Balance(tmp_node); } else { if(curr_node.BalanceR()>0) { nodeA=curr_node.Right(); while(nodeA.Left()!=NULL) nodeA=nodeA.Left(); nodeB=nodeA.Parent(); if(nodeB!=curr_node) { nodeB.Left(nodeA.Right()); tmp_node=nodeB.Left(); if(tmp_node!=NULL) tmp_node.Parent(nodeB); tmp_node=curr_node.Right(); nodeA.Right(tmp_node); tmp_node.Parent(nodeA); } //--- right link of curr_node is already installed as it should be curr_node.Right(NULL); //--- transferring the left link of curr_node to nodeA nodeA.Left(curr_node.Left()); tmp_node=curr_node.Left(); if(tmp_node!=NULL) tmp_node.Parent(nodeA); curr_node.Left(NULL); //--- transferring the root link of curr_node to nodeA tmp_node=curr_node.Parent(); nodeA.Parent(tmp_node); if(tmp_node!=NULL) { if(tmp_node.Left()==curr_node) tmp_node.Left(nodeA); else tmp_node.Right(nodeA); } else { curr_node.Parent(NULL); m_root_node=nodeA; tmp_node=nodeA; } Balance(tmp_node); } else { //--- node list if(curr_node.Parent()==NULL) m_root_node=NULL; else { tmp_node=curr_node.Parent(); if(tmp_node.Left()==curr_node) tmp_node.Left(NULL); else tmp_node.Right(NULL); curr_node.Parent(NULL); } Balance(curr_node.Parent()); } } //--- successful return(true); } //+------------------------------------------------------------------+ //| Method of cleaning the tree | //+------------------------------------------------------------------+ void CTree::Clear(void) { if(CheckPointer(m_root_node)==POINTER_DYNAMIC) delete m_root_node; m_root_node=NULL; } //+------------------------------------------------------------------+ //| Method of searching for a node in the tree | //+------------------------------------------------------------------+ CTreeNode *CTree::Find(const CTreeNode *node) { CTreeNode *result=m_root_node; //--- find while(result!=NULL && result.Compare(node)!=0) result=result.GetNext(node); //--- result return(result); } //+------------------------------------------------------------------+ //| Method of balancing the tree | //+------------------------------------------------------------------+ void CTree::Balance(CTreeNode *node) { CTreeNode *nodeA,*nodeB,*nodeC,*curr_node,*tmp_node; //--- curr_node=node; while(curr_node!=NULL) { curr_node.RefreshBalance(); if(MathAbs(curr_node.BalanceL()-curr_node.BalanceR())<=1) curr_node=curr_node.Parent(); else { if(curr_node.BalanceR()>curr_node.BalanceL()) { //--- rotation to the right tmp_node=curr_node.Right(); if(tmp_node.BalanceL()>tmp_node.BalanceR()) { //--- great rotation to the right nodeA=curr_node; nodeB=nodeA.Right(); nodeC=nodeB.Left(); nodeC.Parent(nodeA.Parent()); tmp_node=nodeC.Parent(); if(tmp_node!=NULL) { if(tmp_node.Right()==nodeA) tmp_node.Right(nodeC); else tmp_node.Left(nodeC); } else m_root_node=nodeC; nodeA.Parent(nodeC); nodeB.Parent(nodeC); nodeA.Right(nodeC.Left()); tmp_node=nodeA.Right(); if(tmp_node!=NULL) tmp_node.Parent(nodeA); nodeC.Left(nodeA); nodeB.Left(nodeC.Right()); tmp_node=nodeB.Left(); if(tmp_node!=NULL) tmp_node.Parent(nodeB); nodeC.Right(nodeB); if(m_root_node==nodeA) m_root_node=nodeC; curr_node=nodeC.Parent(); } else { //--- slight rotation to the right nodeA=curr_node; nodeB=nodeA.Right(); nodeB.Parent(nodeA.Parent()); tmp_node=nodeB.Parent(); if(tmp_node!=NULL) { if(tmp_node.Right()==nodeA) tmp_node.Right(nodeB); else tmp_node.Left(nodeB); } else m_root_node=nodeB; nodeA.Parent(nodeB); nodeA.Right(nodeB.Left()); tmp_node=nodeA.Right(); if(tmp_node!=NULL) tmp_node.Parent(nodeA); nodeB.Left(nodeA); if(m_root_node==nodeA) m_root_node=nodeB; curr_node=nodeB.Parent(); } } else { //--- rotation to the left tmp_node=curr_node.Left(); if(tmp_node.BalanceR()>tmp_node.BalanceL()) { //--- great rotation to the left nodeA=curr_node; nodeB=nodeA.Left(); nodeC=nodeB.Right(); nodeC.Parent(nodeA.Parent()); tmp_node=nodeC.Parent(); if(tmp_node!=NULL) { if(tmp_node.Right()==nodeA) tmp_node.Right(nodeC); else tmp_node.Left(nodeC); } else m_root_node=nodeC; nodeA.Parent(nodeC); nodeB.Parent(nodeC); nodeA.Left(nodeC.Right()); tmp_node=nodeA.Left(); if(tmp_node!=NULL) tmp_node.Parent(nodeA); nodeC.Right(nodeA); nodeB.Right(nodeC.Left()); tmp_node=nodeB.Right(); if(tmp_node!=NULL) tmp_node.Parent(nodeB); nodeC.Left(nodeB); if(m_root_node==nodeA) m_root_node=nodeC; curr_node=nodeC.Parent(); } else { //--- small rotation to the left nodeA=curr_node; nodeB=nodeA.Left(); nodeB.Parent(nodeA.Parent()); tmp_node=nodeB.Parent(); if(tmp_node!=NULL) { if(tmp_node.Right()==nodeA) tmp_node.Right(nodeB); else tmp_node.Left(nodeB); } else m_root_node=nodeB; nodeA.Parent(nodeB); nodeA.Left(nodeB.Right()); tmp_node=nodeA.Left(); if(tmp_node!=NULL) tmp_node.Parent(nodeA); nodeB.Right(nodeA); if(m_root_node==nodeA) m_root_node=nodeB; curr_node=nodeB.Parent(); } } } } } //+------------------------------------------------------------------+ //| Writing tree to file | //+------------------------------------------------------------------+ bool CTree::Save(const int file_handle) { //--- check if(file_handle==INVALID_HANDLE) return(false); if(m_root_node==NULL) return(true); //--- result return(m_root_node.SaveNode(file_handle)); } //+------------------------------------------------------------------+ //| Reading tree from file | //+------------------------------------------------------------------+ bool CTree::Load(const int file_handle) { //--- check if(file_handle==INVALID_HANDLE) return(false); //--- create root node only Clear(); Insert(CreateElement()); //--- result return(m_root_node.LoadNode(file_handle,m_root_node)); } //+------------------------------------------------------------------+