Compare commits

...

1 Commits

Author SHA1 Message Date
github-actions[bot] 254b949ad3 Update report 2026-05-04 01:32:40 +00:00
12 changed files with 14669 additions and 707 deletions
+42 -51
View File
@@ -1,11 +1,11 @@
# This software is Copyright (c) 2012-2020 magnum, and it is hereby
# This software is Copyright (c) 2012-2024 magnum, and it is hereby
# released to the general public under the following terms:
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
#
# Generic implementation of "dumb" exhaustive search of Unicode BMP.
# Default is to try *all* allocated characters in the BMP of Unicode v13
# (there's 55,387 of them). Even if a fast format can exhaust two characters
# Default is to try *all* allocated characters in the BMP of Unicode v16
# (there's 55,537 of them). Even if a fast format can exhaust two characters
# in 15 minutes, three characters would take 1.5 years...
#
# Note that these modes will handle --max-len differently than normal: They
@@ -22,7 +22,7 @@ int maxlength; // Maximum password length to try
int last; // Last character position, zero-based
int lastid; // Character index in the last position
int id[0x7f]; // Current character indices for other positions
int charset[0x10000], c0; // Characters
int charset[0xd900], c0; // Characters
void init()
{
@@ -43,7 +43,7 @@ void init()
/*
* This defines the character set. This is auto-generated from UnicodeData.txt
* and we skip control characters.
* of Unicode 16.0.0 and we skip control characters.
*/
i = 0;
// 0000..007F; Basic Latin
@@ -119,9 +119,6 @@ void init()
charset[i++] = c++;
// 0600..06FF; Arabic
c = 0x600; // from ARABIC NUMBER SIGN
while (c <= 0x61c) // ..to ARABIC LETTER MARK
charset[i++] = c++;
c = 0x61e; // from ARABIC TRIPLE DOT PUNCTUATION MARK
while (c <= 0x6ff) // ..to ARABIC LETTER HEH WITH INVERTED V
charset[i++] = c++;
// 0700..074F; Syriac
@@ -163,14 +160,17 @@ void init()
c = 0x860; // from SYRIAC LETTER MALAYALAM NGA
while (c <= 0x86a) // ..to SYRIAC LETTER MALAYALAM SSA
charset[i++] = c++;
// 0870..089F; Arabic Extended-B
c = 0x870; // from ARABIC LETTER ALEF WITH ATTACHED FATHA
while (c <= 0x88e) // ..to ARABIC VERTICAL TAIL
charset[i++] = c++;
charset[i++] = 0x890; // ARABIC POUND MARK ABOVE
charset[i++] = 0x891; // ARABIC PIASTRE MARK ABOVE
c = 0x897; // from ARABIC PEPET
while (c <= 0x89f) // ..to ARABIC HALF MADDA OVER MADDA
charset[i++] = c++;
// 08A0..08FF; Arabic Extended-A
c = 0x8a0; // from ARABIC LETTER BEH WITH SMALL V BELOW
while (c <= 0x8b4) // ..to ARABIC LETTER KAF WITH DOT BELOW
charset[i++] = c++;
c = 0x8b6; // from ARABIC LETTER BEH WITH SMALL MEEM ABOVE
while (c <= 0x8c7) // ..to ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
charset[i++] = c++;
c = 0x8d3; // from ARABIC SMALL LOW WAW
while (c <= 0x8ff) // ..to ARABIC MARK SIDEWAYS NOON GHUNNA
charset[i++] = c++;
// 0900..097F; Devanagari
@@ -360,7 +360,7 @@ void init()
c = 0xc2a; // from TELUGU LETTER PA
while (c <= 0xc39) // ..to TELUGU LETTER HA
charset[i++] = c++;
c = 0xc3d; // from TELUGU SIGN AVAGRAHA
c = 0xc3c; // from TELUGU SIGN NUKTA
while (c <= 0xc44) // ..to TELUGU VOWEL SIGN VOCALIC RR
charset[i++] = c++;
charset[i++] = 0xc46; // TELUGU VOWEL SIGN E
@@ -406,6 +406,8 @@ void init()
charset[i++] = c++;
charset[i++] = 0xcd5; // KANNADA LENGTH MARK
charset[i++] = 0xcd6; // KANNADA AI LENGTH MARK
charset[i++] = 0xcdd; // KANNADA LETTER NAKAARA POLLU
charset[i++] = 0xcde; // KANNADA LETTER FA
c = 0xce0; // from KANNADA LETTER VOCALIC RR
while (c <= 0xce3) // ..to KANNADA VOWEL SIGN VOCALIC LL
charset[i++] = c++;
@@ -413,7 +415,7 @@ void init()
while (c <= 0xcef) // ..to KANNADA DIGIT NINE
charset[i++] = c++;
charset[i++] = 0xcf1; // KANNADA SIGN JIHVAMULIYA
charset[i++] = 0xcf2; // KANNADA SIGN UPADHMANIYA
charset[i++] = 0xcf3; // KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
// 0D00..0D7F; Malayalam
c = 0xd00; // from MALAYALAM SIGN COMBINING ANUSVARA ABOVE
while (c <= 0xd0c) // ..to MALAYALAM LETTER VOCALIC L
@@ -483,7 +485,7 @@ void init()
while (c <= 0xec4) // ..to LAO VOWEL SIGN AI
charset[i++] = c++;
c = 0xec8; // from LAO TONE MAI EK
while (c <= 0xecd) // ..to LAO NIGGAHITA
while (c <= 0xece) // ..to LAO YAMAKKAN
charset[i++] = c++;
c = 0xed0; // from LAO DIGIT ZERO
while (c <= 0xed9) // ..to LAO DIGIT NINE
@@ -596,11 +598,9 @@ void init()
charset[i++] = c++;
// 1700..171F; Tagalog
c = 0x1700; // from TAGALOG LETTER A
while (c <= 0x170c) // ..to TAGALOG LETTER YA
charset[i++] = c++;
c = 0x170e; // from TAGALOG LETTER LA
while (c <= 0x1714) // ..to TAGALOG SIGN VIRAMA
while (c <= 0x1715) // ..to TAGALOG SIGN PAMUDPOD
charset[i++] = c++;
charset[i++] = 0x171f; // TAGALOG LETTER ARCHAIC RA
// 1720..173F; Hanunoo
c = 0x1720; // from HANUNOO LETTER A
while (c <= 0x1736) // ..to PHILIPPINE DOUBLE PUNCTUATION
@@ -629,9 +629,6 @@ void init()
charset[i++] = c++;
// 1800..18AF; Mongolian
c = 0x1800; // from MONGOLIAN BIRGA
while (c <= 0x180e) // ..to MONGOLIAN VOWEL SEPARATOR
charset[i++] = c++;
c = 0x1810; // from MONGOLIAN DIGIT ZERO
while (c <= 0x1819) // ..to MONGOLIAN DIGIT NINE
charset[i++] = c++;
c = 0x1820; // from MONGOLIAN LETTER A
@@ -704,14 +701,14 @@ void init()
charset[i++] = c++;
// 1AB0..1AFF; Combining Diacritical Marks Extended
c = 0x1ab0; // from COMBINING DOUBLED CIRCUMFLEX ACCENT
while (c <= 0x1ac0) // ..to COMBINING LATIN SMALL LETTER TURNED W BELOW
while (c <= 0x1ace) // ..to COMBINING LATIN SMALL LETTER INSULAR T
charset[i++] = c++;
// 1B00..1B7F; Balinese
c = 0x1b00; // from BALINESE SIGN ULU RICEM
while (c <= 0x1b4b) // ..to BALINESE LETTER ASYURA SASAK
while (c <= 0x1b4c) // ..to BALINESE LETTER ARCHAIC JNYA
charset[i++] = c++;
c = 0x1b50; // from BALINESE DIGIT ZERO
while (c <= 0x1b7c) // ..to BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
c = 0x1b4e; // from BALINESE INVERTED CARIK SIKI
while (c <= 0x1b7f) // ..to BALINESE PANTI BAWAK
charset[i++] = c++;
// 1B80..1BBF; Sundanese
c = 0x1b80; // from SUNDANESE SIGN PANYECEK
@@ -739,7 +736,7 @@ void init()
charset[i++] = c++;
// 1C80..1C8F; Cyrillic Extended-C
c = 0x1c80; // from CYRILLIC SMALL LETTER ROUNDED VE
while (c <= 0x1c88) // ..to CYRILLIC SMALL LETTER UNBLENDED UK
while (c <= 0x1c8a) // ..to CYRILLIC SMALL LETTER TJE
charset[i++] = c++;
// 1C90..1CBF; Georgian Extended
c = 0x1c90; // from GEORGIAN MTAVRULI CAPITAL LETTER AN
@@ -765,9 +762,6 @@ void init()
charset[i++] = c++;
// 1DC0..1DFF; Combining Diacritical Marks Supplement
c = 0x1dc0; // from COMBINING DOTTED GRAVE ACCENT
while (c <= 0x1df9) // ..to COMBINING WIDE INVERTED BRIDGE BELOW
charset[i++] = c++;
c = 0x1dfb; // from COMBINING DELETION MARK
while (c <= 0x1dff) // ..to COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
charset[i++] = c++;
// 1E00..1EFF; Latin Extended Additional
@@ -831,7 +825,7 @@ void init()
charset[i++] = c++;
// 20A0..20CF; Currency Symbols
c = 0x20a0; // from EURO-CURRENCY SIGN
while (c <= 0x20bf) // ..to BITCOIN SIGN
while (c <= 0x20c0) // ..to SOM SIGN
charset[i++] = c++;
// 20D0..20FF; Combining Diacritical Marks for Symbols
c = 0x20d0; // from COMBINING LEFT HARPOON ABOVE
@@ -859,7 +853,7 @@ void init()
charset[i++] = c++;
// 2400..243F; Control Pictures
c = 0x2400; // from SYMBOL FOR NULL
while (c <= 0x2426) // ..to SYMBOL FOR SUBSTITUTE FORM TWO
while (c <= 0x2429) // ..to SYMBOL FOR DELETE MEDIUM SHADE FORM
charset[i++] = c++;
// 2440..245F; Optical Character Recognition
c = 0x2440; // from OCR HOOK
@@ -925,10 +919,7 @@ void init()
charset[i++] = c++;
// 2C00..2C5F; Glagolitic
c = 0x2c00; // from GLAGOLITIC CAPITAL LETTER AZU
while (c <= 0x2c2e) // ..to GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
charset[i++] = c++;
c = 0x2c30; // from GLAGOLITIC SMALL LETTER AZU
while (c <= 0x2c5e) // ..to GLAGOLITIC SMALL LETTER LATINATE MYSLITE
while (c <= 0x2c5f) // ..to GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
charset[i++] = c++;
// 2C60..2C7F; Latin Extended-C
c = 0x2c60; // from LATIN CAPITAL LETTER L WITH DOUBLE BAR
@@ -989,7 +980,7 @@ void init()
charset[i++] = c++;
// 2E00..2E7F; Supplemental Punctuation
c = 0x2e00; // from RIGHT ANGLE SUBSTITUTION MARKER
while (c <= 0x2e52) // ..to TIRONIAN SIGN CAPITAL ET
while (c <= 0x2e5d) // ..to OBLIQUE HYPHEN
charset[i++] = c++;
// 2E80..2EFF; CJK Radicals Supplement
c = 0x2e80; // from CJK RADICAL REPEAT
@@ -1004,7 +995,7 @@ void init()
charset[i++] = c++;
// 2FF0..2FFF; Ideographic Description Characters
c = 0x2ff0; // from IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
while (c <= 0x2ffb) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
while (c <= 0x2fff) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION
charset[i++] = c++;
// 3000..303F; CJK Symbols and Punctuation
c = 0x3000; // from IDEOGRAPHIC SPACE
@@ -1039,8 +1030,9 @@ void init()
charset[i++] = c++;
// 31C0..31EF; CJK Strokes
c = 0x31c0; // from CJK STROKE T
while (c <= 0x31e3) // ..to CJK STROKE Q
while (c <= 0x31e5) // ..to CJK STROKE SZP
charset[i++] = c++;
charset[i++] = 0x31ef; // IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION
// 31F0..31FF; Katakana Phonetic Extensions
c = 0x31f0; // from KATAKANA LETTER SMALL KU
while (c <= 0x31ff) // ..to KATAKANA LETTER SMALL RO
@@ -1066,7 +1058,7 @@ void init()
charset[i++] = c++;
// 4E00..9FFF; CJK Unified Ideographs
c = 0x4e00; // from <CJK Ideograph, First>
while (c <= 0x9ffc) // ..to <CJK Ideograph, Last>
while (c <= 0x9fff) // ..to <CJK Ideograph, Last>
charset[i++] = c++;
// A000..A48F; Yi Syllables
c = 0xa000; // from YI SYLLABLE IT
@@ -1098,12 +1090,14 @@ void init()
charset[i++] = c++;
// A720..A7FF; Latin Extended-D
c = 0xa720; // from MODIFIER LETTER STRESS AND HIGH TONE
while (c <= 0xa7bf) // ..to LATIN SMALL LETTER GLOTTAL U
while (c <= 0xa7cd) // ..to LATIN SMALL LETTER S WITH DIAGONAL STROKE
charset[i++] = c++;
c = 0xa7c2; // from LATIN CAPITAL LETTER ANGLICANA W
while (c <= 0xa7ca) // ..to LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
charset[i++] = 0xa7d0; // LATIN CAPITAL LETTER CLOSED INSULAR G
charset[i++] = 0xa7d1; // LATIN SMALL LETTER CLOSED INSULAR G
c = 0xa7d5; // from LATIN SMALL LETTER DOUBLE WYNN
while (c <= 0xa7dc) // ..to LATIN CAPITAL LETTER LAMBDA WITH STROKE
charset[i++] = c++;
c = 0xa7f5; // from LATIN CAPITAL LETTER REVERSED HALF H
c = 0xa7f2; // from MODIFIER LETTER CAPITAL C
while (c <= 0xa7ff) // ..to LATIN EPIGRAPHIC LETTER ARCHAIC M
charset[i++] = c++;
// A800..A82F; Syloti Nagri
@@ -1258,19 +1252,16 @@ void init()
charset[i++] = c++;
// FB50..FDFF; Arabic Presentation Forms-A
c = 0xfb50; // from ARABIC LETTER ALEF WASLA ISOLATED FORM
while (c <= 0xfbc1) // ..to ARABIC SYMBOL SMALL TAH BELOW
while (c <= 0xfbc2) // ..to ARABIC SYMBOL WASLA ABOVE
charset[i++] = c++;
c = 0xfbd3; // from ARABIC LETTER NG ISOLATED FORM
while (c <= 0xfd3f) // ..to ORNATE RIGHT PARENTHESIS
charset[i++] = c++;
c = 0xfd50; // from ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
while (c <= 0xfd8f) // ..to ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
charset[i++] = c++;
c = 0xfd92; // from ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
while (c <= 0xfdc7) // ..to ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
charset[i++] = c++;
c = 0xfdf0; // from ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
while (c <= 0xfdfd) // ..to ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
while (c <= 0xfdff) // ..to ARABIC LIGATURE AZZA WA JALL
charset[i++] = c++;
// FE00..FE0F; Variation Selectors
c = 0xfe00; // from VARIATION SELECTOR-1
+283 -91
View File
@@ -1,11 +1,11 @@
# This software is Copyright (c) 2012-2020 magnum, and it is hereby
# This software is Copyright (c) 2012-2024 magnum, and it is hereby
# released to the general public under the following terms:
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
#
# Generic implementation of "dumb" exhaustive search of FULL Unicode.
# Default is to try *all* allocated characters in Unicode v13 (there's
# 143,532 of them). Even if a fast format can exhaust two characters in one
# Default is to try *all* allocated characters in Unicode v16 (there's
# 154,663 of them). Even if a fast format can exhaust two characters in one
# hour, three characters would take 12 years...
#
# Note that these modes will handle --max-len differently than normal: They
@@ -27,7 +27,7 @@ int maxlength; // Maximum password length to try
int last; // Last character position, zero-based
int lastid; // Character index in the last position
int id[0x7f]; // Current character indices for other positions
int charset[0x24000], c0; // Characters
int charset[0x25c30], c0; // Characters
void init()
{
@@ -48,7 +48,7 @@ void init()
/*
* This defines the character set. This is auto-generated from UnicodeData.txt
* and we skip control characters.
* of Unicode 16.0.0 and we skip control characters.
*/
i = 0;
// 0000..007F; Basic Latin
@@ -124,9 +124,6 @@ void init()
charset[i++] = c++;
// 0600..06FF; Arabic
c = 0x600; // from ARABIC NUMBER SIGN
while (c <= 0x61c) // ..to ARABIC LETTER MARK
charset[i++] = c++;
c = 0x61e; // from ARABIC TRIPLE DOT PUNCTUATION MARK
while (c <= 0x6ff) // ..to ARABIC LETTER HEH WITH INVERTED V
charset[i++] = c++;
// 0700..074F; Syriac
@@ -168,14 +165,17 @@ void init()
c = 0x860; // from SYRIAC LETTER MALAYALAM NGA
while (c <= 0x86a) // ..to SYRIAC LETTER MALAYALAM SSA
charset[i++] = c++;
// 0870..089F; Arabic Extended-B
c = 0x870; // from ARABIC LETTER ALEF WITH ATTACHED FATHA
while (c <= 0x88e) // ..to ARABIC VERTICAL TAIL
charset[i++] = c++;
charset[i++] = 0x890; // ARABIC POUND MARK ABOVE
charset[i++] = 0x891; // ARABIC PIASTRE MARK ABOVE
c = 0x897; // from ARABIC PEPET
while (c <= 0x89f) // ..to ARABIC HALF MADDA OVER MADDA
charset[i++] = c++;
// 08A0..08FF; Arabic Extended-A
c = 0x8a0; // from ARABIC LETTER BEH WITH SMALL V BELOW
while (c <= 0x8b4) // ..to ARABIC LETTER KAF WITH DOT BELOW
charset[i++] = c++;
c = 0x8b6; // from ARABIC LETTER BEH WITH SMALL MEEM ABOVE
while (c <= 0x8c7) // ..to ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
charset[i++] = c++;
c = 0x8d3; // from ARABIC SMALL LOW WAW
while (c <= 0x8ff) // ..to ARABIC MARK SIDEWAYS NOON GHUNNA
charset[i++] = c++;
// 0900..097F; Devanagari
@@ -365,7 +365,7 @@ void init()
c = 0xc2a; // from TELUGU LETTER PA
while (c <= 0xc39) // ..to TELUGU LETTER HA
charset[i++] = c++;
c = 0xc3d; // from TELUGU SIGN AVAGRAHA
c = 0xc3c; // from TELUGU SIGN NUKTA
while (c <= 0xc44) // ..to TELUGU VOWEL SIGN VOCALIC RR
charset[i++] = c++;
charset[i++] = 0xc46; // TELUGU VOWEL SIGN E
@@ -411,6 +411,8 @@ void init()
charset[i++] = c++;
charset[i++] = 0xcd5; // KANNADA LENGTH MARK
charset[i++] = 0xcd6; // KANNADA AI LENGTH MARK
charset[i++] = 0xcdd; // KANNADA LETTER NAKAARA POLLU
charset[i++] = 0xcde; // KANNADA LETTER FA
c = 0xce0; // from KANNADA LETTER VOCALIC RR
while (c <= 0xce3) // ..to KANNADA VOWEL SIGN VOCALIC LL
charset[i++] = c++;
@@ -418,7 +420,7 @@ void init()
while (c <= 0xcef) // ..to KANNADA DIGIT NINE
charset[i++] = c++;
charset[i++] = 0xcf1; // KANNADA SIGN JIHVAMULIYA
charset[i++] = 0xcf2; // KANNADA SIGN UPADHMANIYA
charset[i++] = 0xcf3; // KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
// 0D00..0D7F; Malayalam
c = 0xd00; // from MALAYALAM SIGN COMBINING ANUSVARA ABOVE
while (c <= 0xd0c) // ..to MALAYALAM LETTER VOCALIC L
@@ -488,7 +490,7 @@ void init()
while (c <= 0xec4) // ..to LAO VOWEL SIGN AI
charset[i++] = c++;
c = 0xec8; // from LAO TONE MAI EK
while (c <= 0xecd) // ..to LAO NIGGAHITA
while (c <= 0xece) // ..to LAO YAMAKKAN
charset[i++] = c++;
c = 0xed0; // from LAO DIGIT ZERO
while (c <= 0xed9) // ..to LAO DIGIT NINE
@@ -601,11 +603,9 @@ void init()
charset[i++] = c++;
// 1700..171F; Tagalog
c = 0x1700; // from TAGALOG LETTER A
while (c <= 0x170c) // ..to TAGALOG LETTER YA
charset[i++] = c++;
c = 0x170e; // from TAGALOG LETTER LA
while (c <= 0x1714) // ..to TAGALOG SIGN VIRAMA
while (c <= 0x1715) // ..to TAGALOG SIGN PAMUDPOD
charset[i++] = c++;
charset[i++] = 0x171f; // TAGALOG LETTER ARCHAIC RA
// 1720..173F; Hanunoo
c = 0x1720; // from HANUNOO LETTER A
while (c <= 0x1736) // ..to PHILIPPINE DOUBLE PUNCTUATION
@@ -634,9 +634,6 @@ void init()
charset[i++] = c++;
// 1800..18AF; Mongolian
c = 0x1800; // from MONGOLIAN BIRGA
while (c <= 0x180e) // ..to MONGOLIAN VOWEL SEPARATOR
charset[i++] = c++;
c = 0x1810; // from MONGOLIAN DIGIT ZERO
while (c <= 0x1819) // ..to MONGOLIAN DIGIT NINE
charset[i++] = c++;
c = 0x1820; // from MONGOLIAN LETTER A
@@ -709,14 +706,14 @@ void init()
charset[i++] = c++;
// 1AB0..1AFF; Combining Diacritical Marks Extended
c = 0x1ab0; // from COMBINING DOUBLED CIRCUMFLEX ACCENT
while (c <= 0x1ac0) // ..to COMBINING LATIN SMALL LETTER TURNED W BELOW
while (c <= 0x1ace) // ..to COMBINING LATIN SMALL LETTER INSULAR T
charset[i++] = c++;
// 1B00..1B7F; Balinese
c = 0x1b00; // from BALINESE SIGN ULU RICEM
while (c <= 0x1b4b) // ..to BALINESE LETTER ASYURA SASAK
while (c <= 0x1b4c) // ..to BALINESE LETTER ARCHAIC JNYA
charset[i++] = c++;
c = 0x1b50; // from BALINESE DIGIT ZERO
while (c <= 0x1b7c) // ..to BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
c = 0x1b4e; // from BALINESE INVERTED CARIK SIKI
while (c <= 0x1b7f) // ..to BALINESE PANTI BAWAK
charset[i++] = c++;
// 1B80..1BBF; Sundanese
c = 0x1b80; // from SUNDANESE SIGN PANYECEK
@@ -744,7 +741,7 @@ void init()
charset[i++] = c++;
// 1C80..1C8F; Cyrillic Extended-C
c = 0x1c80; // from CYRILLIC SMALL LETTER ROUNDED VE
while (c <= 0x1c88) // ..to CYRILLIC SMALL LETTER UNBLENDED UK
while (c <= 0x1c8a) // ..to CYRILLIC SMALL LETTER TJE
charset[i++] = c++;
// 1C90..1CBF; Georgian Extended
c = 0x1c90; // from GEORGIAN MTAVRULI CAPITAL LETTER AN
@@ -770,9 +767,6 @@ void init()
charset[i++] = c++;
// 1DC0..1DFF; Combining Diacritical Marks Supplement
c = 0x1dc0; // from COMBINING DOTTED GRAVE ACCENT
while (c <= 0x1df9) // ..to COMBINING WIDE INVERTED BRIDGE BELOW
charset[i++] = c++;
c = 0x1dfb; // from COMBINING DELETION MARK
while (c <= 0x1dff) // ..to COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
charset[i++] = c++;
// 1E00..1EFF; Latin Extended Additional
@@ -836,7 +830,7 @@ void init()
charset[i++] = c++;
// 20A0..20CF; Currency Symbols
c = 0x20a0; // from EURO-CURRENCY SIGN
while (c <= 0x20bf) // ..to BITCOIN SIGN
while (c <= 0x20c0) // ..to SOM SIGN
charset[i++] = c++;
// 20D0..20FF; Combining Diacritical Marks for Symbols
c = 0x20d0; // from COMBINING LEFT HARPOON ABOVE
@@ -864,7 +858,7 @@ void init()
charset[i++] = c++;
// 2400..243F; Control Pictures
c = 0x2400; // from SYMBOL FOR NULL
while (c <= 0x2426) // ..to SYMBOL FOR SUBSTITUTE FORM TWO
while (c <= 0x2429) // ..to SYMBOL FOR DELETE MEDIUM SHADE FORM
charset[i++] = c++;
// 2440..245F; Optical Character Recognition
c = 0x2440; // from OCR HOOK
@@ -930,10 +924,7 @@ void init()
charset[i++] = c++;
// 2C00..2C5F; Glagolitic
c = 0x2c00; // from GLAGOLITIC CAPITAL LETTER AZU
while (c <= 0x2c2e) // ..to GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
charset[i++] = c++;
c = 0x2c30; // from GLAGOLITIC SMALL LETTER AZU
while (c <= 0x2c5e) // ..to GLAGOLITIC SMALL LETTER LATINATE MYSLITE
while (c <= 0x2c5f) // ..to GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
charset[i++] = c++;
// 2C60..2C7F; Latin Extended-C
c = 0x2c60; // from LATIN CAPITAL LETTER L WITH DOUBLE BAR
@@ -994,7 +985,7 @@ void init()
charset[i++] = c++;
// 2E00..2E7F; Supplemental Punctuation
c = 0x2e00; // from RIGHT ANGLE SUBSTITUTION MARKER
while (c <= 0x2e52) // ..to TIRONIAN SIGN CAPITAL ET
while (c <= 0x2e5d) // ..to OBLIQUE HYPHEN
charset[i++] = c++;
// 2E80..2EFF; CJK Radicals Supplement
c = 0x2e80; // from CJK RADICAL REPEAT
@@ -1009,7 +1000,7 @@ void init()
charset[i++] = c++;
// 2FF0..2FFF; Ideographic Description Characters
c = 0x2ff0; // from IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
while (c <= 0x2ffb) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
while (c <= 0x2fff) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION
charset[i++] = c++;
// 3000..303F; CJK Symbols and Punctuation
c = 0x3000; // from IDEOGRAPHIC SPACE
@@ -1044,8 +1035,9 @@ void init()
charset[i++] = c++;
// 31C0..31EF; CJK Strokes
c = 0x31c0; // from CJK STROKE T
while (c <= 0x31e3) // ..to CJK STROKE Q
while (c <= 0x31e5) // ..to CJK STROKE SZP
charset[i++] = c++;
charset[i++] = 0x31ef; // IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION
// 31F0..31FF; Katakana Phonetic Extensions
c = 0x31f0; // from KATAKANA LETTER SMALL KU
while (c <= 0x31ff) // ..to KATAKANA LETTER SMALL RO
@@ -1071,7 +1063,7 @@ void init()
charset[i++] = c++;
// 4E00..9FFF; CJK Unified Ideographs
c = 0x4e00; // from <CJK Ideograph, First>
while (c <= 0x9ffc) // ..to <CJK Ideograph, Last>
while (c <= 0x9fff) // ..to <CJK Ideograph, Last>
charset[i++] = c++;
// A000..A48F; Yi Syllables
c = 0xa000; // from YI SYLLABLE IT
@@ -1103,12 +1095,14 @@ void init()
charset[i++] = c++;
// A720..A7FF; Latin Extended-D
c = 0xa720; // from MODIFIER LETTER STRESS AND HIGH TONE
while (c <= 0xa7bf) // ..to LATIN SMALL LETTER GLOTTAL U
while (c <= 0xa7cd) // ..to LATIN SMALL LETTER S WITH DIAGONAL STROKE
charset[i++] = c++;
c = 0xa7c2; // from LATIN CAPITAL LETTER ANGLICANA W
while (c <= 0xa7ca) // ..to LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
charset[i++] = 0xa7d0; // LATIN CAPITAL LETTER CLOSED INSULAR G
charset[i++] = 0xa7d1; // LATIN SMALL LETTER CLOSED INSULAR G
c = 0xa7d5; // from LATIN SMALL LETTER DOUBLE WYNN
while (c <= 0xa7dc) // ..to LATIN CAPITAL LETTER LAMBDA WITH STROKE
charset[i++] = c++;
c = 0xa7f5; // from LATIN CAPITAL LETTER REVERSED HALF H
c = 0xa7f2; // from MODIFIER LETTER CAPITAL C
while (c <= 0xa7ff) // ..to LATIN EPIGRAPHIC LETTER ARCHAIC M
charset[i++] = c++;
// A800..A82F; Syloti Nagri
@@ -1263,19 +1257,16 @@ void init()
charset[i++] = c++;
// FB50..FDFF; Arabic Presentation Forms-A
c = 0xfb50; // from ARABIC LETTER ALEF WASLA ISOLATED FORM
while (c <= 0xfbc1) // ..to ARABIC SYMBOL SMALL TAH BELOW
while (c <= 0xfbc2) // ..to ARABIC SYMBOL WASLA ABOVE
charset[i++] = c++;
c = 0xfbd3; // from ARABIC LETTER NG ISOLATED FORM
while (c <= 0xfd3f) // ..to ORNATE RIGHT PARENTHESIS
charset[i++] = c++;
c = 0xfd50; // from ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
while (c <= 0xfd8f) // ..to ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
charset[i++] = c++;
c = 0xfd92; // from ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
while (c <= 0xfdc7) // ..to ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
charset[i++] = c++;
c = 0xfdf0; // from ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
while (c <= 0xfdfd) // ..to ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
while (c <= 0xfdff) // ..to ARABIC LIGATURE AZZA WA JALL
charset[i++] = c++;
// FE00..FE0F; Variation Selectors
c = 0xfe00; // from VARIATION SELECTOR-1
@@ -1448,6 +1439,33 @@ void init()
while (c <= 0x10563) // ..to CAUCASIAN ALBANIAN LETTER KIW
charset[i++] = c++;
charset[i++] = 0x1056f; // CAUCASIAN ALBANIAN CITATION MARK
// 10570..105BF; Vithkuqi
c = 0x10570; // from VITHKUQI CAPITAL LETTER A
while (c <= 0x1057a) // ..to VITHKUQI CAPITAL LETTER GA
charset[i++] = c++;
c = 0x1057c; // from VITHKUQI CAPITAL LETTER HA
while (c <= 0x1058a) // ..to VITHKUQI CAPITAL LETTER RE
charset[i++] = c++;
c = 0x1058c; // from VITHKUQI CAPITAL LETTER SE
while (c <= 0x10592) // ..to VITHKUQI CAPITAL LETTER XE
charset[i++] = c++;
charset[i++] = 0x10594; // VITHKUQI CAPITAL LETTER Y
charset[i++] = 0x10595; // VITHKUQI CAPITAL LETTER ZE
c = 0x10597; // from VITHKUQI SMALL LETTER A
while (c <= 0x105a1) // ..to VITHKUQI SMALL LETTER GA
charset[i++] = c++;
c = 0x105a3; // from VITHKUQI SMALL LETTER HA
while (c <= 0x105b1) // ..to VITHKUQI SMALL LETTER RE
charset[i++] = c++;
c = 0x105b3; // from VITHKUQI SMALL LETTER SE
while (c <= 0x105b9) // ..to VITHKUQI SMALL LETTER XE
charset[i++] = c++;
charset[i++] = 0x105bb; // VITHKUQI SMALL LETTER Y
charset[i++] = 0x105bc; // VITHKUQI SMALL LETTER ZE
// 105C0..105FF; Todhri
c = 0x105c0; // from TODHRI LETTER A
while (c <= 0x105f3) // ..to TODHRI LETTER OO
charset[i++] = c++;
// 10600..1077F; Linear A
c = 0x10600; // from LINEAR A SIGN AB001
while (c <= 0x10736) // ..to LINEAR A SIGN A664
@@ -1458,6 +1476,16 @@ void init()
c = 0x10760; // from LINEAR A SIGN A800
while (c <= 0x10767) // ..to LINEAR A SIGN A807
charset[i++] = c++;
// 10780..107BF; Latin Extended-F
c = 0x10780; // from MODIFIER LETTER SMALL CAPITAL AA
while (c <= 0x10785) // ..to MODIFIER LETTER SMALL B WITH HOOK
charset[i++] = c++;
c = 0x10787; // from MODIFIER LETTER SMALL DZ DIGRAPH
while (c <= 0x107b0) // ..to MODIFIER LETTER SMALL V WITH RIGHT HOOK
charset[i++] = c++;
c = 0x107b2; // from MODIFIER LETTER SMALL CAPITAL Y
while (c <= 0x107ba) // ..to MODIFIER LETTER SMALL S WITH CURL
charset[i++] = c++;
// 10800..1083F; Cypriot Syllabary
c = 0x10800; // from CYPRIOT SYLLABLE A
while (c <= 0x10805) // ..to CYPRIOT SYLLABLE JA
@@ -1610,6 +1638,15 @@ void init()
c = 0x10d30; // from HANIFI ROHINGYA DIGIT ZERO
while (c <= 0x10d39) // ..to HANIFI ROHINGYA DIGIT NINE
charset[i++] = c++;
// 10D40..10D8F; Garay
c = 0x10d40; // from GARAY DIGIT ZERO
while (c <= 0x10d65) // ..to GARAY CAPITAL LETTER OLD NA
charset[i++] = c++;
c = 0x10d69; // from GARAY VOWEL SIGN E
while (c <= 0x10d85) // ..to GARAY SMALL LETTER OLD NA
charset[i++] = c++;
charset[i++] = 0x10d8e; // GARAY PLUS SIGN
charset[i++] = 0x10d8f; // GARAY MINUS SIGN
// 10E60..10E7F; Rumi Numeral Symbols
c = 0x10e60; // from RUMI DIGIT ONE
while (c <= 0x10e7e) // ..to RUMI FRACTION TWO THIRDS
@@ -1622,6 +1659,12 @@ void init()
charset[i++] = 0x10ead; // YEZIDI HYPHENATION MARK
charset[i++] = 0x10eb0; // YEZIDI LETTER LAM WITH DOT ABOVE
charset[i++] = 0x10eb1; // YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
// 10EC0..10EFF; Arabic Extended-C
charset[i++] = 0x10ec2; // ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW
charset[i++] = 0x10ec4; // ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW
c = 0x10efc; // from ARABIC COMBINING ALEF OVERLAY
while (c <= 0x10eff) // ..to ARABIC SMALL LOW WORD MADDA
charset[i++] = c++;
// 10F00..10F2F; Old Sogdian
c = 0x10f00; // from OLD SOGDIAN LETTER ALEPH
while (c <= 0x10f27) // ..to OLD SOGDIAN LIGATURE AYIN-DALETH
@@ -1630,6 +1673,10 @@ void init()
c = 0x10f30; // from SOGDIAN LETTER ALEPH
while (c <= 0x10f59) // ..to SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
charset[i++] = c++;
// 10F70..10FAF; Old Uyghur
c = 0x10f70; // from OLD UYGHUR LETTER ALEPH
while (c <= 0x10f89) // ..to OLD UYGHUR PUNCTUATION FOUR DOTS
charset[i++] = c++;
// 10FB0..10FDF; Chorasmian
c = 0x10fb0; // from CHORASMIAN LETTER ALEPH
while (c <= 0x10fcb) // ..to CHORASMIAN NUMBER ONE HUNDRED
@@ -1643,12 +1690,12 @@ void init()
while (c <= 0x1104d) // ..to BRAHMI PUNCTUATION LOTUS
charset[i++] = c++;
c = 0x11052; // from BRAHMI NUMBER ONE
while (c <= 0x1106f) // ..to BRAHMI DIGIT NINE
while (c <= 0x11075) // ..to BRAHMI LETTER OLD TAMIL LLA
charset[i++] = c++;
charset[i++] = 0x1107f; // BRAHMI NUMBER JOINER
// 11080..110CF; Kaithi
c = 0x11080; // from KAITHI SIGN CANDRABINDU
while (c <= 0x110c1) // ..to KAITHI DOUBLE DANDA
while (c <= 0x110c2) // ..to KAITHI VOWEL SIGN VOCALIC R
charset[i++] = c++;
charset[i++] = 0x110cd; // KAITHI NUMBER SIGN ABOVE
// 110D0..110FF; Sora Sompeng
@@ -1682,7 +1729,7 @@ void init()
while (c <= 0x11211) // ..to KHOJKI LETTER JJA
charset[i++] = c++;
c = 0x11213; // from KHOJKI LETTER NYA
while (c <= 0x1123e) // ..to KHOJKI SIGN SUKUN
while (c <= 0x11241) // ..to KHOJKI VOWEL SIGN VOCALIC R
charset[i++] = c++;
// 11280..112AF; Multani
c = 0x11280; // from MULTANI LETTER A
@@ -1740,6 +1787,26 @@ void init()
c = 0x11370; // from COMBINING GRANTHA LETTER A
while (c <= 0x11374) // ..to COMBINING GRANTHA LETTER PA
charset[i++] = c++;
// 11380..113FF; Tulu-Tigalari
c = 0x11380; // from TULU-TIGALARI LETTER A
while (c <= 0x11389) // ..to TULU-TIGALARI LETTER VOCALIC LL
charset[i++] = c++;
c = 0x11390; // from TULU-TIGALARI LETTER OO
while (c <= 0x113b5) // ..to TULU-TIGALARI LETTER LLLA
charset[i++] = c++;
c = 0x113b7; // from TULU-TIGALARI SIGN AVAGRAHA
while (c <= 0x113c0) // ..to TULU-TIGALARI VOWEL SIGN VOCALIC LL
charset[i++] = c++;
c = 0x113c7; // from TULU-TIGALARI VOWEL SIGN OO
while (c <= 0x113ca) // ..to TULU-TIGALARI SIGN CANDRA ANUNASIKA
charset[i++] = c++;
c = 0x113cc; // from TULU-TIGALARI SIGN ANUSVARA
while (c <= 0x113d5) // ..to TULU-TIGALARI DOUBLE DANDA
charset[i++] = c++;
charset[i++] = 0x113d7; // TULU-TIGALARI SIGN OM PUSHPIKA
charset[i++] = 0x113d8; // TULU-TIGALARI SIGN SHRII PUSHPIKA
charset[i++] = 0x113e1; // TULU-TIGALARI VEDIC TONE SVARITA
charset[i++] = 0x113e2; // TULU-TIGALARI VEDIC TONE ANUDATTA
// 11400..1147F; Newa
c = 0x11400; // from NEWA LETTER A
while (c <= 0x1145b) // ..to NEWA PLACEHOLDER MARK
@@ -1774,12 +1841,16 @@ void init()
charset[i++] = c++;
// 11680..116CF; Takri
c = 0x11680; // from TAKRI LETTER A
while (c <= 0x116b8) // ..to TAKRI LETTER ARCHAIC KHA
while (c <= 0x116b9) // ..to TAKRI ABBREVIATION SIGN
charset[i++] = c++;
c = 0x116c0; // from TAKRI DIGIT ZERO
while (c <= 0x116c9) // ..to TAKRI DIGIT NINE
charset[i++] = c++;
// 11700..1173F; Ahom
// 116D0..116FF; Myanmar Extended-C
c = 0x116d0; // from MYANMAR PAO DIGIT ZERO
while (c <= 0x116e3) // ..to MYANMAR EASTERN PWO KAREN DIGIT NINE
charset[i++] = c++;
// 11700..1174F; Ahom
c = 0x11700; // from AHOM LETTER KA
while (c <= 0x1171a) // ..to AHOM LETTER ALTERNATE BA
charset[i++] = c++;
@@ -1787,7 +1858,7 @@ void init()
while (c <= 0x1172b) // ..to AHOM SIGN KILLER
charset[i++] = c++;
c = 0x11730; // from AHOM DIGIT ZERO
while (c <= 0x1173f) // ..to AHOM SYMBOL VI
while (c <= 0x11746) // ..to AHOM LETTER LLA
charset[i++] = c++;
// 11800..1184F; Dogra
c = 0x11800; // from DOGRA LETTER A
@@ -1836,10 +1907,25 @@ void init()
c = 0x11a50; // from SOYOMBO LETTER A
while (c <= 0x11aa2) // ..to SOYOMBO TERMINAL MARK-2
charset[i++] = c++;
// 11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
c = 0x11ab0; // from CANADIAN SYLLABICS NATTILIK HI
while (c <= 0x11abf) // ..to CANADIAN SYLLABICS SPA
charset[i++] = c++;
// 11AC0..11AFF; Pau Cin Hau
c = 0x11ac0; // from PAU CIN HAU LETTER PA
while (c <= 0x11af8) // ..to PAU CIN HAU GLOTTAL STOP FINAL
charset[i++] = c++;
// 11B00..11B5F; Devanagari Extended-A
c = 0x11b00; // from DEVANAGARI HEAD MARK
while (c <= 0x11b09) // ..to DEVANAGARI SIGN MINDU
charset[i++] = c++;
// 11BC0..11BFF; Sunuwar
c = 0x11bc0; // from SUNUWAR LETTER DEVI
while (c <= 0x11be1) // ..to SUNUWAR SIGN PVO
charset[i++] = c++;
c = 0x11bf0; // from SUNUWAR DIGIT ZERO
while (c <= 0x11bf9) // ..to SUNUWAR DIGIT NINE
charset[i++] = c++;
// 11C00..11C6F; Bhaiksuki
c = 0x11c00; // from BHAIKSUKI LETTER A
while (c <= 0x11c08) // ..to BHAIKSUKI LETTER VOCALIC L
@@ -1901,6 +1987,16 @@ void init()
c = 0x11ee0; // from MAKASAR LETTER KA
while (c <= 0x11ef8) // ..to MAKASAR END OF SECTION
charset[i++] = c++;
// 11F00..11F5F; Kawi
c = 0x11f00; // from KAWI SIGN CANDRABINDU
while (c <= 0x11f10) // ..to KAWI LETTER O
charset[i++] = c++;
c = 0x11f12; // from KAWI LETTER KA
while (c <= 0x11f3a) // ..to KAWI VOWEL SIGN VOCALIC R
charset[i++] = c++;
c = 0x11f3e; // from KAWI VOWEL SIGN E
while (c <= 0x11f5a) // ..to KAWI SIGN NUKTA
charset[i++] = c++;
// 11FB0..11FBF; Lisu Supplement
charset[i++] = 0x11fb0; // LISU LETTER YHA
// 11FC0..11FFF; Tamil Supplement
@@ -1923,18 +2019,30 @@ void init()
c = 0x12480; // from CUNEIFORM SIGN AB TIMES NUN TENU
while (c <= 0x12543) // ..to CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
charset[i++] = c++;
// 12F90..12FFF; Cypro-Minoan
c = 0x12f90; // from CYPRO-MINOAN SIGN CM001
while (c <= 0x12ff2) // ..to CYPRO-MINOAN SIGN CM302
charset[i++] = c++;
// 13000..1342F; Egyptian Hieroglyphs
c = 0x13000; // from EGYPTIAN HIEROGLYPH A001
while (c <= 0x1342e) // ..to EGYPTIAN HIEROGLYPH AA032
while (c <= 0x1342f) // ..to EGYPTIAN HIEROGLYPH V011D
charset[i++] = c++;
// 13430..1343F; Egyptian Hieroglyph Format Controls
// 13430..1345F; Egyptian Hieroglyph Format Controls
c = 0x13430; // from EGYPTIAN HIEROGLYPH VERTICAL JOINER
while (c <= 0x13438) // ..to EGYPTIAN HIEROGLYPH END SEGMENT
while (c <= 0x13455) // ..to EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
charset[i++] = c++;
// 13460..143FF; Egyptian Hieroglyphs Extended-A
c = 0x13460; // from EGYPTIAN HIEROGLYPH-13460
while (c <= 0x143fa) // ..to EGYPTIAN HIEROGLYPH-143FA
charset[i++] = c++;
// 14400..1467F; Anatolian Hieroglyphs
c = 0x14400; // from ANATOLIAN HIEROGLYPH A001
while (c <= 0x14646) // ..to ANATOLIAN HIEROGLYPH A530
charset[i++] = c++;
// 16100..1613F; Gurung Khema
c = 0x16100; // from GURUNG KHEMA LETTER A
while (c <= 0x16139) // ..to GURUNG KHEMA DIGIT NINE
charset[i++] = c++;
// 16800..16A3F; Bamum Supplement
c = 0x16800; // from BAMUM LETTER PHASE-A NGKUE MFON
while (c <= 0x16a38) // ..to BAMUM LETTER PHASE-F VUEQ
@@ -1948,6 +2056,13 @@ void init()
charset[i++] = c++;
charset[i++] = 0x16a6e; // MRO DANDA
charset[i++] = 0x16a6f; // MRO DOUBLE DANDA
// 16A70..16ACF; Tangsa
c = 0x16a70; // from TANGSA LETTER OZ
while (c <= 0x16abe) // ..to TANGSA LETTER ZA
charset[i++] = c++;
c = 0x16ac0; // from TANGSA DIGIT ZERO
while (c <= 0x16ac9) // ..to TANGSA DIGIT NINE
charset[i++] = c++;
// 16AD0..16AFF; Bassa Vah
c = 0x16ad0; // from BASSA VAH LETTER ENNI
while (c <= 0x16aed) // ..to BASSA VAH LETTER I
@@ -1971,6 +2086,10 @@ void init()
c = 0x16b7d; // from PAHAWH HMONG CLAN SIGN TSHEEJ
while (c <= 0x16b8f) // ..to PAHAWH HMONG CLAN SIGN VWJ
charset[i++] = c++;
// 16D40..16D7F; Kirat Rai
c = 0x16d40; // from KIRAT RAI SIGN ANUSVARA
while (c <= 0x16d79) // ..to KIRAT RAI DIGIT NINE
charset[i++] = c++;
// 16E40..16E9F; Medefaidrin
c = 0x16e40; // from MEDEFAIDRIN CAPITAL LETTER M
while (c <= 0x16e9a) // ..to MEDEFAIDRIN EXCLAMATION OH
@@ -2003,17 +2122,27 @@ void init()
c = 0x18b00; // from KHITAN SMALL SCRIPT CHARACTER-18B00
while (c <= 0x18cd5) // ..to KHITAN SMALL SCRIPT CHARACTER-18CD5
charset[i++] = c++;
// 18D00..18D8F; Tangut Supplement
charset[i++] = 0x18cff; // KHITAN SMALL SCRIPT CHARACTER-18CFF
// 18D00..18D7F; Tangut Supplement
c = 0x18d00; // from <Tangut Ideograph Supplement, First>
while (c <= 0x18d08) // ..to <Tangut Ideograph Supplement, Last>
charset[i++] = c++;
// 1AFF0..1AFFF; Kana Extended-B
c = 0x1aff0; // from KATAKANA LETTER MINNAN TONE-2
while (c <= 0x1aff3) // ..to KATAKANA LETTER MINNAN TONE-5
charset[i++] = c++;
c = 0x1aff5; // from KATAKANA LETTER MINNAN TONE-7
while (c <= 0x1affb) // ..to KATAKANA LETTER MINNAN NASALIZED TONE-5
charset[i++] = c++;
charset[i++] = 0x1affd; // KATAKANA LETTER MINNAN NASALIZED TONE-7
charset[i++] = 0x1affe; // KATAKANA LETTER MINNAN NASALIZED TONE-8
// 1B000..1B0FF; Kana Supplement
c = 0x1b000; // from KATAKANA LETTER ARCHAIC E
while (c <= 0x1b0ff) // ..to HENTAIGANA LETTER RE-2
charset[i++] = c++;
// 1B100..1B12F; Kana Extended-A
c = 0x1b100; // from HENTAIGANA LETTER RE-3
while (c <= 0x1b11e) // ..to HENTAIGANA LETTER N-MU-MO-2
while (c <= 0x1b122) // ..to KATAKANA LETTER ARCHAIC WU
charset[i++] = c++;
// 1B130..1B16F; Small Kana Extension
charset[i++] = 0x1b150; // HIRAGANA LETTER SMALL WI
@@ -2045,6 +2174,23 @@ void init()
c = 0x1bca0; // from SHORTHAND FORMAT LETTER OVERLAP
while (c <= 0x1bca3) // ..to SHORTHAND FORMAT UP STEP
charset[i++] = c++;
// 1CC00..1CEBF; Symbols for Legacy Computing Supplement
c = 0x1cc00; // from UP-POINTING GO-KART
while (c <= 0x1ccf9) // ..to OUTLINED DIGIT NINE
charset[i++] = c++;
c = 0x1cd00; // from BLOCK OCTANT-3
while (c <= 0x1ceb3) // ..to BLACK RIGHT TRIANGLE CARET
charset[i++] = c++;
// 1CF00..1CFCF; Znamenny Musical Notation
c = 0x1cf00; // from ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT
while (c <= 0x1cf2d) // ..to ZNAMENNY COMBINING MARK KRYZH ON LEFT
charset[i++] = c++;
c = 0x1cf30; // from ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO
while (c <= 0x1cf46) // ..to ZNAMENNY PRIZNAK MODIFIER ROG
charset[i++] = c++;
c = 0x1cf50; // from ZNAMENNY NEUME KRYUK
while (c <= 0x1cfc3) // ..to ZNAMENNY NEUME PAUK
charset[i++] = c++;
// 1D000..1D0FF; Byzantine Musical Symbols
c = 0x1d000; // from BYZANTINE MUSICAL SYMBOL PSILI
while (c <= 0x1d0f5) // ..to BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
@@ -2054,12 +2200,16 @@ void init()
while (c <= 0x1d126) // ..to MUSICAL SYMBOL DRUM CLEF-2
charset[i++] = c++;
c = 0x1d129; // from MUSICAL SYMBOL MULTIPLE MEASURE REST
while (c <= 0x1d1e8) // ..to MUSICAL SYMBOL KIEVAN FLAT SIGN
while (c <= 0x1d1ea) // ..to MUSICAL SYMBOL KORON
charset[i++] = c++;
// 1D200..1D24F; Ancient Greek Musical Notation
c = 0x1d200; // from GREEK VOCAL NOTATION SYMBOL-1
while (c <= 0x1d245) // ..to GREEK MUSICAL LEIMMA
charset[i++] = c++;
// 1D2C0..1D2DF; Kaktovik Numerals
c = 0x1d2c0; // from KAKTOVIK NUMERAL ZERO
while (c <= 0x1d2d3) // ..to KAKTOVIK NUMERAL NINETEEN
charset[i++] = c++;
// 1D2E0..1D2FF; Mayan Numerals
c = 0x1d2e0; // from MAYAN NUMERAL ZERO
while (c <= 0x1d2f3) // ..to MAYAN NUMERAL NINETEEN
@@ -2135,6 +2285,13 @@ void init()
c = 0x1daa1; // from SIGNWRITING ROTATION MODIFIER-2
while (c <= 0x1daaf) // ..to SIGNWRITING ROTATION MODIFIER-16
charset[i++] = c++;
// 1DF00..1DFFF; Latin Extended-G
c = 0x1df00; // from LATIN SMALL LETTER FENG DIGRAPH WITH TRILL
while (c <= 0x1df1e) // ..to LATIN SMALL LETTER S WITH CURL
charset[i++] = c++;
c = 0x1df25; // from LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK
while (c <= 0x1df2a) // ..to LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK
charset[i++] = c++;
// 1E000..1E02F; Glagolitic Supplement
c = 0x1e000; // from COMBINING GLAGOLITIC LETTER AZU
while (c <= 0x1e006) // ..to COMBINING GLAGOLITIC LETTER ZHIVETE
@@ -2150,6 +2307,11 @@ void init()
c = 0x1e026; // from COMBINING GLAGOLITIC LETTER YO
while (c <= 0x1e02a) // ..to COMBINING GLAGOLITIC LETTER FITA
charset[i++] = c++;
// 1E030..1E08F; Cyrillic Extended-D
c = 0x1e030; // from MODIFIER LETTER CYRILLIC SMALL A
while (c <= 0x1e06d) // ..to MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
charset[i++] = c++;
charset[i++] = 0x1e08f; // COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
// 1E100..1E14F; Nyiakeng Puachue Hmong
c = 0x1e100; // from NYIAKENG PUACHUE HMONG LETTER MA
while (c <= 0x1e12c) // ..to NYIAKENG PUACHUE HMONG LETTER W
@@ -2162,11 +2324,36 @@ void init()
charset[i++] = c++;
charset[i++] = 0x1e14e; // NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
charset[i++] = 0x1e14f; // NYIAKENG PUACHUE HMONG CIRCLED CA
// 1E290..1E2BF; Toto
c = 0x1e290; // from TOTO LETTER PA
while (c <= 0x1e2ae) // ..to TOTO SIGN RISING TONE
charset[i++] = c++;
// 1E2C0..1E2FF; Wancho
c = 0x1e2c0; // from WANCHO LETTER AA
while (c <= 0x1e2f9) // ..to WANCHO DIGIT NINE
charset[i++] = c++;
charset[i++] = 0x1e2ff; // WANCHO NGUN SIGN
// 1E4D0..1E4FF; Nag Mundari
c = 0x1e4d0; // from NAG MUNDARI LETTER O
while (c <= 0x1e4f9) // ..to NAG MUNDARI DIGIT NINE
charset[i++] = c++;
// 1E5D0..1E5FF; Ol Onal
c = 0x1e5d0; // from OL ONAL LETTER O
while (c <= 0x1e5fa) // ..to OL ONAL DIGIT NINE
charset[i++] = c++;
charset[i++] = 0x1e5ff; // OL ONAL ABBREVIATION SIGN
// 1E7E0..1E7FF; Ethiopic Extended-B
c = 0x1e7e0; // from ETHIOPIC SYLLABLE HHYA
while (c <= 0x1e7e6) // ..to ETHIOPIC SYLLABLE HHYO
charset[i++] = c++;
c = 0x1e7e8; // from ETHIOPIC SYLLABLE GURAGE HHWA
while (c <= 0x1e7eb) // ..to ETHIOPIC SYLLABLE HHWE
charset[i++] = c++;
charset[i++] = 0x1e7ed; // ETHIOPIC SYLLABLE GURAGE MWI
charset[i++] = 0x1e7ee; // ETHIOPIC SYLLABLE GURAGE MWEE
c = 0x1e7f0; // from ETHIOPIC SYLLABLE GURAGE QWI
while (c <= 0x1e7fe) // ..to ETHIOPIC SYLLABLE GURAGE PWEE
charset[i++] = c++;
// 1E800..1E8DF; Mende Kikakui
c = 0x1e800; // from MENDE KIKAKUI SYLLABLE M001 KI
while (c <= 0x1e8c4) // ..to MENDE KIKAKUI SYLLABLE M060 NYON
@@ -2298,7 +2485,7 @@ void init()
c = 0x1f680; // from ROCKET
while (c <= 0x1f6d7) // ..to ELEVATOR
charset[i++] = c++;
c = 0x1f6e0; // from HAMMER AND WRENCH
c = 0x1f6dc; // from WIRELESS
while (c <= 0x1f6ec) // ..to AIRPLANE ARRIVING
charset[i++] = c++;
c = 0x1f6f0; // from SATELLITE
@@ -2306,15 +2493,19 @@ void init()
charset[i++] = c++;
// 1F700..1F77F; Alchemical Symbols
c = 0x1f700; // from ALCHEMICAL SYMBOL FOR QUINTESSENCE
while (c <= 0x1f773) // ..to ALCHEMICAL SYMBOL FOR HALF OUNCE
while (c <= 0x1f776) // ..to LUNAR ECLIPSE
charset[i++] = c++;
c = 0x1f77b; // from HAUMEA
while (c <= 0x1f77f) // ..to ORCUS
charset[i++] = c++;
// 1F780..1F7FF; Geometric Shapes Extended
c = 0x1f780; // from BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE
while (c <= 0x1f7d8) // ..to NEGATIVE CIRCLED SQUARE
while (c <= 0x1f7d9) // ..to NINE POINTED WHITE STAR
charset[i++] = c++;
c = 0x1f7e0; // from LARGE ORANGE CIRCLE
while (c <= 0x1f7eb) // ..to LARGE BROWN SQUARE
charset[i++] = c++;
charset[i++] = 0x1f7f0; // HEAVY EQUALS SIGN
// 1F800..1F8FF; Supplemental Arrows-C
c = 0x1f800; // from LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
while (c <= 0x1f80b) // ..to DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
@@ -2331,16 +2522,13 @@ void init()
c = 0x1f890; // from LEFTWARDS TRIANGLE ARROWHEAD
while (c <= 0x1f8ad) // ..to WHITE ARROW SHAFT WIDTH TWO THIRDS
charset[i++] = c++;
charset[i++] = 0x1f8b0; // ARROW POINTING UPWARDS THEN NORTH WEST
charset[i++] = 0x1f8b1; // ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
c = 0x1f8b0; // from ARROW POINTING UPWARDS THEN NORTH WEST
while (c <= 0x1f8bb) // ..to SOUTH WEST ARROW FROM BAR
charset[i++] = c++;
charset[i++] = 0x1f8c0; // LEFTWARDS ARROW FROM DOWNWARDS ARROW
charset[i++] = 0x1f8c1; // RIGHTWARDS ARROW FROM DOWNWARDS ARROW
// 1F900..1F9FF; Supplemental Symbols and Pictographs
c = 0x1f900; // from CIRCLED CROSS FORMEE WITH FOUR DOTS
while (c <= 0x1f978) // ..to DISGUISED FACE
charset[i++] = c++;
c = 0x1f97a; // from FACE WITH PLEADING EYES
while (c <= 0x1f9cb) // ..to BUBBLE TEA
charset[i++] = c++;
c = 0x1f9cd; // from STANDING PERSON
while (c <= 0x1f9ff) // ..to NAZAR AMULET
charset[i++] = c++;
// 1FA00..1FA6F; Chess Symbols
@@ -2352,41 +2540,37 @@ void init()
charset[i++] = c++;
// 1FA70..1FAFF; Symbols and Pictographs Extended-A
c = 0x1fa70; // from BALLET SHOES
while (c <= 0x1fa74) // ..to THONG SANDAL
while (c <= 0x1fa7c) // ..to CRUTCH
charset[i++] = c++;
charset[i++] = 0x1fa78; // DROP OF BLOOD
charset[i++] = 0x1fa7a; // STETHOSCOPE
c = 0x1fa80; // from YO-YO
while (c <= 0x1fa86) // ..to NESTING DOLLS
while (c <= 0x1fa89) // ..to HARP
charset[i++] = c++;
c = 0x1fa90; // from RINGED PLANET
while (c <= 0x1faa8) // ..to ROCK
c = 0x1fa8f; // from SHOVEL
while (c <= 0x1fac6) // ..to FINGERPRINT
charset[i++] = c++;
c = 0x1fab0; // from FLY
while (c <= 0x1fab6) // ..to FEATHER
c = 0x1face; // from MOOSE
while (c <= 0x1fadc) // ..to ROOT VEGETABLE
charset[i++] = c++;
charset[i++] = 0x1fac0; // ANATOMICAL HEART
charset[i++] = 0x1fac2; // PEOPLE HUGGING
c = 0x1fad0; // from BLUEBERRIES
while (c <= 0x1fad6) // ..to TEAPOT
c = 0x1fadf; // from SPLATTER
while (c <= 0x1fae9) // ..to FACE WITH BAGS UNDER EYES
charset[i++] = c++;
c = 0x1faf0; // from HAND WITH INDEX FINGER AND THUMB CROSSED
while (c <= 0x1faf8) // ..to RIGHTWARDS PUSHING HAND
charset[i++] = c++;
// 1FB00..1FBFF; Symbols for Legacy Computing
c = 0x1fb00; // from BLOCK SEXTANT-1
while (c <= 0x1fb92) // ..to UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
charset[i++] = c++;
c = 0x1fb94; // from LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK
while (c <= 0x1fbca) // ..to WHITE UP-POINTING CHEVRON
charset[i++] = c++;
c = 0x1fbf0; // from SEGMENTED DIGIT ZERO
while (c <= 0x1fbf9) // ..to SEGMENTED DIGIT NINE
charset[i++] = c++;
// 20000..2A6DF; CJK Unified Ideographs Extension B
c = 0x20000; // from <CJK Ideograph Extension B, First>
while (c <= 0x2a6dd) // ..to <CJK Ideograph Extension B, Last>
while (c <= 0x2a6df) // ..to <CJK Ideograph Extension B, Last>
charset[i++] = c++;
// 2A700..2B73F; CJK Unified Ideographs Extension C
c = 0x2a700; // from <CJK Ideograph Extension C, First>
while (c <= 0x2b734) // ..to <CJK Ideograph Extension C, Last>
while (c <= 0x2b739) // ..to <CJK Ideograph Extension C, Last>
charset[i++] = c++;
// 2B740..2B81F; CJK Unified Ideographs Extension D
c = 0x2b740; // from <CJK Ideograph Extension D, First>
@@ -2400,6 +2584,10 @@ void init()
c = 0x2ceb0; // from <CJK Ideograph Extension F, First>
while (c <= 0x2ebe0) // ..to <CJK Ideograph Extension F, Last>
charset[i++] = c++;
// 2EBF0..2EE5F; CJK Unified Ideographs Extension I
c = 0x2ebf0; // from <CJK Ideograph Extension I, First>
while (c <= 0x2ee5d) // ..to <CJK Ideograph Extension I, Last>
charset[i++] = c++;
// 2F800..2FA1F; CJK Compatibility Ideographs Supplement
c = 0x2f800; // from CJK COMPATIBILITY IDEOGRAPH-2F800
while (c <= 0x2fa1d) // ..to CJK COMPATIBILITY IDEOGRAPH-2FA1D
@@ -2408,6 +2596,10 @@ void init()
c = 0x30000; // from <CJK Ideograph Extension G, First>
while (c <= 0x3134a) // ..to <CJK Ideograph Extension G, Last>
charset[i++] = c++;
// 31350..323AF; CJK Unified Ideographs Extension H
c = 0x31350; // from <CJK Ideograph Extension H, First>
while (c <= 0x323af) // ..to <CJK Ideograph Extension H, Last>
charset[i++] = c++;
// E0000..E007F; Tags
c = 0xe0020; // from TAG SPACE
while (c <= 0xe007f) // ..to CANCEL TAG
+1 -1
View File
@@ -466,7 +466,7 @@ Test=$dynamic_1014$e463b65f14643afd970c7ea7e7efeb0f$1234567890123456789012345678
####################################################################
# Dynamic type for md5(md5($p.$u).$s) for PostgreSQL 'pass the hash' weakness
# See also dynamic_1034 for PostgreSQL MD5
# http://www.openwall.com/lists/oss-security/2015/03/03/12
# https://www.openwall.com/lists/oss-security/2015/03/03/12
####################################################################
[List.Generic:dynamic_1015]
Expression=md5(md5($p.$u).$s) (PostgreSQL 'pass the hash')
+447 -191
View File
@@ -1,6 +1,6 @@
#
# This file is part of John the Ripper password cracker,
# Copyright (c) 1996-2006,2008-2013,2019 by Solar Designer
# Copyright (c) 1996-2025 by Solar Designer and others
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
@@ -11,8 +11,6 @@
# license above, many source files in John the Ripper are under GPLv2.
# For licensing terms for John the Ripper as a whole, see doc/LICENSE.
#
# ...with changes in the jumbo patch, by various authors
#
# The [Options] section is for general options only.
# Note that MPI specific options have been moved
@@ -108,23 +106,35 @@ LogDateStderrFormat =
# parsed as ESC for use in ANSI codes (like in the default)
TerminalReset = ^[0m
# If this is true, colorize some messages - such as test failures - if stdout
# is a terminal.
# The color codes can be redefined here if needed. The ^ character will be
# parsed as ESC for use in ANSI escape sequences (like in the defaults here,
# which define red for errors, green for notices and yellow for warnings).
# Note that you don't strictly need to use ANSI sequences - other things are
# fine too.
# Set this to N or comment it out to disable all color stuff.
UseColors = Y
ColorError = ^[0;31m
ColorNotice = ^[0;32m
ColorWarning = ^[0;33m
ColorEnd = ^[0m
# This can be used to colorize (on screen) or otherwise emphasize (in log
# files) output whenever a supposed administrator password gets cracked.
# files or if stdout is not a terminal) output whenever a supposed
# administrator password, or some other password, gets cracked.
#
# The colors used will be yellow for regular cracks and red for users that we
# know or guess are admin users (including but not limited to uid 0 or 500,
# or login 'root' or 'Administrator').
#
# Set this to N or comment it out to disable all "MarkAdmin" stuff.
MarkAdminCracks = Y
ColorAdmin = ^[0;31m
ColorCrack = ^[0;33m
# If MarkAdminCracks = Y above, the below will be used (if defined) for
# terminal output. The default is to change color to red before the username
# and reset to normal after it. Any "^" characters will be parsed as ESC for
# use in ANSI codes (like in the defaults).
# The "MarkOther" entries will make non-admin stuff brown.
MarkAdminStart = ^[0;31m
MarkAdminEnd = ^[0m
MarkOtherStart = ^[0;33m
MarkOtherEnd = ^[0m
# If MarkAdminCracks = Y above, the below will be used (if defined) for logs.
# If MarkAdminCracks = Y above, the below will be used (if defined) for logs
# or otherwise where stdout is not a terminal.
# This literal string will be printed after the " + Cracked: root" line.
MarkAdminString = (ADMIN ACCOUNT)
@@ -173,7 +183,7 @@ SingleWordsPairMax = 6
# Setting this to false stops Single mode from re-testing guessed plaintexts
# with all other salts. This is deprecated: Use command-line per-session
# option --single-retest-guess=no instead.
# option --no-single-retest-guess instead.
SingleRetestGuessed = Y
# Max recursion depth for SingleRetestGuessed, so we don't blow the stack
@@ -239,8 +249,22 @@ ShowRemainOnStatus = N
# Write cracked passwords to the log file (default is just the user name)
LogCrackedPasswords = N
# Log per-rule statistics usable to generate re-ordered rule set with:
# cut -c14- john.log | grep '^Score ' | sort -rnk 2 | cut -d: -f2- | sed 's/\\/\\\\/g; s/\[/\\[/g; s/^-: //'
# or for use on the slowest hashes:
# cut -c14- john.log | grep '^Score ' | sort -nk 4 | cut -d: -f2- | sed 's/\\/\\\\/g; s/\[/\\[/g; s/^-: //'
# The "sed" invocation in these commands is to make the pre-processed rules
# suitable for our rule preprocessor again. It should be omitted for
# re-ordering hashcat mode rule sets, because that mode disables the
# preprocessor. And yes, you cannot use these commands for re-ordering mixed
# JtR native and hashcat mode rule sets, such as our Jumbo rule set, which
# currently includes hashcat's best64. That's not only because of the
# preprocessor, but also because hashcat mode on/off would get misplaced.
# Please note that enabling this option has some performance impact.
PerRuleStats = N
# Disable the dupe checking when loading hashes. For testing purposes only!
# This is deprecated: Use per-session option --loader-dupecheck=no instead.
# This is deprecated: Use per-session option --no-loader-dupe-check instead.
NoLoaderDupeCheck = N
# Default encoding for input files (ie. login/GECOS fields) and wordlists
@@ -350,6 +374,17 @@ AbortGraceTime = 30
# This may produce some false positives if enabled, at least for SAP-B.
SAPhalfHashes = N
# Opportunistic duplicate candidate password suppressor for wordlist+rules
[Options:Suppressor]
# Memory allocation size in MiB per process, 0 to disable unless forced.
# The default is 256 MiB, the maximum is just below 256 GiB (on 64-bit).
Size = 256
# Whether to lock the oldest half of entries as write-once (and only ever
# update the other half). Empirically, this often provides best results,
# but it can also backfire. The default is yes.
LockHalf = Y
[Options:CPUtune]
# If preset is given, use it and skip autotune (NOTE: non-intel archs will
# currently ignore this option and always autotune)
@@ -395,7 +430,22 @@ AbortTemperature = 95
# interpret as intent to keep the GPU temperature around the limit.
SleepOnTemperature = 1
# Enable a workaround for busy-waits, introducing calls to usleep(3). This
# currently only applies to some formats on NVIDIA GPUs under Linux.
AvoidBusyWait = Y
[Options:OpenCL]
# Mute buggy nvidia warnings about kernel overriding noinline
# attribute. Even with this set, they will show at "debug verbosity"
# as in --verbose:6.
MuteBogusWarnings = Y
# Add ptxas info (-cl-nv-verbose) to build options for nvidia
NvidiaShowPtxas = Y
# Show runtime build warnings regardless of verbosity.
AlwaysShowBuildWarnings = N
# Set default OpenCL device(s). Command line option will override this.
# If not set, we will search for a GPU or fall-back to the most
# powerful device. Syntax is same as --device option.
@@ -722,7 +772,6 @@ DefaultCharset =
-c /?d @?d >3 M [lc] Q Az"123" <+
/?d @?d >2 al d
-c /?d @?d >2 al M [lc] Q d
(?a )?d /?d a0 'p Xpz0
)?a (?d /?a a0 'p Xpz0
# "Single crack" mode rules
@@ -730,11 +779,17 @@ DefaultCharset =
# Simple rules come first...
:
-s x**
<* $1
-c (?a c Q
-c l Q
(?a )?d /?d a0 'p Xpz0
<* $[230754968]
-c [lu] Q
-s-c x** /?u l
# These were not included in crackers I've seen, but are pretty efficient,
# so I include them near the beginning
Az"123" <+
r c
-c )?a r l
<* $!
<* p
-<6 >6 '6
-<7 >7 '7 l
-<6 -c >6 '6 /?u l
@@ -746,12 +801,9 @@ DefaultCharset =
# Weird order, eh? Can't do anything about it, the order is based on the
# number of successful cracks...
<* d
r c
-c <* (?a d c
-<5 -c >5 '5 /?u l
-c u Q
-c )?a r l
-[:c] <* !?A \p1[lc] p
-c <* [lc] Q p
-c <* c Q d
-<7 -c >7 '7 /?u
-<4 >4 '4 l
@@ -779,51 +831,49 @@ r c
# >4 x32 /?u l ... >9 x37 /?u l
-c >[4-9] x3\p[2-7] /?u l
# Now to the suffix stuff...
<* l $[1-9!0a-rt-z"-/:-@\[-`{-~]
-c <* (?a c $[1-9!0a-rt-z"-/:-@\[-`{-~]
-[:c] <* !?A (?\p1[za] \p1[lc] $s M 'l p Q X0z0 'l $s
-[:c] <* /?A (?\p1[za] \p1[lc] $s
<* l r $[1-9!]
-c <* /?a u $[1-9!]
-[:c] <- (?\p1[za] \p1[lc] Az"'s"
-[:c] <- (?\p1[za] \p1[lc] Az"!!"
-[:c] (?\p1[za] \p1[lc] $! <- Az"!!"
-c <* [lc] Q $[1230754968!]
-\r[:cc] <* \p1[:lc] \r\p1[:QQ] $[a-rt-z"-/:-@\[-`{-~]
-[:c] <* (?\p1[za] \p1[lc] $s M 'l p Q X0z0 'l $s
<* l r $[1230754968!]
-c <* /?a u $[1230754968!]
-\r[:cc] <- \p1[:lc] \r\p1[:QQ] Az"'s"
-\r[:cc] <- \p1[:lc] \r\p1[:QQ] Az"!!"
-\r[:cc] <- \p1[:lc] \r\p1[:QQ] $! <- Az"!!"
# Removing vowels...
-[:c] /?v @?v >2 (?\p1[za] \p1[lc]
-\r[:cc] /?v @?v >2 M \p1[:lc] \r\p1[:QQ]
/?v @?v >2 <* d
# crack -> cracked, crack -> cracking
<* l [PI]
-c <* l [PI] (?a c
-\r[:cc] <* \p1[:lc] \r\p1[:QQ] [PI]
# mary -> marie
-[:c] <* (?\p1[za] \p1[lc] )y omi $e
-\r[:cc] <* \p1[:lc] \r\p1[:QQ] )y omi $e
# marie -> mary
-[:c] (?\p1[za] \p1[lc] )e \] <+ )i val1 oay
-\r[:cc] <* \p1[:lc] \r\p1[:QQ] )e \] <+ )i val1 oay
# The following are some 3l33t rules
-[:c] l /[aelos] s\0\p[4310$] (?\p1[za] \p1[:c]
-[:c] l /a /[elos] sa4 s\0\p[310$] (?\p1[za] \p1[:c]
-[:c] l /e /[los] se3 s\0\p[10$] (?\p1[za] \p1[:c]
-[:c] l /l /[os] sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-[:c] l /o /s so0 ss$ (?\p1[za] \p1[:c]
-[:c] l /a /e /[los] sa4 se3 s\0\p[10$] (?\p1[za] \p1[:c]
-[:c] l /a /l /[os] sa4 sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-[:c] l /a /o /s sa4 so0 ss$ (?\p1[za] \p1[:c]
-[:c] l /e /l /[os] se3 sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-[:c] l /[el] /o /s s\0\p[31] so0 ss$ (?\p1[za] \p1[:c]
-[:c] l /a /e /l /[os] sa4 se3 sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-[:c] l /a /[el] /o /s sa4 s\0\p[31] so0 ss$ (?\p1[za] \p1[:c]
-[:c] l /e /l /o /s se3 sl1 so0 ss$ (?\p1[za] \p1[:c]
-[:c] l /a /e /l /o /s sa4 se3 sl1 so0 ss$ (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /[aelos] s\0\p[4310$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /[elos] sa4 s\0\p[310$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /e /[los] se3 s\0\p[10$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /l /[os] sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /o /s so0 ss$ (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /e /[los] sa4 se3 s\0\p[10$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /l /[os] sa4 sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /o /s sa4 so0 ss$ (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /e /l /[os] se3 sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /[el] /o /s s\0\p[31] so0 ss$ (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /e /l /[os] sa4 se3 sl1 s\0\p[0$] (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /[el] /o /s sa4 s\0\p[31] so0 ss$ (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /e /l /o /s se3 sl1 so0 ss$ (?\p1[za] \p1[:c]
-\r[:cc] \p1[:lc] \r\p1[:QQ] /a /e /l /o /s sa4 se3 sl1 so0 ss$ (?\p1[za] \p1[:c]
# Now to the prefix stuff...
l ^[1a-z2-90]
-c l Q ^[A-Z]
^[A-Z]
l ^["-/:-@\[-`{-~]
-[:c] <9 (?a \p1[lc] A0"[tT]he"
-[:c] <9 (?a \p1[lc] A0"[aA]my"
-[:c] <9 (?a \p1[lc] A0"[mdMD]r"
-[:c] <9 (?a \p1[lc] A0"[mdMD]r."
-[:c] <9 (?a \p1[lc] A0"__"
<- !?A l p ^[240-9]
-[:c] <9 (?\p1[za] \p1[lc] A0"[tT]he"
-[:c] <9 (?\p1[za] \p1[lc] A0"[aA]my"
-[:c] <9 (?\p1[za] \p1[lc] A0"[mdMD]r"
-[:c] <9 (?\p1[za] \p1[lc] A0"[mdMD]r."
-[:c] <9 (?\p1[za] \p1[lc] A0"__"
<- l p ^[240-9]
# Some word pair rules...
# johnsmith -> JohnSmith, johnSmith
-p-c (?a 2 (?a c 1 [cl]
@@ -841,8 +891,8 @@ l ^["-/:-@\[-`{-~]
-p-[c:] 1 l 2 \p1[ur]
-p-c 1 (?a c 2 [ur]
# jsmith -> smithj, etc...
-[:c] (?a \p1[lc] [{}]
-[:c] (?a \p1[lc] [{}] \0
-\r[:cc] \p1[:lc] \r\p1[:QQ] [{}]
-\r[:cc] \p1[:lc] \r\p1[:QQ] [{}] \0
# Toggle case...
-c <+ )?u l Tm
-c T0 Q M c Q l Q u Q C Q X0z0 'l
@@ -858,14 +908,11 @@ l ^["-/:-@\[-`{-~]
=1?a \[ M c Q
-c (?a >[1-9A-E] D\1 c
# Inserting a dot...
-[:c] >3 (?a \p1[lc] i[12].
-\r[:cc] >3 \p1[:lc] \r\p1[:QQ] i[12].
# More suffix stuff...
<- l Az"[190][0-9]"
-c <- (?a c Az"[190][0-9]"
<- l Az"[782][0-9]"
-c <- (?a c Az"[782][0-9]"
<* l $[A-Z]
-c <* (?a c $[A-Z]
-\r[:cc] <- \p1[:lc] \r\p1[:QQ] Az"[190][0-9]"
-\r[:cc] <- \p1[:lc] \r\p1[:QQ] Az"[782][0-9]"
-\r[:cc] <* \p1[:lc] \r\p1[:QQ] $[A-Z]
# cracking -> CRACKiNG
-c u /I sIi
# Crack96 -> cRACK96
@@ -880,33 +927,32 @@ l Q [RL]
-c (?a c Q [RL]
:[RL] \0 Q
# Both prefixing and suffixing...
<- l ^[1!@#$%^&*\-=_+.?|:'"] $\1
<- l ^[10-9!@#$%^&*\-=_+.?|:'"] $\0
<- l ^[({[<] $\p[)}\]>]
# The rest of two-digit suffix stuff, less common numbers...
<- l Az"[63-5][0-9]"
-c <- (?a c Az"[63-5][0-9]"
-\r[:cc] <- \p1[:lc] \r\p1[:QQ] Az"[63-5][0-9]"
# Some multi-digit numbers...
-[:c] (?a \p1[lc] Az"007" <+
-[:c] (?a \p1[lc] Az"123" <+
-[:c] (?a \p1[lc] Az"[0-9]\0\0" <+
-[:c] (?a \p1[lc] Az"1234" <+
-[:c] (?a \p1[lc] Az"[0-9]\0\0\0" <+
-[:c] (?a \p1[lc] Az"12345" <+
-[:c] (?a \p1[lc] Az"[0-9]\0\0\0\0" <+
-[:c] (?a \p1[lc] Az"123456" <+
-[:c] (?a \p1[lc] Az"[0-9]\0\0\0\0\0" <+
-c [lc] Q Az"123" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"007" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"[0-9]\0\0" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"1234" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"[0-9]\0\0\0" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"12345" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"[0-9]\0\0\0\0" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"123456" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"[0-9]\0\0\0\0\0" <+
# Some [birth] years...
l Az"19[7-96-0]" <+ >-
l Az"20[012]" <+ >-
l Az"19[7-9][0-9]" <+
l Az"20[012][0-9]" <+
l Az"19[6-0][9-0]" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"19[7-96-0]" <+ >-
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"20[012]" <+ >-
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"19[7-9][0-9]" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"20[012][0-9]" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"19[6-0][9-0]" <+
[List.Rules:Extra]
# Insert/overstrike some characters...
!?A >[1-6] l i\0[a-z]
!?A l o0[a-z]
!?A >[1-7] l o\0[a-z]
# Overstrike/insert some characters...
o0[a-z10-9A-Z] Q
>[1-7] o\0[a-z10-9_@.\-#!] Q
>[1-6] i\0[a-z10-9_@.\-# ]
# Toggle case everywhere (up to length 8), assuming that certain case
# combinations were already tried.
-c T1 Q M T0 Q
@@ -917,13 +963,20 @@ l Az"19[6-0][9-0]" <+
-c T6 Q M T[z0] T[z1] T[z2] T[z3] T[z4] T[z5] Q
-c T7 Q M T[z0] T[z1] T[z2] T[z3] T[z4] T[z5] T[z6] Q
# Very slow stuff...
l Az"[1-90][0-9][0-9]" <+
-c (?a c Az"[1-90][0-9][0-9]" <+
-\r[:cc] \p1[:lc] \r\p1[:QQ] Az"[1-90][0-9][0-9]" <+
<[\-9] l A\p[z0]"[a-z][a-z]"
<- l ^[A-Z] $\0
<- l ^[a-z] $[a-z]
# Wordlist mode rules
.include <rules-by-score.conf>
.include <rules-by-rate.conf>
# New default wordlist mode rules
[List.Rules:Wordlist]
.include [List.Rules:Best-by-score]
# Former default wordlist mode rules, now usable to enforce a policy
[List.Rules:Policy]
# Try words as they are
:
# Lowercase every pure alphanumeric word
@@ -1094,39 +1147,78 @@ s[ ][,&+*!'$/?:=#~] Q
:
->F -<F >F 'F
# Rules from Hash Runner 2014
# Overstrike/insert rules originally from Hash Runner 2014
# Overstrike any one character
[List.Rules:o1]
# o[0-9A-Z][ -~]
# Trivial
#o[0-9A-Z][ -~]
# Optimized
->\r[1-9A-ZZ] >\p[0-9A-Z] o\0[ -~] Q
# Overstrike any two characters
[List.Rules:o2]
# o[0-9A-E][ -~] Q M o[0-9A-E][ -~] Q
->[1-9A-F] ->[1-9A-F] >\p1[0-9A-E] >\p2[0-9A-E] o\3[ -~] Q M o\4[ -~] Q
[List.Rules:o3]
# o[0-9][ -~] Q M o[0-9][ -~] Q M o[0-9][ -~] Q
->[1-9A] ->[1-9A] ->[1-9A] >\p1[0-9] >\p2[0-9] >\p3[0-9] o\4[ -~] Q M o\5[ -~] Q M o\6[ -~] Q
# Simple
#o[0-9A-E][ -~] Q M o[0-9A-E][ -~] Q
# Optimized, assumes we also run o1 separately if needed
#->[1-9A-F] ->[2-9A-F] >\p1[0-9A-E] >\p2[1-9A-E] o\3[ -~] Q M o\4[ -~] Q
# Optimized further, same assumption
->[2-9A-F] >\p[1-9A-E] o0[ -~] Q M o\2[ -~] Q
->[3-9A-F] >\p[2-9A-E] o1[ -~] Q M o\2[ -~] Q
->[4-9A-F] >\p[3-9A-E] o2[ -~] Q M o\2[ -~] Q
->[5-9A-F] >\p[4-9A-E] o3[ -~] Q M o\2[ -~] Q
->[6-9A-F] >\p[5-9A-E] o4[ -~] Q M o\2[ -~] Q
->[7-9A-F] >\p[6-9A-E] o5[ -~] Q M o\2[ -~] Q
->[8-9A-F] >\p[7-9A-E] o6[ -~] Q M o\2[ -~] Q
->[9A-F] >\p[8-9A-E] o7[ -~] Q M o\2[ -~] Q
->[A-F] >\p[9A-E] o8[ -~] Q M o\2[ -~] Q
->[B-F] >\p[A-E] o9[ -~] Q M o\2[ -~] Q
->[C-F] >\p[B-E] oA[ -~] Q M o\2[ -~] Q
->[D-F] >\p[C-E] oB[ -~] Q M o\2[ -~] Q
->[E-F] >\p[D-E] oC[ -~] Q M o\2[ -~] Q
->F >E oD[ -~] Q M oE[ -~] Q
# Overstrike any one or two characters
[List.Rules:o]
.include [List.Rules:o1]
.include [List.Rules:o2]
# Insert any one character
[List.Rules:i1]
# i[0-9A-Z][ -~]
# Trivial
#i[0-9A-Z][ -~]
# Optimized
->\r[2-9A-ZZZ] >\p1[0-9A-Z] i\0[ -~]
# Insert any two characters
[List.Rules:i2]
# i[0-9A-E][ -~] i[0-9A-E][ -~]
->[2-9A-G] ->[2-9A-G] >\p1[0-9A-E] >\p2[0-9A-E] i\3[ -~] i\4[ -~]
[List.Rules:i3]
# i[0-9][ -~] i[0-9][ -~] i[0-9][ -~]
->[4-9A-D] ->[4-9A-D] ->[4-9A-D] >\p1[0-9] >\p2[0-9] >\p3[0-9] i\4[ -~] i\5[ -~] i\6[ -~]
# Trivial
#i[0-9A-E][ -~] i[0-9A-E][ -~]
# Optimized
#->[2-9A-G] ->[2-9A-G] i\p1[0-9A-E][ -~] >\3 >\p2[0-9A-E] i\p2[1-9A-F][ -~]
# Optimized further
->[2-9A-G] i0[ -~] >\p1[0-9A-E] i\p1[1-9A-F][ -~]
->[3-9A-G] i1[ -~] >\p1[1-9A-E] i\p1[2-9A-F][ -~]
->[4-9A-G] i2[ -~] >\p1[2-9A-E] i\p1[3-9A-F][ -~]
->[5-9A-G] i3[ -~] >\p1[3-9A-E] i\p1[4-9A-F][ -~]
->[6-9A-G] i4[ -~] >\p1[4-9A-E] i\p1[5-9A-F][ -~]
->[7-9A-G] i5[ -~] >\p1[5-9A-E] i\p1[6-9A-F][ -~]
->[8-9A-G] i6[ -~] >\p1[6-9A-E] i\p1[7-9A-F][ -~]
->[9A-G] i7[ -~] >\p1[7-9A-E] i\p1[8-9A-F][ -~]
->[A-G] i8[ -~] >\p1[8-9A-E] i\p1[9A-F][ -~]
->[B-G] i9[ -~] >\p1[9A-E] i\p1[A-F][ -~]
->[C-G] iA[ -~] >\p1[A-E] i\p1[B-F][ -~]
->[D-G] iB[ -~] >\p1[B-E] i\p1[C-F][ -~]
->[E-G] iC[ -~] >\p1[C-E] i\p1[D-F][ -~]
->[F-G] iD[ -~] >\p1[D-E] i\p1[E-F][ -~]
->G iE[ -~] >E iF[ -~]
# Insert any one or two characters
[List.Rules:i]
.include [List.Rules:i1]
.include [List.Rules:i2]
# Overstrike or insert any one or two characters
[List.Rules:oi]
.include [List.Rules:o1]
.include [List.Rules:i1]
@@ -1197,6 +1289,24 @@ a0 /?D l sa2 sb2 sc2 sd3 se3 sf3 sg4 sh4 si4 sj5 sk5 sl5 sm6 sn6 so6 sp7 sq7 sr7
[List.Rules:passphrase-rule2]
.include <rules/passphrase-rule2.rule>
# These rules are an optimized (large) subset of the hashcat rules
# https://notsosecure.com/one-rule-to-rule-them-all
# https://github.com/NotSoSecure/password_cracking_rules
[List.Rules:OneRuleToRuleThemAll]
!! hashcat logic ON
.include <rules/OneRuleToRuleThemAll.rule>
!! hashcat logic OFF
# These rules are an optimized version of OneRuleToRuleThemAll with removal of
# rules that were effectively duplicate as well as some that were ineffective.
# This cracks almost all of the same passwords in ~5% fewer rules.
# https://in.security/2023/01/10/oneruletorulethemstill-new-and-improved/
# https://github.com/stealthsploit/OneRuleToRuleThemStill
[List.Rules:OneRuleToRuleThemStill]
!! hashcat logic ON
.include <rules/OneRuleToRuleThemStill.rule>
!! hashcat logic OFF
# Default Loopback mode rules.
[List.Rules:Loopback]
.include [List.Rules:ShiftToggle]
@@ -1219,8 +1329,7 @@ b1 ]
# For Wordlist mode and very fast hashes
[List.Rules:Jumbo]
.include [List.Rules:Single-Extra]
.include [List.Rules:Wordlist]
.include [List.Rules:ShiftToggle]
.include [List.Rules:Policy]
.include [List.Rules:Multiword]
.include [List.Rules:best64]
.include [List.Rules:UnicodeSubstitution]
@@ -1233,9 +1342,12 @@ b1 ]
# ridiculous quality and lack optimizations - you have been warned.
[List.Rules:All]
.include [List.Rules:Jumbo]
.include [List.Rules:KoreLogic]
.include [List.Rules:OneRuleToRuleThemStill]
.include [List.Rules:T9]
.include [List.Rules:hashcat]
.include [List.Rules:ShiftToggle]
.include [List.Rules:oi]
.include [List.Rules:KoreLogic]
# Incremental modes
@@ -1717,9 +1829,9 @@ void restore()
/* Global variables: current length and word */
/* make this 'long' enough for other externs that include this one */
/* (up to 125 bytes long) */
/* (up to 320 bytes long) */
int length, current[126], max;
int length, current[320], max;
/* this new 'type' variable, is used to tell double what character set to
* use. It can use the original (alpha). If type is 0 (i.e. unset), then
@@ -1872,7 +1984,7 @@ void init()
# sections which include this External_base section.
# The generate() function will limit the maximum length of generated
# candidates to either the format's limit (maximum password length)
# or to the limit specified with --stdout=LENGTH (Default: 125),
# or to the limit specified with --stdout=LENGTH (Default: 319),
# thus avoiding duplicate candidates for formats with limited maximum
# passwortd length.
# The comparison of the current length and the limit is only done
@@ -1898,7 +2010,7 @@ void generate()
c = minc;
if (++length > maxlength)
c = 0; // Will NUL out the next "word" and thus terminate
length = 0; // Will NUL out the next "word" and thus terminate
}
# Try strings of repeated characters (range: space - 0xff).
@@ -1982,7 +2094,7 @@ void init()
#
# The generate() function will limit the maximum length of generated
# candidates to either the format's limit (maximum password length)
# or to the limit specified with --stdout=LENGTH (Default: 125),
# or to the limit specified with --stdout=LENGTH (Default: 319),
# thus avoiding duplicate candidates for formats with limited maximum
# passwortd length.
# The comparison of the current length and the limit is only done
@@ -2487,6 +2599,12 @@ void init()
}
}
// Must fit in id[] array
if (minlength > 15)
minlength = 15;
if (maxlength > 15)
maxlength = 15;
length = 0;
while (length < minlength)
id[length++] = 0;
@@ -3791,94 +3909,232 @@ void filter()
status = 1; // Print the status line
}
#
# Reference example hybrid-mode external. same as jtr-rule: $[0-9]$[0-9]
# this format is to be used similar to a filter, in that it requires some
# other word generator (markov, wordlist, etc). However, this type external
# will get new() called with each word, and then have next() called, until
# the word[0]=0 is seen (meaning all candidates for the base word have been
# generated. Prior to new() or restore(), word[] is the 'base' word.
# if the script is able to properly resume, then it should set the global
# variable hybrid_total to the count of candidates that will be generated
# for this word (in new() / restore(), then in the body of restore() there
# is a global variable set 'hybrid_resume' that was the prior number of
# canidates generated for this base-word. Resume should start at the NEXT
# If the script is not able to easily resume, then simply do NOT set the
# global hybrid_total to anything either function. JtR will 'still' resume
# propery, but it will do so by calling new()/next()/next().../next() until
# back to the proper resume location.
#
# script changed to append a _ character before the number, each time within
# the next() function. Done this way to better validate that -restore within
# jtr is working properly.
#
[List.External:Hybrid_example]
/* static vars for the script */
int cnt, length, total;
# Several hybrid external modes follow. These are to be used on top of another
# cracking mode and they generate multiple candidate passwords from each "word"
# output by the other mode.
# Combine words coming from another cracking mode into pairs. This gradually
# memorizes up to the initial 1 MB worth of words and uses them to prefix and
# suffix each current word.
# Known limitations:
# 1. --restore of interrupted session does not work right (no opportunity to
# re-memorize the other mode's skipped words), so do not use it.
# 2. The progress indicator and ETA are too optimistic (they assume linear
# progress through the input stream, but complexity within 1 MB is quadratic).
# Example usage: --wordlist --external=combinator --rules-stack=phrase
[List.External:Combinator]
int separator;
int words[1000000], size;
int base[160], base_size, base_length, swap, p, q;
void init()
{
/* in this simple example, we always generate 100 candidates per word */
total = 100;/* this is a VERY simple example */
separator = ' '; // Set to 0 for no separators
size = 1000000; // Must not exceed size of words array
base_size = 160; // Must not exceed size of base array, nor (319-1)/2+1
if (req_maxlen && base_size > req_maxlen + 1)
base_size = req_maxlen + 1;
q = 0;
}
/* new word */
void new()
{
/* get the word length) */
length = 0; while (word[length++]) ; --length;
swap = p = 0;
/*
* If this was a more complex script, we would compute total candidates
* at this location, if we can. If we can not compute total candidates
* then it is likely we can not resume 'easily', so if that is the
* case, we would simply set hybrid_total to -1, or do nothing, since
* do_external_hybrid_crack() sets it to -1 before calling this function.
*/
hybrid_total = total;
/* Memorize this base word if it fits and is of right length */
base_length = -1;
while (q < size && (words[q++] = word[++base_length]))
continue;
if (q < size && base_length < base_size && base_length)
return;
/* Reset or counter for THIS word. */
cnt = 0;
/*
* word will be too long to be used, or too short to be used. If so
* then set hybrid_total to 0 and this entire word will be skipped.
*/
if (req_minlen > length - 2 || (req_maxlen && req_maxlen < length + 2))
hybrid_total = 0;
/* Don't memorize this base word, but finish computing its length */
q -= base_length + 1;
if (word[base_length])
while (word[++base_length])
continue;
else if (!base_length)
base_length = base_size; // Skip empty words
}
void next()
{
/* in this simple script, if cnt is 100, this word is DONE */
if (cnt == 100) {
word[0] = 0;
int i, j;
if (base_length >= base_size) {
word = 0;
return;
}
/* set word[] to the next candidate */
word[length++] = '_';
word[length ] = '0' + cnt / 10;
word[length+1] = '0' + cnt % 10;
word[length+2] = 0;
++cnt;
if (swap) {
/* Next memorized word first, separator and current base word next */
i = -1;
while (word[++i] = words[p++])
continue;
if (p >= q) {
word = 0;
return;
}
if (separator)
word[i++] = separator;
j = 0;
while (word[i++] = base[j++])
continue;
return;
}
/* Current base word first, separator and next memorized word next */
i = base_length;
if (separator)
word[i++] = separator;
while (word[i++] = words[p++])
continue;
if (p >= q) {
p = 0;
swap++;
i = -1;
while (++i < base_length)
base[i] = word[i];
base[i] = 0;
}
}
/* Called when restoring an interrupted session */
void restore()
# Shuffle (try all permutations of) characters in each short input word
[List.External:Shuffle]
int max_length, ctz_bits, ctz_mask, ctz[0x80000]; // Max 0xa00000 for length 20
int length, base[0x20], id[0x20], unseen[0x20], is_dup[0x100], c2mask[0x100];
void init()
{
int i;
max_length = 10; // ctz array size of 0x80000 is good up to length 16
length = 0; while (word[length++]) ; --length;
/* for this simple script, simply setting cnt resumes */
cnt = hybrid_resume + 1; if (cnt > 100) cnt=100;
/* Prepare a count trailing zero table */
int i, j, mask;
ctz_mask = (1 << (ctz_bits = max_length - 1)) - 1;
i = 0;
while (i++ < cnt) word[length++] = '_';
word[length] = 0;
while (i++ < ctz_bits) {
j = 0;
while (j <= ctz_mask)
j += 1 << (ctz[j] = i);
}
/* followed by its revisions for skipping some bits */
while ((i = j >> ctz_bits) < max_length) {
mask = j & ctz_mask;
while (i--)
mask &= mask - 1;
ctz[j++] = ctz[mask];
}
}
/* tell john that we have properly 'resumed', by setting a 'proper' total */
hybrid_total = total;
void new()
{
int c, i;
length = i = -1;
while (c = word[++length]) {
if (length > max_length)
return;
c2mask[base[length] = c] = id[length] = 0;
}
while (c = word[++i]) {
is_dup[c] = c2mask[c];
c2mask[c] |= 1 << i;
}
unseen = 0;
}
void next()
{
int prev_unseen, i, j;
if ((i = length - 1) < max_length)
while (i--) {
if (++id[i] >= length - i) {
id[i] = 0;
continue;
}
if (unseen)
prev_unseen = unseen[i];
else
unseen[i = 0] = prev_unseen = ctz_mask;
while (i < length) {
/* Skip id[i] previously unseen char indices */
/* Take that char and see if it's unique */
if (is_dup[word[i] = base[j = ctz[prev_unseen | (id[i] << ctz_bits)]]])
if (c2mask[word[i]] & prev_unseen & ((1 << j) - 1))
break; /* Dupe in wrong order */
unseen[++i] = prev_unseen &= ~(1 << j);
}
if (i >= length) /* Not a dupe */
return;
/* Next loop ++id[i] will skip the dupe char in i's position */
i++;
}
word = 0;
}
# Simplified or reference version of the above, same output much slower
[List.External:Shuffle-simple]
int max_length, length, base[320], id[320], jd[320];
void init()
{
max_length = 10; // Our usage of bitmasks is good up to length 32
}
void new()
{
length = 0;
while (base[length] = word[length])
id[length++] = 0;
}
void next()
{
int unseen, i, j, k;
if ((i = length) <= max_length)
while (i--) {
if (++id[i] >= length - i) {
id[i] = 0;
continue;
}
i = unseen = -1;
while (++i < length) {
/* Skip id[i] previously unseen char indices, count */
j = -1;
k = id[i];
while (k >= 0)
if (unseen & (1 << ++j))
k--;
/* Take that char */
word[k = i] = base[jd[i] = j];
/* Same chars must only appear in one order */
while (k--)
if (word[k] == word[i])
break;
if (k >= 0)
if (jd[k] >= j) /* Wrong order */
break;
unseen &= ~(1 << j);
}
if (i >= length) /* Not a dupe */
return;
/* Next loop ++id[i] will skip the dupe char in i's position */
i++;
}
word = 0;
}
# External hybrid 'leet code
@@ -3896,11 +4152,11 @@ void restore()
* t -> t7
*/
int rotor[626]; /* max length input is 125 bytes [125*5+1]; */
int rotors[125];
int rotor_ptr[125];
int rotor_idx[125];
int rotor_cnt[125];
int rotor[1596]; /* max length input is 319 bytes [319*5+1] */
int rotors[319];
int rotor_ptr[319];
int rotor_idx[319];
int rotor_cnt[319];
int current_word_count;
int max_mangle; /* controls how many bytes we run through our 'leet' code */
int max_mangle_letters;
@@ -4011,11 +4267,11 @@ void next()
# Shared base code for External hybrid CaSE and Wordcase mutation code
[List.External_base:Case]
int rotor[251]; /* max length input is 125 bytes [125*5+1]; */
int rotors[125];
int rotor_ptr[125];
int rotor_idx[125];
int rotor_cnt[125];
int rotor[639]; /* max length input is 319 bytes [319*2+1] */
int rotors[319];
int rotor_ptr[319];
int rotor_idx[319];
int rotor_cnt[319];
int current_word_count;
int max_mangle; /* controls how many bytes we run through our 'leet' code */
int original_word; /* if set to 1 then we start with original word. If 0, then start with first mangled word */
+42 -51
View File
@@ -1,11 +1,11 @@
# This software is Copyright (c) 2012-2020 magnum, and it is hereby
# This software is Copyright (c) 2012-2024 magnum, and it is hereby
# released to the general public under the following terms:
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
#
# Try strings of repeated characters, Unicode (version 13) BMP version
# Try strings of repeated characters, Unicode (version 16) BMP version
#
# Number of candidates = 55,387 x max-length
# Number of candidates = 55,537 x max-length
#
# Note that these modes will handle --max-len differently than normal: They
# will consider number of characters as opposed to number of bytes. This
@@ -18,7 +18,7 @@
[List.External:Repeats16]
int minlength, maxlength, maxc, length, c;
int charset[0x10000];
int charset[0xd900];
void init()
{
@@ -39,7 +39,7 @@ void init()
/*
* This defines the character set. This is auto-generated from UnicodeData.txt
* and we skip control characters.
* of Unicode 16.0.0 and we skip control characters.
*/
i = 0;
// 0000..007F; Basic Latin
@@ -115,9 +115,6 @@ void init()
charset[i++] = c++;
// 0600..06FF; Arabic
c = 0x600; // from ARABIC NUMBER SIGN
while (c <= 0x61c) // ..to ARABIC LETTER MARK
charset[i++] = c++;
c = 0x61e; // from ARABIC TRIPLE DOT PUNCTUATION MARK
while (c <= 0x6ff) // ..to ARABIC LETTER HEH WITH INVERTED V
charset[i++] = c++;
// 0700..074F; Syriac
@@ -159,14 +156,17 @@ void init()
c = 0x860; // from SYRIAC LETTER MALAYALAM NGA
while (c <= 0x86a) // ..to SYRIAC LETTER MALAYALAM SSA
charset[i++] = c++;
// 0870..089F; Arabic Extended-B
c = 0x870; // from ARABIC LETTER ALEF WITH ATTACHED FATHA
while (c <= 0x88e) // ..to ARABIC VERTICAL TAIL
charset[i++] = c++;
charset[i++] = 0x890; // ARABIC POUND MARK ABOVE
charset[i++] = 0x891; // ARABIC PIASTRE MARK ABOVE
c = 0x897; // from ARABIC PEPET
while (c <= 0x89f) // ..to ARABIC HALF MADDA OVER MADDA
charset[i++] = c++;
// 08A0..08FF; Arabic Extended-A
c = 0x8a0; // from ARABIC LETTER BEH WITH SMALL V BELOW
while (c <= 0x8b4) // ..to ARABIC LETTER KAF WITH DOT BELOW
charset[i++] = c++;
c = 0x8b6; // from ARABIC LETTER BEH WITH SMALL MEEM ABOVE
while (c <= 0x8c7) // ..to ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
charset[i++] = c++;
c = 0x8d3; // from ARABIC SMALL LOW WAW
while (c <= 0x8ff) // ..to ARABIC MARK SIDEWAYS NOON GHUNNA
charset[i++] = c++;
// 0900..097F; Devanagari
@@ -356,7 +356,7 @@ void init()
c = 0xc2a; // from TELUGU LETTER PA
while (c <= 0xc39) // ..to TELUGU LETTER HA
charset[i++] = c++;
c = 0xc3d; // from TELUGU SIGN AVAGRAHA
c = 0xc3c; // from TELUGU SIGN NUKTA
while (c <= 0xc44) // ..to TELUGU VOWEL SIGN VOCALIC RR
charset[i++] = c++;
charset[i++] = 0xc46; // TELUGU VOWEL SIGN E
@@ -402,6 +402,8 @@ void init()
charset[i++] = c++;
charset[i++] = 0xcd5; // KANNADA LENGTH MARK
charset[i++] = 0xcd6; // KANNADA AI LENGTH MARK
charset[i++] = 0xcdd; // KANNADA LETTER NAKAARA POLLU
charset[i++] = 0xcde; // KANNADA LETTER FA
c = 0xce0; // from KANNADA LETTER VOCALIC RR
while (c <= 0xce3) // ..to KANNADA VOWEL SIGN VOCALIC LL
charset[i++] = c++;
@@ -409,7 +411,7 @@ void init()
while (c <= 0xcef) // ..to KANNADA DIGIT NINE
charset[i++] = c++;
charset[i++] = 0xcf1; // KANNADA SIGN JIHVAMULIYA
charset[i++] = 0xcf2; // KANNADA SIGN UPADHMANIYA
charset[i++] = 0xcf3; // KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
// 0D00..0D7F; Malayalam
c = 0xd00; // from MALAYALAM SIGN COMBINING ANUSVARA ABOVE
while (c <= 0xd0c) // ..to MALAYALAM LETTER VOCALIC L
@@ -479,7 +481,7 @@ void init()
while (c <= 0xec4) // ..to LAO VOWEL SIGN AI
charset[i++] = c++;
c = 0xec8; // from LAO TONE MAI EK
while (c <= 0xecd) // ..to LAO NIGGAHITA
while (c <= 0xece) // ..to LAO YAMAKKAN
charset[i++] = c++;
c = 0xed0; // from LAO DIGIT ZERO
while (c <= 0xed9) // ..to LAO DIGIT NINE
@@ -592,11 +594,9 @@ void init()
charset[i++] = c++;
// 1700..171F; Tagalog
c = 0x1700; // from TAGALOG LETTER A
while (c <= 0x170c) // ..to TAGALOG LETTER YA
charset[i++] = c++;
c = 0x170e; // from TAGALOG LETTER LA
while (c <= 0x1714) // ..to TAGALOG SIGN VIRAMA
while (c <= 0x1715) // ..to TAGALOG SIGN PAMUDPOD
charset[i++] = c++;
charset[i++] = 0x171f; // TAGALOG LETTER ARCHAIC RA
// 1720..173F; Hanunoo
c = 0x1720; // from HANUNOO LETTER A
while (c <= 0x1736) // ..to PHILIPPINE DOUBLE PUNCTUATION
@@ -625,9 +625,6 @@ void init()
charset[i++] = c++;
// 1800..18AF; Mongolian
c = 0x1800; // from MONGOLIAN BIRGA
while (c <= 0x180e) // ..to MONGOLIAN VOWEL SEPARATOR
charset[i++] = c++;
c = 0x1810; // from MONGOLIAN DIGIT ZERO
while (c <= 0x1819) // ..to MONGOLIAN DIGIT NINE
charset[i++] = c++;
c = 0x1820; // from MONGOLIAN LETTER A
@@ -700,14 +697,14 @@ void init()
charset[i++] = c++;
// 1AB0..1AFF; Combining Diacritical Marks Extended
c = 0x1ab0; // from COMBINING DOUBLED CIRCUMFLEX ACCENT
while (c <= 0x1ac0) // ..to COMBINING LATIN SMALL LETTER TURNED W BELOW
while (c <= 0x1ace) // ..to COMBINING LATIN SMALL LETTER INSULAR T
charset[i++] = c++;
// 1B00..1B7F; Balinese
c = 0x1b00; // from BALINESE SIGN ULU RICEM
while (c <= 0x1b4b) // ..to BALINESE LETTER ASYURA SASAK
while (c <= 0x1b4c) // ..to BALINESE LETTER ARCHAIC JNYA
charset[i++] = c++;
c = 0x1b50; // from BALINESE DIGIT ZERO
while (c <= 0x1b7c) // ..to BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
c = 0x1b4e; // from BALINESE INVERTED CARIK SIKI
while (c <= 0x1b7f) // ..to BALINESE PANTI BAWAK
charset[i++] = c++;
// 1B80..1BBF; Sundanese
c = 0x1b80; // from SUNDANESE SIGN PANYECEK
@@ -735,7 +732,7 @@ void init()
charset[i++] = c++;
// 1C80..1C8F; Cyrillic Extended-C
c = 0x1c80; // from CYRILLIC SMALL LETTER ROUNDED VE
while (c <= 0x1c88) // ..to CYRILLIC SMALL LETTER UNBLENDED UK
while (c <= 0x1c8a) // ..to CYRILLIC SMALL LETTER TJE
charset[i++] = c++;
// 1C90..1CBF; Georgian Extended
c = 0x1c90; // from GEORGIAN MTAVRULI CAPITAL LETTER AN
@@ -761,9 +758,6 @@ void init()
charset[i++] = c++;
// 1DC0..1DFF; Combining Diacritical Marks Supplement
c = 0x1dc0; // from COMBINING DOTTED GRAVE ACCENT
while (c <= 0x1df9) // ..to COMBINING WIDE INVERTED BRIDGE BELOW
charset[i++] = c++;
c = 0x1dfb; // from COMBINING DELETION MARK
while (c <= 0x1dff) // ..to COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
charset[i++] = c++;
// 1E00..1EFF; Latin Extended Additional
@@ -827,7 +821,7 @@ void init()
charset[i++] = c++;
// 20A0..20CF; Currency Symbols
c = 0x20a0; // from EURO-CURRENCY SIGN
while (c <= 0x20bf) // ..to BITCOIN SIGN
while (c <= 0x20c0) // ..to SOM SIGN
charset[i++] = c++;
// 20D0..20FF; Combining Diacritical Marks for Symbols
c = 0x20d0; // from COMBINING LEFT HARPOON ABOVE
@@ -855,7 +849,7 @@ void init()
charset[i++] = c++;
// 2400..243F; Control Pictures
c = 0x2400; // from SYMBOL FOR NULL
while (c <= 0x2426) // ..to SYMBOL FOR SUBSTITUTE FORM TWO
while (c <= 0x2429) // ..to SYMBOL FOR DELETE MEDIUM SHADE FORM
charset[i++] = c++;
// 2440..245F; Optical Character Recognition
c = 0x2440; // from OCR HOOK
@@ -921,10 +915,7 @@ void init()
charset[i++] = c++;
// 2C00..2C5F; Glagolitic
c = 0x2c00; // from GLAGOLITIC CAPITAL LETTER AZU
while (c <= 0x2c2e) // ..to GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
charset[i++] = c++;
c = 0x2c30; // from GLAGOLITIC SMALL LETTER AZU
while (c <= 0x2c5e) // ..to GLAGOLITIC SMALL LETTER LATINATE MYSLITE
while (c <= 0x2c5f) // ..to GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
charset[i++] = c++;
// 2C60..2C7F; Latin Extended-C
c = 0x2c60; // from LATIN CAPITAL LETTER L WITH DOUBLE BAR
@@ -985,7 +976,7 @@ void init()
charset[i++] = c++;
// 2E00..2E7F; Supplemental Punctuation
c = 0x2e00; // from RIGHT ANGLE SUBSTITUTION MARKER
while (c <= 0x2e52) // ..to TIRONIAN SIGN CAPITAL ET
while (c <= 0x2e5d) // ..to OBLIQUE HYPHEN
charset[i++] = c++;
// 2E80..2EFF; CJK Radicals Supplement
c = 0x2e80; // from CJK RADICAL REPEAT
@@ -1000,7 +991,7 @@ void init()
charset[i++] = c++;
// 2FF0..2FFF; Ideographic Description Characters
c = 0x2ff0; // from IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
while (c <= 0x2ffb) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
while (c <= 0x2fff) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION
charset[i++] = c++;
// 3000..303F; CJK Symbols and Punctuation
c = 0x3000; // from IDEOGRAPHIC SPACE
@@ -1035,8 +1026,9 @@ void init()
charset[i++] = c++;
// 31C0..31EF; CJK Strokes
c = 0x31c0; // from CJK STROKE T
while (c <= 0x31e3) // ..to CJK STROKE Q
while (c <= 0x31e5) // ..to CJK STROKE SZP
charset[i++] = c++;
charset[i++] = 0x31ef; // IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION
// 31F0..31FF; Katakana Phonetic Extensions
c = 0x31f0; // from KATAKANA LETTER SMALL KU
while (c <= 0x31ff) // ..to KATAKANA LETTER SMALL RO
@@ -1062,7 +1054,7 @@ void init()
charset[i++] = c++;
// 4E00..9FFF; CJK Unified Ideographs
c = 0x4e00; // from <CJK Ideograph, First>
while (c <= 0x9ffc) // ..to <CJK Ideograph, Last>
while (c <= 0x9fff) // ..to <CJK Ideograph, Last>
charset[i++] = c++;
// A000..A48F; Yi Syllables
c = 0xa000; // from YI SYLLABLE IT
@@ -1094,12 +1086,14 @@ void init()
charset[i++] = c++;
// A720..A7FF; Latin Extended-D
c = 0xa720; // from MODIFIER LETTER STRESS AND HIGH TONE
while (c <= 0xa7bf) // ..to LATIN SMALL LETTER GLOTTAL U
while (c <= 0xa7cd) // ..to LATIN SMALL LETTER S WITH DIAGONAL STROKE
charset[i++] = c++;
c = 0xa7c2; // from LATIN CAPITAL LETTER ANGLICANA W
while (c <= 0xa7ca) // ..to LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
charset[i++] = 0xa7d0; // LATIN CAPITAL LETTER CLOSED INSULAR G
charset[i++] = 0xa7d1; // LATIN SMALL LETTER CLOSED INSULAR G
c = 0xa7d5; // from LATIN SMALL LETTER DOUBLE WYNN
while (c <= 0xa7dc) // ..to LATIN CAPITAL LETTER LAMBDA WITH STROKE
charset[i++] = c++;
c = 0xa7f5; // from LATIN CAPITAL LETTER REVERSED HALF H
c = 0xa7f2; // from MODIFIER LETTER CAPITAL C
while (c <= 0xa7ff) // ..to LATIN EPIGRAPHIC LETTER ARCHAIC M
charset[i++] = c++;
// A800..A82F; Syloti Nagri
@@ -1254,19 +1248,16 @@ void init()
charset[i++] = c++;
// FB50..FDFF; Arabic Presentation Forms-A
c = 0xfb50; // from ARABIC LETTER ALEF WASLA ISOLATED FORM
while (c <= 0xfbc1) // ..to ARABIC SYMBOL SMALL TAH BELOW
while (c <= 0xfbc2) // ..to ARABIC SYMBOL WASLA ABOVE
charset[i++] = c++;
c = 0xfbd3; // from ARABIC LETTER NG ISOLATED FORM
while (c <= 0xfd3f) // ..to ORNATE RIGHT PARENTHESIS
charset[i++] = c++;
c = 0xfd50; // from ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
while (c <= 0xfd8f) // ..to ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
charset[i++] = c++;
c = 0xfd92; // from ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
while (c <= 0xfdc7) // ..to ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
charset[i++] = c++;
c = 0xfdf0; // from ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
while (c <= 0xfdfd) // ..to ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
while (c <= 0xfdff) // ..to ARABIC LIGATURE AZZA WA JALL
charset[i++] = c++;
// FE00..FE0F; Variation Selectors
c = 0xfe00; // from VARIATION SELECTOR-1
+283 -91
View File
@@ -1,11 +1,11 @@
# This software is Copyright (c) 2012-2020 magnum, and it is hereby
# This software is Copyright (c) 2012-2024 magnum, and it is hereby
# released to the general public under the following terms:
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
#
# Try strings of repeated characters, Full Unicode (version 13) version
# Try strings of repeated characters, Full Unicode (version 16) version
#
# Number of candidates = 143,532 x length
# Number of candidates = 154,663 x length
#
# Note that these modes will handle --max-len differently than normal: They
# will consider number of characters as opposed to number of bytes. This
@@ -23,7 +23,7 @@
[List.External:Repeats32]
int minlength, maxlength, maxc, length, c;
int charset[0x24000];
int charset[0x25c30];
void init()
{
@@ -44,7 +44,7 @@ void init()
/*
* This defines the character set. This is auto-generated from UnicodeData.txt
* and we skip control characters.
* of Unicode 16.0.0 and we skip control characters.
*/
i = 0;
// 0000..007F; Basic Latin
@@ -120,9 +120,6 @@ void init()
charset[i++] = c++;
// 0600..06FF; Arabic
c = 0x600; // from ARABIC NUMBER SIGN
while (c <= 0x61c) // ..to ARABIC LETTER MARK
charset[i++] = c++;
c = 0x61e; // from ARABIC TRIPLE DOT PUNCTUATION MARK
while (c <= 0x6ff) // ..to ARABIC LETTER HEH WITH INVERTED V
charset[i++] = c++;
// 0700..074F; Syriac
@@ -164,14 +161,17 @@ void init()
c = 0x860; // from SYRIAC LETTER MALAYALAM NGA
while (c <= 0x86a) // ..to SYRIAC LETTER MALAYALAM SSA
charset[i++] = c++;
// 0870..089F; Arabic Extended-B
c = 0x870; // from ARABIC LETTER ALEF WITH ATTACHED FATHA
while (c <= 0x88e) // ..to ARABIC VERTICAL TAIL
charset[i++] = c++;
charset[i++] = 0x890; // ARABIC POUND MARK ABOVE
charset[i++] = 0x891; // ARABIC PIASTRE MARK ABOVE
c = 0x897; // from ARABIC PEPET
while (c <= 0x89f) // ..to ARABIC HALF MADDA OVER MADDA
charset[i++] = c++;
// 08A0..08FF; Arabic Extended-A
c = 0x8a0; // from ARABIC LETTER BEH WITH SMALL V BELOW
while (c <= 0x8b4) // ..to ARABIC LETTER KAF WITH DOT BELOW
charset[i++] = c++;
c = 0x8b6; // from ARABIC LETTER BEH WITH SMALL MEEM ABOVE
while (c <= 0x8c7) // ..to ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
charset[i++] = c++;
c = 0x8d3; // from ARABIC SMALL LOW WAW
while (c <= 0x8ff) // ..to ARABIC MARK SIDEWAYS NOON GHUNNA
charset[i++] = c++;
// 0900..097F; Devanagari
@@ -361,7 +361,7 @@ void init()
c = 0xc2a; // from TELUGU LETTER PA
while (c <= 0xc39) // ..to TELUGU LETTER HA
charset[i++] = c++;
c = 0xc3d; // from TELUGU SIGN AVAGRAHA
c = 0xc3c; // from TELUGU SIGN NUKTA
while (c <= 0xc44) // ..to TELUGU VOWEL SIGN VOCALIC RR
charset[i++] = c++;
charset[i++] = 0xc46; // TELUGU VOWEL SIGN E
@@ -407,6 +407,8 @@ void init()
charset[i++] = c++;
charset[i++] = 0xcd5; // KANNADA LENGTH MARK
charset[i++] = 0xcd6; // KANNADA AI LENGTH MARK
charset[i++] = 0xcdd; // KANNADA LETTER NAKAARA POLLU
charset[i++] = 0xcde; // KANNADA LETTER FA
c = 0xce0; // from KANNADA LETTER VOCALIC RR
while (c <= 0xce3) // ..to KANNADA VOWEL SIGN VOCALIC LL
charset[i++] = c++;
@@ -414,7 +416,7 @@ void init()
while (c <= 0xcef) // ..to KANNADA DIGIT NINE
charset[i++] = c++;
charset[i++] = 0xcf1; // KANNADA SIGN JIHVAMULIYA
charset[i++] = 0xcf2; // KANNADA SIGN UPADHMANIYA
charset[i++] = 0xcf3; // KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT
// 0D00..0D7F; Malayalam
c = 0xd00; // from MALAYALAM SIGN COMBINING ANUSVARA ABOVE
while (c <= 0xd0c) // ..to MALAYALAM LETTER VOCALIC L
@@ -484,7 +486,7 @@ void init()
while (c <= 0xec4) // ..to LAO VOWEL SIGN AI
charset[i++] = c++;
c = 0xec8; // from LAO TONE MAI EK
while (c <= 0xecd) // ..to LAO NIGGAHITA
while (c <= 0xece) // ..to LAO YAMAKKAN
charset[i++] = c++;
c = 0xed0; // from LAO DIGIT ZERO
while (c <= 0xed9) // ..to LAO DIGIT NINE
@@ -597,11 +599,9 @@ void init()
charset[i++] = c++;
// 1700..171F; Tagalog
c = 0x1700; // from TAGALOG LETTER A
while (c <= 0x170c) // ..to TAGALOG LETTER YA
charset[i++] = c++;
c = 0x170e; // from TAGALOG LETTER LA
while (c <= 0x1714) // ..to TAGALOG SIGN VIRAMA
while (c <= 0x1715) // ..to TAGALOG SIGN PAMUDPOD
charset[i++] = c++;
charset[i++] = 0x171f; // TAGALOG LETTER ARCHAIC RA
// 1720..173F; Hanunoo
c = 0x1720; // from HANUNOO LETTER A
while (c <= 0x1736) // ..to PHILIPPINE DOUBLE PUNCTUATION
@@ -630,9 +630,6 @@ void init()
charset[i++] = c++;
// 1800..18AF; Mongolian
c = 0x1800; // from MONGOLIAN BIRGA
while (c <= 0x180e) // ..to MONGOLIAN VOWEL SEPARATOR
charset[i++] = c++;
c = 0x1810; // from MONGOLIAN DIGIT ZERO
while (c <= 0x1819) // ..to MONGOLIAN DIGIT NINE
charset[i++] = c++;
c = 0x1820; // from MONGOLIAN LETTER A
@@ -705,14 +702,14 @@ void init()
charset[i++] = c++;
// 1AB0..1AFF; Combining Diacritical Marks Extended
c = 0x1ab0; // from COMBINING DOUBLED CIRCUMFLEX ACCENT
while (c <= 0x1ac0) // ..to COMBINING LATIN SMALL LETTER TURNED W BELOW
while (c <= 0x1ace) // ..to COMBINING LATIN SMALL LETTER INSULAR T
charset[i++] = c++;
// 1B00..1B7F; Balinese
c = 0x1b00; // from BALINESE SIGN ULU RICEM
while (c <= 0x1b4b) // ..to BALINESE LETTER ASYURA SASAK
while (c <= 0x1b4c) // ..to BALINESE LETTER ARCHAIC JNYA
charset[i++] = c++;
c = 0x1b50; // from BALINESE DIGIT ZERO
while (c <= 0x1b7c) // ..to BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
c = 0x1b4e; // from BALINESE INVERTED CARIK SIKI
while (c <= 0x1b7f) // ..to BALINESE PANTI BAWAK
charset[i++] = c++;
// 1B80..1BBF; Sundanese
c = 0x1b80; // from SUNDANESE SIGN PANYECEK
@@ -740,7 +737,7 @@ void init()
charset[i++] = c++;
// 1C80..1C8F; Cyrillic Extended-C
c = 0x1c80; // from CYRILLIC SMALL LETTER ROUNDED VE
while (c <= 0x1c88) // ..to CYRILLIC SMALL LETTER UNBLENDED UK
while (c <= 0x1c8a) // ..to CYRILLIC SMALL LETTER TJE
charset[i++] = c++;
// 1C90..1CBF; Georgian Extended
c = 0x1c90; // from GEORGIAN MTAVRULI CAPITAL LETTER AN
@@ -766,9 +763,6 @@ void init()
charset[i++] = c++;
// 1DC0..1DFF; Combining Diacritical Marks Supplement
c = 0x1dc0; // from COMBINING DOTTED GRAVE ACCENT
while (c <= 0x1df9) // ..to COMBINING WIDE INVERTED BRIDGE BELOW
charset[i++] = c++;
c = 0x1dfb; // from COMBINING DELETION MARK
while (c <= 0x1dff) // ..to COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
charset[i++] = c++;
// 1E00..1EFF; Latin Extended Additional
@@ -832,7 +826,7 @@ void init()
charset[i++] = c++;
// 20A0..20CF; Currency Symbols
c = 0x20a0; // from EURO-CURRENCY SIGN
while (c <= 0x20bf) // ..to BITCOIN SIGN
while (c <= 0x20c0) // ..to SOM SIGN
charset[i++] = c++;
// 20D0..20FF; Combining Diacritical Marks for Symbols
c = 0x20d0; // from COMBINING LEFT HARPOON ABOVE
@@ -860,7 +854,7 @@ void init()
charset[i++] = c++;
// 2400..243F; Control Pictures
c = 0x2400; // from SYMBOL FOR NULL
while (c <= 0x2426) // ..to SYMBOL FOR SUBSTITUTE FORM TWO
while (c <= 0x2429) // ..to SYMBOL FOR DELETE MEDIUM SHADE FORM
charset[i++] = c++;
// 2440..245F; Optical Character Recognition
c = 0x2440; // from OCR HOOK
@@ -926,10 +920,7 @@ void init()
charset[i++] = c++;
// 2C00..2C5F; Glagolitic
c = 0x2c00; // from GLAGOLITIC CAPITAL LETTER AZU
while (c <= 0x2c2e) // ..to GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
charset[i++] = c++;
c = 0x2c30; // from GLAGOLITIC SMALL LETTER AZU
while (c <= 0x2c5e) // ..to GLAGOLITIC SMALL LETTER LATINATE MYSLITE
while (c <= 0x2c5f) // ..to GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
charset[i++] = c++;
// 2C60..2C7F; Latin Extended-C
c = 0x2c60; // from LATIN CAPITAL LETTER L WITH DOUBLE BAR
@@ -990,7 +981,7 @@ void init()
charset[i++] = c++;
// 2E00..2E7F; Supplemental Punctuation
c = 0x2e00; // from RIGHT ANGLE SUBSTITUTION MARKER
while (c <= 0x2e52) // ..to TIRONIAN SIGN CAPITAL ET
while (c <= 0x2e5d) // ..to OBLIQUE HYPHEN
charset[i++] = c++;
// 2E80..2EFF; CJK Radicals Supplement
c = 0x2e80; // from CJK RADICAL REPEAT
@@ -1005,7 +996,7 @@ void init()
charset[i++] = c++;
// 2FF0..2FFF; Ideographic Description Characters
c = 0x2ff0; // from IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
while (c <= 0x2ffb) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
while (c <= 0x2fff) // ..to IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION
charset[i++] = c++;
// 3000..303F; CJK Symbols and Punctuation
c = 0x3000; // from IDEOGRAPHIC SPACE
@@ -1040,8 +1031,9 @@ void init()
charset[i++] = c++;
// 31C0..31EF; CJK Strokes
c = 0x31c0; // from CJK STROKE T
while (c <= 0x31e3) // ..to CJK STROKE Q
while (c <= 0x31e5) // ..to CJK STROKE SZP
charset[i++] = c++;
charset[i++] = 0x31ef; // IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION
// 31F0..31FF; Katakana Phonetic Extensions
c = 0x31f0; // from KATAKANA LETTER SMALL KU
while (c <= 0x31ff) // ..to KATAKANA LETTER SMALL RO
@@ -1067,7 +1059,7 @@ void init()
charset[i++] = c++;
// 4E00..9FFF; CJK Unified Ideographs
c = 0x4e00; // from <CJK Ideograph, First>
while (c <= 0x9ffc) // ..to <CJK Ideograph, Last>
while (c <= 0x9fff) // ..to <CJK Ideograph, Last>
charset[i++] = c++;
// A000..A48F; Yi Syllables
c = 0xa000; // from YI SYLLABLE IT
@@ -1099,12 +1091,14 @@ void init()
charset[i++] = c++;
// A720..A7FF; Latin Extended-D
c = 0xa720; // from MODIFIER LETTER STRESS AND HIGH TONE
while (c <= 0xa7bf) // ..to LATIN SMALL LETTER GLOTTAL U
while (c <= 0xa7cd) // ..to LATIN SMALL LETTER S WITH DIAGONAL STROKE
charset[i++] = c++;
c = 0xa7c2; // from LATIN CAPITAL LETTER ANGLICANA W
while (c <= 0xa7ca) // ..to LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
charset[i++] = 0xa7d0; // LATIN CAPITAL LETTER CLOSED INSULAR G
charset[i++] = 0xa7d1; // LATIN SMALL LETTER CLOSED INSULAR G
c = 0xa7d5; // from LATIN SMALL LETTER DOUBLE WYNN
while (c <= 0xa7dc) // ..to LATIN CAPITAL LETTER LAMBDA WITH STROKE
charset[i++] = c++;
c = 0xa7f5; // from LATIN CAPITAL LETTER REVERSED HALF H
c = 0xa7f2; // from MODIFIER LETTER CAPITAL C
while (c <= 0xa7ff) // ..to LATIN EPIGRAPHIC LETTER ARCHAIC M
charset[i++] = c++;
// A800..A82F; Syloti Nagri
@@ -1259,19 +1253,16 @@ void init()
charset[i++] = c++;
// FB50..FDFF; Arabic Presentation Forms-A
c = 0xfb50; // from ARABIC LETTER ALEF WASLA ISOLATED FORM
while (c <= 0xfbc1) // ..to ARABIC SYMBOL SMALL TAH BELOW
while (c <= 0xfbc2) // ..to ARABIC SYMBOL WASLA ABOVE
charset[i++] = c++;
c = 0xfbd3; // from ARABIC LETTER NG ISOLATED FORM
while (c <= 0xfd3f) // ..to ORNATE RIGHT PARENTHESIS
charset[i++] = c++;
c = 0xfd50; // from ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
while (c <= 0xfd8f) // ..to ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
charset[i++] = c++;
c = 0xfd92; // from ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
while (c <= 0xfdc7) // ..to ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
charset[i++] = c++;
c = 0xfdf0; // from ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
while (c <= 0xfdfd) // ..to ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
while (c <= 0xfdff) // ..to ARABIC LIGATURE AZZA WA JALL
charset[i++] = c++;
// FE00..FE0F; Variation Selectors
c = 0xfe00; // from VARIATION SELECTOR-1
@@ -1444,6 +1435,33 @@ void init()
while (c <= 0x10563) // ..to CAUCASIAN ALBANIAN LETTER KIW
charset[i++] = c++;
charset[i++] = 0x1056f; // CAUCASIAN ALBANIAN CITATION MARK
// 10570..105BF; Vithkuqi
c = 0x10570; // from VITHKUQI CAPITAL LETTER A
while (c <= 0x1057a) // ..to VITHKUQI CAPITAL LETTER GA
charset[i++] = c++;
c = 0x1057c; // from VITHKUQI CAPITAL LETTER HA
while (c <= 0x1058a) // ..to VITHKUQI CAPITAL LETTER RE
charset[i++] = c++;
c = 0x1058c; // from VITHKUQI CAPITAL LETTER SE
while (c <= 0x10592) // ..to VITHKUQI CAPITAL LETTER XE
charset[i++] = c++;
charset[i++] = 0x10594; // VITHKUQI CAPITAL LETTER Y
charset[i++] = 0x10595; // VITHKUQI CAPITAL LETTER ZE
c = 0x10597; // from VITHKUQI SMALL LETTER A
while (c <= 0x105a1) // ..to VITHKUQI SMALL LETTER GA
charset[i++] = c++;
c = 0x105a3; // from VITHKUQI SMALL LETTER HA
while (c <= 0x105b1) // ..to VITHKUQI SMALL LETTER RE
charset[i++] = c++;
c = 0x105b3; // from VITHKUQI SMALL LETTER SE
while (c <= 0x105b9) // ..to VITHKUQI SMALL LETTER XE
charset[i++] = c++;
charset[i++] = 0x105bb; // VITHKUQI SMALL LETTER Y
charset[i++] = 0x105bc; // VITHKUQI SMALL LETTER ZE
// 105C0..105FF; Todhri
c = 0x105c0; // from TODHRI LETTER A
while (c <= 0x105f3) // ..to TODHRI LETTER OO
charset[i++] = c++;
// 10600..1077F; Linear A
c = 0x10600; // from LINEAR A SIGN AB001
while (c <= 0x10736) // ..to LINEAR A SIGN A664
@@ -1454,6 +1472,16 @@ void init()
c = 0x10760; // from LINEAR A SIGN A800
while (c <= 0x10767) // ..to LINEAR A SIGN A807
charset[i++] = c++;
// 10780..107BF; Latin Extended-F
c = 0x10780; // from MODIFIER LETTER SMALL CAPITAL AA
while (c <= 0x10785) // ..to MODIFIER LETTER SMALL B WITH HOOK
charset[i++] = c++;
c = 0x10787; // from MODIFIER LETTER SMALL DZ DIGRAPH
while (c <= 0x107b0) // ..to MODIFIER LETTER SMALL V WITH RIGHT HOOK
charset[i++] = c++;
c = 0x107b2; // from MODIFIER LETTER SMALL CAPITAL Y
while (c <= 0x107ba) // ..to MODIFIER LETTER SMALL S WITH CURL
charset[i++] = c++;
// 10800..1083F; Cypriot Syllabary
c = 0x10800; // from CYPRIOT SYLLABLE A
while (c <= 0x10805) // ..to CYPRIOT SYLLABLE JA
@@ -1606,6 +1634,15 @@ void init()
c = 0x10d30; // from HANIFI ROHINGYA DIGIT ZERO
while (c <= 0x10d39) // ..to HANIFI ROHINGYA DIGIT NINE
charset[i++] = c++;
// 10D40..10D8F; Garay
c = 0x10d40; // from GARAY DIGIT ZERO
while (c <= 0x10d65) // ..to GARAY CAPITAL LETTER OLD NA
charset[i++] = c++;
c = 0x10d69; // from GARAY VOWEL SIGN E
while (c <= 0x10d85) // ..to GARAY SMALL LETTER OLD NA
charset[i++] = c++;
charset[i++] = 0x10d8e; // GARAY PLUS SIGN
charset[i++] = 0x10d8f; // GARAY MINUS SIGN
// 10E60..10E7F; Rumi Numeral Symbols
c = 0x10e60; // from RUMI DIGIT ONE
while (c <= 0x10e7e) // ..to RUMI FRACTION TWO THIRDS
@@ -1618,6 +1655,12 @@ void init()
charset[i++] = 0x10ead; // YEZIDI HYPHENATION MARK
charset[i++] = 0x10eb0; // YEZIDI LETTER LAM WITH DOT ABOVE
charset[i++] = 0x10eb1; // YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
// 10EC0..10EFF; Arabic Extended-C
charset[i++] = 0x10ec2; // ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW
charset[i++] = 0x10ec4; // ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW
c = 0x10efc; // from ARABIC COMBINING ALEF OVERLAY
while (c <= 0x10eff) // ..to ARABIC SMALL LOW WORD MADDA
charset[i++] = c++;
// 10F00..10F2F; Old Sogdian
c = 0x10f00; // from OLD SOGDIAN LETTER ALEPH
while (c <= 0x10f27) // ..to OLD SOGDIAN LIGATURE AYIN-DALETH
@@ -1626,6 +1669,10 @@ void init()
c = 0x10f30; // from SOGDIAN LETTER ALEPH
while (c <= 0x10f59) // ..to SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
charset[i++] = c++;
// 10F70..10FAF; Old Uyghur
c = 0x10f70; // from OLD UYGHUR LETTER ALEPH
while (c <= 0x10f89) // ..to OLD UYGHUR PUNCTUATION FOUR DOTS
charset[i++] = c++;
// 10FB0..10FDF; Chorasmian
c = 0x10fb0; // from CHORASMIAN LETTER ALEPH
while (c <= 0x10fcb) // ..to CHORASMIAN NUMBER ONE HUNDRED
@@ -1639,12 +1686,12 @@ void init()
while (c <= 0x1104d) // ..to BRAHMI PUNCTUATION LOTUS
charset[i++] = c++;
c = 0x11052; // from BRAHMI NUMBER ONE
while (c <= 0x1106f) // ..to BRAHMI DIGIT NINE
while (c <= 0x11075) // ..to BRAHMI LETTER OLD TAMIL LLA
charset[i++] = c++;
charset[i++] = 0x1107f; // BRAHMI NUMBER JOINER
// 11080..110CF; Kaithi
c = 0x11080; // from KAITHI SIGN CANDRABINDU
while (c <= 0x110c1) // ..to KAITHI DOUBLE DANDA
while (c <= 0x110c2) // ..to KAITHI VOWEL SIGN VOCALIC R
charset[i++] = c++;
charset[i++] = 0x110cd; // KAITHI NUMBER SIGN ABOVE
// 110D0..110FF; Sora Sompeng
@@ -1678,7 +1725,7 @@ void init()
while (c <= 0x11211) // ..to KHOJKI LETTER JJA
charset[i++] = c++;
c = 0x11213; // from KHOJKI LETTER NYA
while (c <= 0x1123e) // ..to KHOJKI SIGN SUKUN
while (c <= 0x11241) // ..to KHOJKI VOWEL SIGN VOCALIC R
charset[i++] = c++;
// 11280..112AF; Multani
c = 0x11280; // from MULTANI LETTER A
@@ -1736,6 +1783,26 @@ void init()
c = 0x11370; // from COMBINING GRANTHA LETTER A
while (c <= 0x11374) // ..to COMBINING GRANTHA LETTER PA
charset[i++] = c++;
// 11380..113FF; Tulu-Tigalari
c = 0x11380; // from TULU-TIGALARI LETTER A
while (c <= 0x11389) // ..to TULU-TIGALARI LETTER VOCALIC LL
charset[i++] = c++;
c = 0x11390; // from TULU-TIGALARI LETTER OO
while (c <= 0x113b5) // ..to TULU-TIGALARI LETTER LLLA
charset[i++] = c++;
c = 0x113b7; // from TULU-TIGALARI SIGN AVAGRAHA
while (c <= 0x113c0) // ..to TULU-TIGALARI VOWEL SIGN VOCALIC LL
charset[i++] = c++;
c = 0x113c7; // from TULU-TIGALARI VOWEL SIGN OO
while (c <= 0x113ca) // ..to TULU-TIGALARI SIGN CANDRA ANUNASIKA
charset[i++] = c++;
c = 0x113cc; // from TULU-TIGALARI SIGN ANUSVARA
while (c <= 0x113d5) // ..to TULU-TIGALARI DOUBLE DANDA
charset[i++] = c++;
charset[i++] = 0x113d7; // TULU-TIGALARI SIGN OM PUSHPIKA
charset[i++] = 0x113d8; // TULU-TIGALARI SIGN SHRII PUSHPIKA
charset[i++] = 0x113e1; // TULU-TIGALARI VEDIC TONE SVARITA
charset[i++] = 0x113e2; // TULU-TIGALARI VEDIC TONE ANUDATTA
// 11400..1147F; Newa
c = 0x11400; // from NEWA LETTER A
while (c <= 0x1145b) // ..to NEWA PLACEHOLDER MARK
@@ -1770,12 +1837,16 @@ void init()
charset[i++] = c++;
// 11680..116CF; Takri
c = 0x11680; // from TAKRI LETTER A
while (c <= 0x116b8) // ..to TAKRI LETTER ARCHAIC KHA
while (c <= 0x116b9) // ..to TAKRI ABBREVIATION SIGN
charset[i++] = c++;
c = 0x116c0; // from TAKRI DIGIT ZERO
while (c <= 0x116c9) // ..to TAKRI DIGIT NINE
charset[i++] = c++;
// 11700..1173F; Ahom
// 116D0..116FF; Myanmar Extended-C
c = 0x116d0; // from MYANMAR PAO DIGIT ZERO
while (c <= 0x116e3) // ..to MYANMAR EASTERN PWO KAREN DIGIT NINE
charset[i++] = c++;
// 11700..1174F; Ahom
c = 0x11700; // from AHOM LETTER KA
while (c <= 0x1171a) // ..to AHOM LETTER ALTERNATE BA
charset[i++] = c++;
@@ -1783,7 +1854,7 @@ void init()
while (c <= 0x1172b) // ..to AHOM SIGN KILLER
charset[i++] = c++;
c = 0x11730; // from AHOM DIGIT ZERO
while (c <= 0x1173f) // ..to AHOM SYMBOL VI
while (c <= 0x11746) // ..to AHOM LETTER LLA
charset[i++] = c++;
// 11800..1184F; Dogra
c = 0x11800; // from DOGRA LETTER A
@@ -1832,10 +1903,25 @@ void init()
c = 0x11a50; // from SOYOMBO LETTER A
while (c <= 0x11aa2) // ..to SOYOMBO TERMINAL MARK-2
charset[i++] = c++;
// 11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
c = 0x11ab0; // from CANADIAN SYLLABICS NATTILIK HI
while (c <= 0x11abf) // ..to CANADIAN SYLLABICS SPA
charset[i++] = c++;
// 11AC0..11AFF; Pau Cin Hau
c = 0x11ac0; // from PAU CIN HAU LETTER PA
while (c <= 0x11af8) // ..to PAU CIN HAU GLOTTAL STOP FINAL
charset[i++] = c++;
// 11B00..11B5F; Devanagari Extended-A
c = 0x11b00; // from DEVANAGARI HEAD MARK
while (c <= 0x11b09) // ..to DEVANAGARI SIGN MINDU
charset[i++] = c++;
// 11BC0..11BFF; Sunuwar
c = 0x11bc0; // from SUNUWAR LETTER DEVI
while (c <= 0x11be1) // ..to SUNUWAR SIGN PVO
charset[i++] = c++;
c = 0x11bf0; // from SUNUWAR DIGIT ZERO
while (c <= 0x11bf9) // ..to SUNUWAR DIGIT NINE
charset[i++] = c++;
// 11C00..11C6F; Bhaiksuki
c = 0x11c00; // from BHAIKSUKI LETTER A
while (c <= 0x11c08) // ..to BHAIKSUKI LETTER VOCALIC L
@@ -1897,6 +1983,16 @@ void init()
c = 0x11ee0; // from MAKASAR LETTER KA
while (c <= 0x11ef8) // ..to MAKASAR END OF SECTION
charset[i++] = c++;
// 11F00..11F5F; Kawi
c = 0x11f00; // from KAWI SIGN CANDRABINDU
while (c <= 0x11f10) // ..to KAWI LETTER O
charset[i++] = c++;
c = 0x11f12; // from KAWI LETTER KA
while (c <= 0x11f3a) // ..to KAWI VOWEL SIGN VOCALIC R
charset[i++] = c++;
c = 0x11f3e; // from KAWI VOWEL SIGN E
while (c <= 0x11f5a) // ..to KAWI SIGN NUKTA
charset[i++] = c++;
// 11FB0..11FBF; Lisu Supplement
charset[i++] = 0x11fb0; // LISU LETTER YHA
// 11FC0..11FFF; Tamil Supplement
@@ -1919,18 +2015,30 @@ void init()
c = 0x12480; // from CUNEIFORM SIGN AB TIMES NUN TENU
while (c <= 0x12543) // ..to CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
charset[i++] = c++;
// 12F90..12FFF; Cypro-Minoan
c = 0x12f90; // from CYPRO-MINOAN SIGN CM001
while (c <= 0x12ff2) // ..to CYPRO-MINOAN SIGN CM302
charset[i++] = c++;
// 13000..1342F; Egyptian Hieroglyphs
c = 0x13000; // from EGYPTIAN HIEROGLYPH A001
while (c <= 0x1342e) // ..to EGYPTIAN HIEROGLYPH AA032
while (c <= 0x1342f) // ..to EGYPTIAN HIEROGLYPH V011D
charset[i++] = c++;
// 13430..1343F; Egyptian Hieroglyph Format Controls
// 13430..1345F; Egyptian Hieroglyph Format Controls
c = 0x13430; // from EGYPTIAN HIEROGLYPH VERTICAL JOINER
while (c <= 0x13438) // ..to EGYPTIAN HIEROGLYPH END SEGMENT
while (c <= 0x13455) // ..to EGYPTIAN HIEROGLYPH MODIFIER DAMAGED
charset[i++] = c++;
// 13460..143FF; Egyptian Hieroglyphs Extended-A
c = 0x13460; // from EGYPTIAN HIEROGLYPH-13460
while (c <= 0x143fa) // ..to EGYPTIAN HIEROGLYPH-143FA
charset[i++] = c++;
// 14400..1467F; Anatolian Hieroglyphs
c = 0x14400; // from ANATOLIAN HIEROGLYPH A001
while (c <= 0x14646) // ..to ANATOLIAN HIEROGLYPH A530
charset[i++] = c++;
// 16100..1613F; Gurung Khema
c = 0x16100; // from GURUNG KHEMA LETTER A
while (c <= 0x16139) // ..to GURUNG KHEMA DIGIT NINE
charset[i++] = c++;
// 16800..16A3F; Bamum Supplement
c = 0x16800; // from BAMUM LETTER PHASE-A NGKUE MFON
while (c <= 0x16a38) // ..to BAMUM LETTER PHASE-F VUEQ
@@ -1944,6 +2052,13 @@ void init()
charset[i++] = c++;
charset[i++] = 0x16a6e; // MRO DANDA
charset[i++] = 0x16a6f; // MRO DOUBLE DANDA
// 16A70..16ACF; Tangsa
c = 0x16a70; // from TANGSA LETTER OZ
while (c <= 0x16abe) // ..to TANGSA LETTER ZA
charset[i++] = c++;
c = 0x16ac0; // from TANGSA DIGIT ZERO
while (c <= 0x16ac9) // ..to TANGSA DIGIT NINE
charset[i++] = c++;
// 16AD0..16AFF; Bassa Vah
c = 0x16ad0; // from BASSA VAH LETTER ENNI
while (c <= 0x16aed) // ..to BASSA VAH LETTER I
@@ -1967,6 +2082,10 @@ void init()
c = 0x16b7d; // from PAHAWH HMONG CLAN SIGN TSHEEJ
while (c <= 0x16b8f) // ..to PAHAWH HMONG CLAN SIGN VWJ
charset[i++] = c++;
// 16D40..16D7F; Kirat Rai
c = 0x16d40; // from KIRAT RAI SIGN ANUSVARA
while (c <= 0x16d79) // ..to KIRAT RAI DIGIT NINE
charset[i++] = c++;
// 16E40..16E9F; Medefaidrin
c = 0x16e40; // from MEDEFAIDRIN CAPITAL LETTER M
while (c <= 0x16e9a) // ..to MEDEFAIDRIN EXCLAMATION OH
@@ -1999,17 +2118,27 @@ void init()
c = 0x18b00; // from KHITAN SMALL SCRIPT CHARACTER-18B00
while (c <= 0x18cd5) // ..to KHITAN SMALL SCRIPT CHARACTER-18CD5
charset[i++] = c++;
// 18D00..18D8F; Tangut Supplement
charset[i++] = 0x18cff; // KHITAN SMALL SCRIPT CHARACTER-18CFF
// 18D00..18D7F; Tangut Supplement
c = 0x18d00; // from <Tangut Ideograph Supplement, First>
while (c <= 0x18d08) // ..to <Tangut Ideograph Supplement, Last>
charset[i++] = c++;
// 1AFF0..1AFFF; Kana Extended-B
c = 0x1aff0; // from KATAKANA LETTER MINNAN TONE-2
while (c <= 0x1aff3) // ..to KATAKANA LETTER MINNAN TONE-5
charset[i++] = c++;
c = 0x1aff5; // from KATAKANA LETTER MINNAN TONE-7
while (c <= 0x1affb) // ..to KATAKANA LETTER MINNAN NASALIZED TONE-5
charset[i++] = c++;
charset[i++] = 0x1affd; // KATAKANA LETTER MINNAN NASALIZED TONE-7
charset[i++] = 0x1affe; // KATAKANA LETTER MINNAN NASALIZED TONE-8
// 1B000..1B0FF; Kana Supplement
c = 0x1b000; // from KATAKANA LETTER ARCHAIC E
while (c <= 0x1b0ff) // ..to HENTAIGANA LETTER RE-2
charset[i++] = c++;
// 1B100..1B12F; Kana Extended-A
c = 0x1b100; // from HENTAIGANA LETTER RE-3
while (c <= 0x1b11e) // ..to HENTAIGANA LETTER N-MU-MO-2
while (c <= 0x1b122) // ..to KATAKANA LETTER ARCHAIC WU
charset[i++] = c++;
// 1B130..1B16F; Small Kana Extension
charset[i++] = 0x1b150; // HIRAGANA LETTER SMALL WI
@@ -2041,6 +2170,23 @@ void init()
c = 0x1bca0; // from SHORTHAND FORMAT LETTER OVERLAP
while (c <= 0x1bca3) // ..to SHORTHAND FORMAT UP STEP
charset[i++] = c++;
// 1CC00..1CEBF; Symbols for Legacy Computing Supplement
c = 0x1cc00; // from UP-POINTING GO-KART
while (c <= 0x1ccf9) // ..to OUTLINED DIGIT NINE
charset[i++] = c++;
c = 0x1cd00; // from BLOCK OCTANT-3
while (c <= 0x1ceb3) // ..to BLACK RIGHT TRIANGLE CARET
charset[i++] = c++;
// 1CF00..1CFCF; Znamenny Musical Notation
c = 0x1cf00; // from ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT
while (c <= 0x1cf2d) // ..to ZNAMENNY COMBINING MARK KRYZH ON LEFT
charset[i++] = c++;
c = 0x1cf30; // from ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO
while (c <= 0x1cf46) // ..to ZNAMENNY PRIZNAK MODIFIER ROG
charset[i++] = c++;
c = 0x1cf50; // from ZNAMENNY NEUME KRYUK
while (c <= 0x1cfc3) // ..to ZNAMENNY NEUME PAUK
charset[i++] = c++;
// 1D000..1D0FF; Byzantine Musical Symbols
c = 0x1d000; // from BYZANTINE MUSICAL SYMBOL PSILI
while (c <= 0x1d0f5) // ..to BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
@@ -2050,12 +2196,16 @@ void init()
while (c <= 0x1d126) // ..to MUSICAL SYMBOL DRUM CLEF-2
charset[i++] = c++;
c = 0x1d129; // from MUSICAL SYMBOL MULTIPLE MEASURE REST
while (c <= 0x1d1e8) // ..to MUSICAL SYMBOL KIEVAN FLAT SIGN
while (c <= 0x1d1ea) // ..to MUSICAL SYMBOL KORON
charset[i++] = c++;
// 1D200..1D24F; Ancient Greek Musical Notation
c = 0x1d200; // from GREEK VOCAL NOTATION SYMBOL-1
while (c <= 0x1d245) // ..to GREEK MUSICAL LEIMMA
charset[i++] = c++;
// 1D2C0..1D2DF; Kaktovik Numerals
c = 0x1d2c0; // from KAKTOVIK NUMERAL ZERO
while (c <= 0x1d2d3) // ..to KAKTOVIK NUMERAL NINETEEN
charset[i++] = c++;
// 1D2E0..1D2FF; Mayan Numerals
c = 0x1d2e0; // from MAYAN NUMERAL ZERO
while (c <= 0x1d2f3) // ..to MAYAN NUMERAL NINETEEN
@@ -2131,6 +2281,13 @@ void init()
c = 0x1daa1; // from SIGNWRITING ROTATION MODIFIER-2
while (c <= 0x1daaf) // ..to SIGNWRITING ROTATION MODIFIER-16
charset[i++] = c++;
// 1DF00..1DFFF; Latin Extended-G
c = 0x1df00; // from LATIN SMALL LETTER FENG DIGRAPH WITH TRILL
while (c <= 0x1df1e) // ..to LATIN SMALL LETTER S WITH CURL
charset[i++] = c++;
c = 0x1df25; // from LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK
while (c <= 0x1df2a) // ..to LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK
charset[i++] = c++;
// 1E000..1E02F; Glagolitic Supplement
c = 0x1e000; // from COMBINING GLAGOLITIC LETTER AZU
while (c <= 0x1e006) // ..to COMBINING GLAGOLITIC LETTER ZHIVETE
@@ -2146,6 +2303,11 @@ void init()
c = 0x1e026; // from COMBINING GLAGOLITIC LETTER YO
while (c <= 0x1e02a) // ..to COMBINING GLAGOLITIC LETTER FITA
charset[i++] = c++;
// 1E030..1E08F; Cyrillic Extended-D
c = 0x1e030; // from MODIFIER LETTER CYRILLIC SMALL A
while (c <= 0x1e06d) // ..to MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE
charset[i++] = c++;
charset[i++] = 0x1e08f; // COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
// 1E100..1E14F; Nyiakeng Puachue Hmong
c = 0x1e100; // from NYIAKENG PUACHUE HMONG LETTER MA
while (c <= 0x1e12c) // ..to NYIAKENG PUACHUE HMONG LETTER W
@@ -2158,11 +2320,36 @@ void init()
charset[i++] = c++;
charset[i++] = 0x1e14e; // NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
charset[i++] = 0x1e14f; // NYIAKENG PUACHUE HMONG CIRCLED CA
// 1E290..1E2BF; Toto
c = 0x1e290; // from TOTO LETTER PA
while (c <= 0x1e2ae) // ..to TOTO SIGN RISING TONE
charset[i++] = c++;
// 1E2C0..1E2FF; Wancho
c = 0x1e2c0; // from WANCHO LETTER AA
while (c <= 0x1e2f9) // ..to WANCHO DIGIT NINE
charset[i++] = c++;
charset[i++] = 0x1e2ff; // WANCHO NGUN SIGN
// 1E4D0..1E4FF; Nag Mundari
c = 0x1e4d0; // from NAG MUNDARI LETTER O
while (c <= 0x1e4f9) // ..to NAG MUNDARI DIGIT NINE
charset[i++] = c++;
// 1E5D0..1E5FF; Ol Onal
c = 0x1e5d0; // from OL ONAL LETTER O
while (c <= 0x1e5fa) // ..to OL ONAL DIGIT NINE
charset[i++] = c++;
charset[i++] = 0x1e5ff; // OL ONAL ABBREVIATION SIGN
// 1E7E0..1E7FF; Ethiopic Extended-B
c = 0x1e7e0; // from ETHIOPIC SYLLABLE HHYA
while (c <= 0x1e7e6) // ..to ETHIOPIC SYLLABLE HHYO
charset[i++] = c++;
c = 0x1e7e8; // from ETHIOPIC SYLLABLE GURAGE HHWA
while (c <= 0x1e7eb) // ..to ETHIOPIC SYLLABLE HHWE
charset[i++] = c++;
charset[i++] = 0x1e7ed; // ETHIOPIC SYLLABLE GURAGE MWI
charset[i++] = 0x1e7ee; // ETHIOPIC SYLLABLE GURAGE MWEE
c = 0x1e7f0; // from ETHIOPIC SYLLABLE GURAGE QWI
while (c <= 0x1e7fe) // ..to ETHIOPIC SYLLABLE GURAGE PWEE
charset[i++] = c++;
// 1E800..1E8DF; Mende Kikakui
c = 0x1e800; // from MENDE KIKAKUI SYLLABLE M001 KI
while (c <= 0x1e8c4) // ..to MENDE KIKAKUI SYLLABLE M060 NYON
@@ -2294,7 +2481,7 @@ void init()
c = 0x1f680; // from ROCKET
while (c <= 0x1f6d7) // ..to ELEVATOR
charset[i++] = c++;
c = 0x1f6e0; // from HAMMER AND WRENCH
c = 0x1f6dc; // from WIRELESS
while (c <= 0x1f6ec) // ..to AIRPLANE ARRIVING
charset[i++] = c++;
c = 0x1f6f0; // from SATELLITE
@@ -2302,15 +2489,19 @@ void init()
charset[i++] = c++;
// 1F700..1F77F; Alchemical Symbols
c = 0x1f700; // from ALCHEMICAL SYMBOL FOR QUINTESSENCE
while (c <= 0x1f773) // ..to ALCHEMICAL SYMBOL FOR HALF OUNCE
while (c <= 0x1f776) // ..to LUNAR ECLIPSE
charset[i++] = c++;
c = 0x1f77b; // from HAUMEA
while (c <= 0x1f77f) // ..to ORCUS
charset[i++] = c++;
// 1F780..1F7FF; Geometric Shapes Extended
c = 0x1f780; // from BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE
while (c <= 0x1f7d8) // ..to NEGATIVE CIRCLED SQUARE
while (c <= 0x1f7d9) // ..to NINE POINTED WHITE STAR
charset[i++] = c++;
c = 0x1f7e0; // from LARGE ORANGE CIRCLE
while (c <= 0x1f7eb) // ..to LARGE BROWN SQUARE
charset[i++] = c++;
charset[i++] = 0x1f7f0; // HEAVY EQUALS SIGN
// 1F800..1F8FF; Supplemental Arrows-C
c = 0x1f800; // from LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
while (c <= 0x1f80b) // ..to DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
@@ -2327,16 +2518,13 @@ void init()
c = 0x1f890; // from LEFTWARDS TRIANGLE ARROWHEAD
while (c <= 0x1f8ad) // ..to WHITE ARROW SHAFT WIDTH TWO THIRDS
charset[i++] = c++;
charset[i++] = 0x1f8b0; // ARROW POINTING UPWARDS THEN NORTH WEST
charset[i++] = 0x1f8b1; // ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
c = 0x1f8b0; // from ARROW POINTING UPWARDS THEN NORTH WEST
while (c <= 0x1f8bb) // ..to SOUTH WEST ARROW FROM BAR
charset[i++] = c++;
charset[i++] = 0x1f8c0; // LEFTWARDS ARROW FROM DOWNWARDS ARROW
charset[i++] = 0x1f8c1; // RIGHTWARDS ARROW FROM DOWNWARDS ARROW
// 1F900..1F9FF; Supplemental Symbols and Pictographs
c = 0x1f900; // from CIRCLED CROSS FORMEE WITH FOUR DOTS
while (c <= 0x1f978) // ..to DISGUISED FACE
charset[i++] = c++;
c = 0x1f97a; // from FACE WITH PLEADING EYES
while (c <= 0x1f9cb) // ..to BUBBLE TEA
charset[i++] = c++;
c = 0x1f9cd; // from STANDING PERSON
while (c <= 0x1f9ff) // ..to NAZAR AMULET
charset[i++] = c++;
// 1FA00..1FA6F; Chess Symbols
@@ -2348,41 +2536,37 @@ void init()
charset[i++] = c++;
// 1FA70..1FAFF; Symbols and Pictographs Extended-A
c = 0x1fa70; // from BALLET SHOES
while (c <= 0x1fa74) // ..to THONG SANDAL
while (c <= 0x1fa7c) // ..to CRUTCH
charset[i++] = c++;
charset[i++] = 0x1fa78; // DROP OF BLOOD
charset[i++] = 0x1fa7a; // STETHOSCOPE
c = 0x1fa80; // from YO-YO
while (c <= 0x1fa86) // ..to NESTING DOLLS
while (c <= 0x1fa89) // ..to HARP
charset[i++] = c++;
c = 0x1fa90; // from RINGED PLANET
while (c <= 0x1faa8) // ..to ROCK
c = 0x1fa8f; // from SHOVEL
while (c <= 0x1fac6) // ..to FINGERPRINT
charset[i++] = c++;
c = 0x1fab0; // from FLY
while (c <= 0x1fab6) // ..to FEATHER
c = 0x1face; // from MOOSE
while (c <= 0x1fadc) // ..to ROOT VEGETABLE
charset[i++] = c++;
charset[i++] = 0x1fac0; // ANATOMICAL HEART
charset[i++] = 0x1fac2; // PEOPLE HUGGING
c = 0x1fad0; // from BLUEBERRIES
while (c <= 0x1fad6) // ..to TEAPOT
c = 0x1fadf; // from SPLATTER
while (c <= 0x1fae9) // ..to FACE WITH BAGS UNDER EYES
charset[i++] = c++;
c = 0x1faf0; // from HAND WITH INDEX FINGER AND THUMB CROSSED
while (c <= 0x1faf8) // ..to RIGHTWARDS PUSHING HAND
charset[i++] = c++;
// 1FB00..1FBFF; Symbols for Legacy Computing
c = 0x1fb00; // from BLOCK SEXTANT-1
while (c <= 0x1fb92) // ..to UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
charset[i++] = c++;
c = 0x1fb94; // from LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK
while (c <= 0x1fbca) // ..to WHITE UP-POINTING CHEVRON
charset[i++] = c++;
c = 0x1fbf0; // from SEGMENTED DIGIT ZERO
while (c <= 0x1fbf9) // ..to SEGMENTED DIGIT NINE
charset[i++] = c++;
// 20000..2A6DF; CJK Unified Ideographs Extension B
c = 0x20000; // from <CJK Ideograph Extension B, First>
while (c <= 0x2a6dd) // ..to <CJK Ideograph Extension B, Last>
while (c <= 0x2a6df) // ..to <CJK Ideograph Extension B, Last>
charset[i++] = c++;
// 2A700..2B73F; CJK Unified Ideographs Extension C
c = 0x2a700; // from <CJK Ideograph Extension C, First>
while (c <= 0x2b734) // ..to <CJK Ideograph Extension C, Last>
while (c <= 0x2b739) // ..to <CJK Ideograph Extension C, Last>
charset[i++] = c++;
// 2B740..2B81F; CJK Unified Ideographs Extension D
c = 0x2b740; // from <CJK Ideograph Extension D, First>
@@ -2396,6 +2580,10 @@ void init()
c = 0x2ceb0; // from <CJK Ideograph Extension F, First>
while (c <= 0x2ebe0) // ..to <CJK Ideograph Extension F, Last>
charset[i++] = c++;
// 2EBF0..2EE5F; CJK Unified Ideographs Extension I
c = 0x2ebf0; // from <CJK Ideograph Extension I, First>
while (c <= 0x2ee5d) // ..to <CJK Ideograph Extension I, Last>
charset[i++] = c++;
// 2F800..2FA1F; CJK Compatibility Ideographs Supplement
c = 0x2f800; // from CJK COMPATIBILITY IDEOGRAPH-2F800
while (c <= 0x2fa1d) // ..to CJK COMPATIBILITY IDEOGRAPH-2FA1D
@@ -2404,6 +2592,10 @@ void init()
c = 0x30000; // from <CJK Ideograph Extension G, First>
while (c <= 0x3134a) // ..to <CJK Ideograph Extension G, Last>
charset[i++] = c++;
// 31350..323AF; CJK Unified Ideographs Extension H
c = 0x31350; // from <CJK Ideograph Extension H, First>
while (c <= 0x323af) // ..to <CJK Ideograph Extension H, Last>
charset[i++] = c++;
// E0000..E007F; Tags
c = 0xe0020; // from TAG SPACE
while (c <= 0xe007f) // ..to CANCEL TAG
Binary file not shown.
File diff suppressed because one or more lines are too long
+6 -9
View File
@@ -10,7 +10,6 @@ bulletproof-security
catch-themes-demo-import
chopslider
custom-registration-form-builder-with-submission-manager
depicter
download-manager
drag-and-drop-multiple-file-upload-contact-form-7
dukapress
@@ -30,6 +29,7 @@ learnpress
loginizer
masterstudy-lms-learning-management-system
modern-events-calendar-lite
modern-events-calendar-lite
nextgen-gallery
ninja-forms
paid-memberships-pro
@@ -48,11 +48,7 @@ simple-file-list
slideshow-gallery
sp-client-document-manager
subscribe-to-comments
suretriggers
tatsu
ultimate-member
user-registration
user-registration-pro
website-contact-form-with-file-upload
woocommerce-abandoned-cart
woocommerce-payments
@@ -60,17 +56,18 @@ wordpress-mobile-pack
wordpress-popular-posts
work-the-flow-file-upload
wp-automatic
wpdiscuz
wp-easycart
wp-fastest-cache
wp-file-manager
wp-gdpr-compliance
wp-mobile-detector
wp-mobile-edition
wps-hide-login
wpshop
wp-symposium
wp-symposium
wp-time-capsule
wptouch
wp-ultimate-csv-importer
wpdiscuz
wps-hide-login
wpshop
wptouch
wysija-newsletters
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -9,16 +9,16 @@ module Rex::UserAgent
# Taken from https://www.whatismybrowser.com/guides/the-latest-user-agent/
#
COMMON_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', # Chrome Windows
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', # Chrome MacOS
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36', # Chrome Windows
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36', # Chrome MacOS
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.2903.86', # Edge Windows
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.3912.98', # Edge Windows
'Mozilla/5.0 (iPad; CPU OS 17_7_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1', # Safari iPad
'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Safari/605.1.15', # Safari MacOS
'Mozilla/5.0 (iPad; CPU OS 18_7_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1', # Safari iPad
'Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15', # Safari MacOS
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0', # Firefox Windows
'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.7; rv:133.0) Gecko/20100101 Firefox/133.0' # Firefox MacOS
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0', # Firefox Windows
'Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:150.0) Gecko/20100101 Firefox/150.0' # Firefox MacOS
]
#