Re: Ваши последние 20 строк кода
От: Константин Л. Франция  
Дата: 16.04.07 09:24
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют




bool Notifications::CAlertsDlg::TryToCleanupAlerts( NotificationsStorage& storage, Notifications::NotificationSPtr const& nt,
                                                        const unsigned long count )
    {
        if( !count ) return true;

        const size_t storageSize = storage.Size();

        NotificationSPtr const& begin = storage[ storageSize - count ];

        //new alert is older than that we want to delete?
        if( begin->Date() < nt->Date() )
        {
            LogDebug<< _T("[SA]: Limit exceeded. Killing last ") << count << _T(" alerts...") <<endl;

            if( !FilterByID_ && !IsInSearchMode() )
            {
                unsigned int deletedInUI = CAlertsDlg::KillLastNthAlertsFromUI( uiAlertsList_, count );
                ATLASSERT( count == deletedInUI );
            }            

            NotificationsStorage::iterator begin, end;
            storage.GetLastNth( count, begin, end );
            if( storage.Collection().end() != begin )
            {
                for( NotificationsStorage::iterator it = begin ; it != end ; ++it )
                {
                    NotificationSPtr const& curr = it->second;

                    if( curr->BodyID() )
                        BodyToNtMapping_.erase( curr->BodyID() );

                    if( curr->SourceID() )
                    {
                        NotificationsStorage& as = SourceToNtsMapping_[ curr->SourceID() ];
                        as.Erase( it->second );
                    }

                    if( curr->MessageID() )
                    {                    
                        const MessageIDs::const_iterator duplicateItems = MessageIDs_.find( curr->MessageID() );
                        if( MessageIDs_.end() != duplicateItems )
                        {
                            std::vector<NotificationSPtr> const& nts = duplicateItems->second;

                            for( size_t i = 0 ; i < nts.size() ; ++i )
                            {
                                NotificationsStorage& as = SourceToNtsMapping_[ nts[i]->SourceID() ];
                                as.Erase( nts[i] );
                            }
                        }

                        MessageIDs_.erase( curr->MessageID() );
                    }

                    // we can't just delete last nth alerst because we can stay in AS filter
                    // so there can be no exact mapping from storage to UI. Ugly ;(                    
                    if( FilterByID_ && !IsInSearchMode() ) 
                    {
                        //clean alert in UI in case we have filtering by AS
                        DeleteFromUI(curr);                    
                    }

                    if( curr->ClusterID() )
                    {
                        const Clustering::ClusterPtr cluster = ClusteringInfo_.GetByID( curr->ClusterID() );
                        if( cluster )
                        {
                            for( SourceToNtsMapping::iterator sit = SourceToNtsMapping_.begin() ; sit != SourceToNtsMapping_.end() ; ++sit )
                            {
                                Utils::DeleteAllByClusterID( sit->second, cluster->ID() );
                            }

                            ClusteringInfo_.Erase( cluster->ID() );
                        }
                    }
                }

                storage.Clear(begin, end);
            }        

            return true;
        }

        //do not delete alerts and do not add new
        return false;
    }
Re[4]: Ваши последние 20 строк кода
От: Злость Россия  
Дата: 16.04.07 10:43
Оценка:
Здравствуйте, poilk, Вы писали:

[skip]
K>>

P>ну ладно, для тех, кто не понял:


P>
P>dim a[5,4];
P>a[1,1]=1
P>a[1,2]=2
P>a[1,3]=3
P>a[1,4]=4
P>a[2,1]=5
P>a[2,2]=6
P>a[2,3]=7
P>a[2,4]=8
P>a[3,1]=9
P>a[3,2]=10
P>a[3,3]=11
P>a[3,4]=12
P>a[4,1]=13
P>a[4,2]=14
P>a[4,3]=15
P>a[4,4]=16
P>a[5,1]=17
P>a[5,2]=18
P>a[5,3]=19
P>a[5,4]=20
P>


)) a(i,j) = (i-1)*N+j [M,N]
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re: Ваши последние 20 строк кода
От: Пингвиненок Россия  
Дата: 16.04.07 11:26
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

/*
    Ñòðàíèöà îò÷åòà î çàãðóçêàõ
*/

PROCEDURE loads_info_frame_workflow_log
IS
   f   UTL_FILE.file_type;

   CURSOR loads
   IS
      SELECT   id, id_load, description, start_time, end_time
          FROM mdtb_workflow_log
      ORDER BY ID ASC;
BEGIN
   f :=
      UTL_FILE.fopen (UPPER (report_directory_name),
                      LOWER (report_page_filename
                             || html_file_extention),
                      'w');
   UTL_FILE.put
      (f,
       '<html> <head> <title></title> </head> <body> <table> 
       <tr>
        <th>ID</th> <th>Íîìåð çàãðóçêè</th> <th>Îïèñàíèå</th> <th>Âðåìÿ íà÷àëà</th> <th>Âðåìÿ îêîí÷àíèÿ</th>
      </tr>');

   FOR r IN loads
   LOOP
      UTL_FILE.put (f,
                       '<tr> <td>'
                    || r.ID
                    || '</td> <td>'
                    || r.id_load
                    || '</td> <td>'
                    || r.description
                    || '</td> <td>'
                    || r.start_time
                    || ' </td> <td>'
                    || r.end_time
                    || '</td> </tr>');
   END LOOP;

   UTL_FILE.put (f, '</table> </body> </html>');
   UTL_FILE.fflush (f);
   UTL_FILE.fclose (f);
EXCEPTION
   WHEN OTHERS
   THEN
      IF UTL_FILE.is_open (f)
      THEN
         UTL_FILE.fclose (f);
      END IF;

      RAISE;
END;

   /*
    Ïðîöåäóðà çàïóñêà ãåíåðàöèè îò÷åòà î ðàáîòå
   */

PROCEDURE start_workflow_report
IS
BEGIN
   main_frame_report_workflow_log;
   loads_num_frame;
   loads_info_frame_workflow_log;
END;
То что меня не убивает, делает меня умнее.
Re[2]: Ваши последние 20 строк кода
От: 8bit  
Дата: 17.04.07 14:03
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>
Y>    <!-- wave 6 -->
Y>    <schedule>
Y>        <object>/object/asteroid1-small1-slowest.xml</object>
Y>        <begintime>100000</begintime>
Y>        <endtime>120000</endtime>
Y>        <count>40</count>
Y>        <orbitradius>500.0</orbitradius>
Y>        <shard>/object/bonus/box1.xml</shard>
Y>        <shardcount>10</shardcount>
Y>    </schedule>
Y>    <schedule>
Y>        <object>/object/asteroid1-big1-slowest.xml</object>
Y>        <begintime>100000</begintime>
Y>        <endtime>120000</endtime>
Y>        <count>40</count>
Y>        <orbitradius>500.0</orbitradius>
Y>        <shard>/object/bonus/capsule1.xml</shard>
Y>        <shardcount>10</shardcount>
Y>    </schedule>
Y>    <schedule>
Y>


Clash'N Slash III
Re: Ваши последние 20 строк кода
От: frogkiller Россия  
Дата: 17.04.07 16:01
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют


try
{
    CPhoneMaskFilter::CPhoneMaskInfo bestMaskInfo = g_PhoneMaskFilter->value.SelectBestMatchInfo(mask);

    // CallBallancer
    //TODO: вынести в отдельную процедуру
    std::list<CGroupFactory::CGroupData*> tmpGroupList = bestMaskInfo.get_GroupList();
    for (std::list<CGroupFactory::CGroupData*>::iterator it = tmpGroupList.begin(); it != tmpGroupList.end(); ++it)
    {
        if (!(*it)->Accept())
        {
            //TODO: вынести в отдельную процедуру
            Msg.Name = L"DROP_CALL";
            pConnector->WriteTo(From, Msg, NULL);
            LOGW(MP_CRITICAL, L"Call was rejected by CallBallancer");
            return;
        }
    }

    //TODO: check for managed blacklist

    // посылаем сообщение диспетчеру на запуск скрипта
    Msg.Name = L"TA2D_RUNSCRIPT";
    Msg[L"FileName"]                = bestMaskInfo.get_ScriptName().c_str();
    Msg[L"MonitorDisplayedName"]    = bestMaskInfo.get_MonitorDisplayName().c_str();
    Msg[L"RunRequestID"]            = (LONGLONG) rand() | rand()<<16 | rand()<<32 | rand()<<48;

    // здесь в сообщении заменяется адрес отправителя
    // ставится адрес телсервера, инициирующего запуск скрипта
    // это является нарушением принципов адресации в системе роутеров
    // по возможности следует исправить алгоритм взаимодействия
    // системы телсервер - транзитагент - диспетчер
    // тяжкое наследие кривого дизайна, который приходится поддерживать
    // аналогичные косяки наблюдаются и у других сообщений
    pConnector->WriteFromTo(From, CLIENT_ADDRESS::Any(), Msg, NULL);
}
catch (std::exception&e)
{
    LOG(MP_CRITICAL, e.what());

    //TODO: send alarm
}
catch (...)
{
    //TODO: send alarm
}
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[2]: Ваши последние 20 строк кода
От: Dair Россия https://dair.spb.ru
Дата: 17.04.07 16:05
Оценка:
B>LIBS = $(CLIB) $(SLIB)
B>LIBD= -L$(QT_LIB)

А зачем писать Makefile самому, если есть Qt и qmake?
Re[3]: Ваши последние 20 строк кода
От: 8bit  
Дата: 17.04.07 16:36
Оценка:
Здравствуйте, 8bit, Вы писали:

8>Clash'N Slash III


упс... на год то я и не глянул
Re: Ваши последние 20 строк кода
От: maloi_alex СССР  
Дата: 17.04.07 16:59
Оценка:
 public class FilterChain
    {
        private List<Filter> filters = new List<Filter>();
        private int currentPos = -1;

        public void NextFilter(MQMessage request, MQMessage response)
        {
            currentPos ++;
            
            if (currentPos >= 0 && currentPos < filters.Count)
            {
                Filter filter = filters[currentPos];
                filter.DoFilter(request, response, this);
            }
        }
     }
Re[2]: Ваши последние 20 строк кода
От: Anton Batenev Россия https://github.com/abbat
Дата: 18.04.07 05:26
Оценка:
Здравствуйте, Andir, Вы писали:

Н>>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют

A>[code]
A>:GetMonthString:{
A> monthNumber |
A> ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"].Item(monthNumber)
A>}

Что-то вспомнилось:

< $andman > $months = array("Нулябрь", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");

А у вас тоже есть нулевой месяц или вы тупо вычитаете единичку?

Re[13]: Ваши последние 20 строк кода
От: egaron http://127.0.0.1
Дата: 18.04.07 06:33
Оценка:
а я уже давно код не пишу, надоело. скоро забуду как это делается и забуду свой родной дотнет.

один только эскуэль — многоэтажные запросы, пээль эскуэль и транзакт иногда. Навело на мысль что надо поддерживать навыки.
Re: Ваши последние 20 строк кода
От: ironwit Украина  
Дата: 20.04.07 07:36
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют


                //opc прочитать данные по свежезагруженным приборам.
            cl := AllGroup[I1].DeviceList[I2].GetChannelsList;
            if Assigned(cl) then
            begin
              for I3 := 0 to cl.Count - 1 do
              begin
                try
                  st.Add(aDeviceList[I2].DispName + '\' + worksbd.GetStCodeByDevID(AllGroup[I1].DeviceList[I2].ID) +
                    '.' + cl[I3].Accept(OV).Items[0].DispName);
                finally
                end;
              end;
              FreeAndNil(cl);
            end;


все это только для

procedure IPZ6806.ListItemIDs(List: TItemIDList);
var
  I: integer;
begin
  for I := 0 to st.Count - 1 do
  try
    list.AddItemID(st[I], [iaRead], varInteger)
  except
  end;
end;


... << RSDN@Home 1.2.0 alpha rev. 0>>
Я не умею быть злым, и не хочу быть добрым.
Re[4]: Ваши последние 20 строк кода
От: ironwit Украина  
Дата: 20.04.07 07:48
Оценка:
Здравствуйте, БСС, Вы писали:

БСС>Здравствуйте, DuШes, Вы писали:


DШ>>имхо...нечитаемый язык...


БСС>Да, это точно... Есть така штука — Trace Mode (трассовая мудя в простонародии)


соболезнования
я этой заразе по орс данные с приборов отдаю. лучше б я сдох
тут чуть ниже кусок кода из того самого сервера
... << RSDN@Home 1.2.0 alpha rev. 0>>
Я не умею быть злым, и не хочу быть добрым.
Re: Ваши последние 20 строк кода
От: sanyo  
Дата: 20.04.07 18:39
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют



    CHK(m_pGraphBuilder->AddFilter(pVideoCapture, L"Video capture source"));
    pPropertyBag.Release();
    //Create and add transform filter to graph
    CHK(pRotate.CoCreateInstance(CLSID_Transform));
    CHK(m_pGraphBuilder->AddFilter(pRotate, L"Rotate Filter"));
    //Find callback interfave and set callbuck function
    CHK(pRotate->QueryInterface(IID_IFCallback,(void**)&m_cFilter));
    CHK(m_cFilter->SetCallback(1,&BufferCallBack));//Set Callback
    m_cFilter->SetDevName(m_DevName, m_wres, m_hres);
    CHK(pNull.CoCreateInstance(CLSID_VideoRenderer));
    CHK(m_pGraphBuilder->AddFilter(pNull, L"NULL REND"));
    //Find pins
    IPin *vPin;
    CHK(pNull->EnumPins(&pEnum));
    CHK(pEnum->Next(1, &vPin, NULL));  // NullRend pin
    IPin *vcPin;
    CHK(pRotate->EnumPins(&pEnum));
    CHK(pEnum->Next(1, &vcPin, NULL));   // rotate input Pin
    m_rotInPin=vcPin;

    CHK(pEnum->Next(1, &vcPin, NULL));  //rotate output Pin
    m_rotOuPin=vcPin;
    
    //Connecting pins
    CHK(ConnectPins());


...
и т.д
Re: Ваши последние 20 строк кода
От: afurmanov Россия  
Дата: 21.04.07 21:10
Оценка:
InstallJournal()
    {
    INSTALL_STEP=$1
    INSTALL_STEP_DESCRIPTION=$2
    shift
    shift
    if [ 0 -eq "$NOSKIP" ] && InstallJournal_Contains "$INSTALL_STEP" ; then
         OutputVerbosely "Skipping step '$INSTALL_STEP_DESCRIPTION', it has been done eariler."
    else
        $INSTALL_STEP

        if [ 1 -eq "$NOSKIP" ]; then
            return 0
        fi
        if [ ${INSTALLATION_ABORTED} = 1 ]; then
             :
        elif HaveErrors; then
            :
        else
            InstallJournal_Commit $INSTALL_STEP
        fi
    fi
    }
Re: Ваши последние 20 строк кода
От: NikeByNike Россия  
Дата: 22.04.07 21:58
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

void CDSelRecipientState::InitMenu(const TRect& aRect)
{
    GUIManagerPtr iGUIManager = iApp->iGuiManager;
    iContainer = iGUIManager->CreateContainer(1, aRect);
    m_GUIObject = iContainer;

    iContainer->SetClientRect(iApp->iClientSize);

    svector<TContact>::iterator it = iApp->iContacts.begin(), end = iApp->iContacts.end();
    for(int i = 10; it != end; ++it, ++i)
    {
        TString str = it->m_NickName;
        str.Append(_L(" ("));
        str.Append(m_PhoneNumber);
        str.Append(_L(")"));
        GUIObjectPtr item = iGUIManager->CreateCheckBox(i, aRect, str, false);
        item->SetAttach(ref_ptr<TContactInfo>(new TContactInfo(it->m_NickName, it->m_Id)));
        iContainer->InsertItem(item);
    }

    iMenu.push_back(MenuItem(100, LOCSTR("OK"), Functor(this, &OnOK)));
    iMenu.push_back(MenuItem(101, LOCSTR("CANCEL"), Functor(this, &OnCancel)));
    iMenu.push_back(MenuItem(102, LOCSTR("SELECT_ALL"), Functor(this, &OnSelectAll)));
}

void CDSelRecipientState::OnOK()
{
    size_t nCount = iContainer->GetItemsCount();
    for(size_t i = 0; i < nCount; ++i)
    {
        GUIObjectPtr obj = iContainer->GetItem(i);
        IGUICheckBox* check_box = cd_dynamic_cast<IGUICheckBox>(obj.get());
        if ( check_box && check_box->IsChecked() )
        {
            TContactInfo* info = cd_dynamic_cast<TContactInfo>(obj->GetAttach().get());
            if(info)
                m_Result->m_Contacts.push_back(ref_ptr<TContactInfo>(info));
        }
    }
    m_Result->m_result = true;
}
Нужно разобрать угил.
Re: Ваши последние 20 строк кода
От: mogadanez Чехия  
Дата: 23.04.07 12:33
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

если без скобок ровно 20 строк

public class dav_test
    {
    [Test]
    public void test_bug_20886()
        {
        test_data_folders td_folders = massert.prepare_comparision_folders( "test_bug_20886" , true );
        using ( new subsystems_factory.scoped( typeof ( ILogger ), console_full_logger.logger ) )
        using( new current_datetime_setter( new DateTime( 2007, 2, 2, 13, 13, 13, DateTimeKind.Utc )  ) )
            {
            file_info f = files.get_file( "rsdn.pdf" );
            f.is_review_enabled = true;
            f.save();

            acrobat_review acr1 = new acrobat_review( "rev 1", "rev_1_profile" , "meta", "kozel" );
            details.do_propfind( f, users.reviewer_1.id, acr1, td_folders, counter );
            }
        }
    class details
        {
        public static void do_propfind( file_info f, int user_id, acrobat_review id, test_data_folders td_folders, case_counter count )
            {
            test_application app = new test_application();
            using ( new user_context( user_id, id ) )
            using ( new request_response() )
                {
                request_controller.current.propfind( user_agent.ie, f );
                run_request( app );
                massert.AreEqual( 207, response_controller.current.status_code );
                massert.write_res_and_assert( new test_data_files( td_folders, count.next() + "u"+ user_id + "_prop_find.xml" ), read_and_format( app.Response.OutputStream) );
                massert.write_res_and_assert( new test_data_files( td_folders, count.next() + "u"+ user_id + "_acrobat_review.txt" ), user_context.current.acrobat_review );
                }
            }
        }
    }
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re: Ваши последние 20 строк кода
От: Oich Россия  
Дата: 11.05.07 12:00
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют


/*###############################################################################################*/

Procedure GetProductsMovements(
aTemplateSerno PGL.Integer,
aTabIndicator Char,
aAccNumber Varchar2,
oProductsMovements Out Sys_Refcursor
)
Is

-- Author : *********
-- Created : 25/04/2007
-- Purpose : Return the list of the Allowed Products for the "Change Product" action
-- Version : 3.05.00.00

Begin

Open oProductsMovements For
Select
p.PSerno ProductSerno,
v.Value ProductName
From
mProfileValues v
Inner Join Products p On Trim(p.Name) = Trim(v.Value) And p.AppliesToAccount Is Not Null
Where
v.Item = 'product' And v.TabIndicator = 'A' And v.MProfileSerno = aTemplateSerno And
Iss_Account.Check_Number_Range(Trim(aAccNumber), p.PSerno) = 1;

Exception
When Others Then
UTIL_LOGGING.ADD_TO_ERRLOG('WEB_CUSTOMER_SERVICES', 'GetProductsMovements');
Raise;
End GetProductsMovements;

/*###############################################################################################*/
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Ваши последние 20 строк кода
От: anidal  
Дата: 11.05.07 15:35
Оценка:
Здравствуйте, Oich, Вы писали:


static long MES_CHANGE_PAR_handler (void *This, void* data)
{
    ID10055_INTERFACE *pThis=*(ID10055_INTERFACE **)This;
    MESSAGE_QUERY_EL* pmes=(MESSAGE_QUERY_EL*)data;
    PARAM_NODE *pnode;
    fastmemcpy(&pnode,pmes->data,sizeof(PARAM_NODE *));
    /*Ишем по PNODE*/
    unsigned long j;
    PARAM_NODE *ppar;
    for (long i=0;i<MIN(pThis->params,ID10055_NUM_OF_ACT_PAR);i++){
        ppar=pThis->act_par.my_param[i];
        if (!ppar) break; //Дошли до конца
        if (pnode==ppar) {    //Нашли
            j=pThis->act_par.chanell[i];
            PARAMETER_DESCRIPTOR *pdesc=ParseParameter(pnode,NULL);
            AddParInINI(pThis,pdesc,&j);
        }
    }
    return 0;
}
Re: Ваши последние 20 строк кода
От: seafresh  
Дата: 11.05.07 15:52
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Просто ради интереса — кто чего делает. 20 строк, надеюсь коммерческой тайны не составляют



#define MMX_ONE_PIXEL_STRING \
__asm sub REG_SOURCE_BUFFER, REG_STRIDE_BUFFERS \
__asm movq MMXREG_TEMP1, [ REG_SOURCE_BUFFER - 2 ] \
__asm add REG_SOURCE_BUFFER, REG_STRIDE_BUFFERS \
__asm pmaddwd MMXREG_TEMP1, MMXREG_STRING1_MASK \
__asm movq MMXREG_TEMP2, [ REG_SOURCE_BUFFER - 2 ] \
__asm pmaddwd MMXREG_TEMP2, MMXREG_STRING2_MASK \
__asm paddd MMXREG_TEMP1, MMXREG_TEMP2 \
__asm movq MMXREG_TEMP2, [ REG_SOURCE_BUFFER + REG_STRIDE_BUFFERS - 2 ] \
__asm pmaddwd MMXREG_TEMP2, MMXREG_STRING3_MASK \
__asm paddd MMXREG_TEMP1, MMXREG_TEMP2 \
__asm movq MMXREG_TEMP2, MMXREG_TEMP1 \
__asm psrlq MMXREG_TEMP2, 32 \
__asm paddd MMXREG_TEMP1, MMXREG_TEMP2 \
__asm packssdw MMXREG_TEMP1, MMXREG_TEMP1 \
__asm pmaddwd MMXREG_TEMP1, MMXREG_KOEFF_MULL_RES \
__asm psrad MMXREG_TEMP1, SHIFT_FOR_BASE_KOEFF_MULL_FOR_SVERTKA \
__asm packssdw MMXREG_TEMP1, MMXREG_TEMP1 \
__asm psllq MMXREG_TEMP1, 48 \
__asm psrlq MMXREG_TEMP4, 16 \
__asm por MMXREG_TEMP4, MMXREG_TEMP1 \
__asm add REG_SOURCE_BUFFER, 2

pxor MMXREG_TEMP4, MMXREG_TEMP4;

MMX_ONE_PIXEL_STRING;
MMX_ONE_PIXEL_STRING;
MMX_ONE_PIXEL_STRING;
MMX_ONE_PIXEL_STRING;
Государство должно защищать свободу и право, в этом его оправдание.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.