|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Доброго времени суток! Задачка возможно для профи не стоит выделенного яйца. Есть Excel и Nanocad. В dwg начерчен лабиринт - здание с коридорной системой. Нужно по данным Excel построить маршрут от точи А в точку Б не пересекая стены и лучше по осям коридоров. Изменение направления маршрута под пока только под прямым углом. Выполняем следующее: 1. Обрисовываем коридоры прямоугольниками, указывая точки доступных для перемещения областей, при этом в Excel формируем таблицу координат с полями: ID,x1,y1,x2,y2,x3,y3,x4,y4, тип данный vba: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
2. Указываем начальную и конечную точку маршрута (для упрощения уже внутри коридора) тип данный vba: Код: vbnet 1. 2. 3.
3. Формируем начальный вектор движения для каждой оси из значений -1,0,1 тип данный vba: Код: vbnet 1. 2. 3.
4. Задаем шаг приращения и множитель (при использовании масштабируемых чертежей) 5. Формируем массив с координатами точек смены маршрута 6. Рисуем маршрут в dwg полилинией Задача 5 в различных вариантах решений вызвала проблемы, даже если не говорить об оптимизации. все хорошо пока координаты точки после приращения по вектору в разрешенной текущей зоне: ta2.x <= a2.x <= ta1.x And ta2.y <= a2.y <= ta1.y где a2 - текущая исследуемая точка, ta1 координаты с минимальными значениями по осям x,y текущей разрешенной области ta2 координаты с максимальными значениями по осям x,y текущей разрешенной области если же следующая точка выходит за пределы, возникает вопрос: куда повернуть? Поворачивал и в стороны основного направления от точки А точке Б - появляется проблема при необходимости повернуть в другую сторону, чтобы выйти из лабиринта к целевой точке. Поворачивая случайно (поочередно перебирая направления) совсем запутался в том куда идет вектор и есть ли решение для данного направления, непонятно до какой точки предыдущего поворота вернуться для поиска нового решения. Подскажете пожалуйста пример кода не слишком сложный для построения точек (координат маршрута) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2014, 22:59 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
BobgosНужно по данным Excel построить маршрут от точи А в точку Б не пересекая стены по dwg ничего подсказать не могу, но по нахождению выхода из лабиринта можно использовать волновой алгоритм. Если лабиринт перенести в Excel, то решение можно достаточно легко сделать волновым алгоритмом. Как пример: https://yadi.sk/i/f0RrVpP5cpFYg ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2014, 23:32 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Михаил Ч.BobgosНужно по данным Excel построить маршрут от точи А в точку Б не пересекая стены по dwg ничего подсказать не могу, но по нахождению выхода из лабиринта можно использовать волновой алгоритм. Если лабиринт перенести в Excel, то решение можно достаточно легко сделать волновым алгоритмом. Как пример: https://yadi.sk/i/f0RrVpP5cpFYg полностью перенести наверно будет неправильно - дополнительные операции преобразования в ячейки, приведения к масштабу. Потом вернуть назад, с учетом скруглений, для переноса в excel вернется в dwg криво. Комментариев немного в файле. Можно пояснить принцип и последовательность операций - как это реализовано в Excel, привести ключевой код (название процедуры)? 1. Задаем начальное направление 2. Ищем точку в которой встречается препятствие. .... что дальше? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2014, 10:39 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, в примере Choose(i, 1, 0, -1, 0) - что такое? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2014, 10:49 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Михаил Ч.BobgosНужно по данным Excel построить маршрут от точи А в точку Б не пересекая стены по dwg ничего подсказать не могу, но по нахождению выхода из лабиринта можно использовать волновой алгоритм. Если лабиринт перенести в Excel, то решение можно достаточно легко сделать волновым алгоритмом. Как пример: https://yadi.sk/i/f0RrVpP5cpFYg Михаил, баг или что-то недопонял. Алгоритм из файла в тупик попадает. Трети не закрасил, и стал мотаться по кругу в области ячеек 20-30 по оси. Вопрос в следующем: перенести из dwg модель в Эксель тоже еще та задачка. Можете описать основной принцип волнового метода? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2014, 21:04 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Исходная тема с лабиринтом: http://perfect-excel.ru/publ/excel/makrosy_i_programmy_vba/stroim_labirint_i_pishem_programmu_dlja_poiska_vykhoda/7-1-0-57 По кнопке "Старт" запускается алгоритм написанный автором темы - Денисом Батьяновым, в основе которого "правило одной руки", поэтому решение может не всегда быть найдено. Мой алгоритм запускается нажатием на кнопку "Волновой алгоритм". Если выход есть, то он будет найден. авторв примере Choose(i, 1, 0, -1, 0) - что такое? Это выбор направления по значению переменной i: влево, вверх, вправо, вниз. Можете привести пример вашего лабиринта, чтобы понимать что именно нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2014, 23:18 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Михаил Ч., Пример лабиринта во вложении Задача - найти оптимальный путь (по длине) и начертить линии трасс по исходным данным, полученным при обработке чертежа и записанным в Excel) Черные - стены Оранжевые - доступные для прохода зоны (заносим при прорисовке в dwg зон в excel в табличку x1,y1,x2,y2,x3,y3,x4,y4) Зеленые - оси доступных для прохода зон (к ним нужно привязать линии) Широкие полилинии (синие, голубые и т.д. с различным ототбражением) - примеры маршрутов Фиолетовые кружки - точки начала и окончания (из vba запрашиваем ввод точки, чертим кружок определенного диаметра, вносим данные о точке в Excel. Каждая точка может быть как входной так и выходной Фиолетовая граница - общая область исследования http://i.imgur.com/fY3CkNw.png Данные о стартовой точке и финишной показываем на чертеже и передаем в excel.vba как координаты xyz1.x, xyz1.y (Double) После прокладки оптимального, поправок для лучшего отображения нескольких маршрутов для разных цветов - записываем маршрут в Excel, чтобы потом быстро прорисовать без поиска или ручной оптимизации положения линий. Ограничения проходов по ширине пока не рассматриваем. Возможно применимость предлагаемого места вызывает смуту, потому как нужно найти не выход из лабиринта, а конкретный путь от точки А к точке Б? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 12:02 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, в свое время использовал алгоритм "поиск в ширину" когда баловался и писал прогу по поиску маршрута в метро ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 13:07 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
HandKot, Указанный метод метод больше похоже на эффективное решение моей задачи. Но все равно потребуется позиционироваться в пространстве dwg, чтобы определить возможные точки маршрута. Для этого нужно или нет оцифровать в массив все пространство чертежа с необходимой дискретностью? Или оцифровать доступные области в координатах чертежей, затем найти прилегающие координаты областей - которые будут областями для возможной смены маршрута? - достаточно? А вот так не получится? 1. Иду вдоль первого выбранного вектора в направлении максимального отклонения по одной из осей точки А от точки Б. 2. Упираюсь в препятствие и поворачиваю по 2-м перпендикулярным векторам. 3. Проверяю доступность области по следующему шагу по новому вектору. Если после поворота по новому вектору нет доступной области на следующем шаге ветку направление от последнего поворота считаю без решения. 4. Повторяю 1-3 для всех решений перечислений пока не буду в пределах одного шага от цели 5. Фиксирую первое решение и его ветку вырисовываю. Последующие решения - опционально.... для построения более дешевого по разнице координат между поворотами. По идее самое дешевое решение появится первым. Поможете с кодом VBA? Уже третий подход и все в тупик. То одно, то другое приводит к краху идеи. Может примерчик какой для подобной задачи наваяем или подыщем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 14:31 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Если есть возможность построить граф по данному лабиринту (описать все возможные маршруты по соседним перекресткам с указанием расстояний, где перекресток - это вершина графа, расстояния между перекрестками - ребра графа) то задачу по нахождению кратчайшего пути от любой точки до любой другой можно с помощью алгоритма Дейкстры (или Левита или Форда-Беллмана или Флойда-Уоршелла) Примеры нахождения кратчайших путей по графам размещал здесь: http://www.excelworld.ru/forum/3-6656-1 Если задачу свети к построению графа по указанному лабиринту, то найти кратчайшие пути будет не сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2014, 12:04 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos , что-то пропустил продолжение темы. Как сказал Михаил Ч. надо построить граф по лабиринту. Здесь помочь мне сложно, т.к я не знаком с dwg Вот Вы постоянно говорите "вектор". То в случае графа вектор и есть ребро графа, т.е начало и конец вектора - вершины графа ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 08:32 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
HandKot Bobgos , что-то пропустил продолжение темы. Как сказал Михаил Ч. надо построить граф по лабиринту. Здесь помочь мне сложно, т.к я не знаком с dwg Вот Вы постоянно говорите "вектор". То в случае графа вектор и есть ребро графа, т.е начало и конец вектора - вершины графа так как построить граф по лабиринту описанному точками A(x1,y1);B(x2,y2);C(x3,y3);D(x4,y4) - разрешенные области - прямоугольники? и найти: а) оптимальный путь б) пересечение путей для разных трасс (из совсем несвязанных точек) Честно-задач навалило. Самому ваять не успевается, вижу код растет и явно что-то делаю не так. Хелп, дайте направления в виде примера кода ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 22:59 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Михаил Ч.Если есть возможность построить граф по данному лабиринту (описать все возможные маршруты по соседним перекресткам с указанием расстояний, где перекресток - это вершина графа, расстояния между перекрестками - ребра графа) то задачу по нахождению кратчайшего пути от любой точки до любой другой можно с помощью алгоритма Дейкстры (или Левита или Форда-Беллмана или Флойда-Уоршелла) Примеры нахождения кратчайших путей по графам размещал здесь: http://www.excelworld.ru/forum/3-6656-1 Если задачу свети к построению графа по указанному лабиринту, то найти кратчайшие пути будет не сложно. да, очень похоже, но как построит графы в моем случае в этом пробема ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 23:13 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, берем код из первого поста Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Я не знаю на каком принципе Вы будете её заполнять, но... если представить эту область вершиной графа, то получаем (код примерный, т.к давно с ВБ не работал) Код: vbnet 1. 2.
где paths() состоит из двух частей iD - идентификатор вершины iDNear - идентификатор смежной вершины для каждого iD , может быть несколько записей (по кол-ву смежных вершин) Думаю, что массив вершин и смежных вершин лучше представить в виде Dictionary или Collection ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 08:18 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
HandKotBobgos, берем код из первого поста Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Я не знаю на каком принципе Вы будете её заполнять, но... если представить эту область вершиной графа, то получаем (код примерный, т.к давно с ВБ не работал) Код: vbnet 1. 2.
где paths() состоит из двух частей iD - идентификатор вершины iDNear - идентификатор смежной вершины для каждого iD , может быть несколько записей (по кол-ву смежных вершин) Думаю, что массив вершин и смежных вершин лучше представить в виде Dictionary или Collection Id - идентификатор вершины, графа, которую еще нужно определить. Имеем на старте две вершины - точку начала и окончания. Как найти смежную вершину - точку в которой возможен поворот пути по коридорам областей. чтобы сначала заполнить граф. Код: vbnet 1. 2. 3.
Т.е. граф будет состоять из массива точек Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 10:25 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, я не работаю с dwg и не знаю как там что хранится Вы сначала определите, как распарсить файл, что в нем хранится и как. Тогда будет уже более продуктивный разговор ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 13:41 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
AFAIK dwg закрытый бинарный формат (хотя, раз другие его поддерживают, наверное уже полу-закрытый ))) ) Наверное проще сконвертировать DWG в DXF и парсить DXF. AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2014, 21:47 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
проблема не перевести из dwg в xls координаты. Вопрос как построить граф? считаем, что уже есть координаты областей по которым можно строить маршрут от точки А к точке Б. как построить граф и проложить маршрут - определить координат точек ломаной линии? Да еще и посчитать какой путь короче, для двух маршрутов найти точки пересечения? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 08:49 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgosпроблема не перевести из dwg в xls координаты. Вопрос как построить граф? считаем, что уже есть координаты областей по которым можно строить маршрут от точки А к точке Б. как построить граф и проложить маршрут - определить координат точек ломаной линии? Да еще и посчитать какой путь короче, для двух маршрутов найти точки пересечения? предоставьте больше данных (побольше строк и не в виде картинки) и как это выглядит графически. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2014, 13:51 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, метод правой (или левой руки) прост: двигаемся в любую сторону, не отрывая руку от стенки, пока не выйдем. Можно зациклиться, если есть внутренний цикл. Тогда будем бесконечно крутиться вокруг, значит надо помечать пройденное место. Собсно, и весь алгоритм - в детстве ещё читал. И выше уже писали: сначала построить граф, затем проверить на циклы в грАфе. А нужно ли искать кратчайший? Помимо указанных форматов есть открытый формат DOT, готовится в ноутпаде. Такой формат легко засасывается в ячейки эксел и при необходимости там и правится, и проверяется. digraph имя { //здесь навалом пишем все пары в любом порядке a1 -> b1; a1 -> b2; a1 -> b3; b2 -> c1; f1 -> b3; b2 -> c1; b2 -> f1; a1 -> d1; a1 -> d1; и т.д. } Если просто надо визуализировать для проверки, то можно использовать неприхотлтвый, но мощный открытый пакет GraphViz. В нём основные утилиты dot.exe - конвертер в каринки и dotty.exe - визуальный редактор графа. Если же надо программно обработать граф, то изначально есть 2 канонических представления графа. Вообще, граф == отображение {A} --> {A}x{A}, где {A}-множество вершин, которое отобрашается в их Декартово произведение. А по-русски: это вершины и рёбра вместе взятые. Ой, чей-то много написал ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2014, 17:49 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, на вопрос как построить граф? А что за координаты на рисунке. Народ имел ввиду, что вы создёте массив центральных точек на всех перекрёстках - это вершины графа. Или вопрос как автоматизировать нахождение перекрёстков, когда есть вершины криволинейных прямоугольников-коридоров? В последнем случае, если руками указать все перекрёстки , то их центры взять как среднеарифм. координат. Да, о представлениях графа. В языках давно есть готовые Tree-структуры. Если с чистого листа, то: либо "матрица вершин" (почти вся пустая), либо "списки инцидентности", которые похожи на формат DOT. Но вот программировать удобнее на списках, тк. уже есть готовые методы: следующий, предыдущий, пусто и т.д. Ну и две стратегии обхода всего графа: поиск "в ширину"/"в глубину" - всё равно всё пройденное запоминать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2014, 17:59 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
И чтоб мысль закончить. Алгоритм эмпирического блуждания по графу - тогда не надо никаких поворотов/векторов/углов и проч. Просто полагаем, что ребро графа - это коридор. Ну или алгоритм поиска пути, приближённого к короткому. При выборе способов ещё важно, насколько повторяемо будет это задание. Если один раз сделать, то можно и полувручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2014, 18:05 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
какой ещё вопрос остался? Bobgosпроблема не перевести из dwg в xls координаты. Вопрос как построить граф? считаем, что уже есть координаты областей по которым можно строить маршрут от точки А к точке Б. как построить граф и проложить маршрут - определить координат точек ломаной линии? Да еще и посчитать какой путь короче, для двух маршрутов найти точки пересечения? Если я правильно понял: имеем криволинейные полоски на плоскости, которые могут пересекаться, да? По типу топографической карты, рекка и её притоки + каналы и т.д. Или дороги на местности. А как карты векторизуют, они ведь пиксельные? Т.е. как превратить полоску в линию? Доморощенный и неудобный вариант: решение системы линейных неравенств вида: a1 *x +b1*y<=c1 a2 *x +b2*y>=c2, решение - это прямоугольник, отрезок, точка либо пусто. Два таких прямоугольника задают пересечение 2-х фрагментов "дорог". Находим все изолированные (или даже частично пересекрывающиеся парные пересечения) - это и будут перекрёстки. Для этого кластеризуем найденные пересечения. Центры найденных кластеров можно принять за перекрёстки. (Этот метод имеет погрешности) Универсальный метод "по гребню хребта". Каждый участок "дороги" сглаживаем окрестностным сглаживателем. В результате получаем вместо плоской дороги 3-хмерный вал (хребет на местности). Теоретически у хребта будет гребень (или узкое плато, идущее по вершине). Затем ищем точки пересечения гребней, т.е. 1-мерных линий. Но и тут есть некоторые нюансы, т.к. строгого пересечения может не быть. На qb я когда-то баловался, валяется черновик. авторКак найти смежную вершину - точку в которой возможен поворот пути по коридорам областей Например: Если в достаточно маленькой окрестности точки на линии есть точки другой линии. Здесь выбор за сглаживателем - это для каждой точки дороги просто взвешенная сумма всех её точек, попадающих в некоторую окрестность. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2014, 18:29 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
exp98, Не вовремя полетел винт на ноуте... Долго пытался находить смежные стороны у прямоугольников дорог, но уж очень сложен становится код, и граф получится не линий а полос. Спаибо за подсказки. Да, нужно для начала из прямоугольников сделать отрезки. Здесь координаты x1+(x2-x1)/2 нахожу центральные. Это видимо ребра графа? Пересечения ищу тупо перебирая с шагом скажем 10мм линию ребро графа на предмет нахождения с таким же отклонением (10мм) координаты у другого ребра. Вот тут понял, что метод в корне неверный.. Зная что мои векторы только вертикальных или горизонтальны думаю прще составить функцию описывающую каждый отрезок. Но как и как потом найти пересечения? Можно привести пример кода ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2014, 08:08 |
|
Поиск маршрута vba и dwg
|
|||
---|---|---|---|
#18+
Bobgos, добрый вечер,я случайно сюда щас гянул. Ваш вопрос мне вполне интересен теоретически, и чего смогу, то подскажу. Но ведь не я один такой "умный" в инете. Выше уже просили показать побольше данных. Добавляю просьбу: - примеры координат в ТЕКСТОВОМ виде,точек 100,например. И вообще, каков масштаб проблемы,т.е. порядок точек всего? - рисунок характерных перекрёстков, пусть даже и сделанный в пайнтбраше. Возможно пропорции перекрёстков окажутся важны. Задача ведь не элементарная. Когда будет понятно с алгоритмом, с кодом будет легче. Насколько я понимаю в технике программирования, то при обходах графов полезны рекурсивные вызовы функции со статическими переменными (либо их замена на глобально доступные переменные). Насчёт алгоритмов у меня появилась идея, но применима ли она здесь - надо посмотреть распределение точек с координатами. Из рисунка надо оценить сложность перекрёстков: "Ж"-обрАзные, Г-, Т-,Х-,"(", "|" и т.д ? Из последнего сообщения мне показалось, что Вы думали о графе, который строится из "стенок" коридоров,да? Я уверен, что здесь предлагался как раз граф "коридоров" и перекрёстков. Хотя м.б. подойдёт идея соединить стенки коридоров в цепочку рёбер,тогда граф т.ск. уже построен. Вопрос с функцией отрезков мне не очень понятен. Если есть уравнение 2-х прямых, то их т. пересечения вычисляется теоретически. В частности, для примера, пока Вы вполне можете руками в экселе сделать матрицу парных расстояний тех точек, которые определяют перекрёстки (как я понимаю - это углы коридоров). Лучше для статистики вообще любых точек, в т.ч. и на перекрёстках. Расстоянние самое Евклидовое sqrt( (x1-x2)^2 + (y1-y2)^2 ), впрочем можно обойтись без корня,т.к. нам важно их только сравнить. Затем вытягиваете матрицу в один столбец. Затем все смотрим ТОЧЕЧНУЮ диаграмму по этому столбцу. Есть подозрение, что даже визуально точки будут распадаться на кластеры. Дальнейшие выводы возможны после визуализации, но идея такая. Кластеры с минимальными значениями соответствуют перекрёсткам, но при этом ВСЕМ перекрёсткам. Чтобы отделить один от другого нужно с каждым парным расстоянием ассоциировать конкретные координаты этих точек. Т.о. точки получают признак "перекрёсток". Затем умно "кластеризуем" сами точки. Умозрительно говоря, два этих множества должны пересекаться как раз в местах перекрёстков. Это всё можно сделать формулами при помощи рук. Это всё делается только для того, чтобы нащупать канву алгоритма, а без характерных данных я дальше не фантазирую. Ну, есть ещё способ: превратить всё в растр и напустить векторизатор в автоматизированом режиме, а потом вытащить координаты и программировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2014, 17:27 |
|
|
start [/forum/topic.php?fid=61&msg=38821348&tid=2173670]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 317ms |
total: | 460ms |
0 / 0 |