text:
/* eslint-disable */
;(function(root, factory) {
  if (typeof define === 'function' && define.amd) { // AMD
    define([], factory);
  } else if (typeof exports === 'object') { // Node.js
    module.exports = factory();
  } else { // Browser
    var messages = factory();
    for (var key in messages) {
      root.Blockly.Msg[key] = messages[key];
    }
  }
}(this, function() {
// This file was automatically generated.  Do not modify.

'use strict';

const messages = Object.create(null);

messages["ADD_COMMENT"] = "Добави коментар";
messages["CANNOT_DELETE_VARIABLE_PROCEDURE"] = "Променливата '%1' не може да бъде изтрита, защото е част от определението на функцията '%2'";
messages["CHANGE_VALUE_TITLE"] = "Промени стойността:";
messages["CLEAN_UP"] = "Премахни блокове";
messages["COLLAPSED_WARNINGS_WARNING"] = "Свитите блокове съдържат предупреждения.";
messages["COLLAPSE_ALL"] = "Скрий блокове";
messages["COLLAPSE_BLOCK"] = "Скрий блок";
messages["COLOUR_BLEND_COLOUR1"] = "цвят 1";
messages["COLOUR_BLEND_COLOUR2"] = "цвят 2";
messages["COLOUR_BLEND_HELPURL"] = "https://meyerweb.com/eric/tools/color-blend/#:::rgbp";  // untranslated
messages["COLOUR_BLEND_RATIO"] = "съотношение";
messages["COLOUR_BLEND_TITLE"] = "смеси";
messages["COLOUR_BLEND_TOOLTIP"] = "Смесва два цвят в дадено съотношение (0.0 - 1.0).";
messages["COLOUR_PICKER_HELPURL"] = "https://bg.wikipedia.org/wiki/Цвят_(оптика)";
messages["COLOUR_PICKER_TOOLTIP"] = "Избери цвят от палитрата.";
messages["COLOUR_RANDOM_HELPURL"] = "http://randomcolour.com";  // untranslated
messages["COLOUR_RANDOM_TITLE"] = "случаен цвят";
messages["COLOUR_RANDOM_TOOLTIP"] = "Избери цвят на случаен принцип.";
messages["COLOUR_RGB_BLUE"] = "син";
messages["COLOUR_RGB_GREEN"] = "зелен";
messages["COLOUR_RGB_HELPURL"] = "https://www.december.com/html/spec/colorpercompact.html";  // untranslated
messages["COLOUR_RGB_RED"] = "червен";
messages["COLOUR_RGB_TITLE"] = "оцвети с";
messages["COLOUR_RGB_TOOLTIP"] = "Създай цвят с избраните пропорции, червено, зелено и синьо. Всички стойности трябва да бъдат от 0 до 100.";
messages["CONTROLS_FLOW_STATEMENTS_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks";  // untranslated
messages["CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK"] = "прекъсни цикъла";
messages["CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE"] = "премини към следващата стъпка от цикъла";
messages["CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK"] = "Прекъсни цикъла, в който се съдържа тази команда.";
messages["CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE"] = "Премини към следващата стъпка от цикъла";
messages["CONTROLS_FLOW_STATEMENTS_WARNING"] = "Предупреждение: Този блок може да се използва само в цикъл.";
messages["CONTROLS_FOREACH_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#for-each";  // untranslated
messages["CONTROLS_FOREACH_TITLE"] = "за всеки елемент %1 в списъка %2";
messages["CONTROLS_FOREACH_TOOLTIP"] = "За всеки елемент в даден списък, присвои елемента на променливата "%1" и след това изпълни командите.";
messages["CONTROLS_FOR_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#count-with";  // untranslated
messages["CONTROLS_FOR_TITLE"] = "преброй чрез %1 от %2 до %3 през %4";
messages["CONTROLS_FOR_TOOLTIP"] = "Нека променлива '%1' премине през стойностите от началното до крайното число през зададената стъпка и изпълни избраните блокове.";
messages["CONTROLS_IF_ELSEIF_TOOLTIP"] = "Добави условие към "ако" блока.";
messages["CONTROLS_IF_ELSE_TOOLTIP"] = "Добави окончателно, прихващащо всички останали случаи условие към блок "ако".";
messages["CONTROLS_IF_HELPURL"] = "https://github.com/google/blockly/wiki/IfElse";  // untranslated
messages["CONTROLS_IF_IF_TOOLTIP"] = "Добави, премахни или пренареди частите, за да промениш този "ако" блок.";
messages["CONTROLS_IF_MSG_ELSE"] = "иначе";
messages["CONTROLS_IF_MSG_ELSEIF"] = "иначе ако";
messages["CONTROLS_IF_MSG_IF"] = "ако";
messages["CONTROLS_IF_TOOLTIP_1"] = "Ако стойността е вярна, изпълни операциите.";
messages["CONTROLS_IF_TOOLTIP_2"] = "Ако стойността е вярна, изпълни първият блок. Иначе, изпълни вторият блок.";
messages["CONTROLS_IF_TOOLTIP_3"] = "Ако първата стойност е вярна, изпълни първия блок. Иначе, ако втората стойност е вярна, изпълни втория блок.";
messages["CONTROLS_IF_TOOLTIP_4"] = "Ако първата стойност е вярна, изпълни първия блок. В противен случай, ако втората стойност е вярна, изпълни втория блок. Ако нито една от стойностите не е вярна, изпълни последния блок.";
messages["CONTROLS_REPEAT_HELPURL"] = "https://bg.wikipedia.org/wiki/Цикъл_(програмиране)#For_.D1.86.D0.B8.D0.BA.D1.8A.D0.BB.D1.8A.D1.82";
messages["CONTROLS_REPEAT_INPUT_DO"] = "изпълни";
messages["CONTROLS_REPEAT_TITLE"] = "Повтори %1 пъти";
messages["CONTROLS_REPEAT_TOOLTIP"] = "Изпълнява команди няколко пъти.";
messages["CONTROLS_WHILEUNTIL_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#repeat";  // untranslated
messages["CONTROLS_WHILEUNTIL_OPERATOR_UNTIL"] = "повтаряй докато";
messages["CONTROLS_WHILEUNTIL_OPERATOR_WHILE"] = "повтаряй докато е вярно, че";
messages["CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL"] = "Изпълни командите, ако стойността не е вярна.";
messages["CONTROLS_WHILEUNTIL_TOOLTIP_WHILE"] = "Изпълни командите, ако стойността е вярна.";
messages["DELETE_ALL_BLOCKS"] = "Изтриване на всички 1% блокове?";
messages["DELETE_BLOCK"] = "Изтрий блок";
messages["DELETE_VARIABLE"] = "Изтриване на променливата \"%1\"";
messages["DELETE_VARIABLE_CONFIRMATION"] = "Изтриване на %1 използване на променлива '%2'?";
messages["DELETE_X_BLOCKS"] = "Изтрий %1 блока";
messages["DIALOG_CANCEL"] = "Отказ";
messages["DIALOG_OK"] = "ОК";
messages["DISABLE_BLOCK"] = "Деактивирай блок";
messages["DUPLICATE_BLOCK"] = "Копирай";
messages["DUPLICATE_COMMENT"] = "Дублиране на коментара";
messages["ENABLE_BLOCK"] = "Активирай блок";
messages["EXPAND_ALL"] = "Покажи блокове";
messages["EXPAND_BLOCK"] = "Покажи блок";
messages["EXTERNAL_INPUTS"] = "Външни входове";
messages["HELP"] = "Помощ";
messages["INLINE_INPUTS"] = "Вътрешни входове";
messages["LISTS_CREATE_EMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-empty-list";  // untranslated
messages["LISTS_CREATE_EMPTY_TITLE"] = "създай празен списък";
messages["LISTS_CREATE_EMPTY_TOOLTIP"] = "Връща списък с дължина 0, не съдържащ данни";
messages["LISTS_CREATE_WITH_CONTAINER_TITLE_ADD"] = "списък";
messages["LISTS_CREATE_WITH_CONTAINER_TOOLTIP"] = "Добави, премахни или пренареди частите, за да промениш този списъчен блок.";
messages["LISTS_CREATE_WITH_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-list-with";  // untranslated
messages["LISTS_CREATE_WITH_INPUT_WITH"] = "създай списък с";
messages["LISTS_CREATE_WITH_ITEM_TOOLTIP"] = "Добави елемент към текста.";
messages["LISTS_CREATE_WITH_TOOLTIP"] = "Създай списък с произволен брой елементи.";
messages["LISTS_GET_INDEX_FIRST"] = "първия";
messages["LISTS_GET_INDEX_FROM_END"] = "№ от края";
messages["LISTS_GET_INDEX_FROM_START"] = "#";  // untranslated
messages["LISTS_GET_INDEX_GET"] = "вземи";
messages["LISTS_GET_INDEX_GET_REMOVE"] = "вземи и премахни";
messages["LISTS_GET_INDEX_LAST"] = "последния";
messages["LISTS_GET_INDEX_RANDOM"] = "произволен";
messages["LISTS_GET_INDEX_REMOVE"] = "премахни";
messages["LISTS_GET_INDEX_TAIL"] = "";  // untranslated
messages["LISTS_GET_INDEX_TOOLTIP_GET_FIRST"] = "Връща първия елемент в списък.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_FROM"] = "Връща елемента на определената позиция в списък.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_LAST"] = "Връща последния елемент в списък.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_RANDOM"] = "Връща случаен елемент от списъка.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST"] = "Премахва и връща първия елемент в списък.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM"] = "Премахва и връща елемента на определена позиция в списък.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST"] = "Премахва и връща последния елемент в списък.";
messages["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM"] = "Премахва и връща случаен елемент от списък.";
messages["LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST"] = "Премахва първия елемент от списък.";
messages["LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM"] = "Премахва елемент на определена позиция от списък.";
messages["LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST"] = "Премахва последния елемент от списък.";
messages["LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM"] = "Премахва случаен елемент от списък.";
messages["LISTS_GET_SUBLIST_END_FROM_END"] = "до № открая";
messages["LISTS_GET_SUBLIST_END_FROM_START"] = "до №";
messages["LISTS_GET_SUBLIST_END_LAST"] = "до края";
messages["LISTS_GET_SUBLIST_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#getting-a-sublist";  // untranslated
messages["LISTS_GET_SUBLIST_START_FIRST"] = "вземи подсписък от първия";
messages["LISTS_GET_SUBLIST_START_FROM_END"] = "вземи подсписък от № от края";
messages["LISTS_GET_SUBLIST_START_FROM_START"] = "вземи подсписък от №";
messages["LISTS_GET_SUBLIST_TAIL"] = "";  // untranslated
messages["LISTS_GET_SUBLIST_TOOLTIP"] = "Копира част от списък.";
messages["LISTS_INDEX_FROM_END_TOOLTIP"] = "%1 е последният елемент.";
messages["LISTS_INDEX_FROM_START_TOOLTIP"] = "%1 е първият елемент.";
messages["LISTS_INDEX_OF_FIRST"] = "намери първата поява на елемента";
messages["LISTS_INDEX_OF_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list";  // untranslated
messages["LISTS_INDEX_OF_LAST"] = "намери последната поява на елемента";
messages["LISTS_INDEX_OF_TOOLTIP"] = "Връща индекса на първото/последното появяване на елемента в списъка. Връща %1, ако елементът не е намерен.";
messages["LISTS_INLIST"] = "в списъка";
messages["LISTS_ISEMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#is-empty";  // untranslated
messages["LISTS_ISEMPTY_TITLE"] = "%1 е празен";
messages["LISTS_ISEMPTY_TOOLTIP"] = "Връща стойност вярно, ако списъкът е празен.";
messages["LISTS_LENGTH_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#length-of";  // untranslated
messages["LISTS_LENGTH_TITLE"] = "дължината на %1";
messages["LISTS_LENGTH_TOOLTIP"] = "Връща дължината на списък.";
messages["LISTS_REPEAT_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-list-with";  // untranslated
messages["LISTS_REPEAT_TITLE"] = "създай списък от %1 повторен %2 пъти";
messages["LISTS_REPEAT_TOOLTIP"] = "Създава списък, състоящ се от определен брой копия на елемента.";
messages["LISTS_REVERSE_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#reversing-a-list";
messages["LISTS_REVERSE_MESSAGE0"] = "промени реда на обратно %1";
messages["LISTS_REVERSE_TOOLTIP"] = "Промени реда на списъка на обратно.";
messages["LISTS_SET_INDEX_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#in-list--set";  // untranslated
messages["LISTS_SET_INDEX_INPUT_TO"] = "следното";
messages["LISTS_SET_INDEX_INSERT"] = "вмъкни на позиция";
messages["LISTS_SET_INDEX_SET"] = "промени";
messages["LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST"] = "Вмъква елемент в началото на списъка.";
messages["LISTS_SET_INDEX_TOOLTIP_INSERT_FROM"] = "Вмъква елемент на определена позиция в списък.";
messages["LISTS_SET_INDEX_TOOLTIP_INSERT_LAST"] = "Добави елемент в края на списък.";
messages["LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM"] = "Вмъква елемент на произволно място в списък.";
messages["LISTS_SET_INDEX_TOOLTIP_SET_FIRST"] = "Променя първия елемент в списък.";
messages["LISTS_SET_INDEX_TOOLTIP_SET_FROM"] = "Променя елемента на определена позиция в списък.";
messages["LISTS_SET_INDEX_TOOLTIP_SET_LAST"] = "Променя последния елемент в списък.";
messages["LISTS_SET_INDEX_TOOLTIP_SET_RANDOM"] = "Променя случаен елемент от списък.";
messages["LISTS_SORT_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#sorting-a-list";
messages["LISTS_SORT_ORDER_ASCENDING"] = "възходящо";
messages["LISTS_SORT_ORDER_DESCENDING"] = "низходящо";
messages["LISTS_SORT_TITLE"] = "сортиране по %1 %2 %3";
messages["LISTS_SORT_TOOLTIP"] = "Подреди копие на списъка.";
messages["LISTS_SORT_TYPE_IGNORECASE"] = "по азбучен ред, без отчитане на малки и главни букви";
messages["LISTS_SORT_TYPE_NUMERIC"] = "в числов ред";
messages["LISTS_SORT_TYPE_TEXT"] = "по азбучен ред";
messages["LISTS_SPLIT_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists";  // untranslated
messages["LISTS_SPLIT_LIST_FROM_TEXT"] = "Направи списък от текст";
messages["LISTS_SPLIT_TEXT_FROM_LIST"] = "направи текст от списък";
messages["LISTS_SPLIT_TOOLTIP_JOIN"] = "Събира списък от текстове в един текст, раделени с разделител.";
messages["LISTS_SPLIT_TOOLTIP_SPLIT"] = "Разделя текст в списък на текстове, по всеки разделител.";
messages["LISTS_SPLIT_WITH_DELIMITER"] = "с разделител";
messages["LOGIC_BOOLEAN_FALSE"] = "невярно";
messages["LOGIC_BOOLEAN_HELPURL"] = "https://github.com/google/blockly/wiki/Logic#values";  // untranslated
messages["LOGIC_BOOLEAN_TOOLTIP"] = "Връща вярно или невярно.";
messages["LOGIC_BOOLEAN_TRUE"] = "вярно";
messages["LOGIC_COMPARE_HELPURL"] = "https://en.wikipedia.org/wiki/Inequality_(mathematics)";
messages["LOGIC_COMPARE_TOOLTIP_EQ"] = "Върни вярно, ако двата параметъра са еднакви.";
messages["LOGIC_COMPARE_TOOLTIP_GT"] = "Върни истина, ако първия параметър е по-голям от втория.";
messages["LOGIC_COMPARE_TOOLTIP_GTE"] = "Върни истина, ако първия параметър е по-голям или равен на втория.";
messages["LOGIC_COMPARE_TOOLTIP_LT"] = "Върни вярно, ако първият параметър е по-малък от втория.";
messages["LOGIC_COMPARE_TOOLTIP_LTE"] = "Върни истина, ако първия параметър е по-малък или равен на втория.";
messages["LOGIC_COMPARE_TOOLTIP_NEQ"] = "Върни вярно, ако двата параметъра са различни.";
messages["LOGIC_NEGATE_HELPURL"] = "https://github.com/google/blockly/wiki/Logic#not";  // untranslated
messages["LOGIC_NEGATE_TITLE"] = "не %1";
messages["LOGIC_NEGATE_TOOLTIP"] = "Върни вярно, ако параметърът е неверен. Върни невярно, ако параметърът е верен.";
messages["LOGIC_NULL"] = "нула";
messages["LOGIC_NULL_HELPURL"] = "https://en.wikipedia.org/wiki/Nullable_type";  // untranslated
messages["LOGIC_NULL_TOOLTIP"] = "Връща нула.";
messages["LOGIC_OPERATION_AND"] = "и";
messages["LOGIC_OPERATION_HELPURL"] = "https://github.com/google/blockly/wiki/Logic#logical-operations";  // untranslated
messages["LOGIC_OPERATION_OR"] = "или";
messages["LOGIC_OPERATION_TOOLTIP_AND"] = "Върни вярно, ако и двата параметъра са верни.";
messages["LOGIC_OPERATION_TOOLTIP_OR"] = "Върни "вярно", ако поне един от входовете е верен.";
messages["LOGIC_TERNARY_CONDITION"] = "тест";
messages["LOGIC_TERNARY_HELPURL"] = "https://en.wikipedia.org/wiki/%3F:";  // untranslated
messages["LOGIC_TERNARY_IF_FALSE"] = "Ако е невярно";
messages["LOGIC_TERNARY_IF_TRUE"] = "Ако е вярно";
messages["LOGIC_TERNARY_TOOLTIP"] = "Провери условието в "тест". Ако условието е истина, върни стойността "ако е вярно", иначе върни стойността "ако е невярно".";
messages["MATH_ADDITION_SYMBOL"] = "+";  // untranslated
messages["MATH_ARITHMETIC_HELPURL"] = "https://bg.wikipedia.org/wiki/Аритметика";
messages["MATH_ARITHMETIC_TOOLTIP_ADD"] = "Върни сумата на двете числа.";
messages["MATH_ARITHMETIC_TOOLTIP_DIVIDE"] = "Върни частното на двете числа.";
messages["MATH_ARITHMETIC_TOOLTIP_MINUS"] = "Върни разликата на двете числа.";
messages["MATH_ARITHMETIC_TOOLTIP_MULTIPLY"] = "Върни произведението на двете числа.";
messages["MATH_ARITHMETIC_TOOLTIP_POWER"] = "Върни първото число, повдигнато на степен на второто число.";
messages["MATH_ATAN2_HELPURL"] = "https://en.wikipedia.org/wiki/Atan2";
messages["MATH_ATAN2_TITLE"] = "atan2 от X:%1 Y:%2";
messages["MATH_ATAN2_TOOLTIP"] = "Връща аркустангенс на точка (X, Y) в градуси от -180 до 180.";
messages["MATH_CHANGE_HELPURL"] = "https://bg.wikipedia.org/wiki/Събиране";
messages["MATH_CHANGE_TITLE"] = "промени %1 на %2";
messages["MATH_CHANGE_TOOLTIP"] = "Добави число към променлива "%1".";
messages["MATH_CONSTANT_HELPURL"] = "http://bg.wikipedia.org/wiki/Константа";
messages["MATH_CONSTANT_TOOLTIP"] = "Връща една от често срещаните константи: π (3.141...), e (2.718...), φ (1.618...), sqrt(2) (1.414...), sqrt(½) (0.707...) или ∞ (безкрайност).";
messages["MATH_CONSTRAIN_HELPURL"] = "https://en.wikipedia.org/wiki/Clamping_(graphics)";  // untranslated
messages["MATH_CONSTRAIN_TITLE"] = "ограничи %1 между %2 и %3";
messages["MATH_CONSTRAIN_TOOLTIP"] = "Ограничи число да бъде в определените граници (включително).";
messages["MATH_DIVISION_SYMBOL"] = "÷";  // untranslated
messages["MATH_IS_DIVISIBLE_BY"] = "се дели на";
messages["MATH_IS_EVEN"] = "е четно";
messages["MATH_IS_NEGATIVE"] = "е отрицателно";
messages["MATH_IS_ODD"] = "е нечетно";
messages["MATH_IS_POSITIVE"] = "е положително";
messages["MATH_IS_PRIME"] = "е просто";
messages["MATH_IS_TOOLTIP"] = "Проверете дали дадено число е четно, нечетно, просто, цяло, положително, отрицателно или дали се дели на друго число. Връща вярно или невярно.";
messages["MATH_IS_WHOLE"] = "е цяло";
messages["MATH_MODULO_HELPURL"] = "http://bg.wikipedia.org/wiki/Остатък";
messages["MATH_MODULO_TITLE"] = "остатъка от делението на %1 на %2";
messages["MATH_MODULO_TOOLTIP"] = "Върни остатъка от деление на две числа.";
messages["MATH_MULTIPLICATION_SYMBOL"] = "×";  // untranslated
messages["MATH_NUMBER_HELPURL"] = "https://bg.wikipedia.org/wiki/Число";
messages["MATH_NUMBER_TOOLTIP"] = "Число.";
messages["MATH_ONLIST_HELPURL"] = "";  // untranslated
messages["MATH_ONLIST_OPERATOR_AVERAGE"] = "средната стойност на числата в списъка";
messages["MATH_ONLIST_OPERATOR_MAX"] = "най-голямата стойност в списъка";
messages["MATH_ONLIST_OPERATOR_MEDIAN"] = "медианата на списък";
messages["MATH_ONLIST_OPERATOR_MIN"] = "най-малката стойност в списъка";
messages["MATH_ONLIST_OPERATOR_MODE"] = "режими на списъка";
messages["MATH_ONLIST_OPERATOR_RANDOM"] = "случаен елемент от списъка";
messages["MATH_ONLIST_OPERATOR_STD_DEV"] = "стандартно отклонение на списък";
messages["MATH_ONLIST_OPERATOR_SUM"] = "сума на списъка";
messages["MATH_ONLIST_TOOLTIP_AVERAGE"] = "Върни средната стойност (аритметичното средно) на числата в списъка.";
messages["MATH_ONLIST_TOOLTIP_MAX"] = "Върни най-голямото число в списъка.";
messages["MATH_ONLIST_TOOLTIP_MEDIAN"] = "Върни медианата в списъка.";
messages["MATH_ONLIST_TOOLTIP_MIN"] = "Върни най-малкото число в списъка.";
messages["MATH_ONLIST_TOOLTIP_MODE"] = "Върни списък на най-често срещаните елементи в списъка.";
messages["MATH_ONLIST_TOOLTIP_RANDOM"] = "Върни случаен елемент от списъка.";
messages["MATH_ONLIST_TOOLTIP_STD_DEV"] = "Връща стандартното отклонение на списъка.";
messages["MATH_ONLIST_TOOLTIP_SUM"] = "Върни сумата на всички числа в списъка.";
messages["MATH_POWER_SYMBOL"] = "^";  // untranslated
messages["MATH_RANDOM_FLOAT_HELPURL"] = "https://bg.wikipedia.org/wiki/Генератор_на_случайни_числа";
messages["MATH_RANDOM_FLOAT_TITLE_RANDOM"] = "случайно дробно число";
messages["MATH_RANDOM_FLOAT_TOOLTIP"] = "Върни случайно дробно число между 0.0 (включително) и 1.0 (без да го включва)";
messages["MATH_RANDOM_INT_HELPURL"] = "https://bg.wikipedia.org/wiki/Генератор_на_случайни_числа";
messages["MATH_RANDOM_INT_TITLE"] = "случайно цяло число между %1 и %2";
messages["MATH_RANDOM_INT_TOOLTIP"] = "Върни случайно число в определените граници (включително).";
messages["MATH_ROUND_HELPURL"] = "https://en.wikipedia.org/wiki/Rounding";
messages["MATH_ROUND_OPERATOR_ROUND"] = "закръгли";
messages["MATH_ROUND_OPERATOR_ROUNDDOWN"] = "закръгли надолу";
messages["MATH_ROUND_OPERATOR_ROUNDUP"] = "закръгли нагоре";
messages["MATH_ROUND_TOOLTIP"] = "Закръгли число нагоре или надолу.";
messages["MATH_SINGLE_HELPURL"] = "https://en.wikipedia.org/wiki/Square_root";
messages["MATH_SINGLE_OP_ABSOLUTE"] = "абсолютна";
messages["MATH_SINGLE_OP_ROOT"] = "корен квадратен";
messages["MATH_SINGLE_TOOLTIP_ABS"] = "Връща абсолютната стойност на число.";
messages["MATH_SINGLE_TOOLTIP_EXP"] = "Върни е (неперовото число) на степен зададеното число.";
messages["MATH_SINGLE_TOOLTIP_LN"] = "Върни натуралния логаритъм от число.";
messages["MATH_SINGLE_TOOLTIP_LOG10"] = "Върни десетичния логаритъм на число.";
messages["MATH_SINGLE_TOOLTIP_NEG"] = "Върни числото с обърнат знак.";
messages["MATH_SINGLE_TOOLTIP_POW10"] = "Върни 10 на степен зададеното число.";
messages["MATH_SINGLE_TOOLTIP_ROOT"] = "Връща корен квадратен от число.";
messages["MATH_SUBTRACTION_SYMBOL"] = "-";  // untranslated
messages["MATH_TRIG_ACOS"] = "acos";  // untranslated
messages["MATH_TRIG_ASIN"] = "asin";  // untranslated
messages["MATH_TRIG_ATAN"] = "atan";  // untranslated
messages["MATH_TRIG_COS"] = "cos";  // untranslated
messages["MATH_TRIG_HELPURL"] = "https://bg.wikipedia.org/wiki/Тригонометрична_функция";
messages["MATH_TRIG_SIN"] = "sin";  // untranslated
messages["MATH_TRIG_TAN"] = "tan";  // untranslated
messages["MATH_TRIG_TOOLTIP_ACOS"] = "Върни аркускосинус от число.";
messages["MATH_TRIG_TOOLTIP_ASIN"] = "Върни аркуссинус от число.";
messages["MATH_TRIG_TOOLTIP_ATAN"] = "Върни аркустангенс от число.";
messages["MATH_TRIG_TOOLTIP_COS"] = "Върни косинус от ъгъл в градуси (не в радиани)";
messages["MATH_TRIG_TOOLTIP_SIN"] = "Върни синус от ъгъл в градуси (не в радиани)";
messages["MATH_TRIG_TOOLTIP_TAN"] = "Върни тангенс от ъгъл в градуси (не в радиани)";
messages["NEW_COLOUR_VARIABLE"] = "Създаване на цветова променлива...";
messages["NEW_NUMBER_VARIABLE"] = "Създаване на числова променлива...";
messages["NEW_STRING_VARIABLE"] = "Създаване на низова променлива...";
messages["NEW_VARIABLE"] = "Създаване на променлива...";
messages["NEW_VARIABLE_TITLE"] = "Ново име на променливата:";
messages["NEW_VARIABLE_TYPE_TITLE"] = "Тип на новата променлива:";
messages["ORDINAL_NUMBER_SUFFIX"] = "";  // untranslated
messages["PROCEDURES_ALLOW_STATEMENTS"] = "позволи операциите";
messages["PROCEDURES_BEFORE_PARAMS"] = "с:";
messages["PROCEDURES_CALLNORETURN_HELPURL"] = "https://bg.wikipedia.org/wiki/Подпрограма";
messages["PROCEDURES_CALLNORETURN_TOOLTIP"] = "Изпълни дефинирана от потребителя функция "%1".";
messages["PROCEDURES_CALLRETURN_HELPURL"] = "https://bg.wikipedia.org/wiki/Подпрограма";
messages["PROCEDURES_CALLRETURN_TOOLTIP"] = "Изпълни дефинирана от потребителя функция "%1" и използвай резултата.";
messages["PROCEDURES_CALL_BEFORE_PARAMS"] = "с:";
messages["PROCEDURES_CREATE_DO"] = "Създай '%1'";
messages["PROCEDURES_DEFNORETURN_COMMENT"] = "Опишете тази функция...";
messages["PROCEDURES_DEFNORETURN_DO"] = "";  // untranslated
messages["PROCEDURES_DEFNORETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine";  // untranslated
messages["PROCEDURES_DEFNORETURN_PROCEDURE"] = "направиш";
messages["PROCEDURES_DEFNORETURN_TITLE"] = "за да";
messages["PROCEDURES_DEFNORETURN_TOOLTIP"] = "Създава функция, която не връща резултат.";
messages["PROCEDURES_DEFRETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine";  // untranslated
messages["PROCEDURES_DEFRETURN_RETURN"] = "върни";
messages["PROCEDURES_DEFRETURN_TOOLTIP"] = "Създава функция, която връща резултат.";
messages["PROCEDURES_DEF_DUPLICATE_WARNING"] = "Предупреждение: Тази функция има дублиращи се параметри.";
messages["PROCEDURES_HIGHLIGHT_DEF"] = "Покажи дефиницията на функцията";
messages["PROCEDURES_IFRETURN_HELPURL"] = "http://c2.com/cgi/wiki?GuardClause";
messages["PROCEDURES_IFRETURN_TOOLTIP"] = "Ако стойността е вярна, върни втората стойност.";
messages["PROCEDURES_IFRETURN_WARNING"] = "Предупреждение: Този блок може да се използва само във функция.";
messages["PROCEDURES_MUTATORARG_TITLE"] = "име на параметър:";
messages["PROCEDURES_MUTATORARG_TOOLTIP"] = "Добавяне на параметър към функцията.";
messages["PROCEDURES_MUTATORCONTAINER_TITLE"] = "вход";
messages["PROCEDURES_MUTATORCONTAINER_TOOLTIP"] = "Добави, премахни или пренареди входните параметри за тази функция.";
messages["REDO"] = "Повторение";
messages["REMOVE_COMMENT"] = "Премахни коментар";
messages["RENAME_VARIABLE"] = "Преименувай променливата...";
messages["RENAME_VARIABLE_TITLE"] = "Преименувай всички '%1' променливи на:";
messages["TEXT_APPEND_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-modification";  // untranslated
messages["TEXT_APPEND_TITLE"] = "добавете текст %2 към %1";
messages["TEXT_APPEND_TOOLTIP"] = "Добави текст към променливата "%1".";
messages["TEXT_CHANGECASE_HELPURL"] = "https://github.com/google/blockly/wiki/Text#adjusting-text-case";  // untranslated
messages["TEXT_CHANGECASE_OPERATOR_LOWERCASE"] = "с малки букви";
messages["TEXT_CHANGECASE_OPERATOR_TITLECASE"] = "с Главна Буква На Всяка Дума";
messages["TEXT_CHANGECASE_OPERATOR_UPPERCASE"] = "с ГЛАВНИ БУКВИ";
messages["TEXT_CHANGECASE_TOOLTIP"] = "Връща копие на текста със сменени малки и главни букви.";
messages["TEXT_CHARAT_FIRST"] = "вземи първата буква";
messages["TEXT_CHARAT_FROM_END"] = "вземи буква № от края";
messages["TEXT_CHARAT_FROM_START"] = "вземи буква №";
messages["TEXT_CHARAT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#extracting-text";  // untranslated
messages["TEXT_CHARAT_LAST"] = "вземи последната буква";
messages["TEXT_CHARAT_RANDOM"] = "вземи произволна буква";
messages["TEXT_CHARAT_TAIL"] = "";  // untranslated
messages["TEXT_CHARAT_TITLE"] = "в текст %1 %2";
messages["TEXT_CHARAT_TOOLTIP"] = "Връща буквата в определена позиция.";
messages["TEXT_COUNT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#counting-substrings";
messages["TEXT_COUNT_MESSAGE0"] = "пресмята броя на %1 в %2";
messages["TEXT_COUNT_TOOLTIP"] = "Преброй колко пъти даден текст се среща в друг текст.";
messages["TEXT_CREATE_JOIN_ITEM_TOOLTIP"] = "Добави елемент към текста.";
messages["TEXT_CREATE_JOIN_TITLE_JOIN"] = "свържи";
messages["TEXT_CREATE_JOIN_TOOLTIP"] = "Добави, премахни или пренареди частите, за да промениш този текстов блок.";
messages["TEXT_GET_SUBSTRING_END_FROM_END"] = "до буква № от края";
messages["TEXT_GET_SUBSTRING_END_FROM_START"] = "до буква №";
messages["TEXT_GET_SUBSTRING_END_LAST"] = "до последната буква.";
messages["TEXT_GET_SUBSTRING_HELPURL"] = "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text";  // untranslated
messages["TEXT_GET_SUBSTRING_INPUT_IN_TEXT"] = "в текста";
messages["TEXT_GET_SUBSTRING_START_FIRST"] = "вземи текста от първата буква";
messages["TEXT_GET_SUBSTRING_START_FROM_END"] = "вземи текста от буква № (броено отзад-напред)";
messages["TEXT_GET_SUBSTRING_START_FROM_START"] = "вземи текста от буква №";
messages["TEXT_GET_SUBSTRING_TAIL"] = "";  // untranslated
messages["TEXT_GET_SUBSTRING_TOOLTIP"] = "Връща определена част от текста.";
messages["TEXT_INDEXOF_HELPURL"] = "https://github.com/google/blockly/wiki/Text#finding-text";  // untranslated
messages["TEXT_INDEXOF_OPERATOR_FIRST"] = "намери първата поява на текста";
messages["TEXT_INDEXOF_OPERATOR_LAST"] = "намери последната поява на текста";
messages["TEXT_INDEXOF_TITLE"] = "в текст %1 %2 %3";
messages["TEXT_INDEXOF_TOOLTIP"] = "Връща индекса на първото/последното срещане на първия текст във втория текст. Връща %1, ако текстът не е намерен.";
messages["TEXT_ISEMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Text#checking-for-empty-text";  // untranslated
messages["TEXT_ISEMPTY_TITLE"] = "%1 е празен";
messages["TEXT_ISEMPTY_TOOLTIP"] = "Връща вярно, ако текста е празен.";
messages["TEXT_JOIN_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-creation";  // untranslated
messages["TEXT_JOIN_TITLE_CREATEWITH"] = "създай текст с";
messages["TEXT_JOIN_TOOLTIP"] = "Създай текст като съчетаеш няколко елемента.";
messages["TEXT_LENGTH_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-modification";  // untranslated
messages["TEXT_LENGTH_TITLE"] = "дължината на %1";
messages["TEXT_LENGTH_TOOLTIP"] = "Връща броя на символите (включително и интервалите) в текста.";
messages["TEXT_PRINT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#printing-text";  // untranslated
messages["TEXT_PRINT_TITLE"] = "отпечатай %1";
messages["TEXT_PRINT_TOOLTIP"] = "Отпечатай текста, числото или друга стойност.";
messages["TEXT_PROMPT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user";  // untranslated
messages["TEXT_PROMPT_TOOLTIP_NUMBER"] = "Питай потребителя за число.";
messages["TEXT_PROMPT_TOOLTIP_TEXT"] = "Питай потребителя за текст.";
messages["TEXT_PROMPT_TYPE_NUMBER"] = "питай за число със съобщение";
messages["TEXT_PROMPT_TYPE_TEXT"] = "питай за текст със съобщение";
messages["TEXT_REPLACE_HELPURL"] = "https://github.com/google/blockly/wiki/Text#replacing-substrings";
messages["TEXT_REPLACE_MESSAGE0"] = "замяна на %1 с %2 в %3";
messages["TEXT_REPLACE_TOOLTIP"] = "Замени всички появи на даден текст в друг текст.";
messages["TEXT_REVERSE_HELPURL"] = "https://github.com/google/blockly/wiki/Text#reversing-text";
messages["TEXT_REVERSE_MESSAGE0"] = "промени реда на обратно %1";
messages["TEXT_REVERSE_TOOLTIP"] = "Промени реда на знаците в текста на обратно.";
messages["TEXT_TEXT_HELPURL"] = "https://bg.wikipedia.org/wiki/Низ";
messages["TEXT_TEXT_TOOLTIP"] = "Буква, дума или ред";
messages["TEXT_TRIM_HELPURL"] = "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces";  // untranslated
messages["TEXT_TRIM_OPERATOR_BOTH"] = "премахни интервалите от двете страни";
messages["TEXT_TRIM_OPERATOR_LEFT"] = "премахни интервалите отляво";
messages["TEXT_TRIM_OPERATOR_RIGHT"] = "премахни интервалите отдясно";
messages["TEXT_TRIM_TOOLTIP"] = "Връща копие на текста с премахнати интервали от единия или двата края.";
messages["TODAY"] = "Днес";
messages["UNDO"] = "Отмяна";
messages["UNNAMED_KEY"] = "без име";
messages["VARIABLES_DEFAULT_NAME"] = "елемент";
messages["VARIABLES_GET_CREATE_SET"] = "Създай "промени стойността на %1"";
messages["VARIABLES_GET_HELPURL"] = "https://github.com/google/blockly/wiki/Variables#get";  // untranslated
messages["VARIABLES_GET_TOOLTIP"] = "Връща стойността на тази променлива.";
messages["VARIABLES_SET"] = "нека %1 бъде %2";
messages["VARIABLES_SET_CREATE_GET"] = "Създай "вземи стойността на %1"";
messages["VARIABLES_SET_HELPURL"] = "https://github.com/google/blockly/wiki/Variables#set";  // untranslated
messages["VARIABLES_SET_TOOLTIP"] = "Установява променливата със стойността на входа.";
messages["VARIABLE_ALREADY_EXISTS"] = "Променлива с име '%1' вече съществува.";
messages["VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE"] = "Променлива с име '%1' вече съществува за друг тип: '%2'.";
messages["WORKSPACE_ARIA_LABEL"] = "Работна област на Blockly";
messages["WORKSPACE_COMMENT_DEFAULT_TEXT"] = "Коментирайте нещо...";
messages["CONTROLS_FOREACH_INPUT_DO"] = messages["CONTROLS_REPEAT_INPUT_DO"];
messages["CONTROLS_FOR_INPUT_DO"] = messages["CONTROLS_REPEAT_INPUT_DO"];
messages["CONTROLS_IF_ELSEIF_TITLE_ELSEIF"] = messages["CONTROLS_IF_MSG_ELSEIF"];
messages["CONTROLS_IF_ELSE_TITLE_ELSE"] = messages["CONTROLS_IF_MSG_ELSE"];
messages["CONTROLS_IF_IF_TITLE_IF"] = messages["CONTROLS_IF_MSG_IF"];
messages["CONTROLS_IF_MSG_THEN"] = messages["CONTROLS_REPEAT_INPUT_DO"];
messages["CONTROLS_WHILEUNTIL_INPUT_DO"] = messages["CONTROLS_REPEAT_INPUT_DO"];
messages["LISTS_CREATE_WITH_ITEM_TITLE"] = messages["VARIABLES_DEFAULT_NAME"];
messages["LISTS_GET_INDEX_HELPURL"] = messages["LISTS_INDEX_OF_HELPURL"];
messages["LISTS_GET_INDEX_INPUT_IN_LIST"] = messages["LISTS_INLIST"];
messages["LISTS_GET_SUBLIST_INPUT_IN_LIST"] = messages["LISTS_INLIST"];
messages["LISTS_INDEX_OF_INPUT_IN_LIST"] = messages["LISTS_INLIST"];
messages["LISTS_SET_INDEX_INPUT_IN_LIST"] = messages["LISTS_INLIST"];
messages["MATH_CHANGE_TITLE_ITEM"] = messages["VARIABLES_DEFAULT_NAME"];
messages["PROCEDURES_DEFRETURN_COMMENT"] = messages["PROCEDURES_DEFNORETURN_COMMENT"];
messages["PROCEDURES_DEFRETURN_DO"] = messages["PROCEDURES_DEFNORETURN_DO"];
messages["PROCEDURES_DEFRETURN_PROCEDURE"] = messages["PROCEDURES_DEFNORETURN_PROCEDURE"];
messages["PROCEDURES_DEFRETURN_TITLE"] = messages["PROCEDURES_DEFNORETURN_TITLE"];
messages["TEXT_APPEND_VARIABLE"] = messages["VARIABLES_DEFAULT_NAME"];
messages["TEXT_CREATE_JOIN_ITEM_TITLE_ITEM"] = messages["VARIABLES_DEFAULT_NAME"];

messages["MATH_HUE"] = "230";
messages["LOOPS_HUE"] = "120";
messages["LISTS_HUE"] = "260";
messages["LOGIC_HUE"] = "210";
messages["VARIABLES_HUE"] = "330";
messages["TEXTS_HUE"] = "160";
messages["PROCEDURES_HUE"] = "290";
messages["COLOUR_HUE"] = "20";
messages["VARIABLES_DYNAMIC_HUE"] = "310";
return messages;
}));


text:
{{ user.name }} sine hytter

This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.

  {{#cabins}}

{{ navn }}

        Endre

          <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
            Valg
          </button>

              Vis på UT.no

              Vis statistikk

  {{/cabins}}

Heading

Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

View details »

Heading

Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

View details »

Heading

Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

View details »

redpajama_set_name: RedPajamaGithub


text:
#ifndef _CACHEPP_SIMPLESERIALCACHE_H
#define _CACHEPP_SIMPLESERIALCACHE_H

#include <vector>

#include "src/serialcache.h"
#include "src/globals.h"

namespace cachepp {
	class SimpleSerialCacheData {};
	/**
	 * SimpleSerialCache implements a partially instantiated Cache template
	 *	this is DIRECTLY callable by the user to be used as a cache
	 *
	 * essentially a clock algorithm WITHOUT the persistent hand
	 *	uses Cache::Cache::select, which iterates from the beginning of cache on each invocation
	 *
	 * compare with an n-chance algorithm
	 */
	template <typename T>
	class SimpleSerialCache : public SerialCache<SimpleSerialCacheData, T> {
		public:
			SimpleSerialCache(identifier size);

		private:
			std::vector<size_t> access_data;

			virtual identifier index(const std::shared_ptr<T>& arg);
			virtual size_t heuristic(const std::shared_ptr<T>& arg);
			virtual void access(const std::shared_ptr<T>& arg, SimpleSerialCacheData aux);
	};
}

#include "src/templates/simpleserialcache.template"

#endif


text:
<?php

use yii\helpers\Html;
use kartik\form\ActiveForm;
use kartik\widgets\Select2;

/* @var $this yii\web\View */
/* @var $model app\models\Notice */
/* @var $form yii\widgets\ActiveForm */
?>

    <?php $form = ActiveForm::begin([
        'id' => 'app-form',
        'enableAjaxValidation' => true,
        'enableClientValidation' => false,
        //'validationUrl' =>  ($model->isNewRecord) ? ['validate-create'] : ['validate-update', 'id' => $model->id],
        'validationUrl' =>  ['validate', 'faculty_id' => Yii::$app->request->get('faculty_id')],
        'options' => [
            'autocomplete' => 'off',
        ],
    ]); ?>

    <?= $form->field($model, 'course_id')->widget(Select2::className(), [
        'data' => $facultyCourses,
        'options' => [
            'placeholder' => '- Select -',
            'multiple' => true,
        ],
        'pluginOptions' => [
            'allowClear' => true
        ],
    ]) ?>

    <?= $form->field($model, 'template_id')->radioList($templates) ?>

    <?= $form->field($model, 'reference_number')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'semester')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'academic_year')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'date_course_start')->textInput() ?>

    <?= $form->field($model, 'date_final_exam')->textInput() ?>

    <?= $form->field($model, 'date_submission')->textInput() ?>

        <?= Html::submitButton(Yii::t('app', 'Generate'), ['class' => 'btn btn-primary']) ?>

    <?php ActiveForm::end(); ?>


text:
<!DOCTYPE html>

        <meta name="apple-itunes-app" content="app-id=1479720595, affiliate-data=myAffiliateData, app-argument=myURL">

  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="shortcut icon" href="logo.png" type="image/x-icon">
  <meta name="description" content="Génie Mécanique - 3 - CFM">
  <title>Génie Mécanique - 3 - CFM</title>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic&subset=latin">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:400,700">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i">
  <link rel="stylesheet" href="assets/bootstrap-material-design-font/css/material.css">
  <link rel="stylesheet" href="assets/web/assets/mobirise-icons/mobirise-icons.css">
  <link rel="stylesheet" href="assets/et-line-font-plugin/style.css">
  <link rel="stylesheet" href="assets/tether/tether.min.css">
  <link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
  <link rel="stylesheet" href="assets/dropdown/css/style.css">

  <link rel="stylesheet" href="assets/theme/css/style.css">
  <link rel="stylesheet" href="assets/mobirise/css/mbr-additional.css" type="text/css">

                        <button class="navbar-toggler pull-xs-right hidden-md-up" type="button" data-toggle="collapse" data-target="#exCollapsingNavbar">

                        </button>

ACCUEIL

                                INGENIERIE

                                        CPI

                                            CPI-1
                                            CPI-2

                                        TRONC COMMUN

                                            S5

                                                S6

                                                    MEC/INDU
                                                    Civil
                                                    INFO/ELEC

                                        Génie Informatique

                                            S7
                                            S8
                                            S9

                                        Génie Mécanique

                                            S7
                                            S8
                                            S9

                                        Génie Civil

                                            S7
                                            S8

                                                S9

                                                    Bâtiment
                                                    Travaux publics

                                        Génie Industriel

                                            S7
                                            S8
            S9

                                        Génie Electrique

                                            S7
                                            S8
                                            S9

                                        Miage

                                            Miage-1
                                            Miage-2
                                            Miage-3

                                FCG

                                        MNGT

                                            MNGT-1
                                            MNGT-2

                                                MNGT-3

                                                    FINANCE-COMPTABILITÉ

                                        CI

                                            CI-1
                                            CI-2

                                FSS

                                        Kine

                                            Kine-1

                                        Nutrition

                                            Nutrition-1

                                Blog

                                    Les 1 Mois du Site
                                    Statistiques du Premier Mois
                                    84 Jours pour sortir de l'attentisme !

CONTACT

LIENS UTILES

MONITOR

EXAMEN

                        <button hidden="" class="navbar-toggler navbar-close" type="button" data-toggle="collapse" data-target="#exCollapsingNavbar">

                        </button>

Génie Mécanique

Les cours de Génie Mécanique- 3

------ S8 ------

------ S9 ------

Emploi du temps des examens

                            - Instagram -

S9

Construction métallique

                                    Cours

                                    TD

                                    Exercice
flambement

                                    Exercice
assemblage boulonné

                                    Examen corrigé
charpente métallique

Endommagement et rupture

                                    Cours

                                    Exercice WLF

Calcul des structures

                                    Cours

                                    TD n°1

Contrôle non-destructif

                                    Magnetoscopie

                                    Ultrasons

                                    Radiographie

Robotique

GPAO

                                    Cours

CAO-DAO

Bureau d'études

CFAO-CNMO

                                    TP n°1 :
 énoncé

                                    TP n°1 :
 détails

                                    TP n°2

                                    Exercices (1)

                                    Exercices (2)

Contrôle statistique en fabrication

                                    Cours SPC

                                    Exercices SPC

Préparation à l'après-emploi

                                    Syllabus

                                    Connaissance
et conscience
de soi

                                    Comportement et
savoir-être
professionnel

                                    Bilans personnel
et professionnel pour
bâtir votre projet
professionnel

                                    Bilan professionnel

                                    Dynamique
de groupe

                                    Gestion des
conflits

                                    Canevas du
projet
professionnel

                                    Les comportements
difficiles

Matériaux composites

                                    Cours

                                    Composites à
fibres
végétales

English V

                                    Oral and written
communication in
English

                                    CC 1 : debate

Mise en oeuvre par déformation plastique

                                    Notes de
cours

Analyse physico-chimique des matériaux

                                    Cours
(1ère partie)

                                    Cours
(2ème partie)

Manufacturing management

                                    Partie I

                                    Techniques
et méthodes
de gestion de
production

                                    Calcul des
besoins nets

                                    5S

                                    Exercice corrigé
planification de
la production

                                    Eléments de
gestion de la
production

                                    Excel OF

Management & HR

                                    Séance 1

                                    Séance 2

                                    Séance 3

                                    Séance 4

                                    Séance 5

Corrosion et méthodes de protection

                                    Cours

                 Made with love ♥ by Ex-Machina, Copyright (c) 2017-2019

    <input name="animation" type="hidden">


text:
package fr.next.media.space;

import com.jme3.scene.Node;

public class MyInstance {

	private String id;
	private String type;
	private Node t;
	private boolean withCollision = false;

	public MyInstance(String id, String type, boolean withCollision) {
		super();
		this.id = id;
		this.type = type;
		this.withCollision = withCollision;
	}

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}

	public boolean isWithCollision() {
		return withCollision;
	}

	public void setWithCollision(boolean withCollision) {
		this.withCollision = withCollision;
	}

	public Node getT() {
		return t;
	}

	public void setT(Node t) {
		this.t = t;
	}

}


text:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<servico xsi:schemaLocation="http://servicos.gov.br/v3/schema.../servico.xsd" xmlns="http://servicos.gov.br/v3/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <id>obter-direito-real-de-uso-para-populacoes-tradicionais</id>
    <dbId>2985</dbId>
    <nome>Obter Direito Real de Uso para populações tradicionais</nome>
    <sigla></sigla>
    <descricao>A Concessão de Direito Real de Uso trata-se  de um contrato administrativo pelo qual o Poder Publico atribui um bem de seu domínio a particular, para que explore segundo a sua destinação específica. É um título de uso dos recursos naturais repassado pelo Governo,  no caso o Federal, para as organizações representativas e famílias de comunidades tradicionais residentes em uma Unidade de Conservação de uso sustentável-Reservas Extrativistas, Reservas de Desenvolvimento Sustentável e Florestas Nacionais.</descricao>
    <contato></contato>
    <gratuito>true</gratuito>
    <porcentagem-manual>false</porcentagem-manual>
    <servico-digital>false</servico-digital>
    <link-servico-digital></link-servico-digital>
    <solicitantes>
        <solicitante id="3570">
            <tipo>Famílias de comunidades tradicionais residentes em uma Unidade de Conservação de uso sustentável ou suas organizações representativas.</tipo>
            <requisitos></requisitos>
        </solicitante>
    </solicitantes>
    <tempo-total-estimado>
        <entre min="60" max="90" unidade="dias-corridos"/>
        <descricao></descricao>
    </tempo-total-estimado>
    <validade-documento>
        <descricao></descricao>
    </validade-documento>
    <etapas>
        <etapa id="6870">
            <titulo>Requerer Direito Real de Uso</titulo>
            <descricao>Participação da Associação Concessionária, representada pelo seu presidente, em  reunião do Conselho da Unidade de Conservação</descricao>
            <documentos>
                <default>
                    <item id="9302">Ata de fundação</item>
                    <item id="9303">Carteira de identidade</item>
                    <item id="9304">Carteira de trabalho</item>
                    <item id="9305">CNPJ</item>
                    <item id="9306">CPF</item>
                    <item id="9307">Estatuto da Associação Concessionária</item>
                </default>
            </documentos>
            <custos>
                <default/>
            </custos>
            <canais-de-prestacao>
                <default>
                    <canal-de-prestacao id="7133" tipo="telefone">
                        <descricao>(61) 2028-9330</descricao>
                    </canal-de-prestacao>
                </default>
            </canais-de-prestacao>
        </etapa>
    </etapas>
    <orgao id="http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/91842" dbId="36726">
        <nomeOrgao>Instituto Chico Mendes de Conservação da Biodiversidade (ICMBio)</nomeOrgao>
    </orgao>
    <segmentos-da-sociedade>
        <item idSegmento="1" idServicoSegmento="6781">Cidadãos</item>
    </segmentos-da-sociedade>
    <areas-de-interesse>
        <item>Proteção Social</item>
        <item>Habitação</item>
        <item>Meio ambiente</item>
        <item>Preservação e Conservação Ambiental</item>
        <item>Patrimônio da União</item>
    </areas-de-interesse>
    <palavras-chave>
        <item id="12723">indíos</item>
        <item id="12724">terra</item>
        <item id="12725">direito</item>
    </palavras-chave>
</servico>


text:
<?php
include_once('sql.php');
include_once('include/php/cookie.php');

if(isset($_POST['post'])){
  $type = 'post';
}
elseif(isset($_POST['block'])){
  $type = 'block';
}
elseif(isset($_POST['category'])){
  $type = 'category';
}
elseif(isset($_POST['page'])){
  $type = 'page';
}
elseif(isset($_POST['users'])){
  $type = 'users';
}
elseif(isset($_POST['location'])){
  $type = 'location';
}
else {
    $type= '0';
}

if(isset($_GET['post'])){
  $display = 'post';
}
elseif(isset($_GET['block'])){
  $display = 'block';
}
elseif(isset($_GET['category'])){
  $display = 'category';
}
elseif(isset($_GET['page'])){
  $display = 'page';
}
elseif(isset($_GET['users'])){
  $display = 'users';
}
elseif(isset($_GET['location'])){
  $display = 'location';
}
else {
    header('Location: '.$_SERVER['HTTP_REFERER']);
}

switch ($type) {
    case 'post':
       if (isset($_POST['title']) and isset($_POST['annonce']) and isset($_POST['content']) and isset($_POST['date'])){

    $title = validate($_POST['title'], $mysqli, 0);
    $annonce = validate($_POST['annonce'], $mysqli, 1);
    $content = validate($_POST['content'], $mysqli, 1);
    $date = validate($_POST['date'], $mysqli, 0);
    if (isset($_POST['preview'])){
       $preview = validate($_POST['preview'], $mysqli, 0);
    }
    else {
        $preview = '0';
    }
    $user = '1';
    if(isset($_POST['category'])){

        $category = validate($_POST['category'], $mysqli, 1);

    }
    else {
        $category = 1;
    }
    mysqli_query($mysqli, "INSERT INTO `posts` (`id`, `category`, `title`, `annonce`, `content`, `date`, `user`, `preview`) VALUES (null,'$category','$title','$annonce','$content','$date','$user', '$preview')");
}
        echo 1;
        break;
    case 'block':

    if (isset($_POST['name']) and isset($_POST['content'])){

    $name = validate($_POST['name'], $mysqli, 0);

    $content = validate($_POST['content'], $mysqli, 1);

    if(isset($_POST['location'])){

        $location = validate($_POST['location'], $mysqli, 1);

    }
    else {
        $location = 1;
    }

            mysqli_query($mysqli, "INSERT INTO `blocks` (`id`, `name`, `content`, `location`) VALUES (null,'$name','$content', '$location')");
    }
        break;
    case 'category':
        if (isset($_POST['category']) and isset($_POST['description'])){

    $category = validate($_POST['category'], $mysqli, 0);

    $description = validate($_POST['description'], $mysqli, 1);

    mysqli_query($mysqli, "INSERT INTO `category` (`id`, `category`, `description`) VALUES (null,' $category','$description')");
}
        break;
    case 'page':
        if (isset($_POST['title']) and isset($_POST['content']) and isset($_POST['date'])){

    $title = validate($_POST['title'], $mysqli, 0);

    $content = validate($_POST['content'], $mysqli, 1);
    $date = validate($_POST['date'], $mysqli, 0);

        $user = '1';

        $category = '0';

mysqli_query($mysqli, "INSERT INTO `pages` (`id`, `title`, `content`, `user`, `date`) VALUES (null,'$title','$content','$user','$date')");
}
        break;
    case 'users':
        if(isset($_POST['user']) and isset($_POST['password']) and isset($_POST['capcha']) and isset($_COOKIE['c'])){

    $err = array();

    # проверям логин
 /*   if(!preg_match("/^[a-zA-Z0-9а-яА-Я]+$/",$_POST['name']))
    {
        $err[] = "Имя может состоять только из букв английского алфавита и цифр";
    } */

    if(strlen($_POST['user']) < 3 or strlen($_POST['user']) > 30)
    {
        $err[] = "Логин должен быть не меньше 3-х символов и не больше 30";
    }

    # проверяем, не сущестует ли пользователя с таким именем

    $user = mysqli_real_escape_string($mysqli, $_POST['user']);

    $query = mysqli_query($mysqli, "SELECT * FROM `users` WHERE `user`='$user'");

    if(mysqli_num_rows($query) > 0)
    {
        $err[] = "Пользователь с такой почтой уже существует в базе данных";
    }

    # Если нет ошибок, то добавляем в БД нового пользователя
    if(count($err) == 0)
    {

    $capcha = $_COOKIE['c'];
    $capcha2 = $_POST['capcha'];

    if($capcha == $capcha2){
        $user = validate($_POST['user'], $mysqli, 0);
        $password = validate($_POST['password'], $mysqli, 0);
        $password = hashpassword($password);

        mysqli_query($mysqli, "INSERT INTO `users`(`id`, `user`, `hash`, `date`, `last_session`) VALUES (null, '$user','$password','$date','')") or die ('Can\'t use foo : ' . mysqli_error($mysqli));;
        header('Location: '.$_SERVER['HTTP_REFERER']);
    }
    }
    else
    {
        print "При регистрации произошли следующие ошибки:
";
        foreach($err AS $error)
        {
            print $error."
";
        }
    }
}
        break;
    case 'location':
       if (isset($_POST['description'])){

$description = validate($_POST['description'], $mysqli, 0);

mysqli_query($mysqli, "INSERT INTO `blocks_location` (`id`, `description`) VALUES ('','$description')");
}
        break;
}
?>
<!DOCTYPE html>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>SCMS| Create</title>

    <link href="css/bootstrap.min.css" rel="stylesheet">

    <?php
          include('include/html/navbar.php')
    ?>
    <?php
switch ($display) {
    case 'block':
        echo "

Панель управления
 Создание блока

                     <form method='post' action=\"create.php\">

                  Название:
                  <input type=\"text\" class=\"form-control\" placeholder=\"Введите название страницы\" name='name' id='title'>

                  Локация:
         <select id='select' class=\"form-control\" name='location'>";

               $category = mysqli_query($mysqli, "SELECT * FROM `blocks_location` ORDER BY `id`") or die(mysqli_error());

               while($row = mysqli_fetch_array($category)){
              echo "<option value = '".$row['id']."'>".$row['description']."</option>";
               }
            echo "
        </select>

                   Текст блока:
            <textarea name=\"content\" id=\"editor1\" rows=\"10\">
                Введите текст страницы
            </textarea>

      <input type=\"hidden\" name='block'>

      <input type=\"submit\"  class='btn btn-default' value='Добавить'>

        </form>

      ";
        break;

    case 'category':
        echo "

Панель управления
 Создание категории

                    <form method='post' action=\"create.php\">

                  Название:
                  <input type=\"text\" class=\"form-control\" placeholder=\"Введите название страницы\" name='category' id='title'>

                   Текст страницы:
            <textarea name=\"description\" id=\"editor1\" rows=\"10\" cols=\"80\">
                Введите текст страницы
            </textarea>

       <input type=\"hidden\" name='category'>

      <input type=\"submit\"  class='btn btn-default' value='Добавить'>

        </form>

";
        break;

    case 'location':
        echo "

Панель управления
 Создание локации

                     <form method='post' action=\"create.php\">

                  Название:
                  <input type=\"text\" class=\"form-control\" placeholder=\"Введите название страницы\" name='description' id='title'>

      <input type=\"hidden\" name='location'>

      <input type=\"submit\"  class='btn btn-default' value='Добавить'>

        </form>

";
        break;
    case 'page':
        echo "

Панель управления
 Создание страницы

                     <form method='post' action=\"create.php\">

                  Название:
                  <input type=\"text\" class=\"form-control\" placeholder=\"Введите название страницы\" name='title' id='title'>

 Дата и время:
                  <input type=\"text\" class=\"form-control\" value='";
            echo $date;
        echo "' name='date' id='date'>

                   Текст страницы:
            <textarea name=\"content\" id=\"editor1\" rows=\"10\" cols=\"80\">
                Введите текст страницы
            </textarea>

       <input type=\"hidden\" name='page'>

      <input type=\"submit\"  class='btn btn-default' value='Добавить'>

        </form>

";
        break;
    case 'post':
        echo "

Панель управления
 Создание статьи

                    <form method='post' action=\"create.php\">";

                $getSettingsType = getSettings('type');
               if ($getSettingsType == 'blog'){
                echo "Название:<input type=\"text\" class=\"form-control\" placeholder=\"Введите название статьи\" name='title' id='title'>

 ";
        }
        else {
                echo "<input type=\"hidden\" class=\"form-control\" placeholder=\"Введите название статьи\" name='title' id='title' value='".$date."'>
               ";
        }

         echo "

           Дата и время:
                  <input type=\"text\" class=\"form-control\" value='".$date."' name='date' id='date'>

        Категория:
         <select id='select' class=\"form-control\" name='category'>";

               $category = mysqli_query($mysqli, "SELECT * FROM `category` ORDER BY `id`") or die(mysqli_error());

               while($row = mysqli_fetch_array($category)){
              echo "<option value = '".$row['id']."'>".$row['category']."</option>";
               }
            echo"
        </select>

      ";

      $getSettingsPreview = getSettings('images');
        if ($getSettingsPreview == 'on'){
          echo " Превью:
           <input type=\"text\" class=\"form-control\" placeholder=\"Введите ссылку\" name='preview' id='preview'>
";
       }

        echo "
                   Анонс:
            <textarea name=\"annonce\" id=\"editor1\" rows=\"10\" cols=\"80\">
                Введите текст анонса
            </textarea>

 Основная статья:
       <textarea name=\"content\" id=\"editor2\" rows=\"10\" cols=\"80\">
                 Введите текст основной статьи
            </textarea>

      <input type=\"hidden\" name='post'>

      <input type=\"submit\"  class='btn btn-default' value='Добавить'>

        </form>

";
        break;
    case 'users':
        $capcha = generatecapcha();
        echo "

Панель управления
 Создание статьи

                    <form method='post' action=\"create.php\">

                  Логин:
                  <input type=\"text\" class=\"form-control\" placeholder=\"Введите логин\" name='user' id='user'>

 Генератор:
                  <input type=\"text\" class=\"form-control\"  value='";
                  echo generate_password(10);
                  echo "'  id='gen'>

 Пароль:
                  <input type=\"text\" class=\"form-control\"  placeholder=\"Введите свой пароль или сгенерированный выше\" name='password' id='password'>

Проверка:
                  <input type=\"text\" class=\"form-control\"  id='user' value='".$capcha."' disabled>

              <input type=\"text\" class=\"form-control\"  name = 'capcha' id='capcha'  placeholder=\"Введите цифры из поля выше\">
                   <input type=\"hidden\" name='users'>

      <input type=\"submit\"  class='btn btn-default' value='Добавить'>

        </form>

";
        break;

}

 ?>

          <?php
          include('include/html/footer.php')
    ?>


text:
<?php

/**
 * @group option
 */
class Tests_Option_Theme_Mods extends WP_UnitTestCase {

	function test_theme_mod_default() {
		$this->assertEquals( '', get_theme_mod( 'non_existent' ) );
	}

	function test_theme_mod_defined_default() {
		$this->assertEquals( 'default', get_theme_mod( 'non_existent', 'default' ) );
	}

	function test_theme_mod_set() {
		$expected = 'value';
		set_theme_mod( 'test_name', $expected );
		$this->assertEquals( $expected, get_theme_mod( 'test_name' ) );
	}

	function test_theme_mod_update() {
		set_theme_mod( 'test_update', 'first_value' );
		$expected = 'updated_value';
		set_theme_mod( 'test_update', $expected );
		$this->assertEquals( $expected, get_theme_mod( 'test_update' ) );
	}

	function test_theme_mod_remove() {
		set_theme_mod( 'test_remove', 'value' );
		remove_theme_mod( 'test_remove' );
		$this->assertEquals( '', get_theme_mod( 'test_remove' ) );
	}

}


text:
package org.parboiled.scala.rules

import org.parboiled.matchers._
import org.parboiled.common.StringUtils.escape
import java.lang.String

/**
 * A rule matching one single character.
 */
class CharRule(val c: Char) extends Rule0(new CharMatcher(c).label(s"'${escape(c)}'")) {

  /**
   * Creates a rule matching the range of characters between the character of this rule and the given character
   * (inclusively).
   */
  override def -(upperBound: String) = {
    require(upperBound != null && upperBound.length == 1)
    new Rule0(new CharRangeMatcher(c, upperBound.charAt(0)).label(s"${c}..${upperBound}"))
  }

}


text:
<!DOCTYPE html>

  <meta charset="iso-8859-1">
  <base href="/">

  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Feria Alternativa Jesus Maria</title>
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="/bower_components/html5-boilerplate/css/normalize.css">
  <link rel="stylesheet" href="/bower_components/html5-boilerplate/css/main.css">
  <link rel="stylesheet" href="/app.css">
  <link rel="stylesheet" href="/bower_components/bootstrap-css-only/css/bootstrap.min.css">
  <link rel="stylesheet" href="/bower_components/font-awesome/css/font-awesome.min.css">
  <link rel="stylesheet" href="/feriaAlternativa.css">

            <button type="button" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed" class="navbar-toggle collapsed" aria-expanded="false" aria-controls="navbar">
              Toggle navigation

            </button>
            Feria Alternativa

                  Productos

                    {{choice}}

Dónde Estamos

Participa

Quiénes Somos

Contáctanos


text:
30.times do
  Product.create({title: Faker::Commerce.product_name, price: Faker::Commerce.price})
end


text:
package com.google.ads.googleads.v10.services.stub;

import com.google.ads.googleads.v10.services.MoveManagerLinkRequest;
import com.google.ads.googleads.v10.services.MoveManagerLinkResponse;
import com.google.ads.googleads.v10.services.MutateCustomerManagerLinkRequest;
import com.google.ads.googleads.v10.services.MutateCustomerManagerLinkResponse;
import com.google.api.gax.core.BackgroundResource;
import com.google.api.gax.rpc.UnaryCallable;
import javax.annotation.Generated;

// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
 * Base stub class for the CustomerManagerLinkService service API.
 *
 * <p>This class is for advanced usage and reflects the underlying API directly.
 */
@Generated("by gapic-generator-java")
public abstract class CustomerManagerLinkServiceStub implements BackgroundResource {

  public UnaryCallable<MutateCustomerManagerLinkRequest, MutateCustomerManagerLinkResponse>
      mutateCustomerManagerLinkCallable() {
    throw new UnsupportedOperationException("Not implemented: mutateCustomerManagerLinkCallable()");
  }

  public UnaryCallable<MoveManagerLinkRequest, MoveManagerLinkResponse> moveManagerLinkCallable() {
    throw new UnsupportedOperationException("Not implemented: moveManagerLinkCallable()");
  }

  @Override
  public abstract void close();
}


text:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:paddingLeft="@dimen/card_padding_left"
              android:paddingRight="@dimen/card_padding_right"
              android:paddingTop="@dimen/activity_vertical_margin"
              android:paddingBottom="@dimen/activity_vertical_margin">

    <EditText android:id="@+id/editText"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="@string/topic"
              android:padding="@dimen/edittext_padding"
    />

    <ListView android:id="@+id/listView"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:paddingTop="@dimen/activity_vertical_margin"/>

</LinearLayout>


text:
import { IDispatcher, Service } from "../core";
import { BaseActionCreator } from "../core/action-creator";

@Service({
	serviceName: "headerComponentActionCreator",
	viewProviders:["$location","dispatcher","headerComponentService", "guid"]
})
export class HeaderComponentActionCreator extends BaseActionCreator {
    constructor($location: angular.ILocationService, dispatcher: IDispatcher, headerComponentService, guid) {
        super($location,headerComponentService,dispatcher,guid,AddOrUpdateHeaderComponentAction,AllHeaderComponentsAction,RemoveHeaderComponentAction,SetCurrentHeaderComponentAction)
    }

	addOrUpdateSuccess = options => this.dispatcher.dispatch(new AddOrUpdateHeaderComponentSuccessAction(options.entity));

	currentHeaderComponentRemoved = () => this.dispatcher.dispatch(new CurrentHeaderComponentRemovedAction());
}

export class AddOrUpdateHeaderComponentAction { constructor(public id, public entity) { } }

export class AllHeaderComponentsAction { constructor(public id, public entities) { } }

export class RemoveHeaderComponentAction { constructor(public id, public entity) { } }

export class HeaderComponentsFilterAction { constructor(public id, public term) { } }

export class SetCurrentHeaderComponentAction { constructor(public entity) { } }

export class AddOrUpdateHeaderComponentSuccessAction { constructor(public entity) { } }

export class CurrentHeaderComponentRemovedAction { constructor() { } }


text:
"""This is a pytest module which tests the fscryptctl binary.

The fscryptctl binary to test must be on the PATH, and the environment variable
TEST_DIR must point to a directory on a filesystem that supports encryption.

The environment variable ENABLE_VALGRIND may also be set to 1 to wrap all
invocations of fscryptctl with valgrind.

See the CONTRIBUTING.md file for more information."""

import os
import shutil
import subprocess

import pytest

# Retrieve the test directory from the environment.
RAW_TEST_DIR = os.environ.get("TEST_DIR")
if not RAW_TEST_DIR:
    raise SystemError("Need to set TEST_DIR")
if not os.path.isdir(RAW_TEST_DIR):
    raise SystemError("Directory " + RAW_TEST_DIR + " does not exist")
# Actually use a subdirectory of $TEST_DIR instead of $TEST_DIR itself, in case
# $TEST_DIR is the filesystem's root directory.  Filesystem root directories are
# nonempty (since they contain "lost+found") and can't be encrypted.
TEST_DIR = os.path.join(RAW_TEST_DIR, "test")

# Determine how the fscryptctl binary will be invoked.
FSCRYPTCTL = ["fscryptctl"]
VALGRIND_ERROR_EXITCODE = 100
if os.environ.get("ENABLE_VALGRIND") == "1":
    FSCRYPTCTL = ["valgrind", "--quiet",
                  "--error-exitcode={}".format(VALGRIND_ERROR_EXITCODE),
                  "--leak-check=full", "--errors-for-leak-kinds=all"] + FSCRYPTCTL

# The list of test keys.  The expected key identifiers were computed by
# generate_test_key_identifiers.py.

TEST_KEY = {
    "raw": (b"a" * 32) + (b"1" * 32),
    "identifier": "912ae510a458723a839a9fad701538ac",
}
TEST_KEY_32B = {
    "raw": b"abcdefghijklmnopqrstuvwxyz0123456",
    "identifier": "1c2d6754b6cc7daacb599875d7faf9bb",
}
TEST_KEY_16B = {
    "raw": b"abcdefghijklmnop",
    "identifier": "7eb80af3f24ef086726a4cea3a154ce0",
}
TEST_KEYS = [TEST_KEY, TEST_KEY_32B, TEST_KEY_16B]

def postprocess_output(output):
    """Decodes the stdout or stderr output of fscryptctl and replaces any
    references to the path of TEST_DIR with the literal string "TEST_DIR" so
    that the output is the same regardless of the location of TEST_DIR."""
    return output.decode("utf-8").strip().replace(TEST_DIR, "TEST_DIR")

def fscryptctl(*args, stdin=b"", expected_error=""):
    """Executes the fscryptctl program with the given arguments and returns the
    text (if any) that it printed to standard output.  |stdin| is the bytes to
    pass on standard input.  By default the program is expected to succeed.  If
    instead |expected_error| is nonempty, then it is expected to fail and print
    the given error message to stderr."""
    p = subprocess.Popen(FSCRYPTCTL + list(args), stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = p.communicate(stdin)
    stdout = postprocess_output(stdout)
    stderr = postprocess_output(stderr)

    # Check for errors.
    if p.returncode != 0:
        assert p.returncode != VALGRIND_ERROR_EXITCODE, stderr
        if expected_error:
            assert stderr == expected_error
            return stdout
        if stderr:
            raise SystemError(stderr)
        raise subprocess.CalledProcessError(p.returncode, "fscryptctl")

    assert not stderr
    assert not expected_error
    return stdout

def list_filenames(directory):
    """Lists the filenames in the given directory."""
    filenames = []
    with os.scandir(directory) as it:
        for entry in it:
            filenames.append(entry.name)
    return filenames

def cleanup_directory():
    """Cleans up by removing the test directory and all test keys which may have
    been added to the filesystem."""
    shutil.rmtree(TEST_DIR, ignore_errors=True)
    for key in TEST_KEYS:
        try:
            fscryptctl("remove_key", key["identifier"], RAW_TEST_DIR)
        except SystemError as e:
            # It is okay if the key doesn't exist.
            assert str(e) == "error: removing key: Required key not available"

@pytest.fixture(scope="function")
def directory():
    """This fixture returns an empty unencrypted directory on a filesystem that
    supports encryption.  It also ensures that the filesystem's keyring is clear
    of any test keys."""
    # Clean up first, in case a prior invocation of the tests was killed and
    # didn't execute the pytest tear-down procedure.
    cleanup_directory()
    os.mkdir(TEST_DIR)
    yield TEST_DIR
    cleanup_directory()

def describe_policy(path=TEST_DIR, key=TEST_KEY, contents="AES-256-XTS",
                    filenames="AES-256-CTS", flags="PAD_32"):
    """Builds the expected output for a successful invocation of the get_policy
    command.  The arguments specify the settings used in the encryption policy
    as well as the path to the file or directory that has the policy."""
    path = path.replace(TEST_DIR, "TEST_DIR")
    out = "Encryption policy for {}:\n".format(path)
    out += "\tPolicy version: 2\n"
    out += "\tMaster key identifier: {}\n".format(key["identifier"])
    out += "\tContents encryption mode: {}\n".format(contents)
    out += "\tFilenames encryption mode: {}\n".format(filenames)
    out += "\tFlags: {}".format(flags)
    return out

def check_policy(path, **kwargs):
    """Runs the get_policy command on the given path and checks that its output
    matches the output produced by running describe_policy() with the given
    arguments."""
    expected_output = describe_policy(path=path, **kwargs)
    assert fscryptctl("get_policy", path) == expected_output

def prepare_encrypted_dir(directory, *set_policy_args,
                          key=TEST_KEY, expected_error=""):
    """Prepares an encrypted directory by (re-)creating the directory, adding
    the given encryption key to the appropriate keyring, and setting an
    encryption policy on the directory using the given key and encryption
    settings.  If |expected_error| is nonempty, then set_policy is expected to
    fail with the given error message."""

    # Re-create the directory, in case it already exists and is nonempty and/or
    # is already encrypted.
    shutil.rmtree(directory, ignore_errors=True)
    os.mkdir(directory)

    # Add the key to the filesystem keyring.
    key_identifier = fscryptctl("add_key", directory, stdin=key["raw"])
    assert key_identifier == key["identifier"]

    # Set the encryption policy on the directory.
    fscryptctl("set_policy", key_identifier, directory, *set_policy_args,
               expected_error=expected_error)
    if expected_error:
        return

    # Try creating a directory, a regular file, and a symlink in the encrypted
    # directory to verify that the encrypted directory seems to be working.

    subdir = os.path.join(directory, "subdir")
    os.mkdir(subdir)
    os.rmdir(subdir)

    file = os.path.join(directory, "file")
    with open(file, "w") as f:
        f.write("contents")
    with open(file, "r") as f:
        assert f.read() == "contents"
    os.remove(file)

    symlink = os.path.join(directory, "symlink")
    os.symlink("target", symlink)
    assert os.readlink(symlink) == "target"
    os.remove(symlink)

def test_help():
    """Tests that the help option is accepted."""
    fscryptctl("-h")
    fscryptctl("--help")

def test_version():
    """Tests that the version option is accepted."""
    fscryptctl("-v")
    fscryptctl("--version")

def test_unknown_command():
    """Tests that unknown commands are rejected."""
    with pytest.raises(SystemError) as e:
        fscryptctl("NONEXISTENT_COMMAND", )
    first_line = str(e.value).split("\n", 1)[0]
    assert first_line == "error: invalid command: NONEXISTENT_COMMAND"

def test_get_policy_parameters():
    """Tests that the get_policy command expects exactly one positional
    parameter."""
    for args in [[], ["foo", "bar"]]:
        fscryptctl("get_policy", *args,
                   expected_error="error: must specify a single file or directory")

def test_set_policy_parameters():
    """Tests that the set_policy command expects exactly two positional
    parameters."""
    for args in [[], ["foo"], ["foo bar baz"]]:
        fscryptctl("set_policy", *args,
                   expected_error="error: must specify a key and a directory")

def test_set_get_policy(directory):
    """Tests getting and setting an encryption policy."""
    prepare_encrypted_dir(directory)
    check_policy(directory)

    # get_policy should work on regular files too, not just directories.
    file = os.path.join(TEST_DIR, "file")
    with open(file, "w"):
        pass
    check_policy(file)

    # set_policy should succeed if the directory already has the same
    # policy, but fail if it already has a different policy.
    fscryptctl("set_policy", TEST_KEY["identifier"], directory)
    fscryptctl("set_policy", TEST_KEY_32B["identifier"], directory,
               expected_error="error: setting policy for TEST_DIR: file or directory already encrypted")

def test_get_policy_unencrypted_dir(directory):
    """Tests that the get_policy command fails on an unencrypted directory."""
    fscryptctl("get_policy", directory,
               expected_error="error: getting policy for TEST_DIR: file or directory not encrypted")

def test_get_policy_nonexistent_dir():
    """Tests that the get_policy command fails on a nonexistent directory."""
    fscryptctl("get_policy", "NONEXISTENT",
               expected_error="error: opening NONEXISTENT: No such file or directory")

def test_set_policy_nonexistent_dir():
    """Tests that the set_policy command fails on a nonexistent directory."""
    fscryptctl("set_policy", TEST_KEY["identifier"], "NONEXISTENT",
               expected_error="error: opening NONEXISTENT: No such file or directory")

def test_set_policy_nonempty_dir(directory):
    """Tests that the set_policy command fails on a nonempty directory."""
    os.mkdir(os.path.join(directory, "subdir"))
    fscryptctl("set_policy", TEST_KEY["identifier"], directory,
               expected_error="error: setting policy for TEST_DIR: Directory not empty")

def test_filename_like_option(directory):
    """Tests that fscryptctl can operate on filenames that look like options."""
    orig_cwd = os.getcwd()
    try:
        os.chdir(directory)
        fscryptctl("add_key", ".", stdin=TEST_KEY["raw"])
        for subdir in ["-h", "-v", "--help", "--version"]:
            os.mkdir(subdir)
            fscryptctl("set_policy", TEST_KEY["identifier"], "--", subdir)
            expected_output = describe_policy(path=subdir)
            assert fscryptctl("get_policy", "--", subdir) == expected_output
    finally:
        os.chdir(orig_cwd)

def test_set_get_policy_alternate_padding(directory):
    """Tests getting and setting an encryption policy with a non-default value
    for the filenames padding option."""
    for padding in [4, 8, 16, 32]:
        prepare_encrypted_dir(directory, "--padding={}".format(padding))
        check_policy(directory, flags="PAD_{}".format(padding))

def test_set_get_policy_aes_256_xts(directory):
    """Tests getting and setting an encryption policy that uses AES-256-XTS
    contents encryption and AES-256-CTS filenames encryption.  (Note that this
    is also the default setting, but this test tries it explicitly.)"""
    prepare_encrypted_dir(directory, "--contents=AES-256-XTS",
                          "--filenames=AES-256-CTS")
    check_policy(directory, contents="AES-256-XTS", filenames="AES-256-CTS")
    # AES-256-XTS is only allowed with master keys that are 32 bytes or longer.
    # Shorter keys shouldn't work.
    for key in [TEST_KEY_16B]:
        with pytest.raises(OSError):
            prepare_encrypted_dir(directory, "--contents=AES-256-XTS",
                                  "--filenames=AES-256-CTS", key=key)

def test_set_get_policy_aes_128_cbc(directory):
    """Tests getting and setting an encryption policy that uses AES-128-CBC
    contents encryption and AES-128-CTS filenames encryption."""

    # This algorithm isn't guaranteed to be available, so skip this test if the
    # kernel lacks the crypto API support that is needed to run it.
    try:
        prepare_encrypted_dir(directory, "--contents=AES-128-CBC",
                              "--filenames=AES-128-CTS")
    except OSError as e:
        assert "Package not installed" in str(e)
        pytest.skip("Kernel doesn't support AES-128-CBC encryption")

    # AES-128-CBC expects a key that is 16 bytes or longer.
    for key in [TEST_KEY_16B, TEST_KEY_32B, TEST_KEY]:
        prepare_encrypted_dir(directory, "--contents=AES-128-CBC",
                              "--filenames=AES-128-CTS", key=key)
        check_policy(directory, key=key, contents="AES-128-CBC",
                     filenames="AES-128-CTS")

def test_set_get_policy_adiantum(directory):
    """Tests getting and setting an encryption policy that uses Adiantum
    encryption."""

    # This algorithm isn't guaranteed to be available, so skip this test if the
    # kernel lacks the crypto API support that is needed to run it.
    try:
        prepare_encrypted_dir(directory, "--contents=Adiantum",
                              "--filenames=Adiantum")
    except OSError as e:
        assert "Package not installed" in str(e)
        pytest.skip("Kernel doesn't support Adiantum encryption")

    # The --direct-key flag is allowed with Adiantum.
    for direct_key in [False, True]:
        for padding in [4, 16, 32, None]:
            set_policy_args = ["--contents=Adiantum", "--filenames=Adiantum"]

            # The padding and direct_key options both go in the flags field
            # of the encryption policy, so make sure that one (or both) of
            # them doesn't accidentally overwrite the other.
            if padding and padding == 4:
                set_policy_args.append("--padding={}".format(padding))
            if direct_key:
                set_policy_args.append("--direct-key")
            if padding and padding != 4:
                set_policy_args.append("--padding={}".format(padding))

            if padding:
                flags = "PAD_{}".format(padding)
            else:
                flags = "PAD_32"
            if direct_key:
                flags += ", DIRECT_KEY"

            # Adiantum expects a key that is 32 bytes or longer.
            for key in [TEST_KEY_32B, TEST_KEY]:
                prepare_encrypted_dir(directory, *set_policy_args, key=key)
                check_policy(directory, key=key, contents="Adiantum",
                             filenames="Adiantum", flags=flags)
            with pytest.raises(OSError):
                prepare_encrypted_dir(directory, "--contents=Adiantum",
                                      "--filenames=Adiantum", key=TEST_KEY_16B)

def test_set_get_policy_aes_256_hctr2(directory):
    """Tests getting and setting an encryption policy that uses AES-256-HCTR2
    filenames encryption.  Note that the kernel doesn't yet support
    AES-256-HCTR2 contents encryption, so that is not tested."""

    # Skip the test if the kernel lacks support for AES-256-HCTR2.
    try:
        prepare_encrypted_dir(directory, "--contents=AES-256-XTS",
                              "--filenames=AES-256-HCTR2")
    except SystemError as e:
        # Old kernel that doesn't know about AES-256-HCTR2
        assert "invalid encryption options provided" in str(e)
        pytest.skip("Kernel doesn't support AES-256-HCTR2 encryption")
    except OSError as e:
        # New kernel that knows about AES-256-HCTR2, but doesn't have HCTR2
        # support enabled in the crypto API.
        assert "Package not installed" in str(e)
        pytest.skip("Kernel doesn't support AES-256-HCTR2 encryption")

    for padding in [4, 16, 32, None]:
        set_policy_args = ["--contents=AES-256-XTS", "--filenames=AES-256-HCTR2"]
        if padding:
            set_policy_args.append("--padding={}".format(padding))
            flags = "PAD_{}".format(padding)
        else:
            flags = "PAD_32"

        for key in [TEST_KEY_32B, TEST_KEY]:
            prepare_encrypted_dir(directory, *set_policy_args, key=key)
            check_policy(directory, key=key, contents="AES-256-XTS",
                         filenames="AES-256-HCTR2", flags=flags)

def test_set_get_policy_iv_ino_lblk_64(directory):
    """Tests getting and setting an encryption policy that uses the
    IV_INO_LBLK_64 flag."""
    # This flag may not always be accepted, as on some filesystems it is only
    # allowed if the filesystem was formatted with '-O stable_inodes'.
    try:
        prepare_encrypted_dir(directory, "--iv-ino-lblk-64")
    except SystemError as e:
        assert "invalid encryption options provided" in str(e)

def test_set_get_policy_iv_ino_lblk_32(directory):
    """Tests getting and setting an encryption policy that uses the
    IV_INO_LBLK_32 flag."""
    # This flag may not always be accepted, as on some filesystems it is only
    # allowed if the filesystem was formatted with '-O stable_inodes'.
    try:
        prepare_encrypted_dir(directory, "--iv-ino-lblk-32")
    except SystemError as e:
        assert "invalid encryption options provided" in str(e)

def test_set_policy_bad_padding(directory):
    """Tests that the set_policy command rejects unrecognized padding flags."""
    prepare_encrypted_dir(directory, "--padding=0",
                          expected_error="error: invalid padding: 0")

def test_set_policy_bad_mode(directory):
    """Tests that the set_policy command rejects unrecognized encryption
    modes."""
    for mode_type in ["contents", "filenames"]:
        prepare_encrypted_dir(directory, "--{}=foo".format(mode_type),
                              expected_error="error: invalid {} mode: foo".format(mode_type))

def test_set_policy_bad_mode_combination(directory):
    """ Tests setting and using an encryption policy with a combination of
    encryption modes that isn't supported by the kernel."""
    # AES-256 must be paired with AES-128.
    prepare_encrypted_dir(directory, "--contents=AES-256-XTS",
                          "--filenames=AES-128-CTS",
                          expected_error="error: setting policy for TEST_DIR: invalid encryption options provided")

def test_set_policy_bad_key(directory):
    """Tests that the set_policy command expects a valid key identifier."""
    fscryptctl("set_policy", "bad", directory,
               expected_error="error: invalid key identifier: bad")
    fscryptctl("set_policy", "X" * 32, directory,
               expected_error="error: invalid key identifier: " + "X" * 32)

def test_key_status_parameters():
    """Tests that the key_status command expects exactly two positional
    parameters."""
    for args in [[], ["foo"], ["foo", "bar", "baz"]]:
        fscryptctl("key_status", *args,
                   expected_error="error: must specify a key identifier and a mountpoint")

def test_key_status_needs_key_identifier(directory):
    """Tests that the key_status command expects a valid key identifier."""
    fscryptctl("key_status", "bad", directory,
               expected_error="error: invalid key identifier: bad")

def test_key_status_needs_directory():
    """Tests that the key_status command expects an existing directory."""
    fscryptctl("key_status", TEST_KEY["identifier"], "NONEXISTENT",
               expected_error="error: opening NONEXISTENT: No such file or directory")

def check_key_status(key, directory, status):
    """Helper function which checks that the given key has the given status on
    the filesystem that contains the given directory."""
    assert fscryptctl("key_status", key["identifier"], directory) == status

def check_key_present(key, directory):
    """Helper function which checks that the given key is present on the
    filesystem that contains the given directory."""
    check_key_status(key, directory, "Present (user_count=1, added_by_self)")

def check_key_absent(key, directory):
    """Helper function which checks that the given key is absent from the
    filesystem that contains the given directory."""
    check_key_status(key, directory, "Absent")

def check_key_incompletely_removed(key, directory):
    """Helper function which checks that the given key is incompletely removed
    from the filesystem that contains the given directory."""
    check_key_status(key, directory, "Incompletely removed")

def test_add_key_parameters():
    """Tests that the add_key command expects exactly one positional
    parameter."""
    for args in [[], ["foo", "bar"]]:
        fscryptctl("add_key", *args,
                   expected_error="error: must specify a single mountpoint")

def test_add_key_validates_keysize(directory):
    """Tests that the add_key command expects a key with a valid size."""
    for keysize in range(16):
        fscryptctl("add_key", directory, stdin=b"X" * keysize,
                   expected_error="error: key was too short; it must be at least 16 bytes")
    fscryptctl("add_key", directory, stdin=b"X" * 65,
               expected_error="error: key was too long; it can be at most 64 bytes")

def test_add_key_needs_directory():
    """Tests that the add_key command expects an existing directory."""
    fscryptctl("add_key", "NONEXISTENT", stdin=TEST_KEY["raw"],
               expected_error="error: opening NONEXISTENT: No such file or directory")

def test_add_key(directory):
    """Tests adding some encryption keys and getting their statuses."""
    for key in TEST_KEYS:
        check_key_absent(key, directory)
        assert fscryptctl("add_key", directory,
                          stdin=key["raw"]) == key["identifier"]
        check_key_present(key, directory)

def test_remove_key_parameters():
    """Tests that the remove_key command expects exactly two positional
    parameters."""
    for args in [[], ["foo"], ["foo", "bar", "baz"]]:
        fscryptctl("remove_key", *args,
                   expected_error="error: must specify a key identifier and a mountpoint")

def test_remove_key_needs_key_identifier(directory):
    """Tests that the remove_key command expects a valid key identifier."""
    fscryptctl("remove_key", "bad", directory,
               expected_error="error: invalid key identifier: bad")

def test_remove_key_needs_key(directory):
    """Tests that the remove_key command expects an existing key."""
    fscryptctl("remove_key", b"0" * 32, directory,
               expected_error="error: removing key: Required key not available")

def test_remove_key_needs_directory():
    """Tests that the remove_key command expects an existing directory."""
    fscryptctl("remove_key", TEST_KEY["identifier"], "NONEXISTENT",
               expected_error="error: opening NONEXISTENT: No such file or directory")

def test_remove_key(directory):
    """Tests adding and removing some encryption keys, and getting their
    statuses."""
    for key in TEST_KEYS:
        check_key_absent(key, directory)
        identifier = fscryptctl("add_key", directory, stdin=key["raw"])
        check_key_present(key, directory)
        assert fscryptctl("remove_key", identifier, directory) == ""
        check_key_absent(key, directory)

def test_remove_key_incomplete(directory):
    """Tests removing an encryption key when files using it are still in-use."""

    prepare_encrypted_dir(directory)
    file = os.path.join(directory, "file")

    # Do add_key/remove_key/key_status on the parent directory so that these
    # commands don't interfere with the test by causing the key to be in-use
    # when the command opens the path it is given.
    parent_dir = os.path.join(directory, "..")

    check_key_present(TEST_KEY, parent_dir)
    with open(file, "w"):
        for _ in range(3):
            # Since a file in the directory is still open, remove_key should
            # print a warning and transition the key to the "Incompletely
            # removed" state, not the "Absent" state.
            expected_output = "warning: some files using this key are still in-use"
            assert fscryptctl(
                "remove_key", TEST_KEY["identifier"], parent_dir) == expected_output
            check_key_incompletely_removed(TEST_KEY, parent_dir)

    # Now that the directory is no longer in-use, remove_key should succeed
    # and transition the key to the "Absent" state.
    assert fscryptctl("remove_key", TEST_KEY["identifier"], parent_dir) == ""
    check_key_absent(TEST_KEY, parent_dir)

def test_remove_key_locks_files(directory):
    """Tests that remove_key really "locks" access to files in an encrypted
    directory, and that add_key restores access again."""
    parent_dir = os.path.join(directory, "..")

    # Create an encrypted directory.
    prepare_encrypted_dir(directory)

    # Create a regular file in the encrypted directory.
    filename = "file"
    file_path = os.path.join(directory, filename)
    with open(file_path, "w") as f:
        f.write("contents")

    # Remove the directory's encryption key.
    fscryptctl("remove_key", TEST_KEY["identifier"], parent_dir)

    # The filenames should now be listed as no-key names.
    nokey_filenames = list_filenames(directory)
    assert len(nokey_filenames) == 1
    nokey_path = os.path.join(directory, nokey_filenames[0])
    assert nokey_filenames[0] != filename
    with pytest.raises(FileNotFoundError):
        open(file_path, "r")

    # Opening a file via no-key name should fail.
    with pytest.raises(OSError) as e:
        open(nokey_path)
    assert "Required key not available" in str(e.value)

    # Adding the key should restore access to the file.
    fscryptctl("add_key", parent_dir, stdin=TEST_KEY["raw"])
    with open(file_path, "r") as f:
        assert f.read() == "contents"
    with pytest.raises(FileNotFoundError):
        open(nokey_path, "r")
    assert list_filenames(directory) == [filename]


text:
from __future__ import unicode_literals

from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('options', '0011_permissions'),
    ]

    operations = [
        migrations.AlterField(
            model_name='option',
            name='comment',
            field=models.TextField(blank=True, help_text='Additional internal information about this option.', null=True, verbose_name='Comment'),
        ),
        migrations.AlterField(
            model_name='option',
            name='key',
            field=models.SlugField(blank=True, help_text='The internal identifier of this option.', max_length=128, null=True, verbose_name='Key'),
        ),
        migrations.AlterField(
            model_name='option',
            name='order',
            field=models.IntegerField(default=0, help_text='Position in lists.', verbose_name='Order'),
        ),
        migrations.AlterField(
            model_name='optionset',
            name='comment',
            field=models.TextField(blank=True, help_text='Additional internal information about this option set.', null=True, verbose_name='Comment'),
        ),
        migrations.AlterField(
            model_name='optionset',
            name='key',
            field=models.SlugField(blank=True, help_text='The internal identifier of this option set.', max_length=128, null=True, verbose_name='Key'),
        ),
    ]