<!DOCTYPE html>
<html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="keywords" content="Wolfram, Wathematica, SystemModeler, WolframPlayer, CDFPlayer, keygen, crack, hack">
        <title>Универсальный генератор паролей для всех продуктов Wolfram</title>
        <script>
            'use strict';

            var hashDescription = {
                0x5B29: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x6587: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x7F8C: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x3575: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x541A: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x452D: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x3FD1: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x140A: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x29A5: 'MathLM начиная с версии 10.0'                                                                                 ,
                0x72A4: 'MathLM начиная с версии 10.0'                                                                                 ,

                0x15BF: 'System Modeler 4.0'                                                                                           ,
                0x6897: 'System Modeler 4.1, подходит для System Modeler 4.0 - 4.1'                                                    ,
                0x2F33: 'System Modeler 4.2, подходит для System Modeler 4.0 - 4.2'                                                    ,
                0x72C4: 'System Modeler 4.3, подходит для System Modeler 4.0 - 4.3'                                                    ,
                0x8330: 'System Modeler 5.0, подходит для System Modeler 4.0 - 5.0'                                                    ,
                0x81DD: 'System Modeler 5.1, подходит для System Modeler 4.0 - 5.1'                                                    ,
                0x47C5: 'System Modeler 12.0, подходит для System Modeler 4.0 - 12.0'                                                  ,
                0xB4D3: 'System Modeler 12.1, подходит для System Modeler 4.0 - 12.1'                                                  ,
                0xAB0B: 'System Modeler 12.2, подходит для System Modeler 4.0 - 12.2'                                                  ,
                0x6188: 'System Modeler 12.3, подходит для System Modeler 4.0 - 12.3'                                                  ,
                0xBF47: 'System Modeler 13.0, подходит для System Modeler 4.3 - 13.0'                                                  ,
                0x1330: 'System Modeler 13.1, подходит для System Modeler 4.3 - 13.1'                                                  ,
                0xF536: 'System Modeler 13.2, подходит для System Modeler 4.3 - 13.2'                                                  ,
                0xA5CE: 'System Modeler 13.3, подходит для System Modeler 4.3 - 13.3'                                                  ,
                0x755E: 'System Modeler 14.0, подходит для System Modeler 4.3 - 14.0'                                                  ,
                0x1361: 'System Modeler 14.1, подходит для System Modeler 4.3 - 14.1'                                                  ,

                0xDA5E: 'Mathematica 10.0'                                                                                             ,
                0xC1AE: 'Mathematica 10.1, подходит для Mathematica 10.0 - 10.1'                                                       ,
                0xE3B7: 'Mathematica 10.2, подходит для Mathematica 10.0 - 10.2'                                                       ,
                0x1764E:'Официально этот хэш не использовался, для Mathematica 10.0 - 10.2, но не работает'                            ,
                0x80B9: 'Mathematica 10.3, подходит для Mathematica 10.0 - 10.3'                                                       ,
                0x5750: 'Mathematica 10.4, подходит для Mathematica 10.0 - 10.4'                                                       ,
                0x14411:'Официально этот хэш не использовался, для Mathematica 10.0 - 10.4, но не работает'                            ,
                0x25DB: 'Mathematica 11.0, подходит для Mathematica 10.0 - 11.0'                                                       ,
                0x42DD: 'Mathematica 11.1, подходит для Mathematica 10.0 - 11.1'                                                       ,
                0x6A91: 'Mathematica 11.2, подходит для Mathematica 10.0 - 11.2'                                                       ,
                0x29F8: 'Mathematica 11.3, подходит для Mathematica 10.0 - 11.3'                                                       ,
                0xA68B: 'Mathematica 12.0, подходит для Mathematica 10.0 - 12.0'                                                       ,
                0xE4A8: 'Mathematica 12.1, подходит для Mathematica 10.0 - 12.1'                                                       ,
                0xA439: 'Официально этот хэш не использовался, подходит для Mathematica 10.0 - 12.0'                                   ,
                0x2FDB: 'Mathematica 12.2, подходит для Mathematica 10.2 - 12.2'                                                       ,
                0xD227: 'Mathematica 12.3, подходит для Mathematica 10.2 - 12.3'                                                       ,
                0xDB75: 'Mathematica 13.0, подходит для Mathematica 10.2 - 13.0'                                                       ,
                0xEE71: 'Mathematica 13.1, подходит для Mathematica 10.2 - 13.1'                                                       ,
                0x29C2: 'Mathematica 13.2, подходит для Mathematica 10.2 - 13.2'                                                       ,
                0x44F1: 'Mathematica 13.3, подходит для Mathematica 10.2 - 13.3'                                                       ,
                0x8E3C: 'Mathematica 14.0, подходит для Mathematica 12.0 - 14.0'                                                       ,
                0x60F0: 'Mathematica 14.1, подходит для Mathematica 12.0 - 14.1'                                                       ,

                0xEEFE: 'Mathematica и System Modeler 14.2, подходит для Mathematica 14.1 - 14.2 и System Modeler 4.3 - 14.2'          ,
                0x7C91: 'Mathematica и System Modeler 14.3(?), подходит для Mathematica 14.1 - 14.3(?) и System Modeler 4.3 - 14.3(?)' ,
                0x5770: 'Mathematica и System Modeler 15.0(?), подходит для Mathematica 14.1 - 15.0(?) и System Modeler 4.3 - 15.0(?)' ,
                0x7C53: 'Mathematica и System Modeler 15.1(?), подходит для Mathematica 14.1 - 15.1(?) и System Modeler 13.0 - 15.1(?)',
                0x64EC: 'Mathematica и System Modeler 15.2(?), подходит для Mathematica 14.1 - 15.2(?) и System Modeler 13.0 - 15.2(?)',
                0x73EE: 'Mathematica и System Modeler 15.3(?), подходит для Mathematica 14.1 - 15.3(?) и System Modeler 13.0 - 15.3(?)',
                0x4209: 'Mathematica и System Modeler 16.0(?), подходит для Mathematica 14.1 - 16.0(?) и System Modeler 13.0 - 16.0(?)',
                0x8C72: 'Mathematica и System Modeler 16.1(?), подходит для Mathematica 14.1 - 16.1(?) и System Modeler 13.0 - 16.1(?)',

                0xABEB: 'Mathematica и System Modeler 16.2(?), подходит для Mathematica 12.0 - 16.2(?) и System Modeler 14.1 - 16.2(?)',
                0x8250: 'Mathematica и System Modeler 16.3(?), подходит для Mathematica 12.0 - 16.3(?) и System Modeler 14.1 - 16.3(?)',
                0x8C68: 'Mathematica и System Modeler 17.0(?), подходит для Mathematica 12.0 - 17.0(?) и System Modeler 14.1 - 17.0(?)',
                0xE756: 'Mathematica и System Modeler 17.1(?), подходит для Mathematica 12.0 - 17.1(?) и System Modeler 14.1 - 17.1(?)',
                0xB4D0: 'Mathematica и System Modeler 17.2(?), подходит для Mathematica 13.0 - 17.2(?) и System Modeler 14.1 - 17.2(?)',
                0xCD2D: 'Mathematica и System Modeler 17.3(?), подходит для Mathematica 13.0 - 17.3(?) и System Modeler 14.1 - 17.3(?)',
                0x22DD: 'Mathematica и System Modeler 18.0(?), подходит для Mathematica 13.0 - 18.0(?) и System Modeler 14.1 - 18.0(?)',
                0x66C0: 'Mathematica и System Modeler 18.1(?), подходит для Mathematica 13.0 - 18.1(?) и System Modeler 14.1 - 18.1(?)',
                0xD54F: 'Mathematica и System Modeler 18.2(?), подходит для Mathematica 13.0 - 18.2(?) и System Modeler 14.1 - 18.2(?)',
                0xB013: 'Mathematica и System Modeler 18.3(?), подходит для Mathematica 13.0 - 18.3(?) и System Modeler 14.1 - 18.3(?)',
                0x5417: 'Mathematica и System Modeler 19.0(?), подходит для Mathematica 13.0 - 19.0(?) и System Modeler 14.1 - 19.0(?)',

                0xD1CF: 'Mathematica и System Modeler 19.1(?), подходит для Mathematica 14.1 - 19.1(?) и System Modeler 14.1 - 19.1(?)',

                0x609F: 'Mathematica и System Modeler 19.2(?), подходит для Mathematica 14.2 - 19.2(?) и System Modeler 14.2 - 19.2(?)'
            };


            var defaultActivationKey = '3893-9258-K6XJLE';

            var licenseType                              ;

            function genKeyValStr(mathID, activationKey=defaultActivationKey, maxLicenseProcessesSubprocesses="", licenseType="", licenseExpirationDate="", licenseClass="") {
                var keyValStr = "";
                if (typeof mathID !== "undefined" && mathID.length != 0)
                {
                    keyValStr = mathID;
                    if (typeof licenseExpirationDate           !== "undefined" && licenseExpirationDate          .length != 0) {keyValStr += "@" + licenseExpirationDate          };
                    if (typeof maxLicenseProcessesSubprocesses !== "undefined" && maxLicenseProcessesSubprocesses.length != 0) {keyValStr += ":" + maxLicenseProcessesSubprocesses};
                    if (typeof licenseClass                    !== "undefined" && licenseClass                   .length != 0) {keyValStr += "*" + licenseClass                   };
                    if (typeof licenseType                     !== "undefined" && licenseType                    .length != 0) {keyValStr += "$" + licenseType                    };
                    if (typeof activationKey                   !== "undefined" && activationKey                  .length != 0) {keyValStr += "&" + activationKey                  }
                    else                                                                                                       {keyValStr += "&" + defaultActivationKey           };

                };
                return keyValStr;
            };

            function keyValStr2mathID(keyValStr) {
                var mathID = "";
                var index0 = 0;
                var index1 = keyValStr.indexOf("@");
                var index2 = keyValStr.indexOf(":");
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");

                if (keyValStr.startsWith('We Are Everywhere!')) {
                    index0 = 18;
                };
                if        (index1 >= 0) {
                    mathID = keyValStr.substring(index0, index1);
                } else if (index2 >= 0) {
                    mathID = keyValStr.substring(index0, index2);
                } else if (index3 >= 0) {
                    mathID = keyValStr.substring(index0, index3);
                } else if (index4 >= 0) {
                    mathID = keyValStr.substring(index0, index4);
                } else if (index5 >= 0) {
                    mathID = keyValStr.substring(index0, index5);
                } else {
                    mathID = keyValStr.substring(index0);
                };
                return mathID;
            };

            function keyValStr2licenseExpirationDate(keyValStr) {
                var licenseExpirationDate = "";
                var index1 = keyValStr.indexOf("@");
                var index2 = keyValStr.indexOf(":");
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index1 >= 0) {
                    if        (index2 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index2);
                    } else if (index3 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index3);
                    } else if (index4 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index4);
                    } else if (index5 >= 0) {
                        licenseExpirationDate = keyValStr.substring(index1 + 1, index5);
                    };
                };
                return licenseExpirationDate;
            };

            function keyValStr2maxLicenseProcessesSubprocesses(keyValStr) {
                var maxLicenseProcessesSubprocesses = "";
                var index2 = keyValStr.indexOf(":");
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index2 >= 0) {
                    if        (index3 >= 0) {
                        maxLicenseProcessesSubprocesses = keyValStr.substring(index2 + 1, index3);
                    } else if (index4 >= 0) {
                        maxLicenseProcessesSubprocesses = keyValStr.substring(index2 + 1, index4);
                    } else if (index5 >= 0) {
                        maxLicenseProcessesSubprocesses = keyValStr.substring(index2 + 1, index5);
                    };
                };
                return maxLicenseProcessesSubprocesses;
            };

            function keyValStr2licenseClass(keyValStr) {
                var licenseClass = "";
                var index3 = keyValStr.indexOf("*");
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index3 >= 0) {
                    if        (index4 >= 0) {
                        licenseClass = keyValStr.substring(index3 + 1, index4);
                    } else if (index5 >= 0) {
                        licenseClass = keyValStr.substring(index3 + 1, index5);
                    };
                };
                return licenseClass;
            };

            function keyValStr2licenseType(keyValStr) {
                var licenseType = "";
                var index4 = keyValStr.indexOf("$");
                var index5 = keyValStr.indexOf("&");
                if (index4 >= 0) {
                    if        (index5 >= 0) {
                        licenseType = keyValStr.substring(index4 + 1, index5);
                    };
                };
                return licenseType;
            };

            function keyValStr2ActivationKey(keyValStr) {
                var activationKey = "";
                var index5 = keyValStr.indexOf("&");
                if (index5 >= 0) {
                    activationKey = keyValStr.substring(index5 + 1);
                };
                return activationKey;
            };

            function f2(n, byte, c) {
                for (var bitIndex = 7; bitIndex >= 0; bitIndex--) {
                    var bit = (byte >> bitIndex) & 1;
                    var temp = (n << 1) + bit;
                    if (n & 0x8000) {
                        temp ^= c;
                    };
                    n = temp;
                };

                return n;
            };

            // inverse of f2: testSalt(f2(x, y, c), y, c) == x
            function testSalt(n, byte, c) {
                for (var bitIndex = 0; bitIndex <= 7; bitIndex += 1) {
                    var bit = (byte >> bitIndex) & 1;
                    if (bit + ((n - bit) & ~1) == n) {
                        n = (n - bit) >> 1;
                    } else {
                        n = ((c - bit) ^ n) >> 1;
                    };
                };

                return n;
            };

            function genPassword(keyValStr, salt) {
                var licenseExpirationDate           = keyValStr2licenseExpirationDate          (keyValStr);
                var maxLicenseProcessesSubprocesses = keyValStr2maxLicenseProcessesSubprocesses(keyValStr);
                var licenseClass                    = keyValStr2licenseClass                   (keyValStr);
                var licenseType                     = keyValStr2licenseType                    (keyValStr);

                salt = parseInt(salt);
                var uuid = keyValStr.split('').map(function(x){return x.charCodeAt()});
                var salt1 = salt;
                for (var byteIndex = uuid.length - 1; byteIndex >= 0; byteIndex -= 1) {
                    salt1 = testSalt(salt1, uuid[byteIndex], 0x105C3);
                };

/*
                var offset1 = 0;
                while (testSalt(testSalt(salt1, offset1 & 0xFF, 0x105C3), offset1 >> 8, 0x105C3) !== 0xA5B6) {
                    offset1 ++;
                    if (offset1 >= 0xFFFF) {
                        return '';
                    }
                }
*/
                salt1 = salt1 ^ 0xCEDF;

                salt1 = Math.trunc(((salt1 + 0x72FA) & 0xFFFF) * 99999 / 0xFFFF);
                var offset1 = '0000' + salt1;
                offset1 = offset1.substring(offset1.length - 5);
                var salt2 = parseInt(offset1.substring(0, 2) + offset1.substring(3, 5) + offset1.substring(2, 3));
                salt2 = Math.trunc((salt2 / 99999.0) * 0xFFFF, 10) + 1;
                salt2 = testSalt(testSalt(0, salt2 & 0xFF, 0x1064B), salt2 >> 8, 0x1064B);
                for (var i = uuid.length - 1; i >= 0; i -= 1) {
                    salt2 = testSalt(salt2, uuid[i], 0x1064B);
                };

/*
                var offset2 = 0;
                while(testSalt(testSalt(salt2, offset2 & 0xFF, 0x1064B),
                                offset2 >> 8, 0x1064B) !== 0xA5B6) {
                    offset2 += 1;
                    if (offset2 >= 0xFFFF) { return ''; }
                }
*/
                salt2 = salt2 ^ 0xEF22;

                salt2 = Math.trunc((salt2 & 0xFFFF) * 99999 / 0xFFFF);
                var offset2 = '0000' + salt2;
                offset2 = offset2.substring(offset2.length - 5);
                var password = [
                    offset2.charAt(3),
                    offset1.charAt(3),
                    offset1.charAt(1),
                    offset1.charAt(0),
                    '-',
                    offset2.charAt(4),
                    offset1.charAt(2),
                    offset2.charAt(0),
                    '-',
                    offset2.charAt(2),
                    offset1.charAt(4),
                    offset2.charAt(1)
                ].join('');
                if ((maxLicenseProcessesSubprocesses.length > 0) || (licenseType.length > 0) || (licenseExpirationDate.length > 0) || (licenseClass.length > 0)) {password += ":" + maxLicenseProcessesSubprocesses};
                if (                                                (licenseType.length > 0) || (licenseExpirationDate.length > 0) || (licenseClass.length > 0)) {password += ":" + licenseType                    };
                if (                                                                            (licenseExpirationDate.length > 0) || (licenseClass.length > 0)) {password += ":" + licenseExpirationDate          };
                if                                                                                                                    (licenseClass.length > 0)  {password += ":" + licenseClass                   };
                return password;
            };

            function password2Hash(mathID, activationKey, password) {
                var parts = password.split(":");
                while (parts.length < 5) {
                    parts.push("");
                };
                var maxLicenseProcessesSubprocesses = parts[1];
                var licenseType                     = parts[2];
                var licenseExpirationDate           = parts[3];
                var licenseClass                    = parts[4];

                var keyValStr = '';
                if (licenseClass) {
                    keyValStr = 'We Are Everywhere!';
                };
                keyValStr += genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);

                var uuid = keyValStr.split('').map(function(x){return x.charCodeAt()});

                var offset1 = password.charAt( 3) + password.charAt( 2) + password.charAt( 6) + password.charAt( 1) + password.charAt(10);
                var offset2 = password.charAt( 7) + password.charAt(11) + password.charAt( 9) + password.charAt( 0) + password.charAt( 5);
                var salt1 = ((Math.ceil((Number(offset1) * 0xFFFF) / 99999) - 0x72FA) & 0xFFFF) ^ 0xCEDF;
                var salt2 = Math.ceil((Number(offset2) * 0xFFFF) / 99999) ^ 0xEF22;

                for (var byteIndex = 0; byteIndex <= uuid.length - 1; byteIndex += 1) {
                    salt2 = f2(salt2, uuid[byteIndex], 0x1064B);
                };

                var salt1_2;
                salt1_2 = parseInt(offset1.substring(0, 2) + offset1.substring(3, 5) + offset1.substring(2, 3));
                salt1_2 = Math.trunc((salt1_2 / 99999.0) * 0xFFFF, 10) + 1;

                var b1 = f2(salt2, salt1_2 >>> 8 , 0x1064B);  // 0x1064B = 67147
                var b3 = f2(b1   , salt1_2 & 0xFF, 0x1064B);  // 0x1064B = 67147

                for (var byteIndex = 0; byteIndex <= uuid.length - 1; byteIndex += 1) {
                    salt1 = f2(salt1, uuid[byteIndex], 0x105C3);
                };

                if (b3 === 0) {
                    return salt1;
                } else {
                    return null;
                };
            };

            function printPass(documentTag, outputInnerHTML, passwordText) {
                var outputMathLMEl;
                var passwordMathLMEl;
                var passwordInnerCodeMathLMEl;

                outputMathLMEl = document.querySelector(documentTag);
                outputMathLMEl.innerHTML = outputInnerHTML;
                outputMathLMEl.append(document.createElement("br"));
                passwordMathLMEl = document.createElement("pre");
                passwordInnerCodeMathLMEl = document.createElement("code");
                passwordMathLMEl.append(passwordInnerCodeMathLMEl);
                passwordInnerCodeMathLMEl.innerText = passwordText;
                outputMathLMEl.append(passwordMathLMEl);
            };

            function checkboxLicenseTypeRead() {
                var LicenseTypeNumber;
                var result;
                LicenseTypeNumber = 0;

                if (document.getElementById("checkbox-license-type-bit-00").checked) {LicenseTypeNumber |= (1 <<  0)};
                if (document.getElementById("checkbox-license-type-bit-01").checked) {LicenseTypeNumber |= (1 <<  1)};
                if (document.getElementById("checkbox-license-type-bit-02").checked) {LicenseTypeNumber |= (1 <<  2)};
                if (document.getElementById("checkbox-license-type-bit-03").checked) {LicenseTypeNumber |= (1 <<  3)};
                if (document.getElementById("checkbox-license-type-bit-04").checked) {LicenseTypeNumber |= (1 <<  4)};
                if (document.getElementById("checkbox-license-type-bit-05").checked) {LicenseTypeNumber |= (1 <<  5)};
                if (document.getElementById("checkbox-license-type-bit-06").checked) {LicenseTypeNumber |= (1 <<  6)};
                if (document.getElementById("checkbox-license-type-bit-07").checked) {LicenseTypeNumber |= (1 <<  7)};
                if (document.getElementById("checkbox-license-type-bit-08").checked) {LicenseTypeNumber |= (1 <<  8)};
                if (document.getElementById("checkbox-license-type-bit-09").checked) {LicenseTypeNumber |= (1 <<  9)};
                if (document.getElementById("checkbox-license-type-bit-10").checked) {LicenseTypeNumber |= (1 << 10)};
                if (document.getElementById("checkbox-license-type-bit-11").checked) {LicenseTypeNumber |= (1 << 11)};
                if (document.getElementById("checkbox-license-type-bit-12").checked) {LicenseTypeNumber |= (1 << 12)};
                if (document.getElementById("checkbox-license-type-bit-13").checked) {LicenseTypeNumber |= (1 << 13)};
                if (document.getElementById("checkbox-license-type-bit-14").checked) {LicenseTypeNumber |= (1 << 14)};
                if (document.getElementById("checkbox-license-type-bit-15").checked) {LicenseTypeNumber |= (1 << 15)};
                if (document.getElementById("checkbox-license-type-bit-16").checked) {LicenseTypeNumber |= (1 << 16)};
                if (document.getElementById("checkbox-license-type-bit-17").checked) {LicenseTypeNumber |= (1 << 17)};
                if (document.getElementById("checkbox-license-type-bit-18").checked) {LicenseTypeNumber |= (1 << 18)};
                if (document.getElementById("checkbox-license-type-bit-19").checked) {LicenseTypeNumber |= (1 << 19)};
                if (document.getElementById("checkbox-license-type-bit-20").checked) {LicenseTypeNumber |= (1 << 20)};
                if (document.getElementById("checkbox-license-type-bit-21").checked) {LicenseTypeNumber |= (1 << 21)};
                if (document.getElementById("checkbox-license-type-bit-22").checked) {LicenseTypeNumber |= (1 << 22)};
                if (document.getElementById("checkbox-license-type-bit-23").checked) {LicenseTypeNumber |= (1 << 23)};
                if (document.getElementById("checkbox-license-type-bit-24").checked) {LicenseTypeNumber |= (1 << 24)};
                if (document.getElementById("checkbox-license-type-bit-25").checked) {LicenseTypeNumber |= (1 << 25)};
                if (document.getElementById("checkbox-license-type-bit-26").checked) {LicenseTypeNumber |= (1 << 26)};
                if (document.getElementById("checkbox-license-type-bit-27").checked) {LicenseTypeNumber |= (1 << 27)};
                if (document.getElementById("checkbox-license-type-bit-28").checked) {LicenseTypeNumber |= (1 << 28)};
                if (document.getElementById("checkbox-license-type-bit-29").checked) {LicenseTypeNumber |= (1 << 29)};
                if (document.getElementById("checkbox-license-type-bit-30").checked) {LicenseTypeNumber |= (1 << 30)};
                if (document.getElementById("checkbox-license-type-bit-31").checked) {LicenseTypeNumber |= (1 << 31)};

                LicenseTypeNumber = LicenseTypeNumber >>> 0;  // Чтобы преобразовать в 32-битное беззнаковое представление

                if (LicenseTypeNumber == 0) {result = "";}
                else                        {result = LicenseTypeNumber.toString(16).toUpperCase()};

                return result;
            };

            function inputMathidChange(value) {
                var mathID                = value;

                // Извлекаем первые два символа
                var firstTwo = mathID.slice(0, 2);

                // Регулярное выражение для проверки формата MachineID
                var regex = /^(\d{4})-(\d{5})-(\d{5})$/;

                // Проверка формата строки
                var match = mathID.match(regex);

                // Проверяем, что это число и не является NaN
                if (!isNaN(firstTwo) && firstTwo.length === 2) {
                    var machineType = parseInt(firstTwo, 10);
                    switch (machineType) {
                        case 31:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=31 - MacOSX-ARM64) ';
                            break;

                        case 33:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=33 - Windows-ARM64) ';
                            break;

                        case 51:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=51 - MacOSX-x86-64) ';
                            break;

                        case 58:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=58 - Windows-ARM) ';
                            break;

                        case 61:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=61 - Windows) ';
                            break;

                        case 62:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=62 - Windows-x86-64) ';
                            break;

                        case 65:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): (MachineType=65 - Linux) ';
                            break;

                        default:
                            document.getElementById("mathid-label").textContent = ' MachineID (MathID): ';
                            break;
                    };
                } else {
                    document.getElementById("mathid-label").textContent = ' MachineID (MathID): ';
                };

                if (match) {
                    // Преобразование отдельных частей строки в числа
                    var A = parseInt(match[1].substring(0, 2));   // Первое число (dd)
                    var B = parseInt(match[1].substring(2) + match[2] + match[3].substring(0, 3)); // Второе число (ddddddddd)
                    var C = parseInt(match[3].substring(3));   // Третье число (dd)

                    // Вычисление выражения (((B >> 2) & 0x3FFFFFFF) + 43 * A + 29 * (B & 3)) % 97
                    var calculatedC = ((B >>> 2) + 43 * A + 29 * (B & 3)) % 97;

                    if (mathID != "") {
                        if (match != null) {
                            if (B <= 4294967295  ) {
                                document.getElementById("mathid-label").textContent += ' (UniqueNumber='+B+')';

                                if (calculatedC == C) {
                                    document.getElementById("mathid-label").textContent += ' (checksum='+C+')';
                                } else {
                                    document.getElementById("mathid-label").textContent += ' (checksum='+C+', а ожидалось '+calculatedC+')';
                                };
                            } else {
                                document.getElementById("mathid-label").textContent += ' (UniqueNumber='+B+' превышает максимально возможное значение 4294967295)';
                            };
                        };
                    };
                };
            };

            function checkboxLicenseTypeClick() {
                var licenseType = checkboxLicenseTypeRead();
                document.getElementById("div-license-type").textContent = " Тип лицензии (License Type): " + licenseType;
            };

            function checkPass(event) {
                event.preventDefault();

                var mathID        = document.querySelector('#mathid'        ).value;
                var activationKey = document.querySelector('#activation-key').value;
                var password      = document.querySelector('#password-str'  ).value;
                var hash          = password2Hash(mathID, activationKey, password) ;

                var outputEl      = document.querySelector('#output');

                var outputDivEl;

                outputEl.innerHTML = 'MachineID (MathID): ' + mathID + '<br>' + 'Ключ активации (Activation Key): ' + activationKey + '<br>' + 'Пароль (password): ' + password;

                if (hash != null) {  // не null и не undefined
                    var parts = password.split(":");
                    while (parts.length < 5) {
                        parts.push("");
                    };
                    var maxLicenseProcessesSubprocesses = parts[1];
                    var licenseType                     = parts[2];
                    var licenseExpirationDate           = parts[3];
                    var licenseClass                    = parts[4];
                    var hashDescr;
                    var keyValStr = '';
                    if (licenseClass) {
                        keyValStr = 'We Are Everywhere!';
                    };
                    keyValStr += genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);

//                    outputEl.innerHTML = 'MachineID (MathID): ' + mathID + '<br>' + 'Ключ активации (Activation Key): ' + activationKey + '<br>' + 'Пароль (password): ' + password + '<br>' + 'Пароль правильный.';

                    outputDivEl = document.createElement("div");
                    outputDivEl.innerHTML = 'Пароль правильный.';
                    outputEl.append(outputDivEl);

                    if (maxLicenseProcessesSubprocesses) {
                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = 'Максимальное количество процессов и субпроцессов (Max License Processes и Max License Subprocesses):<br><pre style="overflow: auto;"><code>' + maxLicenseProcessesSubprocesses + '</code></pre>';
                        outputEl.append(outputDivEl);
                    };

                    if (licenseType) {
                        var str = 'Тип лицензии (License Type):<pre style="overflow: auto;"><code>' + licenseType.toString(16).toUpperCase() + '</code></pre>';
                        str += 'В типе лицензии установлены следующие биты:<br><pre style="overflow: auto;"><code>';
                        if (Number('0x' + licenseType) & (1 <<  0)) {
                            str += 'бит &ensp;0, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;1 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  1)) {
                            str += 'бит &ensp;1, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;2 &mdash; редакция Product Trial<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  2)) {
                            str += 'бит &ensp;2, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;4 &mdash; редакция Student Edition<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  3)) {
                            str += 'бит &ensp;3, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;8 &mdash; редакция Site License<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  4)) {
                            str += 'бит &ensp;4, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;10 &mdash; Player<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  5)) {
                            str += 'бит &ensp;5, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;20 &mdash; продукт Wolfram Player<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  6)) {
                            str += 'бит &ensp;6, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;40 &mdash; продукт Wolfram Player Pro<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  7)) {
                            str += 'бит &ensp;7, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;80 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  8)) {
                            str += 'бит &ensp;8, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;100 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 <<  9)) {
                            str += 'бит &ensp;9, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;200 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 10)) {
                            str += 'бит 10, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;400 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 11)) {
                            str += 'бит 11, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;800 &mdash; редакция Home Edition<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 12)) {
                            str += 'бит 12, битовая маска &ensp;&ensp;&ensp;&ensp;1000 &mdash; редакция Enterprise Edition<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 13)) {
                            str += 'бит 13, битовая маска &ensp;&ensp;&ensp;&ensp;2000 &mdash; фича EnterpriseSigning<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 14)) {
                            str += 'бит 14, битовая маска &ensp;&ensp;&ensp;&ensp;4000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 15)) {
                            str += 'бит 15, битовая маска &ensp;&ensp;&ensp;&ensp;8000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 16)) {
                            str += 'бит 16, битовая маска &ensp;&ensp;&ensp;10000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 17)) {
                            str += 'бит 17, битовая маска &ensp;&ensp;&ensp;20000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 18)) {
                            str += 'бит 18, битовая маска &ensp;&ensp;&ensp;40000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 19)) {
                            str += 'бит 19, битовая маска &ensp;&ensp;&ensp;80000 &mdash; фича AltExpirationPolicy<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 20)) {
                            str += 'бит 20, битовая маска &ensp;&ensp;100000 &mdash; продукт Wolfram|Alpha Notebook Edition<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 21)) {
                            str += 'бит 21, битовая маска &ensp;&ensp;200000 &mdash; продукт Wolfram|One<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 22)) {
                            str += 'бит 22, битовая маска &ensp;&ensp;400000 &mdash; продукт Wolfram Finance Platform<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 23)) {
                            str += 'бит 23, битовая маска &ensp;&ensp;800000 &mdash; продукт Mathematica<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 24)) {
                            str += 'бит 24, битовая маска &ensp;1000000 &mdash; продукт Wolfram Programming Lab<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 25)) {
                            str += 'бит 25, битовая маска &ensp;2000000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 26)) {
                            str += 'бит 26, битовая маска &ensp;4000000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 27)) {
                            str += 'бит 27, битовая маска &ensp;8000000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 28)) {
                            str += 'бит 28, битовая маска 10000000 &mdash; неизвестно<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 29)) {
                            str += 'бит 29, битовая маска 20000000 &mdash; фича AutoRenewingSubscription<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 30)) {
                            str += 'бит 30, битовая маска 40000000 &mdash; продукт System Modeler<br>';
                        };
                        if (Number('0x' + licenseType) & (1 << 31)) {
                            str += 'бит 31, битовая маска 80000000 &mdash; неизвестно<br>';
                        };

                        str += '</code></pre>';

                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = str;
                        outputEl.append(outputDivEl);
                    };

                    if (licenseExpirationDate) {
                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = 'Дата истечения срока действия лицензии (License Expiration Date) в формате ГГГГММДД:<br><pre style="overflow: auto;"><code>' + licenseExpirationDate + '</code></pre>';
                        outputEl.append(outputDivEl);
                    };

                    if (licenseClass) {
                        outputDivEl = document.createElement("div");
                        outputDivEl.innerHTML = 'Сетевая лицензия (для MathLM). Класс лицензии (License Class):<br><pre style="overflow: auto;"><code>' + licenseClass + '</code></pre>';
                        outputEl.append(outputDivEl);
                    };

                    outputDivEl = document.createElement("div");
                    outputDivEl.innerHTML = 'Строка для генерации пароля:<br><pre style="overflow: auto;"><code>' + keyValStr + '</code></pre>';
                    outputEl.append(outputDivEl);

                    outputDivEl = document.createElement("div");
                    hashDescr = hashDescription[hash];
                    if (!(typeof hashDescr === "string" && hashDescr.length > 0)) {
                        hashDescr = 'Неизвестный хэш';
                    };
                    outputDivEl.innerHTML = 'Хэш:<br><pre style="overflow: auto;"><code>0x' + hash.toString(16).toUpperCase() + ' = ' + hash + '<br>' + hashDescr + '</code></pre>';
                    outputEl.append(outputDivEl);
                } else {  // Плохой пароль (password).
//                    outputEl.innerHTML = 'Плохой пароль (password).';
                    outputDivEl = document.createElement("div");
                    outputDivEl.innerHTML = 'Пароль (password) неправильный.';
                    outputEl.append(outputDivEl);
                };

            };  // function checkPass(event)

            function genActKey(event) {
                event.preventDefault();

                var digits = "0123456789";
                var letters = "23456789AEGHJKLPQRSTUVWXY";

                var actKey = defaultActivationKey;

                function getRandomChar(charset) {
                    return charset[Math.floor(Math.random() * charset.length)];
                };

                function generatePart(length, charset) {
                    return Array.from({ length }, () => getRandomChar(charset)).join("");
                };

                var part1 = generatePart(4, digits);
                var part2 = generatePart(4, digits);
                var part3 = generatePart(6, letters);

                actKey = `${part1}-${part2}-${part3}`;
                document.getElementById("activation-key").value = actKey;
            };

            function genPass(event) {
                event.preventDefault();

                var formEl = document.querySelector('#form');
                if(formEl.reportValidity && !formEl.reportValidity()) { return; }

                var weAreEverywhere                 = document.querySelector('#we-are-everywhere'                 ).checked;
                var mathID                          = document.querySelector('#mathid'                            ).value  ;
                var activationKey                   = document.querySelector('#activation-key'                    ).value  ;
                var maxLicenseProcessesSubprocesses = document.querySelector('#max-license-processes-subprocesses').value  ;
                //var licenseType                     = document.querySelector('#license-type'                      ).value  ;
                var licenseType                     = checkboxLicenseTypeRead();
                var licenseExpirationDate           = document.querySelector('#license-expiration-date'           ).value  ;
                var licenseClass                    = document.querySelector('#license-class'                     ).value  ;
                var keyValStr                       = document.querySelector('#key-val-str'                       ).value  ;
                var salt                            = document.querySelector('#salt'                              ).value  ;
                var password                        = ""                                                                   ;

                if ((keyValStr == "") && (mathID == "")) {
                    alert("Укажите Machine ID (Math ID) или строку для генерации пароля");
                } else if ((keyValStr == "") && !(mathID == "") &&  (weAreEverywhere == true) &&  (licenseClass == "")) {
                    alert("Снимите флажок \"We Are Everywhere!\" или укажите класс лицензии (License Class) или укажите строку для генерации пароля")
                } else if ((keyValStr == "") && !(mathID == "") && !(weAreEverywhere == true) && !(licenseClass == "")) {
                    alert("Установите флажок \"We Are Everywhere!\" или очистите поле класса лицензии (License Class) или укажите строку для генерации пароля")
                } else {
                    if (keyValStr == "") {
                        if (weAreEverywhere == true) {
                          keyValStr = 'We Are Everywhere!' + genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);
                        } else {
                          keyValStr =                        genKeyValStr(mathID, activationKey, maxLicenseProcessesSubprocesses, licenseType, licenseExpirationDate, licenseClass);
                        };
                    };
                    password = genPassword(keyValStr, salt);

                    printPass(
                        '#output',
                        'Пароль (password) для строки<br>\"' + keyValStr + '\":',
                        password
                    );
                };
            };  // function genPass(event)

            // При загрузке страницы
            document.addEventListener("DOMContentLoaded", function() {
                licenseType          = checkboxLicenseTypeRead();
                document.getElementById("div-license-type").textContent = " Тип лицензии (License Type): " + licenseType;
            });
        </script>
        <style>
            /**
             * Forced light theme version
             */

            :root {
              --background-body: #fff;
              --background: #efefef;
              --background-alt: #f7f7f7;
              --selection: #9e9e9e;
              --text-main: #363636;
              --text-bright: #000;
              --text-muted: #70777f;
              --links: #0076d1;
              --focus: #0096bfab;
              --border: #dbdbdb;
              --code: #000;
              --animation-duration: 0.1s;
              --button-hover: #ddd;
              --scrollbar-thumb: rgb(213, 213, 213);
              --scrollbar-thumb-hover: rgb(196, 196, 196);
              --form-placeholder: #949494;
              --form-text: #000;
              --variable: #39a33c;
              --highlight: #ff0;
              --select-arrow: url("data:image/svg+xml;charset=utf-8,%3C?xml version='1.0' encoding='utf-8'?%3E %3Csvg version='1.1' height='62.5' width='116.9' fill='%23161f27'%3E %3Cpath d='M115.3,1.6 C113.7,0 111.1,0 109.5,1.6 L58.5,52.7 L7.4,1.6 C5.8,0 3.2,0 1.6,1.6 C0,3.2 0,5.8 1.6,7.4 L55.5,61.3 C56.3,62.1 57.3,62.5 58.4,62.5 C59.4,62.5 60.5,62.1 61.3,61.3 L115.2,7.4 C116.9,5.8 116.9,3.2 115.3,1.6Z'/%3E %3C/svg%3E");
            }

            html {
              scrollbar-color: rgb(213, 213, 213) #fff;
              scrollbar-color: var(--scrollbar-thumb) var(--background-body);
              scrollbar-width: thin;
            }

            body {
              font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', sans-serif;
              line-height: 1.4;
              max-width: 800px;
              margin: 20px auto;
              padding: 0 10px;
              word-wrap: break-word;
              color: #363636;
              color: var(--text-main);
              background: #fff;
              background: var(--background-body);
              text-rendering: optimizeLegibility;
            }

            button {
              transition:
                background-color 0.1s linear,
                border-color 0.1s linear,
                color 0.1s linear,
                box-shadow 0.1s linear,
                transform 0.1s ease;
              transition:
                background-color var(--animation-duration) linear,
                border-color var(--animation-duration) linear,
                color var(--animation-duration) linear,
                box-shadow var(--animation-duration) linear,
                transform var(--animation-duration) ease;
            }

            input {
              transition:
                background-color 0.1s linear,
                border-color 0.1s linear,
                color 0.1s linear,
                box-shadow 0.1s linear,
                transform 0.1s ease;
              transition:
                background-color var(--animation-duration) linear,
                border-color var(--animation-duration) linear,
                color var(--animation-duration) linear,
                box-shadow var(--animation-duration) linear,
                transform var(--animation-duration) ease;
            }

            textarea {
              transition:
                background-color 0.1s linear,
                border-color 0.1s linear,
                color 0.1s linear,
                box-shadow 0.1s linear,
                transform 0.1s ease;
              transition:
                background-color var(--animation-duration) linear,
                border-color var(--animation-duration) linear,
                color var(--animation-duration) linear,
                box-shadow var(--animation-duration) linear,
                transform var(--animation-duration) ease;
            }

            h1 {
              font-size: 2.2em;
              margin-top: 0;
            }

            h1,
            h2,
            h3,
            h4,
            h5,
            h6 {
              margin-bottom: 12px;
              margin-top: 24px;
            }

            h1 {
              color: #000;
              color: var(--text-bright);
            }

            h2 {
              color: #000;
              color: var(--text-bright);
            }

            h3 {
              color: #000;
              color: var(--text-bright);
            }

            h4 {
              color: #000;
              color: var(--text-bright);
            }

            h5 {
              color: #000;
              color: var(--text-bright);
            }

            h6 {
              color: #000;
              color: var(--text-bright);
            }

            strong {
              color: #000;
              color: var(--text-bright);
            }

            h1,
            h2,
            h3,
            h4,
            h5,
            h6,
            b,
            strong,
            th {
              font-weight: 600;
            }

            q::before {
              content: none;
            }

            q::after {
              content: none;
            }

            blockquote {
              border-left: 4px solid #0096bfab;
              border-left: 4px solid var(--focus);
              margin: 1.5em 0;
              padding: 0.5em 1em;
              font-style: italic;
            }

            q {
              border-left: 4px solid #0096bfab;
              border-left: 4px solid var(--focus);
              margin: 1.5em 0;
              padding: 0.5em 1em;
              font-style: italic;
            }

            blockquote > footer {
              font-style: normal;
              border: 0;
            }

            blockquote cite {
              font-style: normal;
            }

            address {
              font-style: normal;
            }

            a[href^='mailto\:']::before {
              content: '\1F4E7 ';
            }

            a[href^='tel\:']::before {
              content: '\1F4DE ';
            }

            a[href^='sms\:']::before {
              content: '\1F4AC ';
            }

            mark {
              background-color: #ff0;
              background-color: var(--highlight);
              border-radius: 2px;
              padding: 0 2px 0 2px;
              color: #000;
            }

            button,
            select,
            input[type='submit'],
            input[type='button'],
            input[type='checkbox'],
            input[type='range'],
            input[type='radio'] {
              cursor: pointer;
            }

            input:not([type='checkbox']):not([type='radio']),
            select {
              display: block;
            }

            input {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            button {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            textarea {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            select {
              color: #000;
              color: var(--form-text);
              background-color: #efefef;
              background-color: var(--background);
              font-family: inherit;
              font-size: inherit;
              margin-right: 6px;
              margin-bottom: 6px;
              padding: 10px;
              border: none;
              border-radius: 6px;
              outline: none;
            }

            input[type='checkbox'],
            input[type='radio'] {
              height: 1em;
              width: 1em;
            }

            input[type='radio'] {
              border-radius: 100%;
            }

            input {
              vertical-align: top;
            }

            label {
              vertical-align: middle;
              margin-bottom: 4px;
              display: inline-block;
            }

            input:not([type='checkbox']):not([type='radio']),
            input[type='range'],
            select,
            button,
            textarea {
              -webkit-appearance: none;
            }

            textarea {
              display: block;
              margin-right: 0;
              box-sizing: border-box;
              resize: vertical;
            }

            textarea:not([cols]) {
              width: 100%;
            }

            textarea:not([rows]) {
              min-height: 40px;
              height: 140px;
            }

            select {
              background: #efefef url("data:image/svg+xml;charset=utf-8,%3C?xml version='1.0' encoding='utf-8'?%3E %3Csvg version='1.1' height='62.5' width='116.9' fill='%23161f27'%3E %3Cpath d='M115.3,1.6 C113.7,0 111.1,0 109.5,1.6 L58.5,52.7 L7.4,1.6 C5.8,0 3.2,0 1.6,1.6 C0,3.2 0,5.8 1.6,7.4 L55.5,61.3 C56.3,62.1 57.3,62.5 58.4,62.5 C59.4,62.5 60.5,62.1 61.3,61.3 L115.2,7.4 C116.9,5.8 116.9,3.2 115.3,1.6Z'/%3E %3C/svg%3E") calc(100% - 12px) 50% / 12px no-repeat;
              background: var(--background) var(--select-arrow) calc(100% - 12px) 50% / 12px no-repeat;
              padding-right: 35px;
            }

            select::-ms-expand {
              display: none;
            }

            select[multiple] {
              padding-right: 10px;
              background-image: none;
              overflow-y: auto;
            }

            button,
            input[type='submit'],
            input[type='button'] {
              padding-right: 30px;
              padding-left: 30px;
            }

            button:hover {
              background: #ddd;
              background: var(--button-hover);
            }

            input[type='submit']:hover {
              background: #ddd;
              background: var(--button-hover);
            }

            input[type='button']:hover {
              background: #ddd;
              background: var(--button-hover);
            }

            input:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            select:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            button:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            textarea:focus {
              box-shadow: 0 0 0 2px #0096bfab;
              box-shadow: 0 0 0 2px var(--focus);
            }

            input[type='checkbox']:active,
            input[type='radio']:active,
            input[type='submit']:active,
            input[type='button']:active,
            input[type='range']:active,
            button:active {
              transform: translateY(2px);
            }

            input:disabled,
            select:disabled,
            button:disabled,
            textarea:disabled {
              cursor: not-allowed;
              opacity: 0.5;
            }

            ::-moz-placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            :-ms-input-placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            ::-ms-input-placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            ::placeholder {
              color: #949494;
              color: var(--form-placeholder);
            }

            fieldset {
              border: 1px #0096bfab solid;
              border: 1px var(--focus) solid;
              border-radius: 6px;
              margin: 0;
              margin-bottom: 12px;
              padding: 10px;
            }

            legend {
              font-size: 0.9em;
              font-weight: 600;
            }

            input[type='range'] {
              margin: 10px 0;
              padding: 10px 0;
              background: transparent;
            }

            input[type='range']:focus {
              outline: none;
            }

            input[type='range']::-webkit-slider-runnable-track {
              width: 100%;
              height: 9.5px;
              -webkit-transition: 0.2s;
              transition: 0.2s;
              background: #efefef;
              background: var(--background);
              border-radius: 3px;
            }

            input[type='range']::-webkit-slider-thumb {
              box-shadow: 0 1px 1px #000, 0 0 1px #0d0d0d;
              height: 20px;
              width: 20px;
              border-radius: 50%;
              background: #dbdbdb;
              background: var(--border);
              -webkit-appearance: none;
              margin-top: -7px;
            }

            input[type='range']:focus::-webkit-slider-runnable-track {
              background: #efefef;
              background: var(--background);
            }

            input[type='range']::-moz-range-track {
              width: 100%;
              height: 9.5px;
              -moz-transition: 0.2s;
              transition: 0.2s;
              background: #efefef;
              background: var(--background);
              border-radius: 3px;
            }

            input[type='range']::-moz-range-thumb {
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
              height: 20px;
              width: 20px;
              border-radius: 50%;
              background: #dbdbdb;
              background: var(--border);
            }

            input[type='range']::-ms-track {
              width: 100%;
              height: 9.5px;
              background: transparent;
              border-color: transparent;
              border-width: 16px 0;
              color: transparent;
            }

            input[type='range']::-ms-fill-lower {
              background: #efefef;
              background: var(--background);
              border: 0.2px solid #010101;
              border-radius: 3px;
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
            }

            input[type='range']::-ms-fill-upper {
              background: #efefef;
              background: var(--background);
              border: 0.2px solid #010101;
              border-radius: 3px;
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
            }

            input[type='range']::-ms-thumb {
              box-shadow: 1px 1px 1px #000, 0 0 1px #0d0d0d;
              border: 1px solid #000;
              height: 20px;
              width: 20px;
              border-radius: 50%;
              background: #dbdbdb;
              background: var(--border);
            }

            input[type='range']:focus::-ms-fill-lower {
              background: #efefef;
              background: var(--background);
            }

            input[type='range']:focus::-ms-fill-upper {
              background: #efefef;
              background: var(--background);
            }

            a {
              text-decoration: none;
              color: #0076d1;
              color: var(--links);
            }

            a:hover {
              text-decoration: underline;
            }

            code {
              background: #efefef;
              background: var(--background);
              color: #000;
              color: var(--code);
              padding: 2.5px 5px;
              border-radius: 6px;
              font-size: 1em;
            }

            samp {
              background: #efefef;
              background: var(--background);
              color: #000;
              color: var(--code);
              padding: 2.5px 5px;
              border-radius: 6px;
              font-size: 1em;
            }

            time {
              background: #efefef;
              background: var(--background);
              color: #000;
              color: var(--code);
              padding: 2.5px 5px;
              border-radius: 6px;
              font-size: 1em;
            }

            pre > code {
              padding: 10px;
              display: block;
              overflow-x: auto;
            }

            var {
              color: #39a33c;
              color: var(--variable);
              font-style: normal;
              font-family: monospace;
            }

            kbd {
              background: #efefef;
              background: var(--background);
              border: 1px solid #dbdbdb;
              border: 1px solid var(--border);
              border-radius: 2px;
              color: #363636;
              color: var(--text-main);
              padding: 2px 4px 2px 4px;
            }

            img,
            video {
              max-width: 100%;
              height: auto;
            }

            hr {
              border: none;
              border-top: 1px solid #dbdbdb;
              border-top: 1px solid var(--border);
            }

            table {
              border-collapse: collapse;
              margin-bottom: 10px;
              width: 100%;
              table-layout: fixed;
            }

            table caption {
              text-align: left;
            }

            td,
            th {
              padding: 6px;
              text-align: left;
              vertical-align: top;
              word-wrap: break-word;
            }

            thead {
              border-bottom: 1px solid #dbdbdb;
              border-bottom: 1px solid var(--border);
            }

            tfoot {
              border-top: 1px solid #dbdbdb;
              border-top: 1px solid var(--border);
            }

            tbody tr:nth-child(even) {
              background-color: #f7f7f7;
              background-color: var(--background-alt);
            }

            ::-webkit-scrollbar {
              height: 10px;
              width: 10px;
            }

            ::-webkit-scrollbar-track {
              background: #efefef;
              background: var(--background);
              border-radius: 6px;
            }

            ::-webkit-scrollbar-thumb {
              background: rgb(213, 213, 213);
              background: var(--scrollbar-thumb);
              border-radius: 6px;
            }

            ::-webkit-scrollbar-thumb:hover {
              background: rgb(196, 196, 196);
              background: var(--scrollbar-thumb-hover);
            }

            ::-moz-selection {
              background-color: #9e9e9e;
              background-color: var(--selection);
              color: #000;
              color: var(--text-bright);
            }

            ::selection {
              background-color: #9e9e9e;
              background-color: var(--selection);
              color: #000;
              color: var(--text-bright);
            }

            details {
              display: flex;
              flex-direction: column;
              align-items: flex-start;
              background-color: #f7f7f7;
              background-color: var(--background-alt);
              padding: 10px 10px 0;
              margin: 1em 0;
              border-radius: 6px;
              overflow: hidden;
            }

            details[open] {
              padding: 10px;
            }

            details > :last-child {
              margin-bottom: 0;
            }

            details[open] summary {
              margin-bottom: 10px;
            }

            summary {
              display: list-item;
              background-color: #efefef;
              background-color: var(--background);
              padding: 10px;
              margin: -10px -10px 0;
              cursor: pointer;
              outline: none;
            }

            summary:hover,
            summary:focus {
              text-decoration: underline;
            }

            details > :not(summary) {
              margin-top: 0;
            }

            summary::-webkit-details-marker {
              color: #363636;
              color: var(--text-main);
            }

            footer {
              border-top: 1px solid #dbdbdb;
              border-top: 1px solid var(--border);
              padding-top: 10px;
              color: #70777f;
              color: var(--text-muted);
            }

            body > footer {
              margin-top: 40px;
            }

            @media print {
              body,
              pre,
              code,
              summary,
              details,
              button,
              input,
              textarea {
                background-color: #fff;
              }

              button,
              input,
              textarea {
                border: 1px solid #000;
              }

              body,
              h1,
              h2,
              h3,
              h4,
              h5,
              h6,
              pre,
              code,
              button,
              input,
              textarea,
              footer,
              summary,
              strong {
                color: #000;
              }

              summary::marker {
                color: #000;
              }

              summary::-webkit-details-marker {
                color: #000;
              }

              tbody tr:nth-child(even) {
                background-color: #f2f2f2;
              }

              a {
                color: #00f;
                text-decoration: underline;
              }
            }

            /*# sourceMappingURL=light.css.map */

            input[type="text"] {
                width: calc(100% - 20px);
            }
        </style>
    </head>
    <body>
        <h1>Универсальный генератор паролей для всех продуктов Wolfram</h1>
        <ol>
            <li>
                Скачайте и запустите установку нужного вам приложения с <a href="https://www%2Ewolfram%2Ecom/download-center/" target="_blank"><b>Wolfram Download Center</b></a>
                (там можно свободно для любой платформы с документацией или без скачать Wolfram и System Modeler).<br>
                Если вам зачем-то вдруг нужна бесплатная пробная версия см. также:<br>
                &mdash; <a href="https://www%2Ewolfram%2Ecom/mathematica/trial/" target="_blank"><b>Mathematica Trial</b></a>,<br>
                &mdash; <a href="https://account%2Ewolfram%2Ecom/access/wolfram-one/trial" target="_blank"><b>Wolfram|One Trial</b></a>,<br>
                &mdash; <a href="https://account%2Ewolfram%2Ecom/access/wolfram-alpha-notebook-edition/trial" target="_blank"><b>Wolfram|Alpha Notebook Edition Trial</b></a>,<br>
                &mdash; <a href="https://www%2Ewolfram%2Ecom/system-modeler/trial/" target="_blank"><b>System Modeler Trial</b></a>.<br>
                <br>
            </li>
            <li>На экране активации продукта нажмите кнопку <b>Other ways to activate</b>, а затем <b>Manual Activation</b> или <b>Activate offline through activation key and requested password</b>.<br>
                <br>
            </li>
            <li>Ниже введите полученный <b>MachineID</b>, он же <b>MathID</b> (в формате nnnn-nnnnn-nnnnn),
                сгенерируйте случайный или введите любой <b>Activation Key</b> (в формате nnnn-nnnn-xxxxxx) (достаточно просто оставить Activation Key по умолчанию), введите <b>хэш</b>,
                а также для <b>Wolfram Player</b>, <b>System Modeler</b> и продукта под названием <b>Wolfram</b>
                (который начиная с версии <b>14.1</b> заменяет одновременно 4 продукта: Mathematica, Wolfram Finance Platform, Wolfram|One и Wolfram|Alpha Notebook Edition)
                обязательно укажите <b>тип лицензии (License Type &mdash; см. ниже)</b>,
                для приложения сетевого менеджера лицензий <b>MathLM</b> кроме того установите чекбокс (флажок) "We Are Everywhere!" и укажите <b>класс лицензии (License Class &mdash; см. ниже)</b>
                и, если нужно, укажите также другие данные.<br>
                <br>
                Список <b>хэшей</b> (номера версий больше 14.2 &mdash; условные):<br>
                <br>
                0x609F  &mdash; Mathematica и System Modeler 19.2(?), подходит для Mathematica    14.2 &ndash; 19.2(?) и System Modeler 14.2 &ndash; 19.2(?)<br>
                                                                                                                                                            <br>
                0xD1CF  &mdash; Mathematica и System Modeler 19.1(?), подходит для Mathematica    14.1 &ndash; 19.1(?) и System Modeler 14.1 &ndash; 19.1(?)<br>
                                                                                                                                                            <br>
                0x5417  &mdash; Mathematica и System Modeler 19.0(?), подходит для Mathematica    13.0 &ndash; 19.0(?) и System Modeler 14.1 &ndash; 19.0(?)<br>
                0xB013  &mdash; Mathematica и System Modeler 18.3(?), подходит для Mathematica    13.0 &ndash; 18.3(?) и System Modeler 14.1 &ndash; 18.3(?)<br>
                0xD54F  &mdash; Mathematica и System Modeler 18.2(?), подходит для Mathematica    13.0 &ndash; 18.2(?) и System Modeler 14.1 &ndash; 18.2(?)<br>
                0x66C0  &mdash; Mathematica и System Modeler 18.1(?), подходит для Mathematica    13.0 &ndash; 18.1(?) и System Modeler 14.1 &ndash; 18.1(?)<br>
                0x22DD  &mdash; Mathematica и System Modeler 18.0(?), подходит для Mathematica    13.0 &ndash; 18.0(?) и System Modeler 14.1 &ndash; 18.0(?)<br>
                0xCD2D  &mdash; Mathematica и System Modeler 17.3(?), подходит для Mathematica    13.0 &ndash; 17.3(?) и System Modeler 14.1 &ndash; 17.3(?)<br>
                0xB4D0  &mdash; Mathematica и System Modeler 17.2(?), подходит для Mathematica    13.0 &ndash; 17.2(?) и System Modeler 14.1 &ndash; 17.2(?)<br>
                0xE756  &mdash; Mathematica и System Modeler 17.1(?), подходит для Mathematica    12.0 &ndash; 17.1(?) и System Modeler 14.1 &ndash; 17.1(?)<br>
                0x8C68  &mdash; Mathematica и System Modeler 17.0(?), подходит для Mathematica    12.0 &ndash; 17.0(?) и System Modeler 14.1 &ndash; 17.0(?)<br>
                0x8250  &mdash; Mathematica и System Modeler 16.3(?), подходит для Mathematica    12.0 &ndash; 16.3(?) и System Modeler 14.1 &ndash; 16.3(?)<br>
                0xABEB  &mdash; Mathematica и System Modeler 16.2(?), подходит для Mathematica    12.0 &ndash; 16.2(?) и System Modeler 14.1 &ndash; 16.2(?)<br>
                                                                                                                                                            <br>
                0x8C72  &mdash; Mathematica и System Modeler 16.1(?), подходит для Mathematica    14.1 &ndash; 16.1(?) и System Modeler 13.0 &ndash; 16.1(?)<br>
                0x4209  &mdash; Mathematica и System Modeler 16.0(?), подходит для Mathematica    14.1 &ndash; 16.0(?) и System Modeler 13.0 &ndash; 16.0(?)<br>
                0x73EE  &mdash; Mathematica и System Modeler 15.3(?), подходит для Mathematica    14.1 &ndash; 15.3(?) и System Modeler 13.0 &ndash; 15.3(?)<br>
                0x64EC  &mdash; Mathematica и System Modeler 15.2(?), подходит для Mathematica    14.1 &ndash; 15.2(?) и System Modeler 13.0 &ndash; 15.2(?)<br>
                0x7C53  &mdash; Mathematica и System Modeler 15.1(?), подходит для Mathematica    14.1 &ndash; 15.1(?) и System Modeler 13.0 &ndash; 15.1(?)<br>
                0x5770  &mdash; Mathematica и System Modeler 15.0(?), подходит для Mathematica    14.1 &ndash; 15.0(?) и System Modeler  4.3 &ndash; 15.0(?)<br>
                0x7C91  &mdash; Mathematica и System Modeler 14.3(?), подходит для Mathematica    14.1 &ndash; 14.3(?) и System Modeler  4.3 &ndash; 14.3(?)<br>
                0xEEFE  &mdash; Mathematica и System Modeler 14.2,    подходит для Mathematica    14.1 &ndash; 14.2    и System Modeler  4.3 &ndash; 14.2   <br>
                                                                                                                                                            <br>
                0x60F0  &mdash; Mathematica                  14.1,    подходит для Mathematica    12.0 &ndash; 14.1                                         <br>
                0x8E3C  &mdash; Mathematica                  14.0,    подходит для Mathematica    12.0 &ndash; 14.0                                         <br>
                0x44F1  &mdash; Mathematica                  13.3,    подходит для Mathematica    10.2 &ndash; 13.3                                         <br>
                0x29C2  &mdash; Mathematica                  13.2,    подходит для Mathematica    10.2 &ndash; 13.2                                         <br>
                0xEE71  &mdash; Mathematica                  13.1,    подходит для Mathematica    10.2 &ndash; 13.1                                         <br>
                0xDB75  &mdash; Mathematica                  13.0,    подходит для Mathematica    10.2 &ndash; 13.0                                         <br>
                0xD227  &mdash; Mathematica                  12.3,    подходит для Mathematica    10.2 &ndash; 12.3                                         <br>
                0x2FDB  &mdash; Mathematica                  12.2,    подходит для Mathematica    10.2 &ndash; 12.2                                         <br>
                0xA439  &mdash; Официально этот хэш не использовался, подходит для Mathematica    10.0 &ndash; 12.0                                         <br>
                0xE4A8  &mdash; Mathematica                  12.1,    подходит для Mathematica    10.0 &ndash; 12.1                                         <br>
                0xA68B  &mdash; Mathematica                  12.0,    подходит для Mathematica    10.0 &ndash; 12.0                                         <br>
                0x29F8  &mdash; Mathematica                  11.3,    подходит для Mathematica    10.0 &ndash; 11.3                                         <br>
                0x6A91  &mdash; Mathematica                  11.2,    подходит для Mathematica    10.0 &ndash; 11.2                                         <br>
                0x42DD  &mdash; Mathematica                  11.1,    подходит для Mathematica    10.0 &ndash; 11.1                                         <br>
                0x25DB  &mdash; Mathematica                  11.0,    подходит для Mathematica    10.0 &ndash; 11.0                                         <br>
                0x14411 &mdash; Официально этот хэш не использовался,          для Mathematica    10.0 &ndash; 10.4, но не работает                         <br>
                0x5750  &mdash; Mathematica                  10.4,    подходит для Mathematica    10.0 &ndash; 10.4                                         <br>
                0x80B9  &mdash; Mathematica                  10.3,    подходит для Mathematica    10.0 &ndash; 10.3                                         <br>
                0x1764E &mdash; Официально этот хэш не использовался,          для Mathematica    10.0 &ndash; 10.2, но не работает                         <br>
                0xE3B7  &mdash; Mathematica                  10.2,    подходит для Mathematica    10.0 &ndash; 10.2                                         <br>
                0xC1AE  &mdash; Mathematica                  10.1,    подходит для Mathematica    10.0 &ndash; 10.1                                         <br>
                0xDA5E  &mdash; Mathematica                  10.0,                                                                                          <br>
                                                                                                                                                            <br>
                0x1361  &mdash; System Modeler               14.1,    подходит для System Modeler  4.3 &ndash; 14.1                                         <br>
                0x755E  &mdash; System Modeler               14.0,    подходит для System Modeler  4.3 &ndash; 14.0                                         <br>
                0xA5CE  &mdash; System Modeler               13.3,    подходит для System Modeler  4.3 &ndash; 13.3                                         <br>
                0xF536  &mdash; System Modeler               13.2,    подходит для System Modeler  4.3 &ndash; 13.2                                         <br>
                0x1330  &mdash; System Modeler               13.1,    подходит для System Modeler  4.3 &ndash; 13.1                                         <br>
                0xBF47  &mdash; System Modeler               13.0,    подходит для System Modeler  4.3 &ndash; 13.0                                         <br>
                0x6188  &mdash; System Modeler               12.3,    подходит для System Modeler  4.0 &ndash; 12.3                                         <br>
                0xAB0B  &mdash; System Modeler               12.2,    подходит для System Modeler  4.0 &ndash; 12.2                                         <br>
                0xB4D3  &mdash; System Modeler               12.1,    подходит для System Modeler  4.0 &ndash; 12.1                                         <br>
                0x47C5  &mdash; System Modeler               12.0,    подходит для System Modeler  4.0 &ndash; 12.0                                         <br>
                0x81DD  &mdash; System Modeler                5.1,    подходит для System Modeler  4.0 &ndash;  5.1                                         <br>
                0x8330  &mdash; System Modeler                5.0,    подходит для System Modeler  4.0 &ndash;  5.0                                         <br>
                0x72C4  &mdash; System Modeler                4.3,    подходит для System Modeler  4.0 &ndash;  4.3                                         <br>
                0x2F33  &mdash; System Modeler                4.2,    подходит для System Modeler  4.0 &ndash;  4.2                                         <br>
                0x6897  &mdash; System Modeler                4.1,    подходит для System Modeler  4.0 &ndash;  4.1                                         <br>
                0x15BF  &mdash; System Modeler                4.0                                                                                           <br>
                                                                                                                                                            <br>
                0x72A4  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x29A5  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x140A  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x3FD1  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x452D  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x541A  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x3575  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x7F8C  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x6587  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                0x5B29  &mdash; MathLM начиная с версии 10.0                                                                                                <br>
                                                                                                                                                            <br>
                Таким образом, начиная с версии 14.1 у Mathematica и System Modeler общий список хэшей, кроме одного, а с версии 14.2 вообще общий список хэшей.<br>
                Все хэши от Mathematica и System Modeler подходят также и для соответствующих версий MathLM.<br>
                Хэши от Mathematica используются также и для Wolfram Player, Wolfram Finance Platform, Wolfram|Alpha Notebook Edition, Wolfram|One, Wolfram Desktop, Wolfram Engine, WolframScript.<br>
                Списки хэшей приведены в порядке, обратном тому, который зашит в программы, поэтому более долговечные хэши приведены здесь в начале списков.<br>
                Причина, по которой вместо одного хэша имеется целый список хэшей и этот список меняется в каждой версии, в том, что предполагается, что официально выдаваемая лицензия будет пригодна для текущей версии,
                не будет работать на следующей (в следующей версии этот хэш исключается из списка), но пригодна также и для нескольких предыдущих версий.
                Для этого в EXE и DLL файлы приложений и были заранее зашиты хэши от будущих версий.
                Данный кейген позволяет использовать не только хэши от текущей версии, но и хэши от будущих версий, но которые пригодны и для текущей версии.<br>
                <br>
                Для справки, выдаваемый приложением <b>MachineID</b> (он же <b>MathID</b>) имеет формат:<br>
                aabb-bbbbb-bbbcc<br>
                где:<br>
                aa - цифры числа MachineType (в пределах вроде бы от 10 до 79), которое зависит от архитектуры:<br>
                58 - Windows-ARM,<br>
                33 - Windows-ARM64,<br>
                62 - Windows-x86-64 (AMD64 (K8), Intel 64),<br>
                61 - Windows (unknown),<br>
                65 - Linux,<br>
                31 - MacOSX-ARM64,<br>
                51 - MacOSX-x86-64.<br>
                bbbbbbbbbb - цифры числа UniqueNumber (32-битное число без знака, т. е. должно быть не больше 4294967295), которое привязано к разделу с операционной системой, для его вычисления:<br>
                 - в Linux используется /etc/machine-id (для systemd) либо /var/lib/dbus/machine-id, который генерируется случайным образом при загрузке операционной системы (если его нет),<br>
                 - в Mac OS X вроде бы используется MAC адрес,<br>
                 - в Windows до версии 14.0 включительно используется серийный номер тома Windows, печатается командой vol (vol %SystemDrive%), поменять можно утилитой volumeid от SysInternals,<br>
                а начиная с версии 14.1 в Windows в первую очередь используется переменная реестра<br>
                HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid<br>
                (см. командой reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid),
                поэтому в версии 14.1 MachineID отличается от предыдущих версий.<br>
                cc - цифры числа checksum, которое вычисляется по формуле:<br>
                checksum = ((UniqueNumber &gt;&gt; 2) + 43 * MachineType + 29 * (UniqueNumber &amp; 3)) % 97<br>
                Узнать MachineID в приложении Mathematica (или в Wolfram, или в WolframScript) можно, используя встроенный символ
                <a href="https://reference%2Ewolfram%2Ecom/language/ref/$MachineID.html" target="_blank"><b>$MachineID</b></a>.
                Под Linux, чтобы узнать MachineID, также вроде бы можно запустить mathinfo.<br>
                Хранится MachineID в файле паролей, путь к которому можно узнать в Mathematica или WolframScript, используя встроенный символ
                <a href="https://reference%2Ewolfram%2Ecom/language/ref/$PasswordFile.html" target="_blank"><b>$PasswordFile</b></a>.<br>
                <br>
                Для генерации пароля для менеджера лицензий MathLM установите флажок <b>"We Are Everywhere!"</b> и укажите класс лицензии (<b>License Class</b>): CA или CX или CB или CC или CM
                (для остальных приложений этот флажок не надо ставить и не нужно указывать класс лицензии).
                Платформы Windows, Mac OS X и некоторые Linux относятся к классу A. Платформы серверного класса относятся к классу B.
                Для одного и того же Activation Key можно задать по одной лицензии каждого класса.<br>
                Пароли классов A, X, B, C предназначены для процессов Mathematica (MathKernel, Mathematica, Sub MathKernel, Sub Mathematica).<br>
                Пароли класса A действительны для клиентов класса A.<br>
                Пароли класса X действительны для клиентов классов A, X.<br>
                Пароли класса B действительны для клиентов классов A, X, B.<br>
                Пароли класса C действительны для клиентов классов A, X, B, C.<br>
                Пароли класса M предназачены для процессов System Modeler (Modeling Center, Simulation Center, Session Manager).<br>
                Поэтому скорее всего для MathLM достаточно 2 лицензий: класса C (для клиентов процессов Mathematica) и класса M (для клиентов процессов System Modeler).<br>
                Вероятно, клиентом запрашивается сетевая лицензия определённого класса: M &mdash; от System Modeler, и A, X, B, C &mdash; от остальных продуктов,
                и сервером лицензий MathLM выдаётся первая попавшаяся лицензия, которая подходит для запрашиваемого класса,
                поэтому не получится, чтобы от одного и того же сервера лицензий MathLM можно было получить лицензии,
                например, и для Mathematica и для Wolfram Player Pro,
                например, если запрашивается лицензия класса A, а первая попавшаяся лицензия &mdash; это лицензия класса C для Wolfram Player Pro (т. е. с типом лицензии 40),
                то вместо Mathematica мы получим в результате Wolfram Player Pro.<br>
                <br>
                Лимиты для количества процессов и субпроцессов Mathematica и System Modeler (<b>Max License Processes и Max License Subprocesses</b>)
                задаются в виде нескольких неотрицательных целых десятичных чисел, перечисленных через запятую без пробелов.
                Если оставить строку пустой, то количество процессов и субпроцессов будет неограничено.<br>
                Для Mathematica можно указать до 4 чисел: первое число &mdash; максимальное количество процессов (т. е. управляющих процессов) ядра (MathKernel),
                второе число &mdash; максимальное количество процессов Front End (Mathematica),
                если указать только одно число, то второе будет считаться равным первому,
                третье и четвёртое числа &mdash; максимальное число субпроцессов (т. е. вычислительных процессов) соответственно для ядра (MathKernel) и Front End (Mathematica).
                Если указать только 2 числа, то 3-е и 4-е будут считаться в 4 раза большими, чем соответственно 1-е и 2-е число.<br>
                Для System Modeler можно указать до 3 чисел: первое число &mdash; максимальное количество процессов Modeling Center,
                второе число &mdash; максимальное количество процессов Simulation Center,
                третье число &mdash; максимальное количество процессов Session Manager,
                если не указать второе число, то оно будет считаться равным первому,
                если не указать третье число, то оно будет считаться равным первому.<br>
                Числа 9999 и более означают бесконечность, т. е. неограниченное количество,
                т. е. 9999,9999,9999,9999 для Mathematica и 9999,9999,9999 для System Modeler дадут тот же эффект, что и пустая строка.<br>
                <br>

                Тип лицензии (<b>License Type</b>) &mdash; шестнадцатеричное число (без префикса 0x).<br>
                Для Mathematica и т. п. версий 14.0 и ниже если его не указать, то будет лицензия Professional,
                для приложения Wolfram начиная с версии 14.1 нужно указать значение, включающее одну из битовых масок:
                100000 (Wolfram|Alpha Notebook Edition) или 200000 (Wolfram|One) или 400000 (Finance Platform) или 800000 (Mathematica) или 1000000 (Wolfram Programming Lab) или 20 (Player) или 40 (Player Pro).<br>
                Для приложения System Modeler начиная с версии 14.2 нужно обязательно указать значение, включающее битовую маску 40000000.<br>
                Значения имеют отдельные биты (двоичные разряды) числа, поэтому тип лицензии можно получить, сложив побитово (с помощью битовой операция ИЛИ) соответствующие шестнадцатеричные битовые маски:<br>
                &mdash; бит &ensp;0 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;1) &mdash; неизвестно что означает этот бит, но он установлен в бесплатных триальных лицензиях,<br>
                &mdash; бит &ensp;1 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;2) &mdash; редакция Product Trial, также нужно задать дату истечения срока действия лицензии (License Expiration Date) в формате ГГГГММДД,<br>
                &mdash; бит &ensp;2 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;4) &mdash; редакция Student Edition,<br>
                &mdash; бит &ensp;3 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;8) &mdash; редакция Site License,<br>
                &mdash; бит &ensp;4 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;10)      &mdash; Player, если установить этот бит, то Mathematica версии 13 и ниже будет как Wolfram Player, в версии 14.0 и выше этот бит вроде бы игнорируется,<br>
                &mdash; бит &ensp;5 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;20)      &mdash; продукт Wolfram Player, если установить этот бит, то лицензию можно использовать для Wolfram Player, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией
                                                                                                тоже будут как Wolfram Player,<br>
                &mdash; бит &ensp;6 (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;40)      &mdash; продукт Wolfram Player Pro, если установить этот бит, то лицензию можно использовать для Wolfram Player &mdash;
                                                                                                он превратится в Wolfram Player Pro, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией будут как Wolfram Player Pro &mdash; можно вычислять, но не редактировать,<br>
                &mdash; бит 11      (битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;800)           &mdash; редакция Home Edition,<br>
                &mdash; бит 12      (битовая маска &ensp;&ensp;&ensp;&ensp;1000)                &mdash; редакция Enterprise Edition, если установить этот бит, то Mathematica версии 13.3 и ниже с такой лицензией в окнах "About" и "Welcome Screen" пишет что она "Enterprise Edition",
                                                                                                но реально вроде бы этот бит больше ни на что не влияет, в версии 14 и выше этот бит вроде бы игнорируется,<br>
                &mdash; бит 13      (битовая маска &ensp;&ensp;&ensp;&ensp;2000)                &mdash; фича EnterpriseSigning &mdash;
                                                                                                если установить этот бит, то Mathematica и Wolfram начиная с версии 14.1 с такой лицензией при выборе пункта меню "Preview for Wolfram Player"
                                                                                                открывает Preview c "WOLFRAM Player Pro" и "Enterprise CDF Preview",
                                                                                                а также позволяет записывать CDF файлы в формате EnterpriseCDF &mdash; CDFDeploy с опцией "Target" -&gt; "PlayerPro" по умолчанию,
                                                                                                для записи FreeCDF нужно будет явно указывать "Target" -&gt; "CDFPlayer",<br>
                &mdash; бит 19      (битовая маска &ensp;&ensp;&ensp;80000)                     &mdash; фича AltExpirationPolicy, неизвестно, что означает, лицензию с установленным этим битом (а также с установленным битом для фичи AutoRenewingSubscription)
                                                                                                выдают например для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии,
                                                                                                эта лицезия у Wolfram Engine вроде бы автоматически обновляется,<br>
                &mdash; бит 20      (битовая маска &ensp;&ensp;100000)                          &mdash; продукт Wolfram|Alpha Notebook Edition приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 21      (битовая маска &ensp;&ensp;200000)                          &mdash; продукт Wolfram|One                    приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 22      (битовая маска &ensp;&ensp;400000)                          &mdash; продукт Wolfram Finance Platform       приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 23      (битовая маска &ensp;&ensp;800000)                          &mdash; продукт Mathematica                    приложения Wolfram начиная с версии 14.1, в каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 24      (битовая маска &ensp;1000000)                               &mdash; продукт Wolfram Programming Lab        приложения Wolfram начиная с версии 14.1, но вообще-то Wolfram Programming Lab &mdash; это устаревший продукт,
                                                                                                все функции и возможности которого доступны в Wolfram|One, в каждой лицензии для приложения Wolfram (начиная с версия 14.1) должен быть указан один и только один продукт,<br>
                &mdash; бит 29      (битовая маска 20000000)                                    &mdash; фича AutoRenewingSubscription, неизвестно, что означает, лицензию с установленным этим битом (а также с установленным битом для фичи AutoRenewingSubscription)
                                                                                                выдают например  для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии,
                                                                                                эта лицезия у Wolfram Engine вроде бы автоматически обновляется,<br>
                &mdash; бит 30      (битовая маска 40000000)                                    &mdash; продукт System Modeler,                с версии 14.2 для приложения System Modeler этот бит обязателен и не должны быть установлены биты других продуктов,<br>
                &mdash; бит 31      (битовая маска 80000000)                                    &mdash; неизвестно что означает этот бит, но если его установить, то приложение не принимает лицензию.<br>
                Просто поставьте внизу галочки, соответствующие выбранным битам.<br>
                Для System Modeler до версии 14.1 включительно все биты License Type, кроме битов, соответствующих битовым маскам 2 и 80000000, вроде бы ни на что не влияют,
                с версии 14.2 для приложения System Modeler обязателен бит 30 (битовая маска 40000000) и не должны быть установлены биты других продуктов.<br>
                Для Wolfram Player последних версий если не будет ни бита с битовой маской 20 ни бита с битовой маской 40, Player лицензию не примет, а также не примет, если будет бит с битовой маской 100000 или битовой маской 80000000.<br>
                Таким образом,
                для лицензии для продукта Mathematica и лицензии для приложения MathLM для Mathematica (т. е. лицензий классов A, X, B, C) лучше всего будет тип лицензии 803001,
                для приложения Wolfram Player &mdash; 41,
                для приложения System Modeler &mdash; 40000001.<br>
                <br>

                Дата истечения срока действия лицензии (<b>License Expiration Date</b>) задаётся числом в формате ГГГГММДД. Если не указать, то лицензия будет неограниченной во времени.<br>
                <br>

                Вместо всех параметров (кроме хэша) можно указать <b>строку для генерации пароля</b> (если строка не пустая, все параметры кроме хэша игнорируются):<br>
                &mdash; для приложения MathLM в формате:<br>
                <pre style="overflow: auto;">We Are Everywhere!MathID@LicenseExpirationDate:MaxLicenseProcessesSubprocesses*LicenseClass$LicenseType&ActivationKey</pre>
                &mdash; для приложений Mathematica (и ему подобных), Wolfram (начиная с версия 14.1), Wolfram Player и System Modeler в формате:<br>
                <pre style="overflow: auto;">MathID@LicenseExpirationDate:MaxLicenseProcessesSubprocesses$LicenseType&ActivationKey</pre>
                Ненужные параметры вместе с соответствующим символом перед ними указывать не нужно.<br>
                <br>
                <b>Примеры</b> для MathID=6202-24738-25165 и Activation Key=3893-9258-K6XJLE:<br>

                &mdash; для Mathematica Enterprise, тип лицензии 803001:<br>
                строка: 6202-24738-25165$803001&3893-9258-K6XJLE<br>
                С хэшем 0x609F (начиная с версии 14.2) пароль будет:<br>
                1139-772-958::803001<br>

                &mdash; для Wolfram Finance Platform Enterprise, тип лицензии 403001:<br>
                строка: 6202-24738-25165$403001&3893-9258-K6XJLE<br>
                С хэшем 0x609F (начиная с версии 14.2) пароль будет:<br>
                8849-663-854::403001<br>

                &mdash; для Wolfram|One Enterprise, тип лицензии 203001:<br>
                строка: 6202-24738-25165$203001&3893-9258-K6XJLE<br>
                С хэшем 0x609F (начиная с версии 14.2) пароль будет:<br>
                2849-634-696::203001<br>

                &mdash; для Wolfram|Alpha Notebook Edition Enterprise, тип лицензии 103001:<br>
                строка: 6202-24738-25165$103001&3893-9258-K6XJLE<br>
                С хэшем 0x609F (начиная с версии 14.2) пароль будет:<br>
                9449-028-317::103001<br>

                &mdash; для Wolfram Player Pro, тип лицензии 41:<br>
                строка: 6202-24738-25165$41&3893-9258-K6XJLE<br>
                С хэшем 0x609F (начиная с версии 14.2) пароль будет:<br>
                8060-768-258::41<br>

                &mdash; для System Modeler, тип лицензии 40000001:<br>
                строка: 6202-24738-25165$40000001&3893-9258-K6XJLE<br>
                С хэшем 0x609F (начиная с версии 14.2) пароль будет:<br>
                7958-340-838::40000001<br>

                &mdash; для MathLM для Mathematica Enterprise, тип лицензии 803001, класс лицензии C:<br>
                строка: We Are Everywhere!6202-24738-25165*CC$803001&3893-9258-K6XJLE<br>
                С хэшем 0x72A4 (начиная с версии 10.0) пароль будет:<br>
                4558-527-625::803001::CC<br>

                &mdash; для MathLM для System Modeler, тип лицензии 40000001, класс лицензии M:<br>
                строка: We Are Everywhere!6202-24738-25165*CM$40000001&3893-9258-K6XJLE<br>
                С хэшем 0x72A4 (начиная с версии 10.0) пароль будет:<br>
                5313-035-777::40000001::CM<br>
                <br>
            </li>
            <li>Нажмите <b>Сгенерировать пароль (password)</b>.<br>
                <br>
            </li>

            <li>В окне активации продукта введите ваш <b>Activation Key</b> и сгенерированный <b>Password</b> чтобы активировать продукт.<br>
                <br>
            </li>

            <li>Игнорируйте запрос <b>Register</b>.<br>
                <br>
            </li>

            <li>Для приложения под названием <b>Wolfram</b> (<b>начиная с версии 14.1</b>) можно добавить регистрации для разных продуктов (например, для
                Mathematica, Wolfram Finance Platform, Wolfram|One, Wolfram|Alpha Notebook Edition,
                Wolfram Player Pro, Wolfram Player, Wolfram Programming Lab) и переключаться между ними
                при помощи <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/UsingTheWolframProductSwitcher.html" target="_blank"><b>Переключателя продуктов Wolfram</b></a>
                &mdash; смотрите <b>Настройки</b> (меню <b>Edit&nbsp;&gt;&nbsp;Preferences</b> или кнопка <b>Открыть&nbsp;настройки...</b>), вкладка <b>Product</b>.<br>
            </li>
        </ol>

        Если у Вас уже есть пароль (password), то Вы можете его проверить, введя здесь MachineID (MathID), Ключ активации (Activation Key), Пароль (password) и нажав кнопку <b>Проверить пароль (password)</b>.<br>
        <br>
        Если у вас есть легальная лицензия
        для Mathematica, Wolfram Finance Platform, Wolfram|One, Wolfram|Alpha Notebook Edition или для Wolfram Player Pro версии не меньше 14.2,
        то гипотетически можно использовать Ключ активации (Activation Key) и Пароль (password) от неё для активации System Modeler, но только версии 14.1.<br>
        <br>
        См. также:<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/RegistrationAndPasswords.html" target="_blank"><b>Регистрация и пароли</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/MathematicaSystemAdministrationOverview.html" target="_blank"><b>Администрирование системы Wolfram</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/InstallingWolfram.html" target="_blank"><b>Установка Wolfram (начиная с версии 14.1)</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/InstallingMathematica.html" target="_blank"><b>Установка Mathematica (для версии 14 и старее)</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/InstallingMathLM.html" target="_blank"><b>Установка MathLM</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/ActivatingMathematica.html" target="_blank"><b>Активация Mathematica</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/tutorial/UsingTheWolframProductSwitcher.html" target="_blank"><b>Переключатель продуктов Wolfram</b></a>,<br>
        &mdash; <a href="https://reference%2Ewolfram%2Ecom/language/guide/SystemAndLicenseManagement.html" target="_blank"><b>Управление системой и лицензиями</b></a>,<br>
        &mdash; Встроенный символ <a href="https://reference%2Ewolfram%2Ecom/language/ref/$MachineID.html" target="_blank"><b>$MachineID</b></a> &mdash; показывает MachineID (он же MathID),<br>
        &mdash; Встроенный символ <a href="https://reference%2Ewolfram%2Ecom/language/ref/$PasswordFile.html" target="_blank"><b>$PasswordFile</b></a> &mdash; путь к файлу с паролями.<br>
        <br>

        <b>Новые версии кейгена ищите <a href="https://forum%2Eru-board%2Ecom/topic.cgi?forum=35&topic=1174&start=0&limit=1&m=27#1" target="_blank">здесь</a>.</b><br>
        <br>

        <form id="form">
            <fieldset>
                <legend> Генератор паролей </legend>

                <label for="mathid" id="mathid-label"> MachineID (MathID): </label>
                <input type="text" id="mathid" pattern="\d{4}-\d{5}-\d{5}" title="В формате nnnn-nnnnn-nnnnn, где n - цифра." oninput="inputMathidChange(this.value);">

                <label for="activation-key"> Ключ активации (Activation Key): </label>
                <input type="text" id="activation-key" pattern="\d{4}-\d{4}-[0-9A-Z]{6}" value="3893-9258-K6XJLE" title="В формате nnnn-nnnn-xxxxxx, где n - цифра, а x - цифра или заглавная латинская буква.">

                <button id="buttonGenActKey" onclick="genActKey(event);"> Сгенерировать случайный ключ активации (Activation Key) </button>

                <label for="password-str">Пароль (password), заполняйте только для проверки известного пароля: </label>
                <input type="text" id="password-str" title="Пароль. Заполняте только если хотите проверить известный пароль.">

                <button id="button-check-password" onclick="checkPass(event);">Проверить пароль (password)</button>

                <label for="max-license-processes-subprocesses"> Максимальное количество процессов и субпроцессов (Max License Processes и Max License Subprocesses): </label>
                <input type="text" id="max-license-processes-subprocesses" pattern="^(\s*|[0-9]\d{0,3}(,[0-9]\d{0,3}){0,3}\s*)$" title="От 1 до 4 чисел от 0 до 9999, разделённых запятыми или пустая строка.">

                <label for="license-type" style="display: none;"> Тип лицензии (License Type): </label>
                <input type="text" id="license-type" pattern="^(\s*|[1-9A-F][0-9A-F]{0,7}\s*)$" title="Шестнадцатеричное число от 1 до 8 цифр или пустая строка." style="display: none;">

                <div>
                    <div id="div-license-type"> Тип лицензии (License Type): </div>
                    <div id="div-checkbox-license-type-bit-00" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-00" title="Неизвестно что означает этот бит, но он установлен в бесплатных триальных лицензиях." checked onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-00"> бит  &ensp;0, битовая маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;1 &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-01" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-01" title="Установите флажок, если хотите редакцию Product Trial. Также нужно ниже задать дату истечения срока действия лицензии (License Expiration Date) в формате ГГГГММДД." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-01"> бит  &ensp;1, битовая маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;2 &mdash; редакция Product Trial </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-02" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-02" title="Установите флажок, если хотите редакцию Student Edition." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-ише-02"> бит  &ensp;2, битовая маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;4 &mdash; редакция Student Edition </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-03" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-03" title="Установите флажок, если хотите редакцию Site License." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-03"> бит  &ensp;3, битовая маска        &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;8 &mdash; редакция Site License </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-04" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-04" title="Установите флажок, если хотите чтобы Mathematica версии 13 и ниже превратилась в Wolfram Player. В версии 14 и выше этот бит вроде бы игнорируется." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-04"> бит  &ensp;4, битовая маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;10       &mdash; Player </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-05" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-05" title="Установите флажок, если вам нужна лицензия для Wolfram Player. Лицензию можно использовать для приложения Wolfram Player, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией тоже будут как Wolfram Player. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseWolframTypeClick();">
                        <label for="checkbox-license-type-bit-05"> бит  &ensp;5, битовая маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;20       &mdash; продукт Wolfram Player </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-06" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-06" title="Установите флажок, если вам нужна лицензия для Wolfram Player Pro. Лицензию можно использовать для приложения Wolfram Player &mdash; он превратится в Wolfram Player Pro, а Mathematica и Wolfram начиная с версии 14.1 с такой лицензией тоже будет как Wolfram Player Pro &mdash; можно вычислять, но не редактировать. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-06"> бит  &ensp;6, битовая маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;40       &mdash; продукт Wolfram Player Pro </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-07" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-07" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-07"> бит  &ensp;7, битовая маска       &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;80       &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-08" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-08" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-08"> бит  &ensp;8, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;100                  &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-09" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-09" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-09"> бит  &ensp;9, битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;200                  &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-10" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-10" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-10"> бит 10,       битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;400                  &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-11" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-11" title="Установите флажок, если хотите редакцию Home Edition." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-11"> бит 11,       битовая маска &ensp;&ensp;&ensp;&ensp;&ensp;800                  &mdash; редакция Home Edition </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-12" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-12" title="Установите флажок, если хотите редакцию Enterprise Edition. Mathematica версии 13.3 и ниже с такой лицензией в окнах &quot;About&quot; и &quot;Welcome Screen&quot; пишет что она &quot;Enterprise Edition&quot;, но реально вроде бы этот бит больше ни на что не влияет. В версии 14 и выше этот бит вроде бы игнорируется." checked onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-12"> бит 12,       битовая маска &ensp;&ensp;&ensp;&ensp;1000                       &mdash; редакция Enterprise Edition </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-13" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-13" title="Фича EnterpriseSigning. Установите флажок, если хотите чтобы CDF файлы записывались в формате EnterpriseCDF &mdash; CDFDeploy с опцией &quot;Target&quot; -&gt; &quot;PlayerPro&quot; по умолчанию, для записи FreeCDF нужно будет явно указывать &quot;Target&quot; -&gt; &quot;CDFPlayer&quot;. Mathematica и Wolfram начиная с версии 14.1 с такой лицензией при выборе пункта меню &quot;Preview for Wolfram Player&quot; открывает Preview c &quot;WOLFRAM Player Pro&quot; и &quot;Enterprise CDF Preview&quot;." checked onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-13"> бит 13,       битовая маска &ensp;&ensp;&ensp;&ensp;2000                       &mdash; фича EnterpriseSigning </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-14" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-14" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-14"> бит 14,       битовая маска &ensp;&ensp;&ensp;&ensp;4000                       &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-15" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-15" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-15"> бит 15,       битовая маска &ensp;&ensp;&ensp;&ensp;8000                       &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-16" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-16" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-16"> бит 16,       битовая маска &ensp;&ensp;&ensp;10000                            &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-17" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-17" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-17"> бит 17,       битовая маска &ensp;&ensp;&ensp;20000                            &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-18" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-18" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-18"> бит 18,       битовая маска &ensp;&ensp;&ensp;40000                            &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-19" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-19" title="Фича AltExpirationPolicy. Неизвестно, что означает. Лицензию с установленным этим битом (а также с установленным битом для фичи AutoRenewingSubscription) выдают например для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии, эта лицезия у Wolfram Engine вроде бы автоматически обновляется." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-19"> бит 19,       битовая маска &ensp;&ensp;&ensp;80000                            &mdash; фича AltExpirationPolicy </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-20" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-20" title="Установите флажок, если вам нужна лицензия для продукта Wolfram|Alpha Notebook Edition приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-20"> бит 20,       битовая маска &ensp;&ensp;100000                                 &mdash; продукт Wolfram|Alpha Notebook Edition  </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-21" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-21" title="Установите флажок, если вам нужна лицензия для продукта Wolfram|One приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-21"> бит 21,       битовая маска &ensp;&ensp;200000                                 &mdash; продукт Wolfram|One </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-22" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-22" title="Установите флажок, если вам нужна лицензия для продукта Wolfram Finance Platform приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-22"> бит 22,       битовая маска &ensp;&ensp;400000                                 &mdash; продукт Wolfram Finance Platform </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-23" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-23" title="Установите флажок, если вам нужна лицензия для продукта Mathematica приложения Wolfram начиная с версии 14.1. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." checked onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-23"> бит 23,       битовая маска &ensp;&ensp;800000                                 &mdash; продукт Mathematica </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-24" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-24" title="Установите флажок, если вам нужна лицензия для продукта Wolfram Programming Lab приложения Wolfram начиная с версии 14.1. Но вообще-то Wolfram Programming Lab &mdash; это устаревший продукт, все функции и возможности которого доступны в Wolfram|One. В каждой лицензии для приложения Wolfram (начиная с версии 14.1) должен быть указан один и только один продукт." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-24"> бит 24,       битовая маска &ensp;1000000                                      &mdash; продукт Wolfram Programming Lab </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-25" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-25" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-25"> бит 25,       битовая маска &ensp;2000000                                      &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-26" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-26" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-26"> бит 26,       битовая маска &ensp;4000000                                      &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-27" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-27" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-27"> бит 27,       битовая маска &ensp;8000000                                      &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-28" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-28" title="Неизвестно что означает этот бит." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-28"> бит 28,       битовая маска 10000000                                           &mdash; неизвестно </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-29" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-29" title="Фича AutoRenewingSubscription. Неизвестно, что означает. Лицензию с установленным этим битом (а также с установленным битом для фичи AltExpirationPolicy) выдают например для бесплатного Wolfram Engine &mdash; с нулевым лимитом для Front End Mathematica, а также с заданной датой истечения срока действия лицензии, эта лицезия у Wolfram Engine вроде бы автоматически обновляется." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-29"> бит 29,       битовая маска 20000000                                           &mdash; фича AutoRenewingSubscription </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-30" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-30" title="Продукт System Modeler, с версии 14.2 для приложения System Modeler этот бит обязателен и не должны быть установлены биты других продуктов." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-30"> бит 30,       битовая маска 40000000                                           &mdash; продукт System Modeler </label>
                    </div>
                    <br>
                    <div id="div-checkbox-license-type-bit-31" style="display: inline-flex;">
                        <input type="checkbox" id="checkbox-license-type-bit-31" title="Неизвестно что означает этот бит, но если его установить, то приложение не принимает лицензию." onclick="checkboxLicenseTypeClick();">
                        <label for="checkbox-license-type-bit-31"> бит 31,       битовая маска 80000000                                           &mdash; неизвестно </label>
                    </div>
                </div>

                <br>

                <label for="license-expiration-date">Дата истечения срока действия лицензии (License Expiration Date): </label>
                <input type="text" id="license-expiration-date" pattern="^(\s*|[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\s*)$" title="Дата в формате ГГГГММДД или пустая строка.">

                <label for="we-are-everywhere"> "We Are Everywhere!": </label>
                <input type="checkbox" id="we-are-everywhere" title="Установите флажок, если лицензия для приложения MathLM, а также нужно указать класс лицензии (License Class). Для остальных приложений этот флажок снимите и очистите поле с классом лицензии (License Class)."><br>

                <label for="license-class">Класс лицензии (License Class): </label>
                <input type="text" id="license-class" pattern="^(\s*|CA|CX|CB|CC|CM\s*)$" title="Укажите CA или CX или CB или CC или CM если вам нужна лицензия для приложения MathLM, а также нужно установить флажок &quot;We Are Everywhere!&quot;. Для остальных приложений очистите поле с классом лицензии (License Class) и снимите этот флажок &quot;We Are Everywhere!&quot;.">

                <label for="key-val-str">Строка для генерации пароля: </label>
                <input type="text" id="key-val-str" title="Строка для генерации пароля. Если строка не пустая, все параметры кроме хэша игнорируются.">

                <label for="salt">Хэш: </label>
                <input type="text" id="salt" required pattern="^(\s*|0x[0-9a-fA-F]{1,4}|[0-9]{1,5}\s*)$" title="Число либо в десятичном формате (от 0 до 65535), либо в шестнадцатеричном формате (от 0x0000 до 0xFFFF).">

                <button id="buttonGenPass" onclick="genPass(event);" type="submit">Сгенерировать пароль (password)</button>
            </fieldset>
        </form>
        <div id="output"></div>
    </body>
</html>