Электронный замок с ключами ibutton

Электроника и автоматика на МК

Источник: http://www.picbasic.ru/index/86-81-5-3

Центральный замок с iButton для автомобиля

Читать все новости ➔

Для защиты от проникновения в автомобиль на­иболее распространены центральные замки с радиобрелками, однако существуют системы радио­перехвата их сигналов с целью последующего несанкционированного открытия дверей. В то же время возможно самостоятельное изготовление электронного замка с низкой себестоимостью.

Среди систем контроля доступа в последнее время широко распространены электромагнитные замки, использующие в качестве ключей кнопки iButton.

Для них разработано множество схем и программного обеспечения на базе различных микроконтроллеров, однако особенности данных схем делают сложным их применение в автомоби­ле в качестве центрального замка.

В основном это связано с необходимостью установки контактора на двери, а также такие схемы, как правило, позво­ляют только открывать дверь, тогда как централь­ные замки и открывают, и закрывают двери.

Тем не менее, в некоторых автомобилях, как, например, «Таврия», есть возможность вручную закрывать замок открытой двери с помощью двер­ной кнопки, если одновременно удерживать руч­ку в открытом положении, что удобнее, чем закры­вать дверь ключом.

Этим способом пользуются многие владельцы «Таврий». Личинка дверного замка автомобиля «Таврия» расположена отдель­но от ручки и имеет подходящие для iButton  размеры для монтажа.

Эти особенности делают воз­можной установку на автомобиль центрального замка с iButton, имеющего только режим открыва­ния дверцы автомобиля.

Схемотехника устройства

Принципиальная схема предлагаемого уст­ройства показана на рис.1. В качестве ключей использованы кнопки типа DS1990C. Для реа­лизации схемы был выбран контроллер типа ATTiny13A.

Для коммутации актуаторов использо­ван низковольтный мощный полевой транзистор типа AP60N03S, что позволило отказаться от ре­ле, а низкое сопротивление транзистора в откры­том состоянии делают его нагрев незначитель­ным, что позволило обойтись без радиатора.

Контроллер работает на низкой тактовой частоте – 600 кГц, что дополнительно снижает его энер­гопотребление. Для защиты входной цепи со стороны контактора iButton установлен стабили­трон VD1 и предохранитель F1.

Печатная плата разработана с учетом размещения ее в корпусе неисправного картриджа от плоттера. Транзистор использован в корпусе D2PAK и размещен со сто­роны печатных дорожек.

Предохранитель F1 должен быть рассчитан на ток не более, чем предельно допустимый для при­мененного в устройстве стабилитрона.

Транзистор /Т2 используется для подачи тревожного сигнала, однако к нему нельзя непосредственно подключать автомобильную сирену или другие сильноточные нагрузки – в этом случае необходимо установить дополнительное реле или изменить схему, приме­нив в качестве /Т2 транзистор типа AP60N03S или аналогичный.

Вместо указанного полевого транзистора /Т1 может быть использован практически любой по­добный из применяемых в преобразователях на­пряжения на материнских платах ПК. Можно так­же использовать любой n-канальный транзистор, рассчитанный на ток не менее 10 А и, желательно, на работу от ТТЛ логических уровней, например, типа IRL540NS, IRLZ34NS и т.п.

При замене /Т1 транзистором другого типа нужно убедиться, что он не перегревается после серии из 5-10 открываний подряд. Также полевой транзистор можно заменить биполярным n-p-n, с ограничительным резистором в цепи базы (напри­мер, КТ805БМ с резистором 270 Ом для одного актуатора).

Ещё лучше использовать мощный со­ставной транзистор, однако в этом случае, воз­можно, потребуется установить транзистор на радиатор, а также предварительно опробовать на устойчивость работы замка. В крайнем случае, всегда можно установить промежуточное реле, коммутирующее актуатор.

Конструкция устройства

Устройство в сборе, смонтированное в корпу­се картриджа от плоттера, показано на фото в на­чале статьи. Монтаж деталей на печатной плате показан на рис.2, транзистор VТ1 установлен на обратной стороне платы.Контактор  iButton (рис.

3) был изготовлен не­посредственно из штатной личинки дверного замка, у которой был обрезан корпус и удален центральный цилиндр. По оси корпуса с помощью изолирующих шайб был закреплен латунный винт.

К наружному концу винта в одном из вариантов был припаян корпус старого транзистора МП в ка­честве центрального контакта, в другом вариан­те была просто залужена головка винта – все за­висит от того, какие винты и шайбы окажутся в наличии.

Детали контактора показаны на рис.4. При из­готовлении контактора необходимо позаботиться о том, чтобы дождевая вода не проникала в него че­рез наружную шайбу, для чего ее нужно загермети­зировать с помощью эластичных шайб или любым герметиком.

Следует учитывать, что личинки раз­ных годов выпусков и разных изготовителей отли­чались формой и могут оказаться непригодными или слишком сложными для переделки. При невоз­можности самостоятельного изготовления можно приобрести и установить штатный контактор.

При установке замка в автомобиль возможны разные варианты. Можно установить только один замок на водительскую дверь.

Можно установить сразу два замка по одному на каждую дверь, что повышает надежность на случай повреждения одного из замков, например, подачей напряжения извне.

В этом случае, скорее всего, сгорит толь­ко предохранитель, однако открыть дверь обыч­ным способом будет уже невозможно.

Можно также установить один замок, к которо­му подключить актуаторы обоих передних дверей автомобиля. К одиночному замку можно подклю­чить как один контактор, так и два, в том числе и через раздельные предохранители.

В любом слу­чае не будет лишним предусмотреть возмож­ность аварийного открывания дверей, например, если разрядился автомобильный аккумулятор или замок вышел из строя по каким-либо другим при­чинам.

Подключение внешних цепей выполня­лось через винтовые клеммники, однако практи­ка показала, что предпочтительней для этих целей использовать разъемы.

При установке контактора на дверь тянуть «массу» непосредственно к нему не обязательно, однако следует иметь в виду, что контакт с кузовом через петли двери ненадежен, поэтому «массу» к двери нужно обязательно под­ключить отдельным проводом. В качестве приво­да использовались стандартные двухпроводные автомобильные актуаторы типа «Tiger T-2W».

Алгоритм работы замка

  1. При прикладывании к контактору известно­го ключа выдается открывающий импульс 0,1 с (длительность была определена эксперименталь­ным путем), после чего с интервалом 0,5 с прове­ряется, не был ли убран ключ, если ключ убран – система возвращается в исходное состояние. В случаях, если потребуются дополнительные от­крывающие импульсы, необходимо отнимать ключ и прикладывать его заново. Такой алгоритм вы­бран для предотвращения повреждения актуаторов от перегрева.
  2. При прикладывании к контактору неизвест­ного ключа выдается тревожный импульс длитель­ностью 0,1с (линия сигнализации «закорачивает­ся» на «массу»), затем после паузы 0,5 с система возвращается в исходное состояние
  3. .При нажатии кнопки «записи/стирания» и удержании ее порядка 10 с производится стира­ние памяти ключей, по окончании чего выдается открывающий импульс (в качестве сигнала завер­шения операции).
  4. При нажатии кнопки «записи/стирания» и прикладывании к контактору нового ключа произ­водится его запись, после чего выдается откры­вающий импульс. Всего в память контроллера можно записать коды восьми ключей. Ключи, уже имеющиеся в памяти микроконтроллера, повтор­но не записываются. Если память заполнена, то запись не производится, но открывающий импульс выдается все равно как сигнал завершения опера­ции, поэтому после записи ключа в память следу­ет проверить, открывает ли он замок – если нет, значит, вероятно, память уже заполнена.

Заключение

Следует помнить, что данный замок также не яв­ляется абсолютной защитой автомобиля от взлома, тем не менее, он может быть использован как сиг­нализатор для самодельной охранной автомобиль­ной сигнализации (ОАС).

В этом случае мощные ключевые транзисторы, управляющие актуаторами, целесообразней перенести в схему сигнализации, а сигналы от замка к ОАС передавать через оптопары. Это повысит защищенность ОАС от воздей­ствия различных электрошокеров.

Программа зам­ка для таких целей может быть легко доработана, чтобы выдавать не одиночный открывающий им­пульс, а заданную последовательность импульсов.

Тогда контроллер ОАС будет уверен, что получил на­стоящий открывающий сигнал от работоспособно­го замка, а не результат короткого замыкания. Воз­можны и другие модификации данной схемы для различных вариантов применений.

Программа для МК IC1 написана на ассембле­ре и снабжена необходимыми комментариями, позволяющими легко изменить алгоритм работы замка даже тем, кто только начинает работать с ми­кроконтроллерами. При написании программы для замка был использован код расчета CRC с сайта [1].

Программа для МК  (Скачать)

Ссылки

  1. http://avr-mcu.dxp.pl – сайт AVR MCU – Tuto­rials, projects, code library for Atmel AVR microcon­trollers (Учебники, проекты и библиотеки для Atmel AVR микроконтроллеров).

Источник: http://meandr.org/archives/23873

Электронные замки

Купить электронные замки для установки на дверь в Москве можно в интернет-магазине Техническая лаборатория. Электронный замки отличаются от обычных электрозамков наличием встроенного контроллера СКУД.

В большинстве моделей также имеется кодовая панель и считыватель карт, превращающие их в полностью автономные устройства. При установке таких электронных замков на входную или межкомнатную дверь не требуется подключать считыватели и питание.

Они питаются от набора батареек.

Конструкция

По способу установки дверные электронные замки могут быть полностью накладными или с врезной частью. Некоторые накладные модели используются как дополнение к уже установленным механическим запирающим устройствам. Это простой способ автоматизации точки прохода без замены врезной части.

Умный электрозамок может быть выполнен классической нажимной ручкой, как в моделях Ironlogic Eurolock. В устройствах Самсунг на ручку нужно нажимать или тянуть за нее, в зависимости от модели. Полностью скрытые в полотне двери электрозамки получили название “невидимки”. Они могут иметь накладную часть со стороны помещения, но снаружи признаков установки заметить не удастся.

Код или карта

При выборе умного дверного замка (smart lock в английском варианте) определите основной способ авторизации:

  • Код. Удобен, когда нужно организовать проход через дверь для сотен людей. Покупать для всех карты, которые быстро теряются, не всегда выгодно. Электронный кодовый замок удобно установить на входную дверь в квартиру, особенно, если в ней живут дети.
  • Карточки. Карты и брелоки RFID, как способ открытия дверных электронных замков, получили распространение в гостиницах, офисах, фитнес-центрах, бассейнах. Посетителям можно сделать временную карту, действие которой прекращается автоматически после определенного времени.

Можно купить умный замок Samsung, сочетающий оба способа открытия: код и карточку. Есть такие модели и у других производителей. Также можно найти устройства, открывающиеся по радиоканалу, через приложение на смартфоне.

Защита от вскрытия

Вскрытие электронных замков Самсунг, предназначенных для входных дверей, по сложности сравнимо с механическими. При попытке взлома такие умные устройства могут включать тревожную сигнализацию и передавать сигнал в систему охраны.

Чтобы усложнить злоумышленнику подбор кода, инженеры Самсунг рекомендуют максимально равномерно использовать клавиатуру. Придумайте легко запоминающуюся комбинацию, с как можно большим количеством разных цифр. Тогда износ клавиш будет равномерным.

Управление через приложение на телефоне

Управление электронным замком через программу на смартфоне или планшете открывает ряд новых сценариев использования:

  • Удаленное открытие. Когда к вам приехали родственники или курьер с заказом из интернет-магазина, вы можете удалённо открыть дверь через приложение. Открытие двери со смартфона удобно для хозяев хостела.
  • Настройка через смартфон. В некоторых моделях есть возможность менять параметры настройки электрозамка, устанавливать новый код через приложение.
  • Информация о состоянии. Электрозамок предупредит о низком заряде батареи, попытке взлома и других событиях.

Цена электронного умного дверного замка зависит от надежности и числа функций. При выборе запирающего устройства для входной двери, экономить на прочности не стоит.

Источник: http://www.techlaboratory.ru/category/elektronnye-zamki/

Z-595 ibutton Keys IronLogic Электронный замок с клавиатурой для металлической/деревянной мебели

Z-595 ibutton Keys IronLogic представляет собой электронный замок со считывателем и клавиатурой для мебели, 5 режимами работы и рабочей частотой 125 кГц. Полная поддержка и работа с ключами ibutton, TM (DS1990, DS1996).

 Модель работает всего от 9Vx1шт. батарейка крона. Имеются встроенные часы. Очень простой монтаж.

Идеальное решение контроля доступа для мест хранения: шкафчики в раздевалках, офисная мебель, торговое оборудование, фитнес клубы, SPA-салоны, аквапарки, бассейны и индивидуальные шкафчики на предприятиях или школах. Модель работает автономно или под управлением бесплатного По и адаптера.

Возможна интерграция в существующую систему контроля доступа через ключ-карту. Работа происходит в температурном режиме от 0 до +40 градусов. Корпус выполнен из качественного металла. Установка на металлическую или деревянную мебель.

Режим “Фитнес” – позволяет не привязывать ключ к определенному электронному замку для шкафчика. Любой ключ может закрывать/открывать любой свободный шкафчик. 

Режим “Logic” – позволяет не привязывать ключ к определенному электронному замку для шкафчика.

Любой ключ может закрывать/открывать любой свободный шкафчик. Контроль за количеством занимаемых шкафчиков одним ключом. Записывать номер занятого шкафчика и уровень заряда батарей в ключ. Это очень удобно в тех случаях, когда пользователь забыл, какой шкафчик он занял.

Компьютерный учет времени посещения, отчеты, аудит действий операторов ПО. 

Режим “Обычный” – мебельный электронный замок могут открыть только ключ(и), занесенные в память замка. Один раз поднесли ключ – язычок выдвинулся, второй раз поднес ключ – язычок задвинулся. 

Режим “Банковская ячейка” – режим, имитирующий логику работы банковской ячейки. Чтобы открыть электронный замок необходимо поднести по очереди все ключи, занесенные в память электронного замка. 

Режим “Заказчика” – придумайте свой собственный режим работы электронного замка для шкафчика в зависимости от вашей конкретной задачи. Получите обновленную микропрограмму (firmware) от производителя. Смените прошивку электронного замка для шкафчика через адаптер RF-1996.

Используемый контроллер – PIC12F675 (сначала я делал под 12F629, но оказалось, их у меня уже не осталось, все использовал). Они отличаются только наличием в 675 модуля АЦП.

Я его просто выключил (пока выключал, мне пришла идея, что АЦП можно было использовать для измерения уровня заряда аккумулятора для замка).

Мне не понадобился аккумулятор, поскольку на заводе всегда есть электричество, потом я использую замок на 24 вольта, и, тем более, планируется использовать его только днем, а на ночь, когда никого нет, закрывать на обычный замок. Замок взят от домофона (был в наличии).

Вообще все сделано из подножного материала. Итак:

IButton это микросхема, помещенная в стальной корпус, своим видом напоминающий таблетку. В этой микросхеме лазером записан уникальный код, состоящий из 8 байт.

1-й байт – это идентификатор семейства микросхем Dallas Semiconductor. В нашем случае он равен 1(в случае DS18B20 он равен, по-моему, $28. Не помню сейчас). Байты со второго по 7 занимает уникальный код из 48 бит (8 бит x 6 байт), который может составить более чем 280 трлн. комбинаций, что исключает повторяемость и представляет надежность в использовании.

8-й байт содержит контрольную сумму для проверки правильности считывания. Мы не будем его использовать.

Я вижу прибор так – снаружи – порт под ключ и все(за отсутствием покупного, я сделал его сам из металлической пластины с отверстием диаметром 17мм.

Внутри этого отверстия, изолированно от его краев, вогнал болт под звездочку со сточенной головкой и ко всему этому подвел два проводка).

Внутри помещения – сам девайс, блок питания, блок управления и кнопка открытия изнутри(как, собственно и работает замок домофона).

Вот, собственно, схема прибора:

Эта схема была разработана буквально за полчаса, с учетом всех корректировок(и программных и схемных). В это же время я писал программу. На виртуальное создание ушло в целом около 3 часов. На изготовление законченного устройства еще часа 4, поскольку дело было на работе, где меня постоянно отвлекают(мешают отдыхать, в общем).

Прибор позволяет записать 5 ключей. При желании, это число можно увеличить. Пусть это будет вашим домашним заданием. Если не получится самим, то обращайтесь. Обсуждение – в форуме.Итак, открываем Proton IDE и пишем программу(если кто-то не умеет писать, можно просто скопировать отсюда).

DEVICE = 12F675 DECLARE XTAL= 4 DECLARE REMINDERS NO<\p>ALL_DIGITALYES<\p>CONFIG CPD_OFF, CP_ON, MCLRE_OFF, PWRTE_ON, WDT_ON, INTRC_OSC_NOCLKOUTSYMBOL Key = GPIO.0 SYMBOL Zamok = GPIO.1 SYMBOL OpenButton = GPIO.2 SYMBOL Programm = GPIO.4 SYMBOL Led = GPIO.5              DIM Flags AS BYTE DIM ID[8] AS BYTE DIM D[6] AS BYTE                   DIM Num AS BYTE DIM Count_1 AS BYTEDIM Count_2 AS BYTE             DIM addr AS BYTE DIM date AS BYTE SYMBOL Write_OK = Flags.0 SYMBOL OpenEnable = Flags.1 SET_OSCCAL OSCCAL<\p>GPIO = %000000<\p>CMCON = 7                          TRISIO = %011101<\p>OPTION_REG = %00001100<\p>WPU = %011101<\p>Flags = 0 Num = EREAD 0                  GOTO Main<\p>Main:CLRWDT IF OpenButton = 0 THENOpenEnable = 1                <\p>ENDIFOWRITE Key, 1, [$33]  <\p>OREAD Key, , [STR ID8]<\p>IF ID[] = $1 THEN IF Write_OK = 0 THEN       IF Programm = 0 THEN GOSUB Writte<\p>ELSE GOSUB Compare<\p>ENDIF ENDIFELSEWrite_OK = 0 ENDIFIF OpenEnable = 1 THEN GOSUB DoorOpen<\p>OpenEnable = 0 ENDIFGOTO Main                      <\p>Writte:SELECT Num<\p>CASE 5,255 Num = 1 addr = 2 CASE 1                              Num = 2addr = 8                              CASE 2 Num = 3 addr = 14CASE 3Num = 4 addr = 20CASE 4Num = 5                           addr = 26ENDSELECTFOR Count_1 = 0 TO 5   EWRITE addr + Count_1 , [ID[Count_1 + 1]]<\p>NEXT Count_1EWRITE 0,[Num]          <\p>Write_OK = 1 Led = 1 FOR Count_2 = 1 TO 150CLRWDT DELAYMS 10 NEXT Count_2Led = 0 RETURNCompare:FOR Count_1 = 2 TO 26 STEP 6 FOR Count_2 = 0 TO 5 D[Count_2] = EREAD Count_1 + Count_2NEXTIF D[]=ID[1] AND D[1]=ID[2] AND D[2]=ID[3] AND D[3]=ID[4] AND D[4]=ID[5] AND D[5]=ID[6] THENFOR Count_2 = 0 TO 5 ID[Count_2] = 0                          NEXT Count_2<\p>OpenEnable = 1 ENDIFNEXT Count_1     RETURNDoorOpen:Zamok = 1                                Led = 1                                    FOR Count_1 = 1 TO 100 DELAYMS 10 CLRWDT NEXTZamok = 0                               Led = 0                                  

Так, программа окончена. Берем программатор SmartProg 2:

(если у кого-то его нет, то берем другой :)) ) и зашиваем микроконтроллер.

Все просто. Разводим плату(я это делаю прямо в Ares – меня устраивает). Потом берем утюг и лазер. Ой, лазерный принтер. Делаем плату. У меня это происходило так:

   ->     ->  

После этого берем самодельный сверлильный станок, собранный из списанного лабораторного медицинского микроскопа и сверлим технологические отверстия(а не дырочки, как многие, наверное, подумали).

Опять же, если кто-то вдруг не имеет такого станочка, то можно воспользоваться тем, что есть под рукой. У меня, например, в гараже лежит микродрелька, но пользоваться ей неудобно, да и слабо тянет.

В результате всех этих манипуляций получается такая платка, которую я делал, собственно, под такую коробочку:

 Я взял простую распределительную коробку и засунул все туда.

На двери повесил все так:

Замечательно!

Все работает. Если у кого-то что-то не работает или если есть вопросы, задаем в форуме.

Все исходники – здесь. Для удобсвтва, я вложил туда даташит на 12F629/675 на русском языке.

Надеюсь, вам понравилась статья и вы откликнетесь и добавите что-нибудь из собственной коллекции.

Спачибо за внимание.

PS: Одно замечание: стабилизатор на 12 В греется и довольно неплохо, поэтому, рекомендую использовать либо токоограничивающий резистор(думаю, поможет), либо радиатор, либо промежуточный стабилизатор вольт на 18.

PPS: Сначала кнопка планировалась срабатывать по прерыванию на INT, но сколько я ни бился, периодически открывание двери происходило при простом касании даже минуса схемы, не говоря уже о центральном контакте порта ключа.

Голову сломал, как прерывание срабатывает, ничего так и не надумал. И осциллографом смотрел и не осциллографом. Реально программа уходила в прерывание и там разрешала открытие, причем иногда два раза подряд.

В итоге решил, что простая проверка в цикле основной программы будет самое то. В данный момент программа полностью работоспособна. 

PPPS: В итоге на разработку ушло больше времени, чем я написал выше. 

Поддержка кодов с клавиатуры да
Работа с ключами стандарта ibutton, TM (DS1990, DS1996)
Количество простых ключей/кодов(max) 70 шт.
Количество мастер ключей(max) 4+ шт.
Встроенная энергонезависимая память (EEPROM)
Потребление тока

Источник: https://sb-market.ru/ironlogic-Z-595-ibutton-Keys

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}