<<revision taxiok>><<revision restarttrip>>Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\nЯ узнал её издалека по небольшой фигурке и пучку волос, завязанному на макушке.\n— Аня!..\n— Митя!..\nВспыхнули электрические огни, и всё вокруг замерло.<<becomes>>[[Августовский ветер шевелил. Закатное солнце окрашивало. Сочинская набережная наполнялась.\nЯ узнал.\n— Аня!..\n— Митя!..\nВспыхнули, и замерло.|ending]]<<endrevision>>\n\nЗа десять лет она почти не изменилась. Лишь полуночный труд и забота о больной матери провели под её глазами неглубокие морщинки. Она приехала в Сочи одна на пару недель, чтобы прийти в себя после изнурительного бракоразводного процесса.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Не сегодня.\n\nЯ воровато сунул администратору пятитысячную купюру, и провожаемые его усталым взглядом мы начали подниматься по лестнице. На этаже никого не было. Заперев номер, я первым делом задвинул шторы, затем достал из шкафа шерстяные одеяла и плотно прижал их к щели внизу входной двери.\nОна сидела на кровати. Глаза её были чуть увлажнены.\n— У нас есть час до рассвета, — сказал я, садясь рядом и гладя её по плечу.\n— Знаю. Не будем терять времени. Вот это подойдёт.\nОна указала на стоявший в тёмном углу стул:\n— Мы используем его деревянные набалдашники как шкивы. Мне нужен твой ремень. У тебя есть ещё один?\nЯ поставил стул рядом с кроватью. Она ловко обхватила набалдашник ремнём и защёлкнула его концы у себя на затылке, после чего стала проверять получившуюся конструкцию на прочность.\n— А почему нельзя сделать это по старинке?\n— Логи. У них есть доступ к логам. Они читают всё.\nСобранная и слегка встревоженная, она казалась ещё красивей. Я поцеловал её в губы. \n— Скажи мне, что делать.\n— После того, как я удалю у себя краниальную часть, тебе нужно будет найти в затылочной доле вентильную матрицу и поместить в неё язычок пряжки, так, чтобы при натяжении ремня логический вентиль XOR перемещался в позицию AND. Помнишь, как это было в институтском симуляторе?\n— Это трудно забыть.\nМы оба рассмеялись нашим воспоминаниям о семестровой практике в Институте программных средств.\n— Ты тогда писала на гиперассемблере, и у тебя были <<cycle eye>>голубые<<becomes>>жёлтые<<becomes>>серые<<endcycle>> глаза.\n— Они у меня по-прежнему <<cycle eye>>голубые<<becomes>>жёлтые<<becomes>>серые<<endcycle>>, Митя.\n— Я больше не хочу тебя терять.\nВнезапно она посерьёзнела.\n— Знаешь, — сказала она, — я тогда и вправду тебе изменила.\n— С кем, с Гороховым?\n— Нет, с biogram6.\n— Что это?\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nКорчась, я медленно сполз с кровати.\n— Митя, что с тобой?\nПрошло ещё какое-то время, прежде чем она поняла, что меня душит смех. И тогда, и раньше, и потом — между мной и всеми остальными женщинами вставал робот-биограф. Эти мерзавцы знают, как делать комплименты женщинам.\n— Да уж, роботы-биографы знают, как делать комплименты, — сказал я, немного отдышавшись.\nНо Аня уже не слышала меня. Видимо, она случайно потянула за ремень и запустила скрипт раньше времени.\n— Митя… — слабо сказала она.\nИз её рта шла розовая пена. Я знал, что делать.\n\n— У тебя тогда были <<cycle eye>>голубые<<becomes>>жёлтые<<becomes>>серые<<endcycle>> глаза.\n— Они у меня по-прежнему <<cycle eye>>голубые<<becomes>>жёлтые<<becomes>>серые<<endcycle>>, Митя.\n— Теперь они <<cycle eye>>пожелтели<<becomes>>выцвели<<becomes>>голубые<<endcycle>>.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, ты не думай, что он был чем-то лучше тебя.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они знают, как делать комплименты.\n— Что?..\n\nЯ сел на кровать и выдохнул. Уже ничего нельзя было изменить. Неправильно подключенные во время последнего логаута вентили превратили отлаженный и многократно протестированный скрипт в машину убийства. Видимо, она злоупотребляла этим занятием и была не совсем внимательной на завершающем этапе. Хотя это было так на неё не похоже.\nМне оставалось только свернуть её тело, стереть память администратору гостиницы и дать дёру. И тут меня осенило: какой ещё робот-биограф? Его не было и не могло быть ни в этой игровой итерации.\nПерекомпилировать проект и посмотреть ещё раз? Рабочий день заканчивался, и моё отсутствие могло быть замечено. Но я решился на ещё одну попытку.\n\n<<timedinsert 0.5s>>Держась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Если ты в последний раз всё сделала по инструкции.\n— Митя, запомни: если я вдруг начну что-то говорить про <<cycle eye>>робота-биографа<<set $aftereye to 0>><<becomes>>Горохова<<set $aftereye to 1>><<becomes>>тебя<<set $aftereye to 0>><<endcycle>>…\n— Вот сейчас, например!\n— Нет-нет, прямо перед логаутом.\nЯ обратил внимание на то, что такси всё не появлялось. В прошлый раз к этому моменту оно уже сверкало издали <<cycle eye>>жёлтыми<<becomes>>голубыми<<becomes>>серыми<<endcycle>> фарами.\n— Аня, какого цвета у тебя глаза? — спросил я, глядя на дорогу.\n— Ты знаешь, что <<revise eye "жёлтого" "голубого" "серого">>.\n— Тогда <<revise taxiok "какого цвета фары">><<revert taxiok "какого цвета фары">> у этой машины?\nВ этот момент в конце улицы возникла пара огоньков.\n— Митя…\n— Мы должны сделать это прямо в ней. Водитель передаёт им все логи, но если мы провернём это сразу, он не успеет...\n<<endtimedinsert>><<gains>>\n<<if $aftereye eq 1>><<timedinsert 0.2s>>Наверное, у «Ани» тоже заканчивалось рабочее время, потому что её героиня постоянно замирала и переставала отвечать на вопросы. Но это было уже неважно. Главное — успеть сделать логаут, пока такси не подъехало к гостинице. Задняя часть Аниного черепа скатилась куда-то под ноги, времени искать её не было. Мне ещё требовалось переключить вентили в своей затылочной доле. В целом, план Ани был оригинален, и надо думать, без осложняющих обстоятельств он прекрасно работал. Возможно, она действительно когда-то связалась с роботом-биографом, а тот переписал все её данные. Никогда нельзя связываться с роботами-биографами, даже если это молодой предприниматель-миллионер или мисс Сочи.\nЯ дёрнул ремень, Аня резко откинулась назад. Мы как раз в этот момент совершали крутой поворот на T-образном перекрёстке. Справа в окне светилось море.\nХак системы состоял в том, чтобы изменить в конфигурируемой микросхеме положение логического вентиля XOR («исключающее ИЛИ») на AND («И»): тогда при обнулении регистра с помощью операции XOR (в этой операции один и тот же регистр используется на позиции обоих операндов: @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;xor eax, eax@@) он сохранял своё последнее значение (@@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;and eax, eax@@ не менят значение @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;eax@@). Поскольку это использование вентиля XOR было при запуске первым и последним, такая подмена проходила незаметно для пользователя. Нам нужно было только сохранить после загрузки значение регистра и сразу же перезапустить систему с восстановленными настройками. Дело в том, что в этом регистре хранился заводской номер сборки, по которому можно было получить доступ к управлению консолью. Остальное было рутиной.\nКажется, всё шло как положено. Когда я вернулся из бессознательного состояния, Аня уже ждала меня. По моим подсчётам, у нас оставалось до прибытия три минуты. Водитель такси всё понял, но, видимо, думал, что ему достаточно просто довезти нас до места и передать информацию. Скорее всего, новичок.\nАня молча смотрела на меня. В её глазах была надежда и растерянность. \nИтак, <<revise restarttrip "сейчас" "всё сначала" end>>.<<endtimedinsert>>\n<<endif>><<endrevision>>
version.extensions.cyclinglinkMacro={major:3,minor:3,revision:0};\nmacros.cyclinglink={handler:function(a,b,c){var rl="cyclingLink";\nfunction toggleText(w){w.classList.remove("cyclingLinkInit");\nw.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");\nw.style.display=((w.style.display=="none")?"inline":"none")}switch(c[c.length-1]){case"end":var end=true;\nc.pop();break;case"out":var out=true;c.pop();break}var v="";if(c.length&&c[0][0]=="$"){v=c[0].slice(1);\nc.shift()}var h=state.history[0].variables;if(out&&h[v]===""){return\n}var l=Wikifier.createInternalLink(a,null);l.className="internalLink cyclingLink";\nl.setAttribute("data-cycle",0);for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,"cyclingLinkInit cyclingLink"+((on)?"En":"Dis")+"abled");\nif(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}insertText(d,c[i]);if(on&&end&&i==c.length-1){l.parentNode.replaceChild(d,l)\n}else{l.appendChild(d)}}l.onclick=function(){var t=this.childNodes;\nvar u=this.getAttribute("data-cycle")-0;var m=t.length;toggleText(t[u]);\nu=(u+1);if(!(out&&u==m)){u%=m;if(v){h[v]=c[u]}}else{h[v]=""}if((end||out)&&u==m-(end?1:0)){if(end){var n=this.removeChild(t[u]);\nn.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}return}toggleText(t[u]);\nthis.setAttribute("data-cycle",u)}}};
Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\nЯ узнал её издалека по небольшой фигурке и пучку волос, завязанному на макушке.\n— Аня!..\n— Митя!..\nВспыхнули электрические огни, и всё вокруг замерло.\n\nЗа десять лет она почти не изменилась. Лишь полуночный труд и забота о больной матери провели под её глазами неглубокие морщинки. Она приехала в Сочи одна на пару недель, чтобы прийти в себя после изнурительного бракоразводного процесса.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Не сегодня.\n\nЯ воровато сунул администратору пятитысячную купюру, и провожаемые его усталым взглядом мы начали подниматься по лестнице. На этаже никого не было. Заперев номер, я первым делом задвинул шторы, затем достал из шкафа шерстяные одеяла и плотно прижал их к щели внизу входной двери.\nОна сидела на кровати. Глаза её были чуть увлажнены.\n— У нас есть час до рассвета, — сказал я, садясь рядом и гладя её по плечу.\n— Знаю. Не будем терять времени. Вот это подойдёт.\nОна указала на стоявший в тёмном углу стул:\n— Мы используем его деревянные набалдашники как шкивы. Мне нужен твой ремень. У тебя есть ещё один?\nЯ поставил стул рядом с кроватью. Она ловко обхватила набалдашник ремнём и защёлкнула его концы у себя на затылке, после чего стала проверять получившуюся конструкцию на прочность.\n— А почему нельзя сделать это по старинке?\n— Логи. У них есть доступ к логам. Они читают всё.\nСобранная и слегка встревоженная, она казалась ещё красивей. Я поцеловал её в губы. \n— Скажи мне, что делать.\n— После того, как я удалю у себя краниальную часть, тебе нужно будет найти в затылочной доле вентильную матрицу и поместить в неё язычок пряжки, так, чтобы при натяжении ремня логический вентиль XOR перемещался в позицию AND. Помнишь, как это было в институтском симуляторе?\n— Это трудно забыть.\nМы оба рассмеялись нашим воспоминаниям о семестровой практике в Институте программных средств.\n— Ты тогда писала на гиперассемблере, и у тебя были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Я больше не хочу тебя терять.\nВнезапно она посерьёзнела.\n— Знаешь, — сказала она, — я тогда и вправду тебе изменила.\n— С кем, с Гороховым?\n— Нет, с biogram6.\n— Что это?\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nКорчась, я медленно сполз с кровати.\n— Митя, что с тобой?\nПрошло ещё какое-то время, прежде чем она поняла, что меня душит смех. И тогда, и раньше, и потом — между мной и всеми остальными женщинами вставал робот-биограф. Эти мерзавцы знают, как делать женщинам комплименты.\n— Да уж, роботы-биографы знают, как делать комплименты, — сказал я, немного отдышавшись.\nНо Аня уже не слышала меня. Видимо, она случайно потянула за ремень и запустила скрипт раньше времени.\n— Митя… — слабо сказала она.\nИз её рта шла розовая пена. Я знал, что делать.\n\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Теперь они пожелтели.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, ты не думай, что он был чем-то лучше тебя.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они знают, как делать комплименты.\n— Что?..\n\nЯ сел на кровать и выдохнул. Уже ничего нельзя было изменить. Неправильно подключенные во время последнего логаута вентили превратили отлаженный и многократно протестированный скрипт в машину уничтожения. Видимо, она злоупотребляла этим занятием и была не совсем внимательной на завершающем этапе. Хотя это так на неё не похоже.\nМне оставалось только свернуть её тело, стереть память администратору гостиницы и дать дёру. И тут меня осенило: какой, к чёрту, робот-биограф? Его не было и не могло быть ни в этой игровой итерации.\nПерекомпилировать проект и посмотреть ещё раз? Рабочий день заканчивался, и моё отсутствие на проекте могло быть замечено. Но я решился на ещё одну попытку.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Если ты в последний раз всё сделала по инструкции.\n— Митя, запомни: если я вдруг начну что-то говорить про робота-биографа…\n— Вот сейчас, например!\n— Нет-нет, прямо перед логаутом.\nЯ обратил внимание на то, что такси всё не появлялось. В прошлый раз к этому моменту оно уже сверкало издали жёлтыми фарами.\n— Аня, какого цвета у тебя глаза? — спросил я, глядя на дорогу.\n— Ты знаешь, что голубого.\n— Тогда какого цвета фары у этой машины?\nВ этот момент в конце улицы возникла пара огоньков.\n— Митя…\n— Мы должны сделать это прямо в ней. Водитель передаёт им все логи, но если мы провернём это сразу, он не успеет...\n\nНаверное, у «Ани» тоже заканчивалось рабочее время, потому что её героиня постоянно замирала и переставала отвечать на вопросы. Но это было уже неважно. Главное — успеть сделать логаут, пока такси не подъехало к гостинице Задняя часть Аниного черепа скатилась куда-то под ноги, времени искать её не было. Мне ещё требовалось переключить вентили в своей затылочной доле. В целом, план Ани был оригинален, и нужно думать, что без осложняющих обстоятельств он прекрасно работал. Возможно, она действительно когда-то связалась с роботом-биографом, а тот переписал все её данные. Никогда нельзя связываться с роботами-биографами, даже если это молодой предприниматель-миллионер или королева красоты.\nЯ дёрнул ремень, Аня резко откинулась назад. Мы как раз в этот момент совершали крутой поворот на T-образном перекрёстке. Справа в окне светилось море.\nХак системы состоял в том, чтобы изменить в конфигурируемой микросхеме положение логического вентиля XOR («исключающее ИЛИ») на AND («И»): тогда при обнулении регистра с помощью операции XOR (в этой операции один и тот же регистр используется на позиции обоих операндов: @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;xor eax, eax@@) он сохранял своё последнее значение (@@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;and eax, eax@@ не менят значение @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;eax@@). Поскольку это использование вентиля XOR было при запуске первым и последним, такая подмена проходила незаметно для пользователя. Нам нужно было только сохранить после загрузки значение регистра и сразу же перезапустить систему с восстановленными настройками. Дело в том, что в этом регистре хранился заводской номер сборки, по которому можно было получить доступ к управлению консолью. Остальное было рутиной.\nКажется, всё шло как положено. Когда я вернулся из бессознательного состояния, Аня уже ждала меня. По моим подсчётам, у нас оставалось до прибытия три минуты. Водитель такси всё понял, но, видимо, думал, что ему достаточно просто довезти нас до места и передать информацию. Скорее всего, новичок.\nИтак, сейчас.\n\n<<timedcontinue 0.5s >>Августовский ветер шевелил. Закатное солнце окрашивало. Сочинская набережная наполнялась.\nЯ узнал.\n— Аня!..\n— Митя!..\nВспыхнули, и замерло.\n<<timedcontinue 5s >>\n@@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:10pt;\nPUSH CX <<timedcontinue 0.2s>>\nMOV CL, 4 <<timedcontinue 0.2s>>\nROL DL, CL <<timedcontinue 0.2s>>\nMOV AL ,DL <<timedcontinue 0.2s>>\nAND AL, 15 <<timedcontinue 0.2s>>\nDAA <<timedcontinue 0.2s>>\nADD AL, 240 <<timedcontinue 0.2s>>\nADC AL,4 0H <<timedcontinue 0.2s>>\nSTOSB <<timedcontinue 0.2s>>\nPOP CX <<timedcontinue 0.2s>>\nMOV AL, 32 <<timedcontinue 0.2s>>\nSTOSB <<timedcontinue 0.2s>>\nPOP CX <<timedcontinue 0.2s>>\nMOV AL,32 <<timedcontinue 0.2s>>\nSTOSB <<timedcontinue 0.2s>>\nSTOSB <<timedcontinue 0.2s>>\nSUB SI,16 <<timedcontinue 0.2s>>\nMOV CX,16 <<timedcontinue 0.2s>>\nCMP AL, 32 <<timedcontinue 0.2s>>\nJB NOA <<timedcontinue 0.2s>>\nSTOSB <<timedcontinue 0.2s>>\nJMP NEXT<<timedcontinue 0.2s>>\nMOV AL, '60<<timedcontinue 0.2s>>\nSTOSB<<timedcontinue 0.2s>>\nMOV AL, 13<<timedcontinue 0.2s>>\nSTOSB<<timedcontinue 0.2s>>\nMOV AL, 10<<timedcontinue 0.2s>>\nSTOSB<<timedcontinue 0.2s>>\nMOV AL, 0@@<<timedcontinue 0.2>><<timedcontinue 0.2s>><<goto "fin">>
<<if $andann eq 0>><h1>[[AND|main]]</h1><<else>><h1>[[AND|main]]</h1><<timedcontinue 2s>><<goto "andannepisode">><<endif>>\n\n\n
Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\n\nЯ опознала его по неестественным движениям, свойственным скорее игровому боту, чем человеческому игроку. Отличная возможность заработать фраг. Это будет нетрудно, поскольку компания //AND// не слишком-то много усилий прикладывает для совершенствования искусственного интеллекта.\n\nБлагодаря помощи Горохова и фокусу с вентилями я отключила «Митю» и впервые в этом году попала в турнирную таблицу. [[Логаут|Start]] удался.<<set $andann to 1>>
(function () {\n version.extensions['timedreplaceMacro'] = {\n major: 2,\n minor: 3,\n revision: 0\n };\n macros['timedcontinue'] = macros['timedinsert'] = macros['timedreplace'] = {\n handler: function (g, e, f, b) {\n function cssTimeUnit(s) {\n if (typeof s == "string") {\n if (s.slice(-2).toLowerCase() == "ms") {\n return Number(s.slice(0, -2)) || 0;\n }\n else if (s.slice(-1).toLowerCase() == "s") {\n return Number(s.slice(0, -1)) * 1000 || 0;\n }\n }\n throwError(g, s + " isn't a CSS time unit");\n return 0;\n }\n\n function tagcontents(starttag, endtag, k) {\n var a = b.source.slice(k);\n var l = 0;\n var c = "";\n for (var i = 0; i < a.length; i++) {\n var w = endtag.length;\n if (a.substr(i, w) == endtag) {\n if (l == 0) {\n b.nextMatch = k + i + w;\n return c;\n }\n else {\n l--;\n c += a.charAt(i);\n }\n }\n else {\n if (a.substr(i, starttag.length) == starttag) {\n l++;\n }\n c += a.charAt(i);\n }\n }\n return "";\n }\n var tr = "<<" + e;\n var rw = "<<replacewith>>";\n var etr = "<<end" + e + ">>";\n var k = b.source.indexOf('>>', b.matchStart) + 2;\n var c, d;\n\t if (e == "timedcontinue") {\n\t d = b.source.slice(k);\n\t\tb.nextMatch = k + d.length;\n\t }\n else if (e == "timedreplace") {\n c = tagcontents(tr, rw, k);\n d = tagcontents((c ? rw : tr), etr, c ? b.nextMatch : k);\n }\n else if (e == "timedinsert") {\n d = tagcontents(tr, etr, k);\n }\n else if (e == "timedremove") {\n c = tagcontents(tr, etr, k);\n }\n var tm;\n tm = cssTimeUnit(f[0]);\n var h;\n if (c) {\n if (d) {\n g = insertElement(g, "span", null, "timedreplacements");\n }\n h = insertElement(g, "span", null, "timedreplacement timedremove");\n new Wikifier(h, c);\n if (d || e == "timedremove") {\n setTimeout(function () {\n h.classList.add("replacement-out");\n setTimeout(function () {\n h.parentNode.removeChild(h);\n }, 1000);\n }, tm);\n }\n }\n if (d) {\n var m = insertElement(g, "span", null, "timedreplacement timedinsert", d);\n m.style.display = "none";\n setTimeout(function () {\n if (m) {\n var t = m.firstChild ? m.firstChild.nodeValue : "";\n removeChildren(m);\n new Wikifier(m, t);\n m.style.display = "inline";\n m.classList.add("replacement-in");\n setTimeout(function () {\n m.classList.remove("replacement-in");\n }, 1);\n scrollWindowTo(m);\n }\n }, tm);\n }\n else if (!c && e != "timedremove") {\n throwError(g, "can't find matching end" + e);\n return;\n }\n }\n }\n macros['timedremove'] = macros['timedreplace'];\n macros['replacewith'] = macros['endtimedinsert'] = macros['endtimedremove'] = macros['endtimedreplace'] = {\n handler: function () {}\n }\n scrollWindowTo=function(E){var D=window.scrollY?window.scrollY:document.body.scrollTop;\n var G=J(E);if(!G){return;}var C=Math.abs(D-G);var B=0;var I=(D>G)?-1:1;var F=window.setInterval(H,25);\n function H(){B+=0.1;window.scrollTo(0,D+I*(C*Math.easeInOut(B)));if(B>=1){window.clearInterval(F);\n }}function J(N){var O=A(N);var P=O+N.offsetHeight;var K=window.scrollY?window.scrollY:document.body.scrollTop;\n var L=window.innerHeight?window.innerHeight:document.body.clientHeight;var M=K+L;\n if(O>=K){if(P>M){if(N.offsetHeight<L){return(O-(L-N.offsetHeight)+20);}else{return O;\n }}}}function A(K){var L=0;while(K.offsetParent){L+=K.offsetTop;K=K.offsetParent;}return L;\n }};\n}());
(function () {\n version.extensions['revisionMacros'] = {\n major: 1,\n minor: 2,\n revision: 0\n };\n\n function tagcontents(b, starttags, desttags, endtags, k) {\n function tagfound(i, e) {\n for (var j = 0; j < e.length; j++) {\n if (a.indexOf(e[j], i) == i) {\n return e[j];\n }\n }\n }\n var a = b.source.slice(k);\n var l = 0;\n var c = "";\n var tg;\n for (var i = 0; i < a.length; i++) {\n if (tg = tagfound(i, starttags)) {\n l++;\n }\n else if ((tg = tagfound(i, desttags)) && l == 0) {\n b.nextMatch = k + i + tg.length;\n return [c, tg];\n }\n else if (tg = tagfound(i, endtags)) {\n l--;\n if (l < 0) {\n return null;\n }\n }\n c += a.charAt(i);\n }\n return null;\n }\n macros['cycle'] = macros['insertion'] = macros['removal'] = macros['revision'] = macros['span'] = {\n handler: function (g, e, f, b) {\n var begintags = ["<<revision", "<<cycle", "<<insertion", "<<removal", "<<span"];\n var becomes = ["<<becomes>>", "<<gains>>"];\n var endtags = ["<<endrevision>>", "<<endcycle>>", "<<endinsertion>>", "<<endremoval>>", "<<endspan>>"];\n var name = f[0].replace(" ", "_");\n var k = b.source.indexOf('>>', b.matchStart) + 2;\n var c, vsns, vsn, i, cn, vtype;\n vsns = [];\n c = tagcontents(b, begintags, becomes.concat(endtags), endtags, k);\n if (c && endtags.indexOf(c[1]) == -1) {\n while (c) {\n vsns.push(c);\n c = tagcontents(b, begintags, becomes, endtags, b.nextMatch);\n }\n c = tagcontents(b, begintags, ["<<end" + e + ">>"], endtags, b.nextMatch);\n }\n if (!c) {\n throwError(g, "can't find matching end" + e);\n return;\n }\n vsns.push(c);\n i = 0;\n cn = 0;\n m = insertElement(g, "span", null, e + " " + name);\n if (vsns.length > 0) {\n h = insertElement(m, "span", null, "revision-span initial");\n }\n else {\n h = m;\n }\n if (e == "insertion") {\n h.style.display = "none";\n }\n h.setAttribute("data-enabled", (e != "insertion") + "");\n vsn = vsns.shift();\n h.tweecode = vsn[0];\n while (vsns.length > 0) {\n i += 1;\n vtype = vsn[1].slice(2, -2);\n vsn = vsns.shift();\n h = insertElement(m, "span", null, "revision-span " + vtype);\n h.tweecode = vsn[0];\n h.setAttribute("data-enabled", "false");\n h.style.display = "none";\n }\n h = m.firstChild;\n new Wikifier(h, h.tweecode);\n }\n }\n var de = "data-enabled";\n\n function revise(rt, rname) {\n var rall, r, rc, rcl, ind, ind2, curr, next, ins, rmv, cyc, rev, rnd;\n rev = (rt == "revert");\n rnd = (rt.indexOf("random") > -1);\n var rsp = "revision-span";\n\n function showVer(n) {\n n.innerHTML = "";\n new Wikifier(n, n.tweecode);\n n.setAttribute(de, "true");\n n.style.display = "inline";\n n.classList.remove(rsp + "-out");\n n.classList.add(rsp + "-in");\n if (n.timeout) clearTimeout(n.timeout);\n n.timeout = setTimeout(function () {\n n.classList.remove(rsp + "-in");\n }, 1);\n }\n\n function hideVer(n) {\n n.setAttribute(de, "false");\n n.classList.remove(rsp + "-in");\n n.classList.add(rsp + "-out");\n if (n.timeout) clearTimeout(n.timeout);\n n.timeout = setTimeout(function () {\n if (n.getAttribute(de) == "false") {\n n.classList.remove(rsp + "-out");\n n.style.display = "none";\n n.innerHTML = "";\n }\n }, 1000);\n }\n\n function doToGainerSpans(n, fn) {\n for (var k = n - 1; k >= 0; k--) {\n if (rc[k + 1].classList.contains("gains")) {\n fn(rc[k]);\n }\n else break;\n }\n }\n rall = document.getElementsByClassName(rname);\n for (var i = 0; i < rall.length; i++) {\n r = rall[i];\n rc = r.childNodes;\n ins = r.classList.contains("insertion");\n rmv = r.classList.contains("removal");\n cyc = r.classList.contains("cycle");\n rcl = rc.length - 1;\n ind = -1;\n for (var k = 0; k <= rcl; k++) {\n if (rc[k].getAttribute(de) == "true") {\n ind = k;\n }\n }\n if (ind == -1) {\n if (ins) {\n ind = -1;\n curr = null;\n }\n else if (rmv) {\n ind = rcl + 1;\n curr = null;\n }\n }\n else {\n if (rev) {\n ind -= 1;\n }\n curr = (ind >= 0 ? rc[ind] : (cyc ? rc[rcl] : null));\n }\n ind2 = ind;\n if (rnd) {\n ind2 = (ind + (Math.floor(Math.random() * rcl))) % rcl;\n }\n next = (ind2 < rcl ? rc[ind2 + 1] : (cyc ? rc[0] : null));\n var docurr = (rev ? showVer : hideVer);\n var donext = (rev ? hideVer : showVer);\n if (curr) {\n if (!(next && next.classList.contains("gains")) || rnd) {\n docurr(curr);\n doToGainerSpans(ind, docurr);\n }\n }\n if (next) {\n donext(next);\n if (rnd) {\n doToGainerSpans(ind2 + 1, donext);\n }\n }\n }\n }\n\n macros['revert'] = macros['revise'] = macros['randomise'] = macros['randomize'] = {\n handler: function (a, b, c) {\n var l, rev, rname;\n\n function disableLink(l) {\n l.style.display = "none";\n }\n\n function enableLink(l) {\n l.style.display = "inline";\n }\n\n function updateLink(l) {\n if (l.className.indexOf("random") > -1) {\n enableLink(l);\n return;\n }\n var rall = document.getElementsByClassName(rname);\n var cannext, canprev;\n for (var i = 0; i < rall.length; i++) {\n var r = rall[i];\n if (r.classList.contains("cycle")) {\n cannext = canprev = true;\n }\n else {\n var rc = r.childNodes;\n var rcl = rc.length;\n var ins = r.classList.contains("insertion");\n var rmv = r.classList.contains("removal");\n var rnd = rname.indexOf("random") > -1;\n var ind = -1;\n for (var k = 0; k < rc.length; k++) {\n if (rc[k].getAttribute(de) == "true") {\n ind = k;\n }\n }\n if (ind == -1 && (ins || rmv)) {\n (ins ? cannext = true : canprev = true);\n }\n if (ind > (ins ? -1 : 0)) {\n canprev = true;\n }\n if (ind > -1 && ind < (rmv ? rcl : rcl - 1)) {\n cannext = true;\n }\n }\n }\n var can = (l.classList.contains("revert") ? canprev : cannext);\n (can ? enableLink : disableLink)(l);\n }\n function toggleText(w) {\n w.classList.toggle(rl + "Enabled");\n w.classList.toggle(rl + "Disabled");\n w.style.display = ((w.style.display == "none") ? "inline" : "none");\n }\n var rl = "reviseLink";\n if (c.length < 2) {\n throwError(a, b + ' macro needs 2 parameters');\n return;\n }\n rname = c.shift().replace(" ", "_");\n l = Wikifier.createInternalLink(a, null);\n l.className = "internalLink " + rl + " " + rl + "_" + rname + " " + b;\n var v = "";\n var end = false;\n var out = false;\n if(c.length>1 && c[0][0] == "$") {\n v = c[0].slice(1);\n c.shift();\n }\n switch(c[c.length - 1]) {\n case "end":\n end = true;\n c.pop();\n break;\n case "out":\n out = true;\n c.pop();\n break;\n }\n var h = state.history[0].variables;\n for(var i = 0; i < c.length; i++) {\n var on = (i == Math.max(c.indexOf(h[v]), 0));\n var d = insertElement(null, "span", null, rl + ((on) ? "En" : "Dis") + "abled");\n if(on) {\n h[v] = c[i];\n l.setAttribute("data-cycle", i);\n } else {\n d.style.display="none";\n }\n insertText(d, c[i]);\n l.appendChild(d);\n }\n l.onclick = function () {\n revise(b, rname);\n var t = this.childNodes;\n var u = this.getAttribute("data-cycle") - 0;\n var m = t.length;\n if((end || out) && u == m - (end ? 2 : 1)) {\n if (end) {\n var n = this.removeChild(t[u + 1]);\n n.className = rl + "End";\n n.style.display = "inline";\n this.parentNode.replaceChild(n, this);\n } else {\n this.parentNode.removeChild(this);\n return;\n }\n } else {\n toggleText(t[u]);\n u = (u + 1) % m;\n if(v) {\n h[v] = c[u];\n }\n toggleText(t[u]);\n this.setAttribute("data-cycle", u);\n }\n var lall = document.getElementsByClassName(rl + "_" + rname);\n for (var i = 0; i < lall.length; i++) {\n updateLink(lall[i]);\n }\n };\n disableLink(l);\n setTimeout(function () {\n updateLink(l);\n }, 1);\n }\n }\n macros['hoverrevise'] = {\n handler: function (a, b, c, d) {\n var endtags = ["<<end" + b + ">>"];\n var t = tagcontents(d, ["<<" + b + ">>"], endtags, endtags, d.source.indexOf('>>', d.matchStart) + 2);\n if (t) {\n var rname = c[0].replace(" ", "_");\n h = insertElement(a, "span", null, "hoverrevise hoverrevise_" + rname);\n new Wikifier(h, t[0]);\n h.onmouseover = function () {\n revise("revise", rname);\n }\n h.onmouseout = function () {\n revise("revert", rname);\n }\n }\n }\n }\n macros['becomes'] = macros['gains'] = macros['endrevision'] = macros['endinsertion'] = macros['endremoval'] = macros[\n 'endcycle'] = macros['endhoverrevise'] = {\n handler: function () {}\n }\n\n}());
version.extensions.timedgotoMacro={major:1,minor:2,revision:0};\nmacros["goto"]=macros.timedgoto={timer:null,handler:function(a,b,c,d){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return +(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return +(s.slice(0,-1))*1000||0\n}}}throwError(a,s+" isn't a CSS time unit");return 0}var t,d,m,s;\nt=c[c.length-1];d=d.fullArgs();m=0;if(b!="goto"){d=d.slice(0,d.lastIndexOf(t));\nm=cssTimeUnit(t)}d=eval(Wikifier.parse(d));if(d+""&&state&&state.init){if(macros["goto"].timer){clearTimeout(macros["goto"].timer)\n}s=state.history[0].passage.title;macros["goto"].timer=setTimeout(function(){if(state.history[0].passage.title==s){state.display(d,a)\n}},m)}}};
(function () {\n version.extensions['timedloopMacro'] = {\n major: 1,\n minor: 1,\n revision: 0\n };\n macros['timedloop'] = {\n handler: function (g, e, f, b) {\n function cssTimeUnit(s) {\n if (typeof s == "string") {\n if (s.slice(-2).toLowerCase() == "ms") {\n return Number(s.slice(0, -2)) || 0;\n }\n else if (s.slice(-1).toLowerCase() == "s") {\n return Number(s.slice(0, -1)) * 1000 || 0;\n }\n }\n throwError(g, s + " isn't a CSS time unit");\n return 0;\n }\n\n function tagcontents(starttag, endtag, k) {\n var a = b.source.slice(k);\n var l = 0;\n var c = "";\n for (var i = 0; i < a.length; i++) {\n var w = endtag.length;\n if (a.substr(i, w) == endtag) {\n if (l == 0) {\n b.nextMatch = k + i + w;\n return c;\n }\n else {\n l--;\n c += a.charAt(i);\n }\n }\n else {\n if (a.substr(i, starttag.length) == starttag) {\n l++;\n }\n c += a.charAt(i);\n }\n }\n return "";\n }\n var tl = "<<" + e;\n var etl = "<<end" + e + ">>";\n var k = b.source.indexOf('>>', b.matchStart) + 2;\n var d = tagcontents(tl, etl, k);\n var tm;\n tm = cssTimeUnit(f[0]);\n var h;\n if (d) {\n var m = insertElement(g, "span", null, "timedloop", null);\n new Wikifier(m, d);\n setTimeout(function to() {\n if (m && elexists(m)) {\n var oldm = m;\n oldm.classList.add("replacement-out");\n setTimeout(function () {\n if (oldm) oldm.parentNode.removeChild(oldm);\n }, Math.min(tm, 1000));\n m = insertElement(null, "span", null, "timedloop replacement-in", null);\n new Wikifier(m, d);\n setTimeout(function () {\n if (m) m.classList.remove("replacement-in");\n }, 1);\n oldm.parentNode.insertBefore(m, oldm.nextSibling);\n scrollWindowTo(m);\n setTimeout(to, tm);\n }\n }, tm);\n }\n else {\n throwError(g, "can't find matching end" + e);\n return;\n }\n }\n }\n var elexists = function (e) {\n while (e = e.parentNode) {\n if (e === document) return true;\n }\n }\n macros['endtimedloop'] = {\n handler: function () {}\n }\n scrollWindowTo = function (E) {\n var D = window.scrollY;\n var G = J(E);\n if (!G) return;\n var C = Math.abs(D - G);\n var B = 0;\n var I = (D > G) ? -1 : 1;\n var F = window.setInterval(H, 25);\n\n function H() {\n B += 0.1;\n window.scrollTo(0, D + I * (C * Math.easeInOut(B)));\n if (B >= 1) {\n window.clearInterval(F)\n }\n }\n\n function J(N) {\n var O = A(N);\n var P = O + N.offsetHeight;\n var L = window.innerHeight;\n var M = D + L;\n if (O >= D && P > M) {\n return ((N.offsetHeight < L) ? O - (L - N.offsetHeight) + 20 : O)\n }\n }\n\n function A(K) {\n var L = 0;\n while (K.offsetParent) {\n L += K.offsetTop;\n K = K.offsetParent;\n }\n return L\n }\n }\n}());\n
AND
<<revision moreattempt>><<revision whattodo>><<revision step1>>Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\nЯ узнал её издалека по небольшой фигурке и пучку волос, завязанному на макушке.\n— Аня!..\n— Митя!..\nВспыхнули электрические огни, и всё вокруг замерло.\n \n<<timedinsert 5s>>За десять лет она почти не изменилась. Лишь полуночный труд и забота о больной матери провели под её глазами неглубокие морщинки. Она приехала в Сочи одна на пару недель, чтобы прийти в себя после изнурительного бракоразводного процесса.\n\n<<timedinsert 5s>>Держась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. <<revise step1 "Не сегодня">>.\n<<endtimedinsert>><<endtimedinsert>><<becomes>>Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\nЯ узнал её издалека по небольшой фигурке и пучку волос, завязанному на макушке.\n— Аня!..\n— Митя!..\nВспыхнули электрические огни, и всё вокруг замерло.\n\nЗа десять лет она почти не изменилась. Лишь полуночный труд и забота о больной матери провели под её глазами неглубокие морщинки. Она приехала в Сочи одна на пару недель, чтобы прийти в себя после изнурительного бракоразводного процесса.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Не сегодня.\n\n<<timedinsert 0.5s>>Я воровато сунул администратору пятитысячную купюру, и провожаемые его усталым взглядом мы начали подниматься по лестнице. На этаже никого не было. Заперев номер, я первым делом задвинул шторы, затем достал из шкафа шерстяные одеяла и плотно прижал их к щели внизу входной двери.\nОна сидела на кровати. Глаза её были чуть увлажнены.\n— У нас есть час до рассвета, — сказал я, садясь рядом и гладя её по плечу.\n— Знаю. Не будем терять времени. Вот это подойдёт.\nОна указала на стоявший в тёмном углу стул:\n— Мы используем его деревянные набалдашники как шкивы. Мне нужен твой ремень. У тебя есть ещё один?\nЯ поставил стул рядом с кроватью. Она ловко обхватила набалдашник ремнём и защёлкнула его концы у себя на затылке, после чего стала проверять получившуюся конструкцию на прочность.\n— А почему нельзя сделать это по старинке?\n— Логи. У них есть доступ к логам. Они читают всё.\nСобранная и слегка встревоженная, она казалась ещё красивей. Я поцеловал её в губы. \n— Скажи мне, что делать.\n— После того, как я удалю у себя краниальную часть, тебе нужно будет найти в затылочной доле вентильную матрицу и поместить в неё язычок пряжки, так, чтобы при натяжении ремня логический вентиль <<cyclinglink $gate1 "NOR" "XOR">> перемещался в позицию <<cyclinglink $gate2 "NOT" "AND" "OR">>. Помнишь, как это было в институтском симуляторе?\n— Это трудно забыть.\nМы оба рассмеялись нашим воспоминаниям о семестровой практике в Институте программных средств.\n— Ты тогда писала на гиперассемблере, и у тебя были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Я больше не хочу тебя терять.\nВнезапно она посерьёзнела.\n— Знаешь, — сказала она, — я тогда и вправду тебе изменила.\n— С кем, с Гороховым?\n— Нет, с biogram6.\n— Что это?\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nКорчась, я медленно сполз с кровати.\n— Митя, что с тобой?\nПрошло ещё какое-то время, прежде чем она поняла, что меня душит смех. И тогда, и раньше, и потом — между мной и всеми остальными женщинами вставал робот-биограф. Эти мерзавцы знают, как делать женщинам комплименты.\n— Да уж, роботы-биографы знают, как делать комплименты, — сказал я, немного отдышавшись.\nНо Аня уже не слышала меня. Видимо, она случайно потянула за ремень и запустила скрипт раньше времени.\n— Митя… — слабо сказала она.\nИз её рта шла розовая пена. <<revise whattodo "Я знал, что делать">><<revert whattodo "Я не знал, что делать">>.<<endtimedinsert>>\n<<endrevision>><<gains>><<if ($gate1 eq "XOR") and ($gate2 eq "AND")>><<timedinsert 0.5s>>\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Теперь они жёлтые.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, ты не думай, что он был чем-то лучше тебя.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они знают, как делать комплименты.\n— <<revise moreattempt "Что?..">><<revert moreattempt "Что?..">><<endtimedinsert>>\n<<elseif ($gate1 eq "XOR") and ($gate2 eq "OR")>>\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Теперь они голубые или жёлтые.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, ты был лучше него.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они не знают, как делать комплименты.\n— Что?..\n<<elseif ($gate1 eq "NOR") and ($gate2 eq "AND")>>\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Теперь они жёлтые, а не голубые.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф...\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела. Я спала с ним...\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они знают, как делать комплименты.\n— Что?..\n<<elseif ($gate1 eq "NOR") and ($gate2 eq "OR")>>\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, я его придумала.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела. С которым у меня якобы что-то было.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Ты умеешь делать комплименты.\n— Что?..\n<<elseif ($gate1 eq "XOR") and ($gate2 eq "NOT")>>\n— У тебя тогда были голубые глаза.\n— У меня тогда не было глаз, Митя.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, его тоже не было.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела. Которого не было.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Ничего не было, Митя.\n— Что?..\n<<elseif ($gate1 eq "NOR") and ($gate2 eq "NOT")>>\n— У тебя тогда были голубые глаза.\n— Не было.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — меня тоже нет.\n— Аня, о чём ты? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— И тебя нет, Митя. Ничего нет...\n— Что?..\n<<endif>><<endrevision>><<gains>>\n<<timedinsert 0.5s>>Я сел на кровать и выдохнул. Уже ничего нельзя было изменить. Неправильно подключенные во время последнего логаута вентили превратили отлаженный и многократно протестированный скрипт в машину уничтожения. Видимо, она злоупотребляла этим занятием и была не совсем внимательной на завершающем этапе. Хотя это было так на неё не похоже.\nМне оставалось только свернуть её тело, стереть память администратору гостиницы и дать дёру. И тут меня осенило: какой ещё робот-биограф? Его не было и не могло быть ни в этой игровой итерации.\nПерекомпилировать проект и посмотреть ещё раз? Рабочий день заканчивался, и моё отсутствие на проекте могло быть замечено. Но я решился на ещё одну [[попытку|taxi]].<<endtimedinsert>><<endrevision>>\n
Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\n<<revision why>>Я узнал её издалека по небольшой фигурке и пучку волос, завязанному на макушке.<<becomes>><br><<endrevision>>\n<<revision why>>— Аня!..\n— Митя!..\nВспыхнули электрические огни, и всё вокруг замерло.<<becomes>><br><br><br><br><<endrevision>>\n\nЗа десять лет она <<revision why>>почти не изменилась. Лишь полуночный труд и забота о больной матери провели под её глазами неглубокие морщинки. Она приехала в Сочи одна на пару недель, чтобы прийти в себя после изнурительного <<becomes>><<set $wayout to 1>>@@font-size:100%; @@ <marquee scrollamount="4" width="40%" direction="left" style="text-align:right;">Митя, я спрятала здесь это послание для тебя. Не могла сказать тебе об этом прямо, поскольку мой аккаунт украли, и сейчас с тобой общается ненастоящая «Аня». Всё, что тебе нужно, это сказать, что ты не серьёзно, что ты — это ты и что ты по-прежнему любишь меня, иначе </marquee> @@font-size:100%; @@<<endrevision>>бракоразводного процесса.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Не сегодня.\n\nЯ воровато сунул администратору пятитысячную купюру, и провожаемые его усталым взглядом мы начали подниматься по лестнице. На этаже никого не было. Заперев номер, я первым делом задвинул шторы, затем достал из шкафа шерстяные одеяла и плотно прижал их к щели внизу входной двери.<<revision why>>\nОна сидела на кровати. Глаза её были чуть увлажнены.\n— У нас есть час до рассвета, — сказал я, садясь рядом и гладя её по плечу.\n— Знаю. Не будем терять времени. Вот это подойдёт.\nОна указала на стоявший в тёмном углу стул:\n— Мы используем его деревянные набалдашники как шкивы. Мне нужен твой ремень. У тебя есть ещё один?\nЯ поставил стул рядом с кроватью. Она ловко обхватила набалдашник ремнём и защёлкнула его концы у себя на затылке, после чего стала проверять получившуюся конструкцию на прочность.\n— А почему нельзя сделать это по старинке?\n— Логи. У них есть доступ к логам. Они читают всё.\nСобранная и слегка встревоженная, она казалась ещё красивей. Я поцеловал её в губы. \n— Скажи мне, что делать.\n— После того, как я удалю у себя краниальную часть, тебе нужно будет найти в затылочной доле вентильную матрицу и поместить в неё язычок пряжки, так, чтобы при натяжении ремня логический вентиль XOR перемещался в позицию AND. Помнишь, как это было в институтском симуляторе?\n— Это трудно забыть.\nМы оба рассмеялись нашим воспоминаниям о семестровой практике в Институте программных<<becomes>>@@font-family:monospace;font-size:150%;<br><br><br><br><br><br><br><br><br><br><br><br><br> @@<<endrevision>> средств.\n— Ты тогда писала на гиперассемблере, и у тебя были голубые глаза.\n<<revision why>>— Они у меня по-прежнему голубые, <<becomes>>@@font-family:monospace;font-size:150%; @@<<endrevision>>Митя.\n— Я больше не <<revision why>>хочу тебя терять.<<becomes>>@@font-family:monospace;font-size:150%; @@<<endrevision>>\nВнезапно она посерьёзнела.\n— Знаешь, — сказала она, — я тогда и вправду тебе изменила.\n— С кем, c <<revision why>>Гороховым?<<becomes>> <<endrevision>>\n— Н<<revision why>>ет, с biogram6.<<becomes>>@@font-family:monospace;font-size:150%; @@6.<<endrevision>>\n— Что это?\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nКорчась, я медленно сполз с кровати.\n— Митя, что с тобой?\nПрошло ещё какое-то время, прежде чем она поняла, что<<revision why>> меня душит смех. И тогда, и раньше, и потом — между мной и всеми остальными женщинами вставал робот-биограф. Эти мерзавцы знают, как делать женщинам комплименты.\n— Да уж, роботы-биографы знают, как делать комплименты, — сказал я, немного отдышавшись.\nНо Аня уже не слышала меня. Видимо, она случайно потянула за ремень и запустила скрипт раньше времени.\n— Митя… — слабо сказала она.\nИз её рта шла <<becomes>>@@font-family:monospace;font-size:150%;<br><br><br><br><br><br><br> @@<<endrevision>>розовая пена. Я знал, что делать.\n\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Теперь они пожелтели.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, ты не думай, что он был чем-то лучше тебя.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они знают, как делать комплименты.\n— Чт<<revision why>>о?..<<becomes>> <<endrevision>>\n\nЯ сел на кровать и выдохнул. Уже ничего нельзя было изменить. Неправильно подключенные во время последнего логаута вентили превратили отлаженный и многократно <<revision why>>протестированный скрипт в машину убийства. Видимо, <<becomes>>@@font-family:monospace;font-size:150%; @@<<endrevision>>она злоупотребляла этим занятием и была не совсем внимательной на завершающем этапе. Хотя это было так на неё <<revision why>>не похоже.<<becomes>> <<endrevision>>\n<<revision why>>Мне оставалось только <<becomes>>@@font-family:monospace;font-size:150%; @@<<endrevision>>свернуть её тело, стереть память администратору гостиницы и дать дёру. И тут меня осенило: какой ещё робот-биограф? Его не было и не могло быть ни в одной из версий игры.\nПерекомпилировать проект и посмотреть ещё раз? Рабочий день <<revision why>>заканчивался, и <<becomes>>@@font-family:monospace;font-size:150%; @@<<endrevision>>моё отсутствие на проекте могло быть замечено. Но я решился на <<revision why>>ещё одну попытку.<<becomes>> <<endrevision>>\n\nДержась за руки, мы вышли из ресторана и стали ловить<<revision why>> такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Если ты в последний раз всё сделала по инструкции.\n— Митя, запомни: если я вдруг начну что-то говорить про робота-биографа…\n— Вот сейчас, например!\n— Нет-нет, прямо перед логаутом.\nЯ обратил <<becomes>>@@font-family:monospace;font-size:150%;<br> <br><br><br><br><br> @@<<endrevision>>внимание на то, что такси всё не появлялось. В прошлый раз к этому моменту оно уже сверкало издали жёлтыми фарами.\n— Аня, какого цвета у тебя глаза? — спросил я, глядя на дорогу.\n— Ты знаешь, что голубого.\n— Тогда какого цвета фары у этой машины?\nВ этот момент в конце улицы возникла пара огоньков.\n— Митя…\n— Мы должны сделать это прямо в ней. Водитель передаёт им все логи, но если мы провернём это сразу, он не успеет...\n\nНаверное, у «Ани» тоже заканчивалось рабочее время, потому что её героиня постоянно замирала и переставала отвечать на вопросы. Но это было уже <<revision why>>неважно. Главное — успеть сделать логаут, пока такси не подъехало к гостинице. Задняя часть Аниного черепа скатилась куда-то под ноги, времени искать её не было. Мне ещё требовалось переключить вентили в своей затылочной доле. В целом, план Ани был оригинален, и нужно думать, что без осложняющих <<becomes>>@@font-family:monospace;font-size:150%;<br><br> @@<<endrevision>>обстоятельств он прекрасно работал. Возможно, она действительно когда-то связалась с роботом-биографом, а тот переписал все её данные. Никогда нельзя связываться с роботами-биографами, даже если это молодой предприниматель-миллионер или мисс Сочи.\nЯ дёрнул ремень, Аня резко откинулась назад. Мы как раз в этот момент совершали крутой поворот на T-образном <<revision why>>перекрёстке. Справа в окне светилось море.<<becomes>>@@font-family:monospace;font-size:150%; @@<<endrevision>>\nХак системы состоял в том, чтобы изменить в конфигурируемой микросхеме положение логического вентиля XOR («исключающее ИЛИ») на AND («И»): тогда при обнулении регистра с помощью операции <<revision why>>XOR (в этом случае один и тот же регистр используется в качестве обоих операндов: @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;xor eax, eax@@) он сохранял своё последнее значение (@@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;and eax, eax@@ даёт @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;eax@@). Поскольку это использование вентиля XOR было при запуске первым и последним, такая подмена ничем серьёзным не грозила. Нужно было только сохранить после загрузки значение регистра и сразу же перезапустить систему с восстановленными настройками. В регистре хранился заводской номер сборки, по которому можно было получить доступ к управлению консолью. Остальное<<becomes>>@@font-family:monospace;font-size:150%;<br> <br><br> @@<<endrevision>> было рутиной.\nКажется, всё шло как положено. Когда я вернулся из бессознательного состояния, Аня уже ждала меня. По моим подсчётам, у нас оставалось до прибытия три минуты. Водитель такси всё понял, но, видимо, думал, что ему достаточно просто довезти нас до места и передать информацию. Скорее всего, новичок.\nИтак, сейчас.\n\nАвгустовский ветер шевелил. Закатное солнце окрашивало. Сочинская набережная наполнялась.\nЯ узнал.\n— Аня!..\n— Митя!..\nВспыхнули, и замерло.\n<<timedinsert 0.2s>>\n— Мне кажется, у нас получилось, — сказала она, улыбаясь в темноте.\nБыл слышен только её голос и шум прибоя.\n— И всё ради этого? Я думал, что в новой версии логаут будет чем-то действительно сногсшибательным. Вроде посещения загробного мира или слияния с африканской флорой.\n— Я тоже так думала. Но потом поняла, что так и должно быть. Я ведь не в первый раз играю на этом уровне сложности.\n— То есть то, что мы сидим сейчас на ночном сочинском пляже и пьём вино, — это, по-твоему, и есть обещанное сценарное решение?\n— Если честно, я не знаю. Возможно, их гораздо больше — мне известно лишь около десятка. Возможно, там вообще используется процедурная генерация. Я о другом: у нас наконец-то получилось нормально поговорить. Спустя десять лет.\n— Ты говоришь, как робот-биограф!\n— Кстати, обрати внимание на то, что эта ветка оказалась не до конца раскрытой.\n— Разумеется. Потому что робот-биограф — это я.\n— Ты серьёзно?\n— <<cycle serious>><<revise serious "Да.">><<gains>><<timedcontinue 0.2s>><<set $wayout to 0>> Разработана легенда, согласно которой я работаю в офисе и тайком играю в //Logout 4//, а на самом деле я скрипт, который просто обходит все сюжетные ветки и собирает информацию о персонажах для одной букмекерской конторы.\n— Это печально.\n— Не более печально, чем вся наша так называемая игровая жизнь.\n— Печально то, что ты сейчас говоришь неправду, Митя.\n— Это ещё <<revise why "почему">><<revert why "почему" end>>?<<revision why>> <<becomes>><<timedcontinue 0.2s>>\n\t Я почувствовал, как она отодвигается от меня. \n— Где сигареты?\n— Может быть, ты тоже робот-биограф. Зачем тебе курить?\n— Несмешно. \n— Держи. Так почему я говорю неправду?\n— Потому что посмотри, во что превратился рассказ: он весь в дырах, в разрывах. <<timedremove 14s >>Ты не робот-биограф, Митя, ты обычный <<endtimedremove>><<timedremove 13s >>non-player character, искусственный интеллект от компании //AND//. <<endtimedremove>><<timedremove 12s >>Сторонний код обычно более-менее опрятен, а код, <<endtimedremove>><<timedremove 11s >>написанный индусами из //AND//, всегда полон багов — <<endtimedremove>><<timedremove 10s >>это всем хорошо известно.<<endtimedremove>>/%end revision why%/<<endrevision>><<becomes>><<revise serious "Нет, шучу." end>><<if $wayout eq 1>><<timedcontinue 0.2s >> Я — это я. И я по-прежнему люблю тебя.\n\nВ этот момент пляж озарился ярко-белым светом, послышались знакомые голоса и шум офисной жизни. Это значило одно из двух: либо упал игровой сервер, либо до меня всё-таки добрались. Если верно последнее, то меня опять лишат квартальной премии и я не попаду в недельную турнирую таблицу.\n<<timedcontinue 0.2s >><<goto "gorohov">><<else>> Но я не тот, за кого ты меня принимаешь. Всё дело в тех вентилях...\n— Выслушай меня, Митя, — вдруг с надрывом сказала она, — ты никогда меня не дослушивал. Дело в том, что я не перезапускала систему после изменения положения вентилей. Программа продолжала работать так, как если бы операция «исключающего ИЛИ» была операцией «И». Иными словами, всё, что при нормальном исполнении разделялось на несоизмеримые миры, на разные сюжетные линии, в моём мире продолжало сосуществовать. Это то, что я пыталась сказать тебе, когда ты впервые заподозрил меня в измене. И ты, и Горохов, и тысячи других мужчин вращались вокруг меня, словно звёзды по непересекающимся орбитам, и с каждым из них я была счастлива. И тебе в моей вселенной было отведено место ничуть не меньшее, чем Горохову, звёздам, растениям, атомам и…\n— И?..<<set $wayout to 0>><<endif>>/%end cycle serious%/<<endcycle>><<endtimedinsert>><<set $andann to 1>>
jquery:on\nhash:off\nbookmark:on\nmodernizr:off\nundo:off\nobfuscate:off\nexitprompt:off\nblankcss:off\n
version.extensions.cyclinglinkMacro={major:3,minor:3,revision:0};\nmacros.cyclinglink={handler:function(a,b,c){var rl="cyclingLink";\nfunction toggleText(w){w.classList.remove("cyclingLinkInit");\nw.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");\nw.style.display=((w.style.display=="none")?"inline":"none")}switch(c[c.length-1]){case"end":var end=true;\nc.pop();break;case"out":var out=true;c.pop();break}var v="";if(c.length&&c[0][0]=="$"){v=c[0].slice(1);\nc.shift()}var h=state.history[0].variables;if(out&&h[v]===""){return\n}var l=Wikifier.createInternalLink(a,null);l.className="internalLink cyclingLink";\nl.setAttribute("data-cycle",0);for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,"cyclingLinkInit cyclingLink"+((on)?"En":"Dis")+"abled");\nif(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}insertText(d,c[i]);if(on&&end&&i==c.length-1){l.parentNode.replaceChild(d,l)\n}else{l.appendChild(d)}}l.onclick=function(){var t=this.childNodes;\nvar u=this.getAttribute("data-cycle")-0;var m=t.length;toggleText(t[u]);\nu=(u+1);if(!(out&&u==m)){u%=m;if(v){h[v]=c[u]}}else{h[v]=""}if((end||out)&&u==m-(end?1:0)){if(end){var n=this.removeChild(t[u]);\nn.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}return}toggleText(t[u]);\nthis.setAttribute("data-cycle",u)}}};
<<set $wayout to 0>>\n<<set $andann to 0>>
<h1>[[ANN|main]]</h1><<set $wayout to 0>>\n<<set $andann to 0>>
/* Your story will use the CSS in this passage to style the page.\nGive this passage more tags, and it will only affect passages with those tags.\nExample selectors: */\n\nbody {\n\t/* This affects the entire page */\n\tbackground: #F5F5F5;\n\tcolor: #000000;\n}\n.passage {\n\t/* This only affects passages */\n\t\n\tbackground: #F5F5F5;\n\tcolor: #000000;\t\n\tfont-family: 'Times New Roman', Georgia, Times, serif;\n\tfont-size: 14pt;\n}\n.passage a {\n\t/* This affects passage links */\n\tbackground: #F5F5F5;\t\n\tcolor: #000000;\n\tfont-family: 'Times New Roman', Georgia, Times, serif;\n\tfont-size: 14pt;\n\tfont-weight:normal;\n\t\n}\n.passage a:hover {\n\t/* This affects links while the cursor is over them */\n\tbackground: #F5F5F5;\n\tcolor: #000000;\n\tfont-family: 'Times New Roman', Georgia, Times, serif;\n\tfont-size: 14pt;\n\tfont-weight:normal;\n\t\n}\n\n#sidebar {\n\tdisplay: none;\n\twidth: 0em;\n}\t\n\t\n#passages {\n\tborder-left: 0;\n}\n\n#credits {\n\tdisplay: none;\n}\t\n\t
.replacement-in {\n\topacity: 0;\n}\n.timedreplacement {\n\ttransition: 2s;\n\t-webkit-transition: 2s;\n}\n.replacement-out {\n\tdisplay:none;\n}
/* Your story will use the CSS in this passage to style the page.\nGive this passage more tags, and it will only affect passages with those tags.\nExample selectors: */\n\nbody {\n\t/* This affects the entire page */\n\tbackground: #F5F5F5;\n\tcolor: #000000;\n}\n.passage {\n\t/* This only affects passages */\n\t\n\tbackground: #F5F5F5;\n\tcolor: #000000;\t\n\tfont-family: 'Times New Roman', Georgia, Times, serif;\n\tfont-size: 50pt;\n\n}\n.passage a {\n\t/* This affects passage links */\n\tbackground: #000000;\t\n\tcolor: #F5F5F5;\n\tfont-family: 'Times New Roman', Georgia, Times, serif;\n\tfont-size: 50pt;\n\t\n}\n.passage a:hover {\n\t/* This affects links while the cursor is over them */\n\t\tbackground: #F5F5F5;\n\tcolor: #000000;\t\n\tfont-family: 'Times New Roman', Georgia, Times, serif;\n\tfont-size: 50pt;\n\t\n}
.revision-span-in\n {\n\topacity: 0;\n}\n.revision-span:not(.revision-span-out) {\n\t\ntransition: 2s;\n\t-webkit-transition: 2s;\n}\n.revision-span-out {\n\t\nposition:absolute;\n\topacity: 0;\n}\n
Anonymous
<<revision joke>>Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\nЯ узнал её издалека по небольшой фигурке и пучку волос, завязанному на макушке.\n— Аня!..\n— Митя!..\nВспыхнули электрические огни, и всё вокруг замерло.<<becomes>>Августовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\n\nЯ опознала его по неестественным движениям, свойственных скорее игровому боту, чем человеческому игроку. Отличная возможность заработать фраг. Это будет нетрудно, поскольку компания //AND// не слишком-то много усилий прикладывает для совершенствования искусственного интеллекта.<<endrevision>>\n\nЗа десять лет она почти не изменилась. Лишь полуночный труд и забота о больной матери провели под её глазами неглубокие морщинки. Она приехала в Сочи одна на пару недель, чтобы прийти в себя после изнурительного бракоразводного процесса.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Не сегодня.\n\nЯ воровато сунул администратору пятитысячную купюру, и провожаемые его усталым взглядом мы начали подниматься по лестнице. На этаже никого не было. Заперев номер, я первым делом задвинул шторы, затем достал из шкафа шерстяные одеяла и плотно прижал их к щели внизу входной двери.\nОна сидела на кровати. Глаза её были чуть увлажнены.\n— У нас есть час до рассвета, — сказал я, садясь рядом и гладя её по плечу.\n— Знаю. Не будем терять времени. Вот это подойдёт.\nОна указала на стоявший в тёмном углу стул:\n— Мы используем его деревянные набалдашники как шкивы. Мне нужен твой ремень. У тебя есть ещё один?\nЯ поставил стул рядом с кроватью. Она ловко обхватила набалдашник ремнём и защёлкнула его концы у себя на затылке, после чего стала проверять получившуюся конструкцию на прочность.\n— А почему нельзя сделать это по старинке?\n— Логи. У них есть доступ к логам. Они читают всё.\nСобранная и слегка встревоженная, она казалась ещё красивей. Я поцеловал её в губы.\n— Скажи мне, что делать.\n— После того, как я удалю у себя краниальную часть, тебе нужно будет найти в затылочной доле вентильную матрицу и поместить в неё язычок пряжки, так, чтобы при натяжении ремня логический вентиль XOR перемещался в позицию AND. Помнишь, как это было в институтском симуляторе?\n— Это трудно забыть.\nМы оба рассмеялись нашим воспоминаниям о семестровой практике в Институте программных средств.\n— Ты тогда писала на гиперассемблере, и у тебя были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Я больше не хочу тебя терять.\nВнезапно она посерьёзнела.\n— Знаешь, — сказала она, — я тогда и вправду тебе изменила.\n— С кем, c Гороховым?\n— Нет, с biogram6.\n— Что это?\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nКорчась, я медленно сполз с кровати.\n— Митя, что с тобой?\nПрошло ещё какое-то время, прежде чем она поняла, что меня душит смех. И тогда, и раньше, и потом — между мной и всеми остальными женщинами вставал робот-биограф. Эти мерзавцы знают, как делать женщинам комплименты.\n— Да уж, роботы-биографы знают, как делать комплименты, — сказал я, немного отдышавшись.\nНо Аня уже не слышала меня. Видимо, она случайно потянула за ремень и запустила скрипт раньше времени.\n— Митя… — слабо сказала она.\nИз её рта шла розовая пена. Я знал, что делать.\n\n— У тебя тогда были голубые глаза.\n— Они у меня по-прежнему голубые, Митя.\n— Теперь они пожелтели.\nАня принялась аккуратно отделять заднюю часть своего черепа.\n— Знаешь, — внезапно посерьёзнев, сказала она, — тот робот-биограф, ты не думай, что он был чем-то лучше тебя.\n— Аня, какой робот? Будь осторожна, не запускай скрипт, пока я не переключу вентили.\n— Робот-биограф. Экспериментальная модель из соседнего отдела.\nЯ внимательно посмотрел на неё: да, теперь всё было готово.\n— Ты достаточно надёжно закрепила?..\n— Они знают, как делать комплименты.\n— Что?..\n\nЯ сел на кровать и выдохнул. Уже ничего нельзя было изменить. Неправильно подключенные во время последнего логаута вентили превратили отлаженный и многократно протестированный скрипт в машину убийства. Видимо, она злоупотребляла этим занятием и была не совсем внимательной на завершающем этапе. Хотя это было так на неё не похоже.\nМне оставалось только свернуть её тело, стереть память администратору гостиницы и дать дёру. И тут меня осенило: какой ещё робот-биограф? Его не было и не могло быть ни в одной из версий игры.\nПерекомпилировать проект и посмотреть ещё раз? Рабочий день заканчивался, и моё отсутствие на проекте могло быть замечено. Но я решился на ещё одну попытку.\n\nДержась за руки, мы вышли из ресторана и стали ловить такси. Она прошептала:\n— А если узнают?..\n— Не узнают. Если ты в последний раз всё сделала по инструкции.\n— Митя, запомни: если я вдруг начну что-то говорить про робота-биографа…\n— Вот сейчас, например!\n— Нет-нет, прямо перед логаутом.\nЯ обратил внимание на то, что такси всё не появлялось. В прошлый раз к этому моменту оно уже сверкало издали жёлтыми фарами.\n— Аня, какого цвета у тебя глаза? — спросил я, глядя на дорогу.\n— Ты знаешь, что голубого.\n— Тогда какого цвета фары у этой машины?\nВ этот момент в конце улицы возникла пара огоньков.\n— Митя…\n— Мы должны сделать это прямо в ней. Водитель передаёт им все логи, но если мы провернём это сразу, он не успеет...\n\nНаверное, у «Ани» тоже заканчивалось рабочее время, потому что её героиня постоянно замирала и переставала отвечать на вопросы. Но это было уже неважно. Главное — успеть сделать логаут, пока такси не подъехало к гостинице. Задняя часть Аниного черепа скатилась куда-то под ноги, времени искать её не было. Мне ещё требовалось переключить вентили в своей затылочной доле. В целом, план Ани был оригинален, и нужно думать, что без осложняющих обстоятельств он прекрасно работал. Возможно, она действительно когда-то связалась с роботом-биографом, а тот переписал все её данные. Никогда нельзя связываться с роботами-биографами, даже если это молодой предприниматель-миллионер или мисс Сочи.\nЯ дёрнул ремень, Аня резко откинулась назад. Мы как раз в этот момент совершали крутой поворот на T-образном перекрёстке. Справа в окне светилось море.\nХак системы состоял в том, чтобы изменить в конфигурируемой микросхеме положение логического вентиля XOR («исключающее ИЛИ») на AND («И»): тогда при обнулении регистра с помощью операции XOR (в этой операции один и тот же регистр используется на позиции обоих операндов: @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;xor eax, eax@@) он сохранял своё последнее значение (@@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;and eax, eax@@ не менят значение @@font-family: Geneva, Arial, Helvetica, sans-serif;font-size:13pt;eax@@). Поскольку это использование вентиля XOR было при запуске первым и последним, такая подмена проходила незаметно для пользователя. Нам нужно было только сохранить после загрузки значение регистра и сразу же перезапустить систему с восстановленными настройками. Дело в том, что в этом регистре хранился заводской номер сборки, по которому можно было получить доступ к управлению консолью. Остальное было рутиной.\nКажется, всё шло как положено. Когда я вернулся из бессознательного состояния, Аня уже ждала меня. По моим подсчётам, у нас оставалось до прибытия три минуты. Водитель такси всё понял, но, видимо, думал, что ему достаточно просто довезти нас до места и передать информацию. Скорее всего, новичок.\nИтак, сейчас.\nАвгустовский ветер шевелил. Закатное солнце окрашивало. Сочинская набережная наполнялась.\nЯ узнал.\n— Аня!..\n— Митя!..\nВспыхнули, и замерло.\n\n— Мне кажется, у нас получилось, — сказала она, улыбаясь в темноте.\nБыл слышен только её голос и шум прибоя.\n— И всё ради этого? Я думал, что в новой версии логаут будет чем-то действительно сногсшибательным. Вроде посещения загробного мира или слияния с африканской флорой.\n— Я тоже так думала. Но потом поняла, что так и должно быть. Я ведь не в первый раз играю на этом уровне сложности.\n— То есть то, что мы сидим сейчас на ночном сочинском пляже и пьём вино, — это, по-твоему, и есть обещанное сценарное решение?\n— Если честно, я не знаю. Возможно, их гораздо больше — мне известно лишь около десятка. Возможно, там вообще используется процедурная генерация. Я о другом: у нас наконец-то получилось нормально поговорить. Спустя десять лет.\n— Ты говоришь, как робот-биограф!\n— Кстати, обрати внимание на то, что эта ветка оказалась не до конца раскрытой.\n— Разумеется. Потому что робот-биограф — это я.\n— Ты серьёзно?\n— <<revise joke "Нет, шучу.">><<revert joke "Нет, шучу.">><<revision joke>> Я — это я. И я по-прежнему люблю тебя.\n\nВ этот момент пляж озарился ярко-белым светом, послышались знакомые голоса и шум офисной жизни. Это значило одно из двух: либо упал игровой сервер, либо до меня всё-таки добрались. Если верно последнее, то меня опять лишат квартальной премии и я не попаду в недельную турнирую таблицу.\n<<timedcontinue 0.2s >>\nВнезапно я почувствовал на своём плече чью-то руку. Это был Горохов, он ухмылялся.\n— Ну что, как улов? Или ты опять поддался на романтическую провокацию? Ты же знаешь, что в //Logout// это излюбленный способ обвести игрока вокруг пальца.\n— Я почти расколол её. Или его. Говорил правду, а она не верила — ну, всё как обычно.\n— Попробуй ещё раз. Делай наоборот: говори не правду, а то, что думает другой игрок. В третьем //Logout// это работало.\nДовольный собой, Горохов пошёл дальше. Потом обернулся и добавил:\n— Это же не реальность, а текст, здесь ты можешь из букмекерской конторы в Ленинграде попасть прямо на Сочинский пляж!<<becomes>> На самом деле я другой робот — non-player character, искусственный интеллект, задачей которого является создание так называемого ложного логаута. Слышала о таких? Или ты серьёзно считаешь, что пить в финале вино на сочинском пляже — это всё, до чего могли додуматься сценаристы //Logout// за целых пять лет? Это <<revise trap "ловушка">><<revert trap "ловушка">>, Аня.<<revision trap>><<becomes>>\n<<timedcontinue 0.2s>>\nЯ был в полной уверенности, что победил в этой итерации и что мне оставалось совсем немного до места в турнирной таблице. Но тут я увидел её насмешку, и меня обдало жаром.\n— Да, Митя, — сказала она тихим голосом без интонации, — и эта ловушка для тебя...\n\n\n<<timedcontinue 7s >>\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n<<timedcontinue 0.01s>>\n\n\n\n\nАвгустовский ветер шевелил ветками пальм. Закатное солнце окрашивало в багрянец лица прохожих. Сочинская набережная наполнялась звуками музыки и смехом.\n\nЯ опознала его по неестественным движениям, свойственным скорее игровому боту, чем человеческому игроку. Отличная возможность заработать фраг. Это будет нетрудно, поскольку компания //AND// не слишком-то много усилий прикладывает для совершенствования искусственного интеллекта.\n\nБлагодаря помощи Горохова и фокусу с вентилями я отключила «Митю» и впервые в этом году попала в турнирную таблицу. [[Логаут|Start]] удался.<<set $andann to 1>>\n\n\n\n\n\n\n\n\n<<endrevision>><<endrevision>>