From 1217ccc0e1ba186367ef3ffc3e36981fe682b408 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 13:59:09 +0100 Subject: [PATCH 01/16] Move mock home directories to src/home --- {mock => src/home}/basileusalex/.face | Bin {mock => src/home}/chairmanzedong/.face | Bin {mock => src/home}/cristocolombo/.face | Bin {mock => src/home}/gorbachev/.face | Bin {mock => src/home}/gustav2/.face | Bin {mock => src/home}/honourablewinston/.face | Bin {mock => src/home}/imperatoraugustus/.face | Bin {mock => src/home}/jackkennedy/.face | Bin {mock => src/home}/khagantemujin/.face | Bin {mock => src/home}/mehmedisani/.face | Bin {mock => src/home}/meijitaitei/.face | Bin {mock => src/home}/napoleonib/.face | Bin {mock => src/home}/peteralexeyevich/.face | Bin {mock => src/home}/redthorvald/.face | Bin {mock => src/home}/silentwill/.face | Bin {mock => src/home}/wilhelm1/.face | Bin 16 files changed, 0 insertions(+), 0 deletions(-) rename {mock => src/home}/basileusalex/.face (100%) rename {mock => src/home}/chairmanzedong/.face (100%) rename {mock => src/home}/cristocolombo/.face (100%) rename {mock => src/home}/gorbachev/.face (100%) rename {mock => src/home}/gustav2/.face (100%) rename {mock => src/home}/honourablewinston/.face (100%) rename {mock => src/home}/imperatoraugustus/.face (100%) rename {mock => src/home}/jackkennedy/.face (100%) rename {mock => src/home}/khagantemujin/.face (100%) rename {mock => src/home}/mehmedisani/.face (100%) rename {mock => src/home}/meijitaitei/.face (100%) rename {mock => src/home}/napoleonib/.face (100%) rename {mock => src/home}/peteralexeyevich/.face (100%) rename {mock => src/home}/redthorvald/.face (100%) rename {mock => src/home}/silentwill/.face (100%) rename {mock => src/home}/wilhelm1/.face (100%) diff --git a/mock/basileusalex/.face b/src/home/basileusalex/.face similarity index 100% rename from mock/basileusalex/.face rename to src/home/basileusalex/.face diff --git a/mock/chairmanzedong/.face b/src/home/chairmanzedong/.face similarity index 100% rename from mock/chairmanzedong/.face rename to src/home/chairmanzedong/.face diff --git a/mock/cristocolombo/.face b/src/home/cristocolombo/.face similarity index 100% rename from mock/cristocolombo/.face rename to src/home/cristocolombo/.face diff --git a/mock/gorbachev/.face b/src/home/gorbachev/.face similarity index 100% rename from mock/gorbachev/.face rename to src/home/gorbachev/.face diff --git a/mock/gustav2/.face b/src/home/gustav2/.face similarity index 100% rename from mock/gustav2/.face rename to src/home/gustav2/.face diff --git a/mock/honourablewinston/.face b/src/home/honourablewinston/.face similarity index 100% rename from mock/honourablewinston/.face rename to src/home/honourablewinston/.face diff --git a/mock/imperatoraugustus/.face b/src/home/imperatoraugustus/.face similarity index 100% rename from mock/imperatoraugustus/.face rename to src/home/imperatoraugustus/.face diff --git a/mock/jackkennedy/.face b/src/home/jackkennedy/.face similarity index 100% rename from mock/jackkennedy/.face rename to src/home/jackkennedy/.face diff --git a/mock/khagantemujin/.face b/src/home/khagantemujin/.face similarity index 100% rename from mock/khagantemujin/.face rename to src/home/khagantemujin/.face diff --git a/mock/mehmedisani/.face b/src/home/mehmedisani/.face similarity index 100% rename from mock/mehmedisani/.face rename to src/home/mehmedisani/.face diff --git a/mock/meijitaitei/.face b/src/home/meijitaitei/.face similarity index 100% rename from mock/meijitaitei/.face rename to src/home/meijitaitei/.face diff --git a/mock/napoleonib/.face b/src/home/napoleonib/.face similarity index 100% rename from mock/napoleonib/.face rename to src/home/napoleonib/.face diff --git a/mock/peteralexeyevich/.face b/src/home/peteralexeyevich/.face similarity index 100% rename from mock/peteralexeyevich/.face rename to src/home/peteralexeyevich/.face diff --git a/mock/redthorvald/.face b/src/home/redthorvald/.face similarity index 100% rename from mock/redthorvald/.face rename to src/home/redthorvald/.face diff --git a/mock/silentwill/.face b/src/home/silentwill/.face similarity index 100% rename from mock/silentwill/.face rename to src/home/silentwill/.face diff --git a/mock/wilhelm1/.face b/src/home/wilhelm1/.face similarity index 100% rename from mock/wilhelm1/.face rename to src/home/wilhelm1/.face From f9272107efdaf9ebfd4c11c6996d1325e9ef9175 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:00:10 +0100 Subject: [PATCH 02/16] Move autofill data to JSON files instead of b64 encoded in the script --- src/json/languages.json | 7 + src/json/layouts.json | 1999 +++++++++++++++++++++++++++++++++++++++ src/json/sessions.json | 19 + src/json/users.json | 138 +++ 4 files changed, 2163 insertions(+) create mode 100644 src/json/languages.json create mode 100644 src/json/layouts.json create mode 100644 src/json/sessions.json create mode 100644 src/json/users.json diff --git a/src/json/languages.json b/src/json/languages.json new file mode 100644 index 0000000..cb9946a --- /dev/null +++ b/src/json/languages.json @@ -0,0 +1,7 @@ +[ + { + "name":"English", + "code":"en", + "territory":null + } +] diff --git a/src/json/layouts.json b/src/json/layouts.json new file mode 100644 index 0000000..c7d2c90 --- /dev/null +++ b/src/json/layouts.json @@ -0,0 +1,1999 @@ +[ + { + "name" : "us", + "short_description" : "en", + "description" : "English (US)" + }, { + "name" : "us\tchr", + "short_description" : "chr", + "description" : "Cherokee" + }, { + "name" : "us\teuro", + "short_description" : "", + "description" : "English (US, with euro on 5)" + }, { + "name" : "us\tintl", + "short_description" : "", + "description" : "English (US, international with dead keys)" + }, { + "name" : "us\talt-intl", + "short_description" : "", + "description" : "English (US, alternative international)" + }, { + "name" : "us\tcolemak", + "short_description" : "", + "description" : "English (Colemak)" + }, { + "name" : "us\tdvorak", + "short_description" : "", + "description" : "English (Dvorak)" + }, { + "name" : "us\tdvorak-intl", + "short_description" : "", + "description" : "English (Dvorak, international with dead keys)" + }, { + "name" : "us\tdvorak-alt-intl", + "short_description" : "", + "description" : "English (Dvorak alternative international no dead keys)" + }, { + "name" : "us\tdvorak-l", + "short_description" : "", + "description" : "English (left handed Dvorak)" + }, { + "name" : "us\tdvorak-r", + "short_description" : "", + "description" : "English (right handed Dvorak)" + }, { + "name" : "us\tdvorak-classic", + "short_description" : "", + "description" : "English (classic Dvorak)" + }, { + "name" : "us\tdvp", + "short_description" : "", + "description" : "English (programmer Dvorak)" + }, { + "name" : "us\trus", + "short_description" : "ru", + "description" : "Russian (US, phonetic)" + }, { + "name" : "us\tmac", + "short_description" : "", + "description" : "English (Macintosh)" + }, { + "name" : "us\taltgr-intl", + "short_description" : "", + "description" : "English (international AltGr dead keys)" + }, { + "name" : "us\tolpc2", + "short_description" : "", + "description" : "English (the divide/multiply keys toggle the layout)" + }, { + "name" : "us\thbs", + "short_description" : "", + "description" : "Serbo-Croatian (US)" + }, { + "name" : "us\tworkman", + "short_description" : "", + "description" : "English (Workman)" + }, { + "name" : "us\tworkman-intl", + "short_description" : "", + "description" : "English (Workman, international with dead keys)" + }, { + "name" : "af", + "short_description" : "fa", + "description" : "Afghani" + }, { + "name" : "af\tps", + "short_description" : "ps", + "description" : "Pashto" + }, { + "name" : "af\tuz", + "short_description" : "uz", + "description" : "Uzbek (Afghanistan)" + }, { + "name" : "af\tolpc-ps", + "short_description" : "ps", + "description" : "Pashto (Afghanistan, OLPC)" + }, { + "name" : "af\tfa-olpc", + "short_description" : "fa", + "description" : "Persian (Afghanistan, Dari OLPC)" + }, { + "name" : "af\tuz-olpc", + "short_description" : "uz", + "description" : "Uzbek (Afghanistan, OLPC)" + }, { + "name" : "ara", + "short_description" : "ar", + "description" : "Arabic" + }, { + "name" : "ara\tazerty", + "short_description" : "", + "description" : "Arabic (azerty)" + }, { + "name" : "ara\tazerty_digits", + "short_description" : "", + "description" : "Arabic (azerty/digits)" + }, { + "name" : "ara\tdigits", + "short_description" : "", + "description" : "Arabic (digits)" + }, { + "name" : "ara\tqwerty", + "short_description" : "", + "description" : "Arabic (qwerty)" + }, { + "name" : "ara\tqwerty_digits", + "short_description" : "", + "description" : "Arabic (qwerty/digits)" + }, { + "name" : "ara\tbuckwalter", + "short_description" : "", + "description" : "Arabic (Buckwalter)" + }, { + "name" : "al", + "short_description" : "sq", + "description" : "Albanian" + }, { + "name" : "am", + "short_description" : "hy", + "description" : "Armenian" + }, { + "name" : "am\tphonetic", + "short_description" : "", + "description" : "Armenian (phonetic)" + }, { + "name" : "am\tphonetic-alt", + "short_description" : "", + "description" : "Armenian (alternative phonetic)" + }, { + "name" : "am\teastern", + "short_description" : "", + "description" : "Armenian (eastern)" + }, { + "name" : "am\twestern", + "short_description" : "", + "description" : "Armenian (western)" + }, { + "name" : "am\teastern-alt", + "short_description" : "", + "description" : "Armenian (alternative eastern)" + }, { + "name" : "at", + "short_description" : "de", + "description" : "German (Austria)" + }, { + "name" : "at\tnodeadkeys", + "short_description" : "", + "description" : "German (Austria, eliminate dead keys)" + }, { + "name" : "at\tsundeadkeys", + "short_description" : "", + "description" : "German (Austria, Sun dead keys)" + }, { + "name" : "at\tmac", + "short_description" : "", + "description" : "German (Austria, Macintosh)" + }, { + "name" : "az", + "short_description" : "az", + "description" : "Azerbaijani" + }, { + "name" : "az\tcyrillic", + "short_description" : "", + "description" : "Azerbaijani (Cyrillic)" + }, { + "name" : "by", + "short_description" : "by", + "description" : "Belarusian" + }, { + "name" : "by\tlegacy", + "short_description" : "", + "description" : "Belarusian (legacy)" + }, { + "name" : "by\tlatin", + "short_description" : "", + "description" : "Belarusian (Latin)" + }, { + "name" : "be", + "short_description" : "be", + "description" : "Belgian" + }, { + "name" : "be\toss", + "short_description" : "", + "description" : "Belgian (alternative)" + }, { + "name" : "be\toss_latin9", + "short_description" : "", + "description" : "Belgian (alternative, Latin-9 only)" + }, { + "name" : "be\toss_sundeadkeys", + "short_description" : "", + "description" : "Belgian (alternative, Sun dead keys)" + }, { + "name" : "be\tiso-alternate", + "short_description" : "", + "description" : "Belgian (ISO alternate)" + }, { + "name" : "be\tnodeadkeys", + "short_description" : "", + "description" : "Belgian (eliminate dead keys)" + }, { + "name" : "be\tsundeadkeys", + "short_description" : "", + "description" : "Belgian (Sun dead keys)" + }, { + "name" : "be\twang", + "short_description" : "", + "description" : "Belgian (Wang model 724 azerty)" + }, { + "name" : "bd", + "short_description" : "bn", + "description" : "Bangla" + }, { + "name" : "bd\tprobhat", + "short_description" : "", + "description" : "Bangla (Probhat)" + }, { + "name" : "in", + "short_description" : "in", + "description" : "Indian" + }, { + "name" : "in\tben", + "short_description" : "bn", + "description" : "Bangla (India)" + }, { + "name" : "in\tben_probhat", + "short_description" : "bn", + "description" : "Bangla (India, Probhat)" + }, { + "name" : "in\tben_baishakhi", + "short_description" : "", + "description" : "Bangla (India, Baishakhi)" + }, { + "name" : "in\tben_bornona", + "short_description" : "", + "description" : "Bangla (India, Bornona)" + }, { + "name" : "in\tben_gitanjali", + "short_description" : "", + "description" : "Bangla (India, Uni Gitanjali)" + }, { + "name" : "in\tben_inscript", + "short_description" : "", + "description" : "Bangla (India, Baishakhi Inscript)" + }, { + "name" : "in\tguj", + "short_description" : "gu", + "description" : "Gujarati" + }, { + "name" : "in\tguru", + "short_description" : "pa", + "description" : "Punjabi (Gurmukhi)" + }, { + "name" : "in\tjhelum", + "short_description" : "pa", + "description" : "Punjabi (Gurmukhi Jhelum)" + }, { + "name" : "in\tkan", + "short_description" : "kn", + "description" : "Kannada" + }, { + "name" : "in\tkan-kagapa", + "short_description" : "kn", + "description" : "Kannada (KaGaPa phonetic)" + }, { + "name" : "in\tmal", + "short_description" : "ml", + "description" : "Malayalam" + }, { + "name" : "in\tmal_lalitha", + "short_description" : "ml", + "description" : "Malayalam (Lalitha)" + }, { + "name" : "in\tmal_enhanced", + "short_description" : "ml", + "description" : "Malayalam (enhanced Inscript with Rupee Sign)" + }, { + "name" : "in\tori", + "short_description" : "or", + "description" : "Oriya" + }, { + "name" : "in\ttam_unicode", + "short_description" : "ta", + "description" : "Tamil (Unicode)" + }, { + "name" : "in\ttam_keyboard_with_numerals", + "short_description" : "ta", + "description" : "Tamil (keyboard with numerals)" + }, { + "name" : "in\ttam_TAB", + "short_description" : "ta", + "description" : "Tamil (TAB typewriter)" + }, { + "name" : "in\ttam_TSCII", + "short_description" : "ta", + "description" : "Tamil (TSCII typewriter)" + }, { + "name" : "in\ttam", + "short_description" : "ta", + "description" : "Tamil" + }, { + "name" : "in\ttel", + "short_description" : "te", + "description" : "Telugu" + }, { + "name" : "in\ttel-kagapa", + "short_description" : "te", + "description" : "Telugu (KaGaPa phonetic)" + }, { + "name" : "in\turd-phonetic", + "short_description" : "ur", + "description" : "Urdu (phonetic)" + }, { + "name" : "in\turd-phonetic3", + "short_description" : "ur", + "description" : "Urdu (alternative phonetic)" + }, { + "name" : "in\turd-winkeys", + "short_description" : "ur", + "description" : "Urdu (WinKeys)" + }, { + "name" : "in\tbolnagri", + "short_description" : "hi", + "description" : "Hindi (Bolnagri)" + }, { + "name" : "in\thin-wx", + "short_description" : "hi", + "description" : "Hindi (Wx)" + }, { + "name" : "in\thin-kagapa", + "short_description" : "hi", + "description" : "Hindi (KaGaPa phonetic)" + }, { + "name" : "in\tsan-kagapa", + "short_description" : "sa", + "description" : "Sanskrit (KaGaPa phonetic)" + }, { + "name" : "in\tmar-kagapa", + "short_description" : "mr", + "description" : "Marathi (KaGaPa phonetic)" + }, { + "name" : "in\teng", + "short_description" : "en", + "description" : "English (India, with RupeeSign)" + }, { + "name" : "ba", + "short_description" : "bs", + "description" : "Bosnian" + }, { + "name" : "ba\talternatequotes", + "short_description" : "", + "description" : "Bosnian (use guillemets for quotes)" + }, { + "name" : "ba\tunicode", + "short_description" : "", + "description" : "Bosnian (use Bosnian digraphs)" + }, { + "name" : "ba\tunicodeus", + "short_description" : "", + "description" : "Bosnian (US keyboard with Bosnian digraphs)" + }, { + "name" : "ba\tus", + "short_description" : "", + "description" : "Bosnian (US keyboard with Bosnian letters)" + }, { + "name" : "br", + "short_description" : "pt", + "description" : "Portuguese (Brazil)" + }, { + "name" : "br\tnodeadkeys", + "short_description" : "", + "description" : "Portuguese (Brazil, eliminate dead keys)" + }, { + "name" : "br\tdvorak", + "short_description" : "", + "description" : "Portuguese (Brazil, Dvorak)" + }, { + "name" : "br\tnativo", + "short_description" : "", + "description" : "Portuguese (Brazil, nativo)" + }, { + "name" : "br\tnativo-us", + "short_description" : "", + "description" : "Portuguese (Brazil, nativo for US keyboards)" + }, { + "name" : "br\tnativo-epo", + "short_description" : "", + "description" : "Portuguese (Brazil, nativo for Esperanto)" + }, { + "name" : "bg", + "short_description" : "bg", + "description" : "Bulgarian" + }, { + "name" : "bg\tphonetic", + "short_description" : "", + "description" : "Bulgarian (traditional phonetic)" + }, { + "name" : "bg\tbas_phonetic", + "short_description" : "", + "description" : "Bulgarian (new phonetic)" + }, { + "name" : "ma", + "short_description" : "ar", + "description" : "Arabic (Morocco)" + }, { + "name" : "ma\tfrench", + "short_description" : "fr", + "description" : "French (Morocco)" + }, { + "name" : "ma\ttifinagh", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh)" + }, { + "name" : "ma\ttifinagh-alt", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh alternative)" + }, { + "name" : "ma\ttifinagh-alt-phonetic", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh alternative phonetic)" + }, { + "name" : "ma\ttifinagh-extended", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh extended)" + }, { + "name" : "ma\ttifinagh-phonetic", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh phonetic)" + }, { + "name" : "ma\ttifinagh-extended-phonetic", + "short_description" : "ber", + "description" : "Berber (Morocco, Tifinagh extended phonetic)" + }, { + "name" : "cm", + "short_description" : "cm", + "description" : "English (Cameroon)" + }, { + "name" : "cm\tfrench", + "short_description" : "", + "description" : "French (Cameroon)" + }, { + "name" : "cm\tqwerty", + "short_description" : "", + "description" : "Cameroon Multilingual (qwerty)" + }, { + "name" : "cm\tazerty", + "short_description" : "", + "description" : "Cameroon Multilingual (azerty)" + }, { + "name" : "cm\tdvorak", + "short_description" : "", + "description" : "Cameroon Multilingual (Dvorak)" + }, { + "name" : "mm", + "short_description" : "my", + "description" : "Burmese" + }, { + "name" : "ca", + "short_description" : "fr", + "description" : "French (Canada)" + }, { + "name" : "ca\tfr-dvorak", + "short_description" : "fr", + "description" : "French (Canada, Dvorak)" + }, { + "name" : "ca\tfr-legacy", + "short_description" : "fr", + "description" : "French (Canada, legacy)" + }, { + "name" : "ca\tmultix", + "short_description" : "", + "description" : "Canadian Multilingual" + }, { + "name" : "ca\tmulti", + "short_description" : "", + "description" : "Canadian Multilingual (first part)" + }, { + "name" : "ca\tmulti-2gr", + "short_description" : "", + "description" : "Canadian Multilingual (second part)" + }, { + "name" : "ca\tike", + "short_description" : "ike", + "description" : "Inuktitut" + }, { + "name" : "ca\teng", + "short_description" : "en", + "description" : "English (Canada)" + }, { + "name" : "cd", + "short_description" : "fr", + "description" : "French (Democratic Republic of the Congo)" + }, { + "name" : "cn", + "short_description" : "zh", + "description" : "Chinese" + }, { + "name" : "cn\ttib", + "short_description" : "", + "description" : "Tibetan" + }, { + "name" : "cn\ttib_asciinum", + "short_description" : "", + "description" : "Tibetan (with ASCII numerals)" + }, { + "name" : "cn\tuig", + "short_description" : "", + "description" : "Uyghur" + }, { + "name" : "hr", + "short_description" : "hr", + "description" : "Croatian" + }, { + "name" : "hr\talternatequotes", + "short_description" : "", + "description" : "Croatian (use guillemets for quotes)" + }, { + "name" : "hr\tunicode", + "short_description" : "", + "description" : "Croatian (use Croatian digraphs)" + }, { + "name" : "hr\tunicodeus", + "short_description" : "", + "description" : "Croatian (US keyboard with Croatian digraphs)" + }, { + "name" : "hr\tus", + "short_description" : "", + "description" : "Croatian (US keyboard with Croatian letters)" + }, { + "name" : "cz", + "short_description" : "cs", + "description" : "Czech" + }, { + "name" : "cz\tbksl", + "short_description" : "", + "description" : "Czech (with <\\|> key)" + }, { + "name" : "cz\tqwerty", + "short_description" : "", + "description" : "Czech (qwerty)" + }, { + "name" : "cz\tqwerty_bksl", + "short_description" : "", + "description" : "Czech (qwerty, extended Backslash)" + }, { + "name" : "cz\tucw", + "short_description" : "", + "description" : "Czech (UCW layout, accented letters only)" + }, { + "name" : "cz\tdvorak-ucw", + "short_description" : "", + "description" : "Czech (US Dvorak with CZ UCW support)" + }, { + "name" : "dk", + "short_description" : "da", + "description" : "Danish" + }, { + "name" : "dk\tnodeadkeys", + "short_description" : "", + "description" : "Danish (eliminate dead keys)" + }, { + "name" : "dk\tmac", + "short_description" : "", + "description" : "Danish (Macintosh)" + }, { + "name" : "dk\tmac_nodeadkeys", + "short_description" : "", + "description" : "Danish (Macintosh, eliminate dead keys)" + }, { + "name" : "dk\tdvorak", + "short_description" : "", + "description" : "Danish (Dvorak)" + }, { + "name" : "nl", + "short_description" : "nl", + "description" : "Dutch" + }, { + "name" : "nl\tsundeadkeys", + "short_description" : "", + "description" : "Dutch (Sun dead keys)" + }, { + "name" : "nl\tmac", + "short_description" : "", + "description" : "Dutch (Macintosh)" + }, { + "name" : "nl\tstd", + "short_description" : "", + "description" : "Dutch (standard)" + }, { + "name" : "bt", + "short_description" : "dz", + "description" : "Dzongkha" + }, { + "name" : "ee", + "short_description" : "et", + "description" : "Estonian" + }, { + "name" : "ee\tnodeadkeys", + "short_description" : "", + "description" : "Estonian (eliminate dead keys)" + }, { + "name" : "ee\tdvorak", + "short_description" : "", + "description" : "Estonian (Dvorak)" + }, { + "name" : "ee\tus", + "short_description" : "", + "description" : "Estonian (US keyboard with Estonian letters)" + }, { + "name" : "ir", + "short_description" : "fa", + "description" : "Persian" + }, { + "name" : "ir\tpes_keypad", + "short_description" : "", + "description" : "Persian (with Persian Keypad)" + }, { + "name" : "ir\tku", + "short_description" : "ku", + "description" : "Kurdish (Iran, Latin Q)" + }, { + "name" : "ir\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Iran, F)" + }, { + "name" : "ir\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Iran, Latin Alt-Q)" + }, { + "name" : "ir\tku_ara", + "short_description" : "ku", + "description" : "Kurdish (Iran, Arabic-Latin)" + }, { + "name" : "iq", + "short_description" : "ar", + "description" : "Iraqi" + }, { + "name" : "iq\tku", + "short_description" : "ku", + "description" : "Kurdish (Iraq, Latin Q)" + }, { + "name" : "iq\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Iraq, F)" + }, { + "name" : "iq\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Iraq, Latin Alt-Q)" + }, { + "name" : "iq\tku_ara", + "short_description" : "ku", + "description" : "Kurdish (Iraq, Arabic-Latin)" + }, { + "name" : "fo", + "short_description" : "fo", + "description" : "Faroese" + }, { + "name" : "fo\tnodeadkeys", + "short_description" : "", + "description" : "Faroese (eliminate dead keys)" + }, { + "name" : "fi", + "short_description" : "fi", + "description" : "Finnish" + }, { + "name" : "fi\tclassic", + "short_description" : "", + "description" : "Finnish (classic)" + }, { + "name" : "fi\tnodeadkeys", + "short_description" : "", + "description" : "Finnish (classic, eliminate dead keys)" + }, { + "name" : "fi\tsmi", + "short_description" : "", + "description" : "Northern Saami (Finland)" + }, { + "name" : "fi\tmac", + "short_description" : "", + "description" : "Finnish (Macintosh)" + }, { + "name" : "fr", + "short_description" : "fr", + "description" : "French" + }, { + "name" : "fr\tnodeadkeys", + "short_description" : "", + "description" : "French (eliminate dead keys)" + }, { + "name" : "fr\tsundeadkeys", + "short_description" : "", + "description" : "French (Sun dead keys)" + }, { + "name" : "fr\toss", + "short_description" : "", + "description" : "French (alternative)" + }, { + "name" : "fr\toss_latin9", + "short_description" : "", + "description" : "French (alternative, Latin-9 only)" + }, { + "name" : "fr\toss_nodeadkeys", + "short_description" : "", + "description" : "French (alternative, eliminate dead keys)" + }, { + "name" : "fr\toss_sundeadkeys", + "short_description" : "", + "description" : "French (alternative, Sun dead keys)" + }, { + "name" : "fr\tlatin9", + "short_description" : "", + "description" : "French (legacy, alternative)" + }, { + "name" : "fr\tlatin9_nodeadkeys", + "short_description" : "", + "description" : "French (legacy, alternative, eliminate dead keys)" + }, { + "name" : "fr\tlatin9_sundeadkeys", + "short_description" : "", + "description" : "French (legacy, alternative, Sun dead keys)" + }, { + "name" : "fr\tbepo", + "short_description" : "", + "description" : "French (Bepo, ergonomic, Dvorak way)" + }, { + "name" : "fr\tbepo_latin9", + "short_description" : "", + "description" : "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" + }, { + "name" : "fr\tdvorak", + "short_description" : "", + "description" : "French (Dvorak)" + }, { + "name" : "fr\tmac", + "short_description" : "", + "description" : "French (Macintosh)" + }, { + "name" : "fr\tbre", + "short_description" : "", + "description" : "French (Breton)" + }, { + "name" : "fr\toci", + "short_description" : "", + "description" : "Occitan" + }, { + "name" : "fr\tgeo", + "short_description" : "", + "description" : "Georgian (France, AZERTY Tskapo)" + }, { + "name" : "gh", + "short_description" : "en", + "description" : "English (Ghana)" + }, { + "name" : "gh\tgeneric", + "short_description" : "", + "description" : "English (Ghana, multilingual)" + }, { + "name" : "gh\takan", + "short_description" : "ak", + "description" : "Akan" + }, { + "name" : "gh\tewe", + "short_description" : "ee", + "description" : "Ewe" + }, { + "name" : "gh\tfula", + "short_description" : "ff", + "description" : "Fula" + }, { + "name" : "gh\tga", + "short_description" : "gaa", + "description" : "Ga" + }, { + "name" : "gh\thausa", + "short_description" : "ha", + "description" : "Hausa" + }, { + "name" : "gh\tavn", + "short_description" : "avn", + "description" : "Avatime" + }, { + "name" : "gh\tgillbt", + "short_description" : "", + "description" : "English (Ghana, GILLBT)" + }, { + "name" : "gn", + "short_description" : "fr", + "description" : "French (Guinea)" + }, { + "name" : "ge", + "short_description" : "ka", + "description" : "Georgian" + }, { + "name" : "ge\tergonomic", + "short_description" : "", + "description" : "Georgian (ergonomic)" + }, { + "name" : "ge\tmess", + "short_description" : "", + "description" : "Georgian (MESS)" + }, { + "name" : "ge\tru", + "short_description" : "ru", + "description" : "Russian (Georgia)" + }, { + "name" : "ge\tos", + "short_description" : "", + "description" : "Ossetian (Georgia)" + }, { + "name" : "de", + "short_description" : "de", + "description" : "German" + }, { + "name" : "de\tdeadacute", + "short_description" : "", + "description" : "German (dead acute)" + }, { + "name" : "de\tdeadgraveacute", + "short_description" : "", + "description" : "German (dead grave acute)" + }, { + "name" : "de\tnodeadkeys", + "short_description" : "", + "description" : "German (eliminate dead keys)" + }, { + "name" : "de\tT3", + "short_description" : "", + "description" : "German (T3)" + }, { + "name" : "de\tro", + "short_description" : "", + "description" : "Romanian (Germany)" + }, { + "name" : "de\tro_nodeadkeys", + "short_description" : "", + "description" : "Romanian (Germany, eliminate dead keys)" + }, { + "name" : "de\tdvorak", + "short_description" : "", + "description" : "German (Dvorak)" + }, { + "name" : "de\tsundeadkeys", + "short_description" : "", + "description" : "German (Sun dead keys)" + }, { + "name" : "de\tneo", + "short_description" : "", + "description" : "German (Neo 2)" + }, { + "name" : "de\tmac", + "short_description" : "", + "description" : "German (Macintosh)" + }, { + "name" : "de\tmac_nodeadkeys", + "short_description" : "", + "description" : "German (Macintosh, eliminate dead keys)" + }, { + "name" : "de\tdsb", + "short_description" : "", + "description" : "Lower Sorbian" + }, { + "name" : "de\tdsb_qwertz", + "short_description" : "", + "description" : "Lower Sorbian (qwertz)" + }, { + "name" : "de\tqwerty", + "short_description" : "", + "description" : "German (qwerty)" + }, { + "name" : "de\tru", + "short_description" : "ru", + "description" : "Russian (Germany, phonetic)" + }, { + "name" : "de\tlegacy", + "short_description" : "", + "description" : "German (legacy)" + }, { + "name" : "gr", + "short_description" : "gr", + "description" : "Greek" + }, { + "name" : "gr\tsimple", + "short_description" : "", + "description" : "Greek (simple)" + }, { + "name" : "gr\textended", + "short_description" : "", + "description" : "Greek (extended)" + }, { + "name" : "gr\tnodeadkeys", + "short_description" : "", + "description" : "Greek (eliminate dead keys)" + }, { + "name" : "gr\tpolytonic", + "short_description" : "", + "description" : "Greek (polytonic)" + }, { + "name" : "hu", + "short_description" : "hu", + "description" : "Hungarian" + }, { + "name" : "hu\tstandard", + "short_description" : "", + "description" : "Hungarian (standard)" + }, { + "name" : "hu\tnodeadkeys", + "short_description" : "", + "description" : "Hungarian (eliminate dead keys)" + }, { + "name" : "hu\tqwerty", + "short_description" : "", + "description" : "Hungarian (qwerty)" + }, { + "name" : "hu\t101_qwertz_comma_dead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/comma/dead keys)" + }, { + "name" : "hu\t101_qwertz_comma_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/comma/eliminate dead keys)" + }, { + "name" : "hu\t101_qwertz_dot_dead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/dot/dead keys)" + }, { + "name" : "hu\t101_qwertz_dot_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwertz/dot/eliminate dead keys)" + }, { + "name" : "hu\t101_qwerty_comma_dead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/comma/dead keys)" + }, { + "name" : "hu\t101_qwerty_comma_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/comma/eliminate dead keys)" + }, { + "name" : "hu\t101_qwerty_dot_dead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/dot/dead keys)" + }, { + "name" : "hu\t101_qwerty_dot_nodead", + "short_description" : "", + "description" : "Hungarian (101/qwerty/dot/eliminate dead keys)" + }, { + "name" : "hu\t102_qwertz_comma_dead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/comma/dead keys)" + }, { + "name" : "hu\t102_qwertz_comma_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/comma/eliminate dead keys)" + }, { + "name" : "hu\t102_qwertz_dot_dead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/dot/dead keys)" + }, { + "name" : "hu\t102_qwertz_dot_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwertz/dot/eliminate dead keys)" + }, { + "name" : "hu\t102_qwerty_comma_dead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/comma/dead keys)" + }, { + "name" : "hu\t102_qwerty_comma_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/comma/eliminate dead keys)" + }, { + "name" : "hu\t102_qwerty_dot_dead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/dot/dead keys)" + }, { + "name" : "hu\t102_qwerty_dot_nodead", + "short_description" : "", + "description" : "Hungarian (102/qwerty/dot/eliminate dead keys)" + }, { + "name" : "is", + "short_description" : "is", + "description" : "Icelandic" + }, { + "name" : "is\tSundeadkeys", + "short_description" : "", + "description" : "Icelandic (Sun dead keys)" + }, { + "name" : "is\tnodeadkeys", + "short_description" : "", + "description" : "Icelandic (eliminate dead keys)" + }, { + "name" : "is\tmac", + "short_description" : "", + "description" : "Icelandic (Macintosh)" + }, { + "name" : "is\tdvorak", + "short_description" : "", + "description" : "Icelandic (Dvorak)" + }, { + "name" : "il", + "short_description" : "he", + "description" : "Hebrew" + }, { + "name" : "il\tlyx", + "short_description" : "", + "description" : "Hebrew (lyx)" + }, { + "name" : "il\tphonetic", + "short_description" : "", + "description" : "Hebrew (phonetic)" + }, { + "name" : "il\tbiblical", + "short_description" : "", + "description" : "Hebrew (Biblical, Tiro)" + }, { + "name" : "it", + "short_description" : "it", + "description" : "Italian" + }, { + "name" : "it\tnodeadkeys", + "short_description" : "", + "description" : "Italian (eliminate dead keys)" + }, { + "name" : "it\tmac", + "short_description" : "", + "description" : "Italian (Macintosh)" + }, { + "name" : "it\tus", + "short_description" : "", + "description" : "Italian (US keyboard with Italian letters)" + }, { + "name" : "it\tgeo", + "short_description" : "", + "description" : "Georgian (Italy)" + }, { + "name" : "it\tibm", + "short_description" : "", + "description" : "Italian (IBM 142)" + }, { + "name" : "jp", + "short_description" : "ja", + "description" : "Japanese" + }, { + "name" : "jp\tkana", + "short_description" : "", + "description" : "Japanese (Kana)" + }, { + "name" : "jp\tkana86", + "short_description" : "", + "description" : "Japanese (Kana 86)" + }, { + "name" : "jp\tOADG109A", + "short_description" : "", + "description" : "Japanese (OADG 109A)" + }, { + "name" : "jp\tmac", + "short_description" : "", + "description" : "Japanese (Macintosh)" + }, { + "name" : "jp\tdvorak", + "short_description" : "", + "description" : "Japanese (Dvorak)" + }, { + "name" : "kg", + "short_description" : "ki", + "description" : "Kyrgyz" + }, { + "name" : "kg\tphonetic", + "short_description" : "", + "description" : "Kyrgyz (phonetic)" + }, { + "name" : "kh", + "short_description" : "km", + "description" : "Khmer (Cambodia)" + }, { + "name" : "kz", + "short_description" : "kk", + "description" : "Kazakh" + }, { + "name" : "kz\truskaz", + "short_description" : "ru", + "description" : "Russian (Kazakhstan, with Kazakh)" + }, { + "name" : "kz\tkazrus", + "short_description" : "", + "description" : "Kazakh (with Russian)" + }, { + "name" : "la", + "short_description" : "lo", + "description" : "Lao" + }, { + "name" : "la\tstea", + "short_description" : "", + "description" : "Lao (STEA proposed standard layout)" + }, { + "name" : "latam", + "short_description" : "es", + "description" : "Spanish (Latin American)" + }, { + "name" : "latam\tnodeadkeys", + "short_description" : "", + "description" : "Spanish (Latin American, eliminate dead keys)" + }, { + "name" : "latam\tdeadtilde", + "short_description" : "", + "description" : "Spanish (Latin American, include dead tilde)" + }, { + "name" : "latam\tsundeadkeys", + "short_description" : "", + "description" : "Spanish (Latin American, Sun dead keys)" + }, { + "name" : "lt", + "short_description" : "lt", + "description" : "Lithuanian" + }, { + "name" : "lt\tstd", + "short_description" : "", + "description" : "Lithuanian (standard)" + }, { + "name" : "lt\tus", + "short_description" : "", + "description" : "Lithuanian (US keyboard with Lithuanian letters)" + }, { + "name" : "lt\tibm", + "short_description" : "", + "description" : "Lithuanian (IBM LST 1205-92)" + }, { + "name" : "lt\tlekp", + "short_description" : "", + "description" : "Lithuanian (LEKP)" + }, { + "name" : "lt\tlekpa", + "short_description" : "", + "description" : "Lithuanian (LEKPa)" + }, { + "name" : "lv", + "short_description" : "lv", + "description" : "Latvian" + }, { + "name" : "lv\tapostrophe", + "short_description" : "", + "description" : "Latvian (apostrophe variant)" + }, { + "name" : "lv\ttilde", + "short_description" : "", + "description" : "Latvian (tilde variant)" + }, { + "name" : "lv\tfkey", + "short_description" : "", + "description" : "Latvian (F variant)" + }, { + "name" : "lv\tmodern", + "short_description" : "", + "description" : "Latvian (modern)" + }, { + "name" : "lv\tergonomic", + "short_description" : "", + "description" : "Latvian (ergonomic, ŪGJRMV)" + }, { + "name" : "lv\tadapted", + "short_description" : "", + "description" : "Latvian (adapted)" + }, { + "name" : "mao", + "short_description" : "mi", + "description" : "Maori" + }, { + "name" : "me", + "short_description" : "sr", + "description" : "Montenegrin" + }, { + "name" : "me\tcyrillic", + "short_description" : "", + "description" : "Montenegrin (Cyrillic)" + }, { + "name" : "me\tcyrillicyz", + "short_description" : "", + "description" : "Montenegrin (Cyrillic, Z and ZHE swapped)" + }, { + "name" : "me\tlatinunicode", + "short_description" : "", + "description" : "Montenegrin (Latin Unicode)" + }, { + "name" : "me\tlatinyz", + "short_description" : "", + "description" : "Montenegrin (Latin qwerty)" + }, { + "name" : "me\tlatinunicodeyz", + "short_description" : "", + "description" : "Montenegrin (Latin Unicode qwerty)" + }, { + "name" : "me\tcyrillicalternatequotes", + "short_description" : "", + "description" : "Montenegrin (Cyrillic with guillemets)" + }, { + "name" : "me\tlatinalternatequotes", + "short_description" : "", + "description" : "Montenegrin (Latin with guillemets)" + }, { + "name" : "mk", + "short_description" : "mk", + "description" : "Macedonian" + }, { + "name" : "mk\tnodeadkeys", + "short_description" : "", + "description" : "Macedonian (eliminate dead keys)" + }, { + "name" : "mt", + "short_description" : "mt", + "description" : "Maltese" + }, { + "name" : "mt\tus", + "short_description" : "", + "description" : "Maltese (with US layout)" + }, { + "name" : "mn", + "short_description" : "mn", + "description" : "Mongolian" + }, { + "name" : "no", + "short_description" : "no", + "description" : "Norwegian" + }, { + "name" : "no\tnodeadkeys", + "short_description" : "", + "description" : "Norwegian (eliminate dead keys)" + }, { + "name" : "no\tdvorak", + "short_description" : "", + "description" : "Norwegian (Dvorak)" + }, { + "name" : "no\tsmi", + "short_description" : "", + "description" : "Northern Saami (Norway)" + }, { + "name" : "no\tsmi_nodeadkeys", + "short_description" : "", + "description" : "Northern Saami (Norway, eliminate dead keys)" + }, { + "name" : "no\tmac", + "short_description" : "", + "description" : "Norwegian (Macintosh)" + }, { + "name" : "no\tmac_nodeadkeys", + "short_description" : "", + "description" : "Norwegian (Macintosh, eliminate dead keys)" + }, { + "name" : "no\tcolemak", + "short_description" : "", + "description" : "Norwegian (Colemak)" + }, { + "name" : "pl", + "short_description" : "pl", + "description" : "Polish" + }, { + "name" : "pl\tlegacy", + "short_description" : "", + "description" : "Polish (legacy)" + }, { + "name" : "pl\tqwertz", + "short_description" : "", + "description" : "Polish (qwertz)" + }, { + "name" : "pl\tdvorak", + "short_description" : "", + "description" : "Polish (Dvorak)" + }, { + "name" : "pl\tdvorak_quotes", + "short_description" : "", + "description" : "Polish (Dvorak, Polish quotes on quotemark key)" + }, { + "name" : "pl\tdvorak_altquotes", + "short_description" : "", + "description" : "Polish (Dvorak, Polish quotes on key 1)" + }, { + "name" : "pl\tcsb", + "short_description" : "", + "description" : "Kashubian" + }, { + "name" : "pl\tszl", + "short_description" : "", + "description" : "Silesian" + }, { + "name" : "pl\tru_phonetic_dvorak", + "short_description" : "ru", + "description" : "Russian (Poland, phonetic Dvorak)" + }, { + "name" : "pl\tdvp", + "short_description" : "", + "description" : "Polish (programmer Dvorak)" + }, { + "name" : "pt", + "short_description" : "pt", + "description" : "Portuguese" + }, { + "name" : "pt\tnodeadkeys", + "short_description" : "", + "description" : "Portuguese (eliminate dead keys)" + }, { + "name" : "pt\tsundeadkeys", + "short_description" : "", + "description" : "Portuguese (Sun dead keys)" + }, { + "name" : "pt\tmac", + "short_description" : "", + "description" : "Portuguese (Macintosh)" + }, { + "name" : "pt\tmac_nodeadkeys", + "short_description" : "", + "description" : "Portuguese (Macintosh, eliminate dead keys)" + }, { + "name" : "pt\tmac_sundeadkeys", + "short_description" : "", + "description" : "Portuguese (Macintosh, Sun dead keys)" + }, { + "name" : "pt\tnativo", + "short_description" : "", + "description" : "Portuguese (Nativo)" + }, { + "name" : "pt\tnativo-us", + "short_description" : "", + "description" : "Portuguese (Nativo for US keyboards)" + }, { + "name" : "pt\tnativo-epo", + "short_description" : "", + "description" : "Esperanto (Portugal, Nativo)" + }, { + "name" : "ro", + "short_description" : "ro", + "description" : "Romanian" + }, { + "name" : "ro\tcedilla", + "short_description" : "", + "description" : "Romanian (cedilla)" + }, { + "name" : "ro\tstd", + "short_description" : "", + "description" : "Romanian (standard)" + }, { + "name" : "ro\tstd_cedilla", + "short_description" : "", + "description" : "Romanian (standard cedilla)" + }, { + "name" : "ro\twinkeys", + "short_description" : "", + "description" : "Romanian (WinKeys)" + }, { + "name" : "ru", + "short_description" : "ru", + "description" : "Russian" + }, { + "name" : "ru\tphonetic", + "short_description" : "", + "description" : "Russian (phonetic)" + }, { + "name" : "ru\tphonetic_winkeys", + "short_description" : "", + "description" : "Russian (phonetic WinKeys)" + }, { + "name" : "ru\ttypewriter", + "short_description" : "", + "description" : "Russian (typewriter)" + }, { + "name" : "ru\tlegacy", + "short_description" : "", + "description" : "Russian (legacy)" + }, { + "name" : "ru\ttypewriter-legacy", + "short_description" : "", + "description" : "Russian (typewriter, legacy)" + }, { + "name" : "ru\ttt", + "short_description" : "", + "description" : "Tatar" + }, { + "name" : "ru\tos_legacy", + "short_description" : "", + "description" : "Ossetian (legacy)" + }, { + "name" : "ru\tos_winkeys", + "short_description" : "", + "description" : "Ossetian (WinKeys)" + }, { + "name" : "ru\tcv", + "short_description" : "", + "description" : "Chuvash" + }, { + "name" : "ru\tcv_latin", + "short_description" : "", + "description" : "Chuvash (Latin)" + }, { + "name" : "ru\tudm", + "short_description" : "", + "description" : "Udmurt" + }, { + "name" : "ru\tkom", + "short_description" : "", + "description" : "Komi" + }, { + "name" : "ru\tsah", + "short_description" : "", + "description" : "Yakut" + }, { + "name" : "ru\txal", + "short_description" : "", + "description" : "Kalmyk" + }, { + "name" : "ru\tdos", + "short_description" : "", + "description" : "Russian (DOS)" + }, { + "name" : "ru\tmac", + "short_description" : "", + "description" : "Russian (Macintosh)" + }, { + "name" : "ru\tsrp", + "short_description" : "", + "description" : "Serbian (Russia)" + }, { + "name" : "ru\tbak", + "short_description" : "", + "description" : "Bashkirian" + }, { + "name" : "ru\tchm", + "short_description" : "", + "description" : "Mari" + }, { + "name" : "rs", + "short_description" : "sr", + "description" : "Serbian" + }, { + "name" : "rs\tyz", + "short_description" : "", + "description" : "Serbian (Cyrillic, Z and ZHE swapped)" + }, { + "name" : "rs\tlatin", + "short_description" : "", + "description" : "Serbian (Latin)" + }, { + "name" : "rs\tlatinunicode", + "short_description" : "", + "description" : "Serbian (Latin Unicode)" + }, { + "name" : "rs\tlatinyz", + "short_description" : "", + "description" : "Serbian (Latin qwerty)" + }, { + "name" : "rs\tlatinunicodeyz", + "short_description" : "", + "description" : "Serbian (Latin Unicode qwerty)" + }, { + "name" : "rs\talternatequotes", + "short_description" : "", + "description" : "Serbian (Cyrillic with guillemets)" + }, { + "name" : "rs\tlatinalternatequotes", + "short_description" : "", + "description" : "Serbian (Latin with guillemets)" + }, { + "name" : "rs\true", + "short_description" : "", + "description" : "Pannonian Rusyn (homophonic)" + }, { + "name" : "si", + "short_description" : "sl", + "description" : "Slovenian" + }, { + "name" : "si\talternatequotes", + "short_description" : "", + "description" : "Slovenian (use guillemets for quotes)" + }, { + "name" : "si\tus", + "short_description" : "", + "description" : "Slovenian (US keyboard with Slovenian letters)" + }, { + "name" : "sk", + "short_description" : "sk", + "description" : "Slovak" + }, { + "name" : "sk\tbksl", + "short_description" : "", + "description" : "Slovak (extended Backslash)" + }, { + "name" : "sk\tqwerty", + "short_description" : "", + "description" : "Slovak (qwerty)" + }, { + "name" : "sk\tqwerty_bksl", + "short_description" : "", + "description" : "Slovak (qwerty, extended Backslash)" + }, { + "name" : "es", + "short_description" : "es", + "description" : "Spanish" + }, { + "name" : "es\tnodeadkeys", + "short_description" : "", + "description" : "Spanish (eliminate dead keys)" + }, { + "name" : "es\tdeadtilde", + "short_description" : "", + "description" : "Spanish (include dead tilde)" + }, { + "name" : "es\tsundeadkeys", + "short_description" : "", + "description" : "Spanish (Sun dead keys)" + }, { + "name" : "es\tdvorak", + "short_description" : "", + "description" : "Spanish (Dvorak)" + }, { + "name" : "es\tast", + "short_description" : "", + "description" : "Asturian (Spain, with bottom-dot H and bottom-dot L)" + }, { + "name" : "es\tcat", + "short_description" : "", + "description" : "Catalan (Spain, with middle-dot L)" + }, { + "name" : "es\tmac", + "short_description" : "", + "description" : "Spanish (Macintosh)" + }, { + "name" : "se", + "short_description" : "sv", + "description" : "Swedish" + }, { + "name" : "se\tnodeadkeys", + "short_description" : "", + "description" : "Swedish (eliminate dead keys)" + }, { + "name" : "se\tdvorak", + "short_description" : "", + "description" : "Swedish (Dvorak)" + }, { + "name" : "se\trus", + "short_description" : "ru", + "description" : "Russian (Sweden, phonetic)" + }, { + "name" : "se\trus_nodeadkeys", + "short_description" : "ru", + "description" : "Russian (Sweden, phonetic, eliminate dead keys)" + }, { + "name" : "se\tsmi", + "short_description" : "", + "description" : "Northern Saami (Sweden)" + }, { + "name" : "se\tmac", + "short_description" : "", + "description" : "Swedish (Macintosh)" + }, { + "name" : "se\tsvdvorak", + "short_description" : "", + "description" : "Swedish (Svdvorak)" + }, { + "name" : "se\tswl", + "short_description" : "", + "description" : "Swedish Sign Language" + }, { + "name" : "ch", + "short_description" : "de", + "description" : "German (Switzerland)" + }, { + "name" : "ch\tlegacy", + "short_description" : "", + "description" : "German (Switzerland, legacy)" + }, { + "name" : "ch\tde_nodeadkeys", + "short_description" : "de", + "description" : "German (Switzerland, eliminate dead keys)" + }, { + "name" : "ch\tde_sundeadkeys", + "short_description" : "de", + "description" : "German (Switzerland, Sun dead keys)" + }, { + "name" : "ch\tfr", + "short_description" : "fr", + "description" : "French (Switzerland)" + }, { + "name" : "ch\tfr_nodeadkeys", + "short_description" : "fr", + "description" : "French (Switzerland, eliminate dead keys)" + }, { + "name" : "ch\tfr_sundeadkeys", + "short_description" : "fr", + "description" : "French (Switzerland, Sun dead keys)" + }, { + "name" : "ch\tfr_mac", + "short_description" : "fr", + "description" : "French (Switzerland, Macintosh)" + }, { + "name" : "ch\tde_mac", + "short_description" : "de", + "description" : "German (Switzerland, Macintosh)" + }, { + "name" : "sy", + "short_description" : "ar", + "description" : "Arabic (Syria)" + }, { + "name" : "sy\tsyc", + "short_description" : "syc", + "description" : "Syriac" + }, { + "name" : "sy\tsyc_phonetic", + "short_description" : "syc", + "description" : "Syriac (phonetic)" + }, { + "name" : "sy\tku", + "short_description" : "ku", + "description" : "Kurdish (Syria, Latin Q)" + }, { + "name" : "sy\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Syria, F)" + }, { + "name" : "sy\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Syria, Latin Alt-Q)" + }, { + "name" : "tj", + "short_description" : "tg", + "description" : "Tajik" + }, { + "name" : "tj\tlegacy", + "short_description" : "", + "description" : "Tajik (legacy)" + }, { + "name" : "lk", + "short_description" : "si", + "description" : "Sinhala (phonetic)" + }, { + "name" : "lk\ttam_unicode", + "short_description" : "ta", + "description" : "Tamil (Sri Lanka, Unicode)" + }, { + "name" : "lk\ttam_TAB", + "short_description" : "", + "description" : "Tamil (Sri Lanka, TAB Typewriter)" + }, { + "name" : "th", + "short_description" : "th", + "description" : "Thai" + }, { + "name" : "th\ttis", + "short_description" : "", + "description" : "Thai (TIS-820.2538)" + }, { + "name" : "th\tpat", + "short_description" : "", + "description" : "Thai (Pattachote)" + }, { + "name" : "tr", + "short_description" : "tr", + "description" : "Turkish" + }, { + "name" : "tr\tf", + "short_description" : "", + "description" : "Turkish (F)" + }, { + "name" : "tr\talt", + "short_description" : "", + "description" : "Turkish (Alt-Q)" + }, { + "name" : "tr\tsundeadkeys", + "short_description" : "", + "description" : "Turkish (Sun dead keys)" + }, { + "name" : "tr\tku", + "short_description" : "ku", + "description" : "Kurdish (Turkey, Latin Q)" + }, { + "name" : "tr\tku_f", + "short_description" : "ku", + "description" : "Kurdish (Turkey, F)" + }, { + "name" : "tr\tku_alt", + "short_description" : "ku", + "description" : "Kurdish (Turkey, Latin Alt-Q)" + }, { + "name" : "tr\tintl", + "short_description" : "", + "description" : "Turkish (international with dead keys)" + }, { + "name" : "tr\tcrh", + "short_description" : "crh", + "description" : "Crimean Tatar (Turkish Q)" + }, { + "name" : "tr\tcrh_f", + "short_description" : "crh", + "description" : "Crimean Tatar (Turkish F)" + }, { + "name" : "tr\tcrh_alt", + "short_description" : "crh", + "description" : "Crimean Tatar (Turkish Alt-Q)" + }, { + "name" : "tw", + "short_description" : "zh", + "description" : "Taiwanese" + }, { + "name" : "tw\tindigenous", + "short_description" : "", + "description" : "Taiwanese (indigenous)" + }, { + "name" : "tw\tsaisiyat", + "short_description" : "xsy", + "description" : "Saisiyat (Taiwan)" + }, { + "name" : "ua", + "short_description" : "uk", + "description" : "Ukrainian" + }, { + "name" : "ua\tphonetic", + "short_description" : "", + "description" : "Ukrainian (phonetic)" + }, { + "name" : "ua\ttypewriter", + "short_description" : "", + "description" : "Ukrainian (typewriter)" + }, { + "name" : "ua\twinkeys", + "short_description" : "", + "description" : "Ukrainian (WinKeys)" + }, { + "name" : "ua\tlegacy", + "short_description" : "", + "description" : "Ukrainian (legacy)" + }, { + "name" : "ua\trstu", + "short_description" : "", + "description" : "Ukrainian (standard RSTU)" + }, { + "name" : "ua\trstu_ru", + "short_description" : "", + "description" : "Russian (Ukraine, standard RSTU)" + }, { + "name" : "ua\thomophonic", + "short_description" : "", + "description" : "Ukrainian (homophonic)" + }, { + "name" : "gb", + "short_description" : "en", + "description" : "English (UK)" + }, { + "name" : "gb\textd", + "short_description" : "", + "description" : "English (UK, extended WinKeys)" + }, { + "name" : "gb\tintl", + "short_description" : "", + "description" : "English (UK, international with dead keys)" + }, { + "name" : "gb\tdvorak", + "short_description" : "", + "description" : "English (UK, Dvorak)" + }, { + "name" : "gb\tdvorakukp", + "short_description" : "", + "description" : "English (UK, Dvorak with UK punctuation)" + }, { + "name" : "gb\tmac", + "short_description" : "", + "description" : "English (UK, Macintosh)" + }, { + "name" : "gb\tmac_intl", + "short_description" : "", + "description" : "English (UK, Macintosh international)" + }, { + "name" : "gb\tcolemak", + "short_description" : "", + "description" : "English (UK, Colemak)" + }, { + "name" : "uz", + "short_description" : "uz", + "description" : "Uzbek" + }, { + "name" : "uz\tlatin", + "short_description" : "", + "description" : "Uzbek (Latin)" + }, { + "name" : "vn", + "short_description" : "vi", + "description" : "Vietnamese" + }, { + "name" : "kr", + "short_description" : "ko", + "description" : "Korean" + }, { + "name" : "kr\tkr104", + "short_description" : "", + "description" : "Korean (101/104 key compatible)" + }, { + "name" : "nec_vndr/jp", + "short_description" : "ja", + "description" : "Japanese (PC-98xx Series)" + }, { + "name" : "ie", + "short_description" : "ie", + "description" : "Irish" + }, { + "name" : "ie\tCloGaelach", + "short_description" : "", + "description" : "CloGaelach" + }, { + "name" : "ie\tUnicodeExpert", + "short_description" : "", + "description" : "Irish (UnicodeExpert)" + }, { + "name" : "ie\togam", + "short_description" : "", + "description" : "Ogham" + }, { + "name" : "ie\togam_is434", + "short_description" : "", + "description" : "Ogham (IS434)" + }, { + "name" : "pk", + "short_description" : "ur", + "description" : "Urdu (Pakistan)" + }, { + "name" : "pk\turd-crulp", + "short_description" : "", + "description" : "Urdu (Pakistan, CRULP)" + }, { + "name" : "pk\turd-nla", + "short_description" : "", + "description" : "Urdu (Pakistan, NLA)" + }, { + "name" : "pk\tara", + "short_description" : "ar", + "description" : "Arabic (Pakistan)" + }, { + "name" : "pk\tsnd", + "short_description" : "sd", + "description" : "Sindhi" + }, { + "name" : "mv", + "short_description" : "dv", + "description" : "Dhivehi" + }, { + "name" : "za", + "short_description" : "en", + "description" : "English (South Africa)" + }, { + "name" : "epo", + "short_description" : "eo", + "description" : "Esperanto" + }, { + "name" : "epo\tlegacy", + "short_description" : "", + "description" : "Esperanto (displaced semicolon and quote, obsolete)" + }, { + "name" : "np", + "short_description" : "ne", + "description" : "Nepali" + }, { + "name" : "ng", + "short_description" : "en", + "description" : "English (Nigeria)" + }, { + "name" : "ng\tigbo", + "short_description" : "ig", + "description" : "Igbo" + }, { + "name" : "ng\tyoruba", + "short_description" : "yo", + "description" : "Yoruba" + }, { + "name" : "ng\thausa", + "short_description" : "ha", + "description" : "Hausa" + }, { + "name" : "et", + "short_description" : "am", + "description" : "Amharic" + }, { + "name" : "sn", + "short_description" : "wo", + "description" : "Wolof" + }, { + "name" : "brai", + "short_description" : "brl", + "description" : "Braille" + }, { + "name" : "brai\tleft_hand", + "short_description" : "", + "description" : "Braille (left hand)" + }, { + "name" : "brai\tright_hand", + "short_description" : "", + "description" : "Braille (right hand)" + }, { + "name" : "tm", + "short_description" : "tk", + "description" : "Turkmen" + }, { + "name" : "tm\talt", + "short_description" : "", + "description" : "Turkmen (Alt-Q)" + }, { + "name" : "ml", + "short_description" : "bm", + "description" : "Bambara" + }, { + "name" : "ml\tfr-oss", + "short_description" : "fr", + "description" : "French (Mali, alternative)" + }, { + "name" : "ml\tus-mac", + "short_description" : "en", + "description" : "English (Mali, US Macintosh)" + }, { + "name" : "ml\tus-intl", + "short_description" : "en", + "description" : "English (Mali, US international)" + }, { + "name" : "tz", + "short_description" : "sw", + "description" : "Swahili (Tanzania)" + }, { + "name" : "ke", + "short_description" : "sw", + "description" : "Swahili (Kenya)" + }, { + "name" : "ke\tkik", + "short_description" : "ki", + "description" : "Kikuyu" + }, { + "name" : "bw", + "short_description" : "tn", + "description" : "Tswana" + }, { + "name" : "ph", + "short_description" : "ph", + "description" : "Filipino" + }, { + "name" : "ph\tqwerty-bay", + "short_description" : "", + "description" : "Filipino (QWERTY Baybayin)" + }, { + "name" : "ph\tcapewell-dvorak", + "short_description" : "", + "description" : "Filipino (Capewell-Dvorak Latin)" + }, { + "name" : "ph\tcapewell-dvorak-bay", + "short_description" : "", + "description" : "Filipino (Capewell-Dvorak Baybayin)" + }, { + "name" : "ph\tcapewell-qwerf2k6", + "short_description" : "", + "description" : "Filipino (Capewell-QWERF 2006 Latin)" + }, { + "name" : "ph\tcapewell-qwerf2k6-bay", + "short_description" : "", + "description" : "Filipino (Capewell-QWERF 2006 Baybayin)" + }, { + "name" : "ph\tcolemak", + "short_description" : "", + "description" : "Filipino (Colemak Latin)" + }, { + "name" : "ph\tcolemak-bay", + "short_description" : "", + "description" : "Filipino (Colemak Baybayin)" + }, { + "name" : "ph\tdvorak", + "short_description" : "", + "description" : "Filipino (Dvorak Latin)" + }, { + "name" : "ph\tdvorak-bay", + "short_description" : "", + "description" : "Filipino (Dvorak Baybayin)" + }, { + "name" : "md", + "short_description" : "md", + "description" : "Moldavian" + }, { + "name" : "md\tgag", + "short_description" : "gag", + "description" : "Moldavian (Gagauz)" + } +] diff --git a/src/json/sessions.json b/src/json/sessions.json new file mode 100644 index 0000000..3caec50 --- /dev/null +++ b/src/json/sessions.json @@ -0,0 +1,19 @@ +[ + { + "key" : "LXDE", + "name" : "LXDE", + "comment" : "LXDE - Lightweight X11 desktop environment" + }, { + "key" : "openbox", + "name" : "Openbox", + "comment" : "Log in using the Openbox window manager (without a session manager)" + }, { + "key" : "twm", + "name" : "TWM", + "comment" : "The Tab Window Manager" + }, { + "key" : "tinywm", + "name" : "Tinywm", + "comment" : "Ridiculously tiny window manager" + } +] diff --git a/src/json/users.json b/src/json/users.json new file mode 100644 index 0000000..bd3b2b8 --- /dev/null +++ b/src/json/users.json @@ -0,0 +1,138 @@ +[ + { + "display_name" : "Alexander the Great", + "home_directory" : "/home/basileusalex", + "image" : "/home/basileusalex/.face", + "language" : "gr_GR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "basileusalex" + }, { + "display_name" : "Napoleon Bonaparte", + "home_directory" : "/home/napoleonib", + "image" : "/home/napoleonib/.face", + "language" : "fr_FR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "napoleonib" + },{ + "display_name" : "Gaius Octavius", + "home_directory" : "/home/imperatoraugustus", + "image" : "/home/imperatoraugustus/.face", + "language" : "it_IT", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "imperatoraugustus" + },{ + "display_name" : "Sir Winston Leonard Spencer-Churchill", + "home_directory" : "/home/honourablewinston", + "image" : "/home/honourablewinston/.face", + "language" : "en_GB", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "honourablewinston" + },{ + "display_name" : "Peter Alekseyevich Romanov", + "home_directory" : "/home/peteralexeyevich", + "image" : "/home/peteralexeyevich/.face", + "language" : "ru_RU", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "peteralexeyevich" + },{ + "display_name" : "John Fitzgerald Kennedy", + "home_directory" : "/home/jackkennedy", + "image" : "/home/jackkennedy/.face", + "language" : "en_US", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "jackkennedy" + },{ + "display_name" : "Muhammed bin Murad", + "home_directory" : "/home/mehmedisani", + "image" : "/home/mehmedisani/.face", + "language" : "tr_TR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "mehmedisani" + },{ + "display_name" : "Gustavus Adolphus", + "home_directory" : "/home/gustav2", + "image" : "/home/gustav2/.face", + "language" : "sv_SE", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "gustav2" + },{ + "display_name" : "Mao Zedong", + "home_directory" : "/home/chairmanzedong", + "image" : "/home/chairmanzedong/.face", + "language" : "tr_TR", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "chairmanzedong" + },{ + "display_name" : "Erik Thorvaldsson", + "home_directory" : "/home/redthorvald", + "image" : "/home/redthorvald/.face", + "language" : "no_NO", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "redthorvald" + },{ + "display_name" : "Cristoforo Colombo", + "home_directory" : "/home/cristocolombo", + "image" : "/home/cristocolombo/.face", + "language" : "it_IT", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "cristocolombo" + },{ + "display_name" : "Willem van Oranje", + "home_directory" : "/home/silentwill", + "image" : "/home/silentwill/.face", + "language" : "nl_NL", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "silentwill" + },{ + "display_name" : "Genghis Khan", + "home_directory" : "/home/khagantemujin", + "image" : "/home/khagantemujin/.face", + "language" : "mn_MN", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "khagantemujin" + },{ + "display_name" : "Mikhail Sergeyevich Gorbachev", + "home_directory" : "/home/gorbachev", + "image" : "/home/gorbachev/.face", + "language" : "ru_RU", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "gorbachev" + },{ + "display_name" : "Meiji", + "home_directory" : "/home/meijitaitei", + "image" : "/home/meijitaitei/.face", + "language" : "jp_JP", + "layout" : null, + "logged_in" : false, + "session" : null, + "username" : "meijitaitei" + } +] From e21f5bf05ff5d8586bc4bd4629ecb8295918c6b0 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:00:31 +0100 Subject: [PATCH 03/16] Add link to C code this is based on --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e0934af..fc76a02 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@ #LightDMMock -A LightDM Mock that is tightly based on the source C code of [Antergos](https://github.com/Antergos)' [lightdm-webkit2-greeter](https://github.com/Antergos/lightdm-webkit2-greeter). Please note that the deprecation errors are intrusive for a reason. +A LightDM Mock that is tightly based on the source [C code](https://github.com/Antergos/web-greeter/blob/before-python/src/webkit2-extension.c) of [Antergos](https://github.com/Antergos)' [lightdm-webkit2-greeter](https://github.com/Antergos/lightdm-webkit2-greeter). Please note that the deprecation errors are intrusive for a reason. ##Usage: [1]. Clone the repo From c1d8cf2672bb21704251e5d7e16b8ae12325395d Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:00:45 +0100 Subject: [PATCH 04/16] Add note on `.face` usage --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index fc76a02..02fda0c 100644 --- a/readme.md +++ b/readme.md @@ -18,6 +18,9 @@ if(!("lightdm" in window)) { } ```` +##Note: +If you plan on using the `.face` files in the mock you have to include the path to `LightDMMock/src`. The `.face` files linked in `users.json` are absolute links to `/home/[username/.face`. + ##Parameters of LightDMMock() ####autofill > **_`boolean`_**
From d6a7fabfd693ce9dbae69ecd5e936aabd054d395 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:03:01 +0100 Subject: [PATCH 05/16] Move LightDMMock.js to src --- {mock => src}/LightDMMock.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {mock => src}/LightDMMock.js (100%) diff --git a/mock/LightDMMock.js b/src/LightDMMock.js similarity index 100% rename from mock/LightDMMock.js rename to src/LightDMMock.js From 0c01ee79331694d90146c630f5054f4b441dd425 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:04:48 +0100 Subject: [PATCH 06/16] Add deprecated properties and notifications --- src/LightDMMock.js | 56 ++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 5ca033c..2ff9292 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -31,34 +31,38 @@ function LightDMMock(autofill, timeout, autoGuest) { window.checkForUpdate("v1.0.0"); - this.hostname = null; - this.users = null; - this.default_language = null; - this.language = null; - this.languages = null; - this.default_layout = null; - this.layouts = null; - this.layout = null; - this.sessions = null; - this.num_users = 0; - this.default_session = null; - this.timed_login_user = null; - this.timed_login_delay = null; + // see + this.authentication_user = null; - this.in_authentication = false; - this.is_authenticated = false; - this.can_suspend = false; + this.autologin_guest = false; + this.autologin_timeout = 0; + this.autologin_user = null; this.can_hibernate = false; this.can_restart = false; this.can_shutdown = false; - this.lock_hint = false; + this.can_suspend = false; + this.default_session = null; this.has_guest_account = false; this.hide_users = false; - this.select_user = null; - this.select_guest = false; - this.autologin_user = null; - this.autologin_guest = false; - this.autologin_timeout = 0; + this.hostname = null; + this.in_authentication = false; + this.is_authenticated = false; + this.language = null; + this.languages = null; + this.layout = null; + this.layouts = null; + this.lock_hint = false; + this.num_users = 0; + this.select_guest_hint = null; + this.select_user_hint = null; + this.sessions = null; + this.users = null; + this.default_language = null; // Deprecated + this.default_layout = null; // Deprecated + this.select_guest = null; // Deprecated + this.select_user = null; // Deprecated + this.timed_login_delay = null; // Deprecated + this.timed_login_user = null; // Deprecated if(typeof autofill === "boolean" && autofill) { this.users = JSON.parse(atob("W3siZGlzcGxheV9uYW1lIjoiQWxleGFuZGVyIHRoZSBHcmVhdCIsImxhbmd1YWdlIjoiZ3JfR1IiLCJyZWFsX25hbWUiOiJCYXNpbGV1cyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2Jhc2lsZXVzYWxleC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9iYXNpbGV1c2FsZXgiLCJuYW1lIjoiYmFzaWxldXNhbGV4IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJOYXBvbGVvbiBCb25hcGFydGUiLCJsYW5ndWFnZSI6ImZyX0ZSIiwicmVhbF9uYW1lIjoiTmFwb2xlb24gQm9uYXBhcnRlIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbmFwb2xlb25pYi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9uYXBvbGVvbmliIiwibmFtZSI6Im5hcG9sZW9uaWIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGFuZ3VhZ2UiOiJpdF9JVCIsInJlYWxfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMiLCJuYW1lIjoiaW1wZXJhdG9yYXVndXN0dXMiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IlNpciBXaW5zdG9uIExlb25hcmQgU3BlbmNlci1DaHVyY2hpbGwiLCJsYW5ndWFnZSI6ImVuX0dCIiwicmVhbF9uYW1lIjoiU2lyIFdpbnN0b24gTGVvbmFyZCBTcGVuY2VyLUNodXJjaGlsbCIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uIiwibmFtZSI6Imhvbm91cmFibGV3aW5zdG9uIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxhbmd1YWdlIjoicnVfUlUiLCJyZWFsX25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3BldGVyYWxleGV5ZXZpY2gvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svcGV0ZXJhbGV4ZXlldmljaCIsIm5hbWUiOiJwZXRlcmFsZXhleWV2aWNoIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxhbmd1YWdlIjoiZW5fVVMiLCJyZWFsX25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2phY2trZW5uZWR5Ly5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2phY2trZW5uZWR5IiwibmFtZSI6ImphY2trZW5uZWR5IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJNdWhhbW1lZCBiaW4gTXVyYWQiLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTXVoYW1tZWQgYmluIE11cmFkIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbWVobWVkaXNhbmkvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svbWVobWVkaXNhbmkiLCJuYW1lIjoibWVobWVkaXNhbmkiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGFuZ3VhZ2UiOiJzdl9TRSIsInJlYWxfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svZ3VzdGF2Mi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9ndXN0YXYyIiwibmFtZSI6Imd1c3RhdjIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ik1hbyBaZWRvbmciLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTWFvIFplZG9uZyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2NoYWlybWFuemVkb25nLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2NoYWlybWFuemVkb25nIiwibmFtZSI6ImNoYWlybWFuemVkb25nIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxhbmd1YWdlIjoibm9fTk8iLCJyZWFsX25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3JlZHRob3J2YWxkLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL3JlZHRob3J2YWxkIiwibmFtZSI6InJlZHRob3J2YWxkIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJDcmlzdG9mb3JvIENvbG9tYm8iLCJsYW5ndWFnZSI6Iml0X0lUIiwicmVhbF9uYW1lIjoiQ3Jpc3RvZm9ybyBDb2xvbWJvIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svY3Jpc3RvY29sb21iby8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9jcmlzdG9jb2xvbWJvIiwibmFtZSI6ImNyaXN0b2NvbG9tYm8iLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGFuZ3VhZ2UiOiJubF9OTCIsInJlYWxfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svc2lsZW50d2lsbC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9zaWxlbnR3aWxsIiwibmFtZSI6InNpbGVudHdpbGwiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdlbmdoaXMgS2hhbiIsImxhbmd1YWdlIjoibW5fTU4iLCJyZWFsX25hbWUiOiJHZW5naGlzIEtoYW4iLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9raGFnYW50ZW11amluLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2toYWdhbnRlbXVqaW4iLCJuYW1lIjoia2hhZ2FudGVtdWppbiIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9LHsiZGlzcGxheV9uYW1lIjoiTWlraGFpbCBTZXJnZXlldmljaCBHb3JiYWNoZXYiLCJsYW5ndWFnZSI6InJ1X1JVIiwicmVhbF9uYW1lIjoiTWlraGFpbCBTZXJnZXlldmljaCBHb3JiYWNoZXYiLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9nb3JiYWNoZXYvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svZ29yYmFjaGV2IiwibmFtZSI6ImdvcmJhY2hldiIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9LHsiZGlzcGxheV9uYW1lIjoiTWVpamkiLCJsYW5ndWFnZSI6ImpwX0pQIiwicmVhbF9uYW1lIjoiTWVpamkiLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9tZWlqaXRhaXRlaS8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9tZWlqaXRhaXRlaSIsIm5hbWUiOiJtZWlqaXRhaXRlaSIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9XQ==")); @@ -563,6 +567,14 @@ LightDMMock.watch('default_layout', function() { window.deprecationNotifier("property", "default_layout", "lightdm.layout"); }); +LightDMMock.watch('select_guest', function() { + window.deprecationNotifier("property", "select_guest", "lightdm.select_guest_hint"); +}); + +LightDMMock.watch('select_user', function() { + window.deprecationNotifier("property", "select_user", "lightdm.select_user_hint"); +}); + LightDMMock.watch('timed_login_user', function() { window.deprecationNotifier("property", "timed_login_user", "lightdm.autologin_user"); }); From b7cb47d9c1baef5a5a8d83a1444610274097c384 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:07:14 +0100 Subject: [PATCH 07/16] Move methods around and add start_session --- src/LightDMMock.js | 145 ++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 74 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 2ff9292..1c9bc6d 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -180,6 +180,57 @@ LightDMMock.prototype.authenticate_as_guest = function() { this.in_authentication = true; }; +/** + * Cancels the authentication of any user currently in the + * process of authenticating. + */ +LightDMMock.prototype.cancel_authentication = function() { + window.logCall("cancel_authentication", arguments); + window.checkArguments(arguments, 0, []); + + this.authentication_user = null; + this.in_authentication = false; +}; + +/** + * Cancels the authentication of the autologin user. The older function + * lightdm.cancel_timed_login() has been deprecated. + */ +LightDMMock.prototype.cancel_autologin = function() { + window.logCall("cancel_autologin", arguments); + window.checkArguments(arguments, 0, []); + + this.autologin_user = null; + this.autologin_guest = false; + this.autologin_timeout = 0; +}; + +/** + * Returns the value of a named hint provided by LightDM. + * + * @param {String} hint_name [name of the hint to show] + */ +LightDMMock.prototype.get_hint = function(hint_name) { + window.logCall("get_hint", arguments); + window.checkArguments(arguments, 1, ["string"]); + + // @fixme: I have no clue how to simulate this... +}; + +/** + * Hibernates the system, if the greeter has the authority to do so. + */ +LightDMMock.prototype.hibernate = function() { + window.logCall("hibernate", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.can_hibernate) + throw new IlligalUsageException("LightDM cannot hibernate the system. Make sure you check the value of 'lightdm.can_hibernate' before calling this function."); + + window.alert("System hibernated."); + document.location.reload(true); +}; + /** * When LightDM has prompted for input, provide the response to LightDM. The * deprecated function was "provide_secret". This is still available for @@ -203,68 +254,6 @@ LightDMMock.prototype.respond = function(text) { } }; -/** - * Deprecated method. - */ -LightDMMock.prototype.provide_secret = function() { - window.logCall("provide_secret", arguments); - window.deprecationNotifier("method", "lightdm.provide_secret(text)", "lightdm.respond(text)"); -}; - -/** - * Cancels the authentication of any user currently in the - * process of authenticating. - */ -LightDMMock.prototype.cancel_authentication = function() { - window.logCall("cancel_authentication", arguments); - window.checkArguments(arguments, 0, []); - - this.authentication_user = null; - this.in_authentication = false; -}; - -/** - * Suspends the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.suspend = function() { - window.logCall("suspend", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_suspend) - throw new IlligalUsageException("LightDM cannot suspend the system. Make sure you check the value of 'lightdm.can_suspend' before calling this function."); - - window.alert("System suspended."); - document.location.reload(true); -}; - -/** - * Hibernates the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.hibernate = function() { - window.logCall("hibernate", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_hibernate) - throw new IlligalUsageException("LightDM cannot hibernate the system. Make sure you check the value of 'lightdm.can_hibernate' before calling this function."); - - window.alert("System hibernated."); - document.location.reload(true); -}; - -/** - * Shuts down the system, if the greeter has the authority to do so. - */ -LightDMMock.prototype.shutdown = function() { - window.logCall("shutdown", arguments); - window.checkArguments(arguments, 0, []); - - if(!this.can_shutdown) - throw new IlligalUsageException("LightDM cannot shut down the system. Make sure you check the value of 'lightdm.can_shutdown' before calling this function."); - - window.alert("System shut down."); - document.location.reload(true); -}; - /** * Restarts the system, if the greeter has the authority to do so. */ @@ -292,11 +281,17 @@ LightDMMock.prototype.set_language = function(lang) { }; /** - * Deprecated method. + * Shuts down the system, if the greeter has the authority to do so. */ -LightDMMock.prototype.login = function() { - window.logCall("login", arguments); - window.deprecationNotifier("method", "lightdm.login()", "lightdm.start_session_sync(session)"); +LightDMMock.prototype.shutdown = function() { + window.logCall("shutdown", arguments); + window.checkArguments(arguments, 0, []); + + if(!this.can_shutdown) + throw new IlligalUsageException("LightDM cannot shut down the system. Make sure you check the value of 'lightdm.can_shutdown' before calling this function."); + + window.alert("System shut down."); + document.location.reload(true); }; /** @@ -308,7 +303,7 @@ LightDMMock.prototype.login = function() { * * @param {String} session [the session name to start] */ -LightDMMock.prototype.start_session_sync = function(session) { +LightDMMock.prototype.start_session = function(session) { window.logCall("start_session_sync", arguments); window.checkArguments(arguments, 1, ["string"]); @@ -323,15 +318,17 @@ LightDMMock.prototype.start_session_sync = function(session) { }; /** - * Returns the value of a named hint provided by LightDM. - * - * @param {String} hint_name [name of the hint to show] + * Suspends the system, if the greeter has the authority to do so. */ -LightDMMock.prototype.get_hint = function(hint_name) { - window.logCall("get_hint", arguments); - window.checkArguments(arguments, 1, ["string"]); +LightDMMock.prototype.suspend = function() { + window.logCall("suspend", arguments); + window.checkArguments(arguments, 0, []); - // @fixme: I have no clue how to simulate this... + if(!this.can_suspend) + throw new IlligalUsageException("LightDM cannot suspend the system. Make sure you check the value of 'lightdm.can_suspend' before calling this function."); + + window.alert("System suspended."); + document.location.reload(true); }; From 5ceeaa729747e091a1728aa20c5605314c41ee10 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:08:47 +0100 Subject: [PATCH 08/16] Move deprecated methods to own section --- src/LightDMMock.js | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 1c9bc6d..0a78896 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -333,9 +333,39 @@ LightDMMock.prototype.suspend = function() { /****************************************************************************** - * Throwables * + * Deprecated * *******************************************************************************/ +LightDMMock.prototype.cancel_timed_login = function() { + window.logCall("cancel_timed_login", arguments); + window.deprecationNotifier("method", "lightdm.cancel_timed_login()", "lightdm.cancel_autologin()"); +}; + +LightDMMock.prototype.start_authentication = function() { + window.logCall("start_authentication", arguments); + window.deprecationNotifier("method", "lightdm.start_authentication()", "lightdm.authenticate(username)"); +}; + +LightDMMock.prototype.login = function() { + window.logCall("login", arguments); + window.deprecationNotifier("method", "lightdm.login()", "lightdm.start_session(session)"); +}; + +LightDMMock.prototype.provide_secret = function() { + window.logCall("provide_secret", arguments); + window.deprecationNotifier("method", "lightdm.provide_secret(text)", "lightdm.respond(text)"); +}; + +LightDMMock.prototype.start_session_sync = function() { + window.logCall("login", arguments); + window.deprecationNotifier("method", "lightdm.start_session_sync(session)", "lightdm.start_session(session)"); +}; + + +/****************************************************************************** + * Throwables * + ******************************************************************************/ + /** * Throwable IlligalUsageException * From b127fd1d63c05bf939a6eefb4dc59ccdd9077afb Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:09:37 +0100 Subject: [PATCH 09/16] Add !== undefined check on update checking --- src/LightDMMock.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 0a78896..85afd72 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -504,11 +504,13 @@ window.checkForUpdate = function(currentVersion) { switch(request.status) { case 200: try { - var latest = JSON.parse(request.responseText).tag_name; + var latest; - if(currentVersion !== latest) { + if(request.responseText !== undefined) + latest = JSON.parse(request.responseText).tag_name; + + if(currentVersion !== latest) window.console.warn("You are using an outdated version of LightDMMock. Please download the new version from https://github.com/CytoDev/LightDMMock/releases/" + latest); - } } catch(e) { window.console.error(e.toString()); window.console.warn("Could not check for new version of LightDMMock. Please check for a new version manually by visiting https://github.com/CytoDev/LightDMMock/releases/latest"); From f3cd556099950b7f7ce70cb82fb804deb5d0055e Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:10:16 +0100 Subject: [PATCH 10/16] Add method to load JSON from file --- src/LightDMMock.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 85afd72..2182653 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -529,6 +529,33 @@ window.checkForUpdate = function(currentVersion) { request.send(); }; +/** + * global helper loadJSON + * Loads JSON from a path. Removes the need to b64 encode them in this file. + * + * @param {String} url [path to JSON file] + * @param {Function} callback [callback function] + */ +window.loadJSON = function(url, callback) { + var request = new XMLHttpRequest(); + + var onSuccess = function() { + this.callback.apply(request, request.arguments); + }; + + var onFailure = function() { + window.console.error(this.statusText); + }; + + request.callback = callback; + request.arguments = Array.prototype.slice.call(arguments, 2); + request.onload = onSuccess; + request.onerror = onFailure; + + request.open("get", url, true); + request.send(null); +}; + /****************************************************************************** * Object.watch shim * From 186fe137e10cd16c5b8e74d34a7864c85272b259 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:14:16 +0100 Subject: [PATCH 11/16] Update autofill to fetch JSON --- src/LightDMMock.js | 128 +++++++++++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 50 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 2182653..6c31632 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -65,66 +65,94 @@ function LightDMMock(autofill, timeout, autoGuest) { this.timed_login_user = null; // Deprecated if(typeof autofill === "boolean" && autofill) { - this.users = JSON.parse(atob("W3siZGlzcGxheV9uYW1lIjoiQWxleGFuZGVyIHRoZSBHcmVhdCIsImxhbmd1YWdlIjoiZ3JfR1IiLCJyZWFsX25hbWUiOiJCYXNpbGV1cyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2Jhc2lsZXVzYWxleC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9iYXNpbGV1c2FsZXgiLCJuYW1lIjoiYmFzaWxldXNhbGV4IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJOYXBvbGVvbiBCb25hcGFydGUiLCJsYW5ndWFnZSI6ImZyX0ZSIiwicmVhbF9uYW1lIjoiTmFwb2xlb24gQm9uYXBhcnRlIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbmFwb2xlb25pYi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9uYXBvbGVvbmliIiwibmFtZSI6Im5hcG9sZW9uaWIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGFuZ3VhZ2UiOiJpdF9JVCIsInJlYWxfbmFtZSI6IkdhaXVzIE9jdGF2aXVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svaW1wZXJhdG9yYXVndXN0dXMiLCJuYW1lIjoiaW1wZXJhdG9yYXVndXN0dXMiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IlNpciBXaW5zdG9uIExlb25hcmQgU3BlbmNlci1DaHVyY2hpbGwiLCJsYW5ndWFnZSI6ImVuX0dCIiwicmVhbF9uYW1lIjoiU2lyIFdpbnN0b24gTGVvbmFyZCBTcGVuY2VyLUNodXJjaGlsbCIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2hvbm91cmFibGV3aW5zdG9uIiwibmFtZSI6Imhvbm91cmFibGV3aW5zdG9uIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxhbmd1YWdlIjoicnVfUlUiLCJyZWFsX25hbWUiOiJQZXRlciBBbGVrc2V5ZXZpY2ggUm9tYW5vdiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3BldGVyYWxleGV5ZXZpY2gvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svcGV0ZXJhbGV4ZXlldmljaCIsIm5hbWUiOiJwZXRlcmFsZXhleWV2aWNoIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxhbmd1YWdlIjoiZW5fVVMiLCJyZWFsX25hbWUiOiJKb2huIEZpdHpnZXJhbGQgS2VubmVkeSIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2phY2trZW5uZWR5Ly5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2phY2trZW5uZWR5IiwibmFtZSI6ImphY2trZW5uZWR5IiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJNdWhhbW1lZCBiaW4gTXVyYWQiLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTXVoYW1tZWQgYmluIE11cmFkIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svbWVobWVkaXNhbmkvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svbWVobWVkaXNhbmkiLCJuYW1lIjoibWVobWVkaXNhbmkiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGFuZ3VhZ2UiOiJzdl9TRSIsInJlYWxfbmFtZSI6Ikd1c3RhdnVzIEFkb2xwaHVzIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svZ3VzdGF2Mi8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9ndXN0YXYyIiwibmFtZSI6Imd1c3RhdjIiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6Ik1hbyBaZWRvbmciLCJsYW5ndWFnZSI6InRyX1RSIiwicmVhbF9uYW1lIjoiTWFvIFplZG9uZyIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL2NoYWlybWFuemVkb25nLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2NoYWlybWFuemVkb25nIiwibmFtZSI6ImNoYWlybWFuemVkb25nIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxhbmd1YWdlIjoibm9fTk8iLCJyZWFsX25hbWUiOiJFcmlrIFRob3J2YWxkc3NvbiIsImxheW91dCI6bnVsbCwiaW1hZ2UiOiJtb2NrL3JlZHRob3J2YWxkLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL3JlZHRob3J2YWxkIiwibmFtZSI6InJlZHRob3J2YWxkIiwibG9nZ2VkX2luIjpmYWxzZSwic2Vzc2lvbiI6bnVsbH0seyJkaXNwbGF5X25hbWUiOiJDcmlzdG9mb3JvIENvbG9tYm8iLCJsYW5ndWFnZSI6Iml0X0lUIiwicmVhbF9uYW1lIjoiQ3Jpc3RvZm9ybyBDb2xvbWJvIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svY3Jpc3RvY29sb21iby8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9jcmlzdG9jb2xvbWJvIiwibmFtZSI6ImNyaXN0b2NvbG9tYm8iLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGFuZ3VhZ2UiOiJubF9OTCIsInJlYWxfbmFtZSI6IldpbGxlbSB2YW4gT3JhbmplIiwibGF5b3V0IjpudWxsLCJpbWFnZSI6Im1vY2svc2lsZW50d2lsbC8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9zaWxlbnR3aWxsIiwibmFtZSI6InNpbGVudHdpbGwiLCJsb2dnZWRfaW4iOmZhbHNlLCJzZXNzaW9uIjpudWxsfSx7ImRpc3BsYXlfbmFtZSI6IkdlbmdoaXMgS2hhbiIsImxhbmd1YWdlIjoibW5fTU4iLCJyZWFsX25hbWUiOiJHZW5naGlzIEtoYW4iLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9raGFnYW50ZW11amluLy5mYWNlIiwiaG9tZV9kaXJlY3RvcnkiOiJtb2NrL2toYWdhbnRlbXVqaW4iLCJuYW1lIjoia2hhZ2FudGVtdWppbiIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9LHsiZGlzcGxheV9uYW1lIjoiTWlraGFpbCBTZXJnZXlldmljaCBHb3JiYWNoZXYiLCJsYW5ndWFnZSI6InJ1X1JVIiwicmVhbF9uYW1lIjoiTWlraGFpbCBTZXJnZXlldmljaCBHb3JiYWNoZXYiLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9nb3JiYWNoZXYvLmZhY2UiLCJob21lX2RpcmVjdG9yeSI6Im1vY2svZ29yYmFjaGV2IiwibmFtZSI6ImdvcmJhY2hldiIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9LHsiZGlzcGxheV9uYW1lIjoiTWVpamkiLCJsYW5ndWFnZSI6ImpwX0pQIiwicmVhbF9uYW1lIjoiTWVpamkiLCJsYXlvdXQiOm51bGwsImltYWdlIjoibW9jay9tZWlqaXRhaXRlaS8uZmFjZSIsImhvbWVfZGlyZWN0b3J5IjoibW9jay9tZWlqaXRhaXRlaSIsIm5hbWUiOiJtZWlqaXRhaXRlaSIsImxvZ2dlZF9pbiI6ZmFsc2UsInNlc3Npb24iOm51bGx9XQ==")); - this.languages = JSON.parse(atob("W3sibmFtZSI6IkVuZ2xpc2giLCJjb2RlIjoiZW4iLCJ0ZXJyaXRvcnkiOm51bGx9XQ==")); - this.layouts = JSON.parse(atob("W3sibmFtZSI6InVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVVMpIn0seyJuYW1lIjoidXNcdGNociIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY2hyIiwiZGVzY3JpcHRpb24iOiJDaGVyb2tlZSJ9LHsibmFtZSI6InVzXHRldXJvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVTLCB3aXRoIGV1cm8gb24gNSkifSx7Im5hbWUiOiJ1c1x0aW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChVUywgaW50ZXJuYXRpb25hbCB3aXRoIGRlYWQga2V5cykifSx7Im5hbWUiOiJ1c1x0YWx0LWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVVMsIGFsdGVybmF0aXZlIGludGVybmF0aW9uYWwpIn0seyJuYW1lIjoidXNcdGNvbGVtYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoQ29sZW1haykifSx7Im5hbWUiOiJ1c1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKER2b3JhaykifSx7Im5hbWUiOiJ1c1x0ZHZvcmFrLWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoRHZvcmFrLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6InVzXHRkdm9yYWstYWx0LWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoRHZvcmFrIGFsdGVybmF0aXZlIGludGVybmF0aW9uYWwgbm8gZGVhZCBrZXlzKSJ9LHsibmFtZSI6InVzXHRkdm9yYWstbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChsZWZ0IGhhbmRlZCBEdm9yYWspIn0seyJuYW1lIjoidXNcdGR2b3Jhay1yIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKHJpZ2h0IGhhbmRlZCBEdm9yYWspIn0seyJuYW1lIjoidXNcdGR2b3Jhay1jbGFzc2ljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKGNsYXNzaWMgRHZvcmFrKSJ9LHsibmFtZSI6InVzXHRkdnAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAocHJvZ3JhbW1lciBEdm9yYWspIn0seyJuYW1lIjoidXNcdHJ1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKFVTLCBwaG9uZXRpYykifSx7Im5hbWUiOiJ1c1x0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJ1c1x0YWx0Z3ItaW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChpbnRlcm5hdGlvbmFsIEFsdEdyIGRlYWQga2V5cykifSx7Im5hbWUiOiJ1c1x0b2xwYzIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAodGhlIGRpdmlkZS9tdWx0aXBseSBrZXlzIHRvZ2dsZSB0aGUgbGF5b3V0KSJ9LHsibmFtZSI6InVzXHRoYnMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYm8tQ3JvYXRpYW4gKFVTKSJ9LHsibmFtZSI6InVzXHR3b3JrbWFuIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFdvcmttYW4pIn0seyJuYW1lIjoidXNcdHdvcmttYW4taW50bCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChXb3JrbWFuLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImFmIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmYSIsImRlc2NyaXB0aW9uIjoiQWZnaGFuaSJ9LHsibmFtZSI6ImFmXHRwcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicHMiLCJkZXNjcmlwdGlvbiI6IlBhc2h0byJ9LHsibmFtZSI6ImFmXHR1eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXoiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIChBZmdoYW5pc3RhbikifSx7Im5hbWUiOiJhZlx0b2xwYy1wcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicHMiLCJkZXNjcmlwdGlvbiI6IlBhc2h0byAoQWZnaGFuaXN0YW4sIE9MUEMpIn0seyJuYW1lIjoiYWZcdGZhLW9scGMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZhIiwiZGVzY3JpcHRpb24iOiJQZXJzaWFuIChBZmdoYW5pc3RhbiwgRGFyaSBPTFBDKSJ9LHsibmFtZSI6ImFmXHR1ei1vbHBjIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ1eiIsImRlc2NyaXB0aW9uIjoiVXpiZWsgKEFmZ2hhbmlzdGFuLCBPTFBDKSJ9LHsibmFtZSI6ImFyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyJ9LHsibmFtZSI6ImFyYVx0YXplcnR5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoYXplcnR5KSJ9LHsibmFtZSI6ImFyYVx0YXplcnR5X2RpZ2l0cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcmFiaWMgKGF6ZXJ0eS9kaWdpdHMpIn0seyJuYW1lIjoiYXJhXHRkaWdpdHMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChkaWdpdHMpIn0seyJuYW1lIjoiYXJhXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChxd2VydHkpIn0seyJuYW1lIjoiYXJhXHRxd2VydHlfZGlnaXRzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAocXdlcnR5L2RpZ2l0cykifSx7Im5hbWUiOiJhcmFcdGJ1Y2t3YWx0ZXIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJhYmljIChCdWNrd2FsdGVyKSJ9LHsibmFtZSI6ImFsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzcSIsImRlc2NyaXB0aW9uIjoiQWxiYW5pYW4ifSx7Im5hbWUiOiJhbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaHkiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIn0seyJuYW1lIjoiYW1cdHBob25ldGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIChwaG9uZXRpYykifSx7Im5hbWUiOiJhbVx0cGhvbmV0aWMtYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFybWVuaWFuIChhbHRlcm5hdGl2ZSBwaG9uZXRpYykifSx7Im5hbWUiOiJhbVx0ZWFzdGVybiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcm1lbmlhbiAoZWFzdGVybikifSx7Im5hbWUiOiJhbVx0d2VzdGVybiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJBcm1lbmlhbiAod2VzdGVybikifSx7Im5hbWUiOiJhbVx0ZWFzdGVybi1hbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQXJtZW5pYW4gKGFsdGVybmF0aXZlIGVhc3Rlcm4pIn0seyJuYW1lIjoiYXQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImRlIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKEF1c3RyaWEpIn0seyJuYW1lIjoiYXRcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChBdXN0cmlhLCBlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImF0XHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKEF1c3RyaWEsIFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiYXRcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKEF1c3RyaWEsIE1hY2ludG9zaCkifSx7Im5hbWUiOiJheiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXoiLCJkZXNjcmlwdGlvbiI6IkF6ZXJiYWlqYW5pIn0seyJuYW1lIjoiYXpcdGN5cmlsbGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkF6ZXJiYWlqYW5pIChDeXJpbGxpYykifSx7Im5hbWUiOiJieSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYnkiLCJkZXNjcmlwdGlvbiI6IkJlbGFydXNpYW4ifSx7Im5hbWUiOiJieVx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJlbGFydXNpYW4gKGxlZ2FjeSkifSx7Im5hbWUiOiJieVx0bGF0aW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmVsYXJ1c2lhbiAoTGF0aW4pIn0seyJuYW1lIjoiYmUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImJlIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIn0seyJuYW1lIjoiYmVcdG9zcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChhbHRlcm5hdGl2ZSkifSx7Im5hbWUiOiJiZVx0b3NzX2xhdGluOSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChhbHRlcm5hdGl2ZSwgTGF0aW4tOSBvbmx5KSJ9LHsibmFtZSI6ImJlXHRvc3Nfc3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmVsZ2lhbiAoYWx0ZXJuYXRpdmUsIFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiYmVcdGlzby1hbHRlcm5hdGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmVsZ2lhbiAoSVNPIGFsdGVybmF0ZSkifSx7Im5hbWUiOiJiZVx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImJlXHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCZWxnaWFuIChTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImJlXHR3YW5nIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJlbGdpYW4gKFdhbmcgbW9kZWwgNzI0IGF6ZXJ0eSkifSx7Im5hbWUiOiJiZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYm4iLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSJ9LHsibmFtZSI6ImJkXHRwcm9iaGF0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSAoUHJvYmhhdCkifSx7Im5hbWUiOiJpbiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaW4iLCJkZXNjcmlwdGlvbiI6IkluZGlhbiJ9LHsibmFtZSI6ImluXHRiZW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImJuIiwiZGVzY3JpcHRpb24iOiJCYW5nbGEgKEluZGlhKSJ9LHsibmFtZSI6ImluXHRiZW5fcHJvYmhhdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYm4iLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSAoSW5kaWEsIFByb2JoYXQpIn0seyJuYW1lIjoiaW5cdGJlbl9iYWlzaGFraGkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQmFuZ2xhIChJbmRpYSwgQmFpc2hha2hpKSJ9LHsibmFtZSI6ImluXHRiZW5fYm9ybm9uYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCYW5nbGEgKEluZGlhLCBCb3Jub25hKSJ9LHsibmFtZSI6ImluXHRiZW5fZ2l0YW5qYWxpIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJhbmdsYSAoSW5kaWEsIFVuaSBHaXRhbmphbGkpIn0seyJuYW1lIjoiaW5cdGJlbl9pbnNjcmlwdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCYW5nbGEgKEluZGlhLCBCYWlzaGFraGkgSW5zY3JpcHQpIn0seyJuYW1lIjoiaW5cdGd1aiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZ3UiLCJkZXNjcmlwdGlvbiI6Ikd1amFyYXRpIn0seyJuYW1lIjoiaW5cdGd1cnUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InBhIiwiZGVzY3JpcHRpb24iOiJQdW5qYWJpIChHdXJtdWtoaSkifSx7Im5hbWUiOiJpblx0amhlbHVtIiwic2hvcnRfZGVzY3JpcHRpb24iOiJwYSIsImRlc2NyaXB0aW9uIjoiUHVuamFiaSAoR3VybXVraGkgSmhlbHVtKSJ9LHsibmFtZSI6ImluXHRrYW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImtuIiwiZGVzY3JpcHRpb24iOiJLYW5uYWRhIn0seyJuYW1lIjoiaW5cdGthbi1rYWdhcGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImtuIiwiZGVzY3JpcHRpb24iOiJLYW5uYWRhIChLYUdhUGEgcGhvbmV0aWMpIn0seyJuYW1lIjoiaW5cdG1hbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoibWwiLCJkZXNjcmlwdGlvbiI6Ik1hbGF5YWxhbSJ9LHsibmFtZSI6ImluXHRtYWxfbGFsaXRoYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoibWwiLCJkZXNjcmlwdGlvbiI6Ik1hbGF5YWxhbSAoTGFsaXRoYSkifSx7Im5hbWUiOiJpblx0bWFsX2VuaGFuY2VkIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtbCIsImRlc2NyaXB0aW9uIjoiTWFsYXlhbGFtIChlbmhhbmNlZCBJbnNjcmlwdCB3aXRoIFJ1cGVlIFNpZ24pIn0seyJuYW1lIjoiaW5cdG9yaSIsInNob3J0X2Rlc2NyaXB0aW9uIjoib3IiLCJkZXNjcmlwdGlvbiI6Ik9yaXlhIn0seyJuYW1lIjoiaW5cdHRhbV91bmljb2RlIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0YSIsImRlc2NyaXB0aW9uIjoiVGFtaWwgKFVuaWNvZGUpIn0seyJuYW1lIjoiaW5cdHRhbV9rZXlib2FyZF93aXRoX251bWVyYWxzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0YSIsImRlc2NyaXB0aW9uIjoiVGFtaWwgKGtleWJvYXJkIHdpdGggbnVtZXJhbHMpIn0seyJuYW1lIjoiaW5cdHRhbV9UQUIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRhIiwiZGVzY3JpcHRpb24iOiJUYW1pbCAoVEFCIHR5cGV3cml0ZXIpIn0seyJuYW1lIjoiaW5cdHRhbV9UU0NJSSIsInNob3J0X2Rlc2NyaXB0aW9uIjoidGEiLCJkZXNjcmlwdGlvbiI6IlRhbWlsIChUU0NJSSB0eXBld3JpdGVyKSJ9LHsibmFtZSI6ImluXHR0YW0iLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRhIiwiZGVzY3JpcHRpb24iOiJUYW1pbCJ9LHsibmFtZSI6ImluXHR0ZWwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRlIiwiZGVzY3JpcHRpb24iOiJUZWx1Z3UifSx7Im5hbWUiOiJpblx0dGVsLWthZ2FwYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoidGUiLCJkZXNjcmlwdGlvbiI6IlRlbHVndSAoS2FHYVBhIHBob25ldGljKSJ9LHsibmFtZSI6ImluXHR1cmQtcGhvbmV0aWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InVyIiwiZGVzY3JpcHRpb24iOiJVcmR1IChwaG9uZXRpYykifSx7Im5hbWUiOiJpblx0dXJkLXBob25ldGljMyIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKGFsdGVybmF0aXZlIHBob25ldGljKSJ9LHsibmFtZSI6ImluXHR1cmQtd2lua2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKFdpbktleXMpIn0seyJuYW1lIjoiaW5cdGJvbG5hZ3JpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJoaSIsImRlc2NyaXB0aW9uIjoiSGluZGkgKEJvbG5hZ3JpKSJ9LHsibmFtZSI6ImluXHRoaW4td3giLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhpIiwiZGVzY3JpcHRpb24iOiJIaW5kaSAoV3gpIn0seyJuYW1lIjoiaW5cdGhpbi1rYWdhcGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhpIiwiZGVzY3JpcHRpb24iOiJIaW5kaSAoS2FHYVBhIHBob25ldGljKSJ9LHsibmFtZSI6ImluXHRzYW4ta2FnYXBhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzYSIsImRlc2NyaXB0aW9uIjoiU2Fuc2tyaXQgKEthR2FQYSBwaG9uZXRpYykifSx7Im5hbWUiOiJpblx0bWFyLWthZ2FwYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoibXIiLCJkZXNjcmlwdGlvbiI6Ik1hcmF0aGkgKEthR2FQYSBwaG9uZXRpYykifSx7Im5hbWUiOiJpblx0ZW5nIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoSW5kaWEsIHdpdGggUnVwZWVTaWduKSJ9LHsibmFtZSI6ImJhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJicyIsImRlc2NyaXB0aW9uIjoiQm9zbmlhbiJ9LHsibmFtZSI6ImJhXHRhbHRlcm5hdGVxdW90ZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQm9zbmlhbiAodXNlIGd1aWxsZW1ldHMgZm9yIHF1b3RlcykifSx7Im5hbWUiOiJiYVx0dW5pY29kZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCb3NuaWFuICh1c2UgQm9zbmlhbiBkaWdyYXBocykifSx7Im5hbWUiOiJiYVx0dW5pY29kZXVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJvc25pYW4gKFVTIGtleWJvYXJkIHdpdGggQm9zbmlhbiBkaWdyYXBocykifSx7Im5hbWUiOiJiYVx0dXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQm9zbmlhbiAoVVMga2V5Ym9hcmQgd2l0aCBCb3NuaWFuIGxldHRlcnMpIn0seyJuYW1lIjoiYnIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InB0IiwiZGVzY3JpcHRpb24iOiJQb3J0dWd1ZXNlIChCcmF6aWwpIn0seyJuYW1lIjoiYnJcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSAoQnJhemlsLCBlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImJyXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSAoQnJhemlsLCBEdm9yYWspIn0seyJuYW1lIjoiYnJcdG5hdGl2byIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb3J0dWd1ZXNlIChCcmF6aWwsIG5hdGl2bykifSx7Im5hbWUiOiJiclx0bmF0aXZvLXVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKEJyYXppbCwgbmF0aXZvIGZvciBVUyBrZXlib2FyZHMpIn0seyJuYW1lIjoiYnJcdG5hdGl2by1lcG8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSAoQnJhemlsLCBuYXRpdm8gZm9yIEVzcGVyYW50bykifSx7Im5hbWUiOiJiZyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmciLCJkZXNjcmlwdGlvbiI6IkJ1bGdhcmlhbiJ9LHsibmFtZSI6ImJnXHRwaG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJCdWxnYXJpYW4gKHRyYWRpdGlvbmFsIHBob25ldGljKSJ9LHsibmFtZSI6ImJnXHRiYXNfcGhvbmV0aWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQnVsZ2FyaWFuIChuZXcgcGhvbmV0aWMpIn0seyJuYW1lIjoibWEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImFyIiwiZGVzY3JpcHRpb24iOiJBcmFiaWMgKE1vcm9jY28pIn0seyJuYW1lIjoibWFcdGZyZW5jaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoTW9yb2NjbykifSx7Im5hbWUiOiJtYVx0dGlmaW5hZ2giLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImJlciIsImRlc2NyaXB0aW9uIjoiQmVyYmVyIChNb3JvY2NvLCBUaWZpbmFnaCkifSx7Im5hbWUiOiJtYVx0dGlmaW5hZ2gtYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJiZXIiLCJkZXNjcmlwdGlvbiI6IkJlcmJlciAoTW9yb2NjbywgVGlmaW5hZ2ggYWx0ZXJuYXRpdmUpIn0seyJuYW1lIjoibWFcdHRpZmluYWdoLWFsdC1waG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIGFsdGVybmF0aXZlIHBob25ldGljKSJ9LHsibmFtZSI6Im1hXHR0aWZpbmFnaC1leHRlbmRlZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIGV4dGVuZGVkKSJ9LHsibmFtZSI6Im1hXHR0aWZpbmFnaC1waG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIHBob25ldGljKSJ9LHsibmFtZSI6Im1hXHR0aWZpbmFnaC1leHRlbmRlZC1waG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYmVyIiwiZGVzY3JpcHRpb24iOiJCZXJiZXIgKE1vcm9jY28sIFRpZmluYWdoIGV4dGVuZGVkIHBob25ldGljKSJ9LHsibmFtZSI6ImNtIiwic2hvcnRfZGVzY3JpcHRpb24iOiJjbSIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoQ2FtZXJvb24pIn0seyJuYW1lIjoiY21cdGZyZW5jaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKENhbWVyb29uKSJ9LHsibmFtZSI6ImNtXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2FtZXJvb24gTXVsdGlsaW5ndWFsIChxd2VydHkpIn0seyJuYW1lIjoiY21cdGF6ZXJ0eSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDYW1lcm9vbiBNdWx0aWxpbmd1YWwgKGF6ZXJ0eSkifSx7Im5hbWUiOiJjbVx0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNhbWVyb29uIE11bHRpbGluZ3VhbCAoRHZvcmFrKSJ9LHsibmFtZSI6Im1tIiwic2hvcnRfZGVzY3JpcHRpb24iOiJteSIsImRlc2NyaXB0aW9uIjoiQnVybWVzZSJ9LHsibmFtZSI6ImNhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmciIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChDYW5hZGEpIn0seyJuYW1lIjoiY2FcdGZyLWR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoQ2FuYWRhLCBEdm9yYWspIn0seyJuYW1lIjoiY2FcdGZyLWxlZ2FjeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoQ2FuYWRhLCBsZWdhY3kpIn0seyJuYW1lIjoiY2FcdG11bHRpeCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDYW5hZGlhbiBNdWx0aWxpbmd1YWwifSx7Im5hbWUiOiJjYVx0bXVsdGkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2FuYWRpYW4gTXVsdGlsaW5ndWFsIChmaXJzdCBwYXJ0KSJ9LHsibmFtZSI6ImNhXHRtdWx0aS0yZ3IiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2FuYWRpYW4gTXVsdGlsaW5ndWFsIChzZWNvbmQgcGFydCkifSx7Im5hbWUiOiJjYVx0aWtlIiwic2hvcnRfZGVzY3JpcHRpb24iOiJpa2UiLCJkZXNjcmlwdGlvbiI6IkludWt0aXR1dCJ9LHsibmFtZSI6ImNhXHRlbmciLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChDYW5hZGEpIn0seyJuYW1lIjoiY2QiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgdGhlIENvbmdvKSJ9LHsibmFtZSI6ImNuIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ6aCIsImRlc2NyaXB0aW9uIjoiQ2hpbmVzZSJ9LHsibmFtZSI6ImNuXHR0aWIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGliZXRhbiJ9LHsibmFtZSI6ImNuXHR0aWJfYXNjaWludW0iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGliZXRhbiAod2l0aCBBU0NJSSBudW1lcmFscykifSx7Im5hbWUiOiJjblx0dWlnIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlV5Z2h1ciJ9LHsibmFtZSI6ImhyIiwic2hvcnRfZGVzY3JpcHRpb24iOiJociIsImRlc2NyaXB0aW9uIjoiQ3JvYXRpYW4ifSx7Im5hbWUiOiJoclx0YWx0ZXJuYXRlcXVvdGVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNyb2F0aWFuICh1c2UgZ3VpbGxlbWV0cyBmb3IgcXVvdGVzKSJ9LHsibmFtZSI6ImhyXHR1bmljb2RlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNyb2F0aWFuICh1c2UgQ3JvYXRpYW4gZGlncmFwaHMpIn0seyJuYW1lIjoiaHJcdHVuaWNvZGV1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDcm9hdGlhbiAoVVMga2V5Ym9hcmQgd2l0aCBDcm9hdGlhbiBkaWdyYXBocykifSx7Im5hbWUiOiJoclx0dXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3JvYXRpYW4gKFVTIGtleWJvYXJkIHdpdGggQ3JvYXRpYW4gbGV0dGVycykifSx7Im5hbWUiOiJjeiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY3MiLCJkZXNjcmlwdGlvbiI6IkN6ZWNoIn0seyJuYW1lIjoiY3pcdGJrc2wiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKHdpdGggPFxcfD4ga2V5KSJ9LHsibmFtZSI6ImN6XHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKHF3ZXJ0eSkifSx7Im5hbWUiOiJjelx0cXdlcnR5X2Jrc2wiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKHF3ZXJ0eSwgZXh0ZW5kZWQgQmFja3NsYXNoKSJ9LHsibmFtZSI6ImN6XHR1Y3ciLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ3plY2ggKFVDVyBsYXlvdXQsIGFjY2VudGVkIGxldHRlcnMgb25seSkifSx7Im5hbWUiOiJjelx0ZHZvcmFrLXVjdyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJDemVjaCAoVVMgRHZvcmFrIHdpdGggQ1ogVUNXIHN1cHBvcnQpIn0seyJuYW1lIjoiZGsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImRhIiwiZGVzY3JpcHRpb24iOiJEYW5pc2gifSx7Im5hbWUiOiJka1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJEYW5pc2ggKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiZGtcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJEYW5pc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJka1x0bWFjX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRGFuaXNoIChNYWNpbnRvc2gsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiZGtcdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJEYW5pc2ggKER2b3JhaykifSx7Im5hbWUiOiJubCIsInNob3J0X2Rlc2NyaXB0aW9uIjoibmwiLCJkZXNjcmlwdGlvbiI6IkR1dGNoIn0seyJuYW1lIjoibmxcdHN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkR1dGNoIChTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6Im5sXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRHV0Y2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJubFx0c3RkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkR1dGNoIChzdGFuZGFyZCkifSx7Im5hbWUiOiJidCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZHoiLCJkZXNjcmlwdGlvbiI6IkR6b25na2hhIn0seyJuYW1lIjoiZWUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImV0IiwiZGVzY3JpcHRpb24iOiJFc3RvbmlhbiJ9LHsibmFtZSI6ImVlXHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVzdG9uaWFuIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImVlXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRXN0b25pYW4gKER2b3JhaykifSx7Im5hbWUiOiJlZVx0dXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRXN0b25pYW4gKFVTIGtleWJvYXJkIHdpdGggRXN0b25pYW4gbGV0dGVycykifSx7Im5hbWUiOiJpciIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZmEiLCJkZXNjcmlwdGlvbiI6IlBlcnNpYW4ifSx7Im5hbWUiOiJpclx0cGVzX2tleXBhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQZXJzaWFuICh3aXRoIFBlcnNpYW4gS2V5cGFkKSJ9LHsibmFtZSI6ImlyXHRrdSIsInNob3J0X2Rlc2NyaXB0aW9uIjoia3UiLCJkZXNjcmlwdGlvbiI6Ikt1cmRpc2ggKElyYW4sIExhdGluIFEpIn0seyJuYW1lIjoiaXJcdGt1X2YiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChJcmFuLCBGKSJ9LHsibmFtZSI6ImlyXHRrdV9hbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChJcmFuLCBMYXRpbiBBbHQtUSkifSx7Im5hbWUiOiJpclx0a3VfYXJhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoSXJhbiwgQXJhYmljLUxhdGluKSJ9LHsibmFtZSI6ImlxIiwic2hvcnRfZGVzY3JpcHRpb24iOiJhciIsImRlc2NyaXB0aW9uIjoiSXJhcWkifSx7Im5hbWUiOiJpcVx0a3UiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChJcmFxLCBMYXRpbiBRKSJ9LHsibmFtZSI6ImlxXHRrdV9mIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoSXJhcSwgRikifSx7Im5hbWUiOiJpcVx0a3VfYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoSXJhcSwgTGF0aW4gQWx0LVEpIn0seyJuYW1lIjoiaXFcdGt1X2FyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoia3UiLCJkZXNjcmlwdGlvbiI6Ikt1cmRpc2ggKElyYXEsIEFyYWJpYy1MYXRpbikifSx7Im5hbWUiOiJmbyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZm8iLCJkZXNjcmlwdGlvbiI6IkZhcm9lc2UifSx7Im5hbWUiOiJmb1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGYXJvZXNlIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImZpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmaSIsImRlc2NyaXB0aW9uIjoiRmlubmlzaCJ9LHsibmFtZSI6ImZpXHRjbGFzc2ljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZpbm5pc2ggKGNsYXNzaWMpIn0seyJuYW1lIjoiZmlcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlubmlzaCAoY2xhc3NpYywgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJmaVx0c21pIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik5vcnRoZXJuIFNhYW1pIChGaW5sYW5kKSJ9LHsibmFtZSI6ImZpXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlubmlzaCAoTWFjaW50b3NoKSJ9LHsibmFtZSI6ImZyIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmciIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIn0seyJuYW1lIjoiZnJcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImZyXHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiZnJcdG9zcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKGFsdGVybmF0aXZlKSJ9LHsibmFtZSI6ImZyXHRvc3NfbGF0aW45Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoYWx0ZXJuYXRpdmUsIExhdGluLTkgb25seSkifSx7Im5hbWUiOiJmclx0b3NzX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChhbHRlcm5hdGl2ZSwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJmclx0b3NzX3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoYWx0ZXJuYXRpdmUsIFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoiZnJcdGxhdGluOSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKGxlZ2FjeSwgYWx0ZXJuYXRpdmUpIn0seyJuYW1lIjoiZnJcdGxhdGluOV9ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAobGVnYWN5LCBhbHRlcm5hdGl2ZSwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJmclx0bGF0aW45X3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAobGVnYWN5LCBhbHRlcm5hdGl2ZSwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJmclx0YmVwbyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKEJlcG8sIGVyZ29ub21pYywgRHZvcmFrIHdheSkifSx7Im5hbWUiOiJmclx0YmVwb19sYXRpbjkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChCZXBvLCBlcmdvbm9taWMsIER2b3JhayB3YXksIExhdGluLTkgb25seSkifSx7Im5hbWUiOiJmclx0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoRHZvcmFrKSJ9LHsibmFtZSI6ImZyXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChNYWNpbnRvc2gpIn0seyJuYW1lIjoiZnJcdGJyZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKEJyZXRvbikifSx7Im5hbWUiOiJmclx0b2NpIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik9jY2l0YW4ifSx7Im5hbWUiOiJmclx0Z2VvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlb3JnaWFuIChGcmFuY2UsIEFaRVJUWSBUc2thcG8pIn0seyJuYW1lIjoiZ2giLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChHaGFuYSkifSx7Im5hbWUiOiJnaFx0Z2VuZXJpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChHaGFuYSwgbXVsdGlsaW5ndWFsKSJ9LHsibmFtZSI6ImdoXHRha2FuIiwic2hvcnRfZGVzY3JpcHRpb24iOiJhayIsImRlc2NyaXB0aW9uIjoiQWthbiJ9LHsibmFtZSI6ImdoXHRld2UiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVlIiwiZGVzY3JpcHRpb24iOiJFd2UifSx7Im5hbWUiOiJnaFx0ZnVsYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZmYiLCJkZXNjcmlwdGlvbiI6IkZ1bGEifSx7Im5hbWUiOiJnaFx0Z2EiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImdhYSIsImRlc2NyaXB0aW9uIjoiR2EifSx7Im5hbWUiOiJnaFx0aGF1c2EiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhhIiwiZGVzY3JpcHRpb24iOiJIYXVzYSJ9LHsibmFtZSI6ImdoXHRhdm4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImF2biIsImRlc2NyaXB0aW9uIjoiQXZhdGltZSJ9LHsibmFtZSI6ImdoXHRnaWxsYnQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoR2hhbmEsIEdJTExCVCkifSx7Im5hbWUiOiJnbiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZnIiLCJkZXNjcmlwdGlvbiI6IkZyZW5jaCAoR3VpbmVhKSJ9LHsibmFtZSI6ImdlIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrYSIsImRlc2NyaXB0aW9uIjoiR2VvcmdpYW4ifSx7Im5hbWUiOiJnZVx0ZXJnb25vbWljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlb3JnaWFuIChlcmdvbm9taWMpIn0seyJuYW1lIjoiZ2VcdG1lc3MiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VvcmdpYW4gKE1FU1MpIn0seyJuYW1lIjoiZ2VcdHJ1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJydSIsImRlc2NyaXB0aW9uIjoiUnVzc2lhbiAoR2VvcmdpYSkifSx7Im5hbWUiOiJnZVx0b3MiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiT3NzZXRpYW4gKEdlb3JnaWEpIn0seyJuYW1lIjoiZGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImRlIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4ifSx7Im5hbWUiOiJkZVx0ZGVhZGFjdXRlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoZGVhZCBhY3V0ZSkifSx7Im5hbWUiOiJkZVx0ZGVhZGdyYXZlYWN1dGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChkZWFkIGdyYXZlIGFjdXRlKSJ9LHsibmFtZSI6ImRlXHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJkZVx0VDMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChUMykifSx7Im5hbWUiOiJkZVx0cm8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUm9tYW5pYW4gKEdlcm1hbnkpIn0seyJuYW1lIjoiZGVcdHJvX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUm9tYW5pYW4gKEdlcm1hbnksIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiZGVcdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKER2b3JhaykifSx7Im5hbWUiOiJkZVx0c3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImRlXHRuZW8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChOZW8gMikifSx7Im5hbWUiOiJkZVx0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoTWFjaW50b3NoKSJ9LHsibmFtZSI6ImRlXHRtYWNfbm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKE1hY2ludG9zaCwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJkZVx0ZHNiIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikxvd2VyIFNvcmJpYW4ifSx7Im5hbWUiOiJkZVx0ZHNiX3F3ZXJ0eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMb3dlciBTb3JiaWFuIChxd2VydHopIn0seyJuYW1lIjoiZGVcdHF3ZXJ0eSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHZXJtYW4gKHF3ZXJ0eSkifSx7Im5hbWUiOiJkZVx0cnUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InJ1IiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChHZXJtYW55LCBwaG9uZXRpYykifSx7Im5hbWUiOiJkZVx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAobGVnYWN5KSJ9LHsibmFtZSI6ImdyIiwic2hvcnRfZGVzY3JpcHRpb24iOiJnciIsImRlc2NyaXB0aW9uIjoiR3JlZWsifSx7Im5hbWUiOiJnclx0c2ltcGxlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkdyZWVrIChzaW1wbGUpIn0seyJuYW1lIjoiZ3JcdGV4dGVuZGVkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkdyZWVrIChleHRlbmRlZCkifSx7Im5hbWUiOiJnclx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJHcmVlayAoZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJnclx0cG9seXRvbmljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkdyZWVrIChwb2x5dG9uaWMpIn0seyJuYW1lIjoiaHUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imh1IiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4ifSx7Im5hbWUiOiJodVx0c3RhbmRhcmQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuIChzdGFuZGFyZCkifSx7Im5hbWUiOiJodVx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdHF3ZXJ0eSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKHF3ZXJ0eSkifSx7Im5hbWUiOiJodVx0MTAxX3F3ZXJ0el9jb21tYV9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAxL3F3ZXJ0ei9jb21tYS9kZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMV9xd2VydHpfY29tbWFfbm9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAxL3F3ZXJ0ei9jb21tYS9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDFfcXdlcnR6X2RvdF9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAxL3F3ZXJ0ei9kb3QvZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDFfcXdlcnR6X2RvdF9ub2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR6L2RvdC9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDFfcXdlcnR5X2NvbW1hX2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR5L2NvbW1hL2RlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAxX3F3ZXJ0eV9jb21tYV9ub2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR5L2NvbW1hL2VsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMV9xd2VydHlfZG90X2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDEvcXdlcnR5L2RvdC9kZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMV9xd2VydHlfZG90X25vZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMS9xd2VydHkvZG90L2VsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMl9xd2VydHpfY29tbWFfZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMi9xd2VydHovY29tbWEvZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDJfcXdlcnR6X2NvbW1hX25vZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMi9xd2VydHovY29tbWEvZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAyX3F3ZXJ0el9kb3RfZGVhZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIdW5nYXJpYW4gKDEwMi9xd2VydHovZG90L2RlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAyX3F3ZXJ0el9kb3Rfbm9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0ei9kb3QvZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJodVx0MTAyX3F3ZXJ0eV9jb21tYV9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0eS9jb21tYS9kZWFkIGtleXMpIn0seyJuYW1lIjoiaHVcdDEwMl9xd2VydHlfY29tbWFfbm9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0eS9jb21tYS9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDJfcXdlcnR5X2RvdF9kZWFkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikh1bmdhcmlhbiAoMTAyL3F3ZXJ0eS9kb3QvZGVhZCBrZXlzKSJ9LHsibmFtZSI6Imh1XHQxMDJfcXdlcnR5X2RvdF9ub2RlYWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSHVuZ2FyaWFuICgxMDIvcXdlcnR5L2RvdC9lbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJpcyIsImRlc2NyaXB0aW9uIjoiSWNlbGFuZGljIn0seyJuYW1lIjoiaXNcdFN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkljZWxhbmRpYyAoU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJpc1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJY2VsYW5kaWMgKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiaXNcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJY2VsYW5kaWMgKE1hY2ludG9zaCkifSx7Im5hbWUiOiJpc1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkljZWxhbmRpYyAoRHZvcmFrKSJ9LHsibmFtZSI6ImlsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJoZSIsImRlc2NyaXB0aW9uIjoiSGVicmV3In0seyJuYW1lIjoiaWxcdGx5eCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJIZWJyZXcgKGx5eCkifSx7Im5hbWUiOiJpbFx0cGhvbmV0aWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSGVicmV3IChwaG9uZXRpYykifSx7Im5hbWUiOiJpbFx0YmlibGljYWwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSGVicmV3IChCaWJsaWNhbCwgVGlybykifSx7Im5hbWUiOiJpdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiaXQiLCJkZXNjcmlwdGlvbiI6Ikl0YWxpYW4ifSx7Im5hbWUiOiJpdFx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJdGFsaWFuIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6Iml0XHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSXRhbGlhbiAoTWFjaW50b3NoKSJ9LHsibmFtZSI6Iml0XHR1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJdGFsaWFuIChVUyBrZXlib2FyZCB3aXRoIEl0YWxpYW4gbGV0dGVycykifSx7Im5hbWUiOiJpdFx0Z2VvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlb3JnaWFuIChJdGFseSkifSx7Im5hbWUiOiJpdFx0aWJtIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikl0YWxpYW4gKElCTSAxNDIpIn0seyJuYW1lIjoianAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImphIiwiZGVzY3JpcHRpb24iOiJKYXBhbmVzZSJ9LHsibmFtZSI6ImpwXHRrYW5hIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkphcGFuZXNlIChLYW5hKSJ9LHsibmFtZSI6ImpwXHRrYW5hODYiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSmFwYW5lc2UgKEthbmEgODYpIn0seyJuYW1lIjoianBcdE9BREcxMDlBIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkphcGFuZXNlIChPQURHIDEwOUEpIn0seyJuYW1lIjoianBcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJKYXBhbmVzZSAoTWFjaW50b3NoKSJ9LHsibmFtZSI6ImpwXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiSmFwYW5lc2UgKER2b3JhaykifSx7Im5hbWUiOiJrZyIsInNob3J0X2Rlc2NyaXB0aW9uIjoia2kiLCJkZXNjcmlwdGlvbiI6Ikt5cmd5eiJ9LHsibmFtZSI6ImtnXHRwaG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJLeXJneXogKHBob25ldGljKSJ9LHsibmFtZSI6ImtoIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrbSIsImRlc2NyaXB0aW9uIjoiS2htZXIgKENhbWJvZGlhKSJ9LHsibmFtZSI6Imt6Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrayIsImRlc2NyaXB0aW9uIjoiS2F6YWtoIn0seyJuYW1lIjoia3pcdHJ1c2theiIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKEthemFraHN0YW4sIHdpdGggS2F6YWtoKSJ9LHsibmFtZSI6Imt6XHRrYXpydXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiS2F6YWtoICh3aXRoIFJ1c3NpYW4pIn0seyJuYW1lIjoibGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImxvIiwiZGVzY3JpcHRpb24iOiJMYW8ifSx7Im5hbWUiOiJsYVx0c3RlYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMYW8gKFNURUEgcHJvcG9zZWQgc3RhbmRhcmQgbGF5b3V0KSJ9LHsibmFtZSI6ImxhdGFtIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlcyIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoTGF0aW4gQW1lcmljYW4pIn0seyJuYW1lIjoibGF0YW1cdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoTGF0aW4gQW1lcmljYW4sIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibGF0YW1cdGRlYWR0aWxkZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTcGFuaXNoIChMYXRpbiBBbWVyaWNhbiwgaW5jbHVkZSBkZWFkIHRpbGRlKSJ9LHsibmFtZSI6ImxhdGFtXHRzdW5kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTcGFuaXNoIChMYXRpbiBBbWVyaWNhbiwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJsdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoibHQiLCJkZXNjcmlwdGlvbiI6IkxpdGh1YW5pYW4ifSx7Im5hbWUiOiJsdFx0c3RkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxpdGh1YW5pYW4gKHN0YW5kYXJkKSJ9LHsibmFtZSI6Imx0XHR1cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMaXRodWFuaWFuIChVUyBrZXlib2FyZCB3aXRoIExpdGh1YW5pYW4gbGV0dGVycykifSx7Im5hbWUiOiJsdFx0aWJtIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxpdGh1YW5pYW4gKElCTSBMU1QgMTIwNS05MikifSx7Im5hbWUiOiJsdFx0bGVrcCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMaXRodWFuaWFuIChMRUtQKSJ9LHsibmFtZSI6Imx0XHRsZWtwYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMaXRodWFuaWFuIChMRUtQYSkifSx7Im5hbWUiOiJsdiIsInNob3J0X2Rlc2NyaXB0aW9uIjoibHYiLCJkZXNjcmlwdGlvbiI6IkxhdHZpYW4ifSx7Im5hbWUiOiJsdlx0YXBvc3Ryb3BoZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJMYXR2aWFuIChhcG9zdHJvcGhlIHZhcmlhbnQpIn0seyJuYW1lIjoibHZcdHRpbGRlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxhdHZpYW4gKHRpbGRlIHZhcmlhbnQpIn0seyJuYW1lIjoibHZcdGZrZXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTGF0dmlhbiAoRiB2YXJpYW50KSJ9LHsibmFtZSI6Imx2XHRtb2Rlcm4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTGF0dmlhbiAobW9kZXJuKSJ9LHsibmFtZSI6Imx2XHRlcmdvbm9taWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTGF0dmlhbiAoZXJnb25vbWljLCDFqkdKUk1WKSJ9LHsibmFtZSI6Imx2XHRhZGFwdGVkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkxhdHZpYW4gKGFkYXB0ZWQpIn0seyJuYW1lIjoibWFvIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtaSIsImRlc2NyaXB0aW9uIjoiTWFvcmkifSx7Im5hbWUiOiJtZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3IiLCJkZXNjcmlwdGlvbiI6Ik1vbnRlbmVncmluIn0seyJuYW1lIjoibWVcdGN5cmlsbGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1vbnRlbmVncmluIChDeXJpbGxpYykifSx7Im5hbWUiOiJtZVx0Y3lyaWxsaWN5eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJNb250ZW5lZ3JpbiAoQ3lyaWxsaWMsIFogYW5kIFpIRSBzd2FwcGVkKSJ9LHsibmFtZSI6Im1lXHRsYXRpbnVuaWNvZGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTW9udGVuZWdyaW4gKExhdGluIFVuaWNvZGUpIn0seyJuYW1lIjoibWVcdGxhdGlueXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTW9udGVuZWdyaW4gKExhdGluIHF3ZXJ0eSkifSx7Im5hbWUiOiJtZVx0bGF0aW51bmljb2RleXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTW9udGVuZWdyaW4gKExhdGluIFVuaWNvZGUgcXdlcnR5KSJ9LHsibmFtZSI6Im1lXHRjeXJpbGxpY2FsdGVybmF0ZXF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJNb250ZW5lZ3JpbiAoQ3lyaWxsaWMgd2l0aCBndWlsbGVtZXRzKSJ9LHsibmFtZSI6Im1lXHRsYXRpbmFsdGVybmF0ZXF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJNb250ZW5lZ3JpbiAoTGF0aW4gd2l0aCBndWlsbGVtZXRzKSJ9LHsibmFtZSI6Im1rIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtayIsImRlc2NyaXB0aW9uIjoiTWFjZWRvbmlhbiJ9LHsibmFtZSI6Im1rXHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1hY2Vkb25pYW4gKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibXQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Im10IiwiZGVzY3JpcHRpb24iOiJNYWx0ZXNlIn0seyJuYW1lIjoibXRcdHVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1hbHRlc2UgKHdpdGggVVMgbGF5b3V0KSJ9LHsibmFtZSI6Im1uIiwic2hvcnRfZGVzY3JpcHRpb24iOiJtbiIsImRlc2NyaXB0aW9uIjoiTW9uZ29saWFuIn0seyJuYW1lIjoibm8iLCJzaG9ydF9kZXNjcmlwdGlvbiI6Im5vIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4ifSx7Im5hbWUiOiJub1x0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4gKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibm9cdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4gKER2b3JhaykifSx7Im5hbWUiOiJub1x0c21pIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik5vcnRoZXJuIFNhYW1pIChOb3J3YXkpIn0seyJuYW1lIjoibm9cdHNtaV9ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik5vcnRoZXJuIFNhYW1pIChOb3J3YXksIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibm9cdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J3ZWdpYW4gKE1hY2ludG9zaCkifSx7Im5hbWUiOiJub1x0bWFjX25vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTm9yd2VnaWFuIChNYWNpbnRvc2gsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoibm9cdGNvbGVtYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiTm9yd2VnaWFuIChDb2xlbWFrKSJ9LHsibmFtZSI6InBsIiwic2hvcnRfZGVzY3JpcHRpb24iOiJwbCIsImRlc2NyaXB0aW9uIjoiUG9saXNoIn0seyJuYW1lIjoicGxcdGxlZ2FjeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb2xpc2ggKGxlZ2FjeSkifSx7Im5hbWUiOiJwbFx0cXdlcnR6Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvbGlzaCAocXdlcnR6KSJ9LHsibmFtZSI6InBsXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9saXNoIChEdm9yYWspIn0seyJuYW1lIjoicGxcdGR2b3Jha19xdW90ZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUG9saXNoIChEdm9yYWssIFBvbGlzaCBxdW90ZXMgb24gcXVvdGVtYXJrIGtleSkifSx7Im5hbWUiOiJwbFx0ZHZvcmFrX2FsdHF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb2xpc2ggKER2b3JhaywgUG9saXNoIHF1b3RlcyBvbiBrZXkgMSkifSx7Im5hbWUiOiJwbFx0Y3NiIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikthc2h1YmlhbiJ9LHsibmFtZSI6InBsXHRzemwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2lsZXNpYW4ifSx7Im5hbWUiOiJwbFx0cnVfcGhvbmV0aWNfZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiJydSIsImRlc2NyaXB0aW9uIjoiUnVzc2lhbiAoUG9sYW5kLCBwaG9uZXRpYyBEdm9yYWspIn0seyJuYW1lIjoicGxcdGR2cCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb2xpc2ggKHByb2dyYW1tZXIgRHZvcmFrKSJ9LHsibmFtZSI6InB0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJwdCIsImRlc2NyaXB0aW9uIjoiUG9ydHVndWVzZSJ9LHsibmFtZSI6InB0XHRub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoicHRcdHN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoicHRcdG1hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJQb3J0dWd1ZXNlIChNYWNpbnRvc2gpIn0seyJuYW1lIjoicHRcdG1hY19ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE1hY2ludG9zaCwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJwdFx0bWFjX3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE1hY2ludG9zaCwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJwdFx0bmF0aXZvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE5hdGl2bykifSx7Im5hbWUiOiJwdFx0bmF0aXZvLXVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlBvcnR1Z3Vlc2UgKE5hdGl2byBmb3IgVVMga2V5Ym9hcmRzKSJ9LHsibmFtZSI6InB0XHRuYXRpdm8tZXBvIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVzcGVyYW50byAoUG9ydHVnYWwsIE5hdGl2bykifSx7Im5hbWUiOiJybyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicm8iLCJkZXNjcmlwdGlvbiI6IlJvbWFuaWFuIn0seyJuYW1lIjoicm9cdGNlZGlsbGEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUm9tYW5pYW4gKGNlZGlsbGEpIn0seyJuYW1lIjoicm9cdHN0ZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSb21hbmlhbiAoc3RhbmRhcmQpIn0seyJuYW1lIjoicm9cdHN0ZF9jZWRpbGxhIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJvbWFuaWFuIChzdGFuZGFyZCBjZWRpbGxhKSJ9LHsibmFtZSI6InJvXHR3aW5rZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJvbWFuaWFuIChXaW5LZXlzKSJ9LHsibmFtZSI6InJ1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJydSIsImRlc2NyaXB0aW9uIjoiUnVzc2lhbiJ9LHsibmFtZSI6InJ1XHRwaG9uZXRpYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChwaG9uZXRpYykifSx7Im5hbWUiOiJydVx0cGhvbmV0aWNfd2lua2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChwaG9uZXRpYyBXaW5LZXlzKSJ9LHsibmFtZSI6InJ1XHR0eXBld3JpdGVyIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKHR5cGV3cml0ZXIpIn0seyJuYW1lIjoicnVcdGxlZ2FjeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChsZWdhY3kpIn0seyJuYW1lIjoicnVcdHR5cGV3cml0ZXItbGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKHR5cGV3cml0ZXIsIGxlZ2FjeSkifSx7Im5hbWUiOiJydVx0dHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGF0YXIifSx7Im5hbWUiOiJydVx0b3NfbGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik9zc2V0aWFuIChsZWdhY3kpIn0seyJuYW1lIjoicnVcdG9zX3dpbmtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiT3NzZXRpYW4gKFdpbktleXMpIn0seyJuYW1lIjoicnVcdGN2Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNodXZhc2gifSx7Im5hbWUiOiJydVx0Y3ZfbGF0aW4iLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQ2h1dmFzaCAoTGF0aW4pIn0seyJuYW1lIjoicnVcdHVkbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJVZG11cnQifSx7Im5hbWUiOiJydVx0a29tIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IktvbWkifSx7Im5hbWUiOiJydVx0c2FoIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Illha3V0In0seyJuYW1lIjoicnVcdHhhbCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJLYWxteWsifSx7Im5hbWUiOiJydVx0ZG9zIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKERPUykifSx7Im5hbWUiOiJydVx0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKE1hY2ludG9zaCkifSx7Im5hbWUiOiJydVx0c3JwIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4gKFJ1c3NpYSkifSx7Im5hbWUiOiJydVx0YmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkJhc2hraXJpYW4ifSx7Im5hbWUiOiJydVx0Y2htIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik1hcmkifSx7Im5hbWUiOiJycyIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3IiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4ifSx7Im5hbWUiOiJyc1x0eXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYmlhbiAoQ3lyaWxsaWMsIFogYW5kIFpIRSBzd2FwcGVkKSJ9LHsibmFtZSI6InJzXHRsYXRpbiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTZXJiaWFuIChMYXRpbikifSx7Im5hbWUiOiJyc1x0bGF0aW51bmljb2RlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4gKExhdGluIFVuaWNvZGUpIn0seyJuYW1lIjoicnNcdGxhdGlueXoiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYmlhbiAoTGF0aW4gcXdlcnR5KSJ9LHsibmFtZSI6InJzXHRsYXRpbnVuaWNvZGV5eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTZXJiaWFuIChMYXRpbiBVbmljb2RlIHF3ZXJ0eSkifSx7Im5hbWUiOiJyc1x0YWx0ZXJuYXRlcXVvdGVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNlcmJpYW4gKEN5cmlsbGljIHdpdGggZ3VpbGxlbWV0cykifSx7Im5hbWUiOiJyc1x0bGF0aW5hbHRlcm5hdGVxdW90ZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2VyYmlhbiAoTGF0aW4gd2l0aCBndWlsbGVtZXRzKSJ9LHsibmFtZSI6InJzXHRydWUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiUGFubm9uaWFuIFJ1c3luIChob21vcGhvbmljKSJ9LHsibmFtZSI6InNpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzbCIsImRlc2NyaXB0aW9uIjoiU2xvdmVuaWFuIn0seyJuYW1lIjoic2lcdGFsdGVybmF0ZXF1b3RlcyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTbG92ZW5pYW4gKHVzZSBndWlsbGVtZXRzIGZvciBxdW90ZXMpIn0seyJuYW1lIjoic2lcdHVzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNsb3ZlbmlhbiAoVVMga2V5Ym9hcmQgd2l0aCBTbG92ZW5pYW4gbGV0dGVycykifSx7Im5hbWUiOiJzayIsInNob3J0X2Rlc2NyaXB0aW9uIjoic2siLCJkZXNjcmlwdGlvbiI6IlNsb3ZhayJ9LHsibmFtZSI6InNrXHRia3NsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNsb3ZhayAoZXh0ZW5kZWQgQmFja3NsYXNoKSJ9LHsibmFtZSI6InNrXHRxd2VydHkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU2xvdmFrIChxd2VydHkpIn0seyJuYW1lIjoic2tcdHF3ZXJ0eV9ia3NsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNsb3ZhayAocXdlcnR5LCBleHRlbmRlZCBCYWNrc2xhc2gpIn0seyJuYW1lIjoiZXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVzIiwiZGVzY3JpcHRpb24iOiJTcGFuaXNoIn0seyJuYW1lIjoiZXNcdG5vZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJlc1x0ZGVhZHRpbGRlIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNwYW5pc2ggKGluY2x1ZGUgZGVhZCB0aWxkZSkifSx7Im5hbWUiOiJlc1x0c3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3BhbmlzaCAoU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJlc1x0ZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNwYW5pc2ggKER2b3JhaykifSx7Im5hbWUiOiJlc1x0YXN0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkFzdHVyaWFuIChTcGFpbiwgd2l0aCBib3R0b20tZG90IEggYW5kIGJvdHRvbS1kb3QgTCkifSx7Im5hbWUiOiJlc1x0Y2F0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNhdGFsYW4gKFNwYWluLCB3aXRoIG1pZGRsZS1kb3QgTCkifSx7Im5hbWUiOiJlc1x0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlNwYW5pc2ggKE1hY2ludG9zaCkifSx7Im5hbWUiOiJzZSIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3YiLCJkZXNjcmlwdGlvbiI6IlN3ZWRpc2gifSx7Im5hbWUiOiJzZVx0bm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTd2VkaXNoIChlbGltaW5hdGUgZGVhZCBrZXlzKSJ9LHsibmFtZSI6InNlXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3dlZGlzaCAoRHZvcmFrKSJ9LHsibmFtZSI6InNlXHRydXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InJ1IiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChTd2VkZW4sIHBob25ldGljKSJ9LHsibmFtZSI6InNlXHRydXNfbm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoicnUiLCJkZXNjcmlwdGlvbiI6IlJ1c3NpYW4gKFN3ZWRlbiwgcGhvbmV0aWMsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoic2VcdHNtaSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJOb3J0aGVybiBTYWFtaSAoU3dlZGVuKSJ9LHsibmFtZSI6InNlXHRtYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiU3dlZGlzaCAoTWFjaW50b3NoKSJ9LHsibmFtZSI6InNlXHRzdmR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJTd2VkaXNoIChTdmR2b3JhaykifSx7Im5hbWUiOiJzZVx0c3dsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlN3ZWRpc2ggU2lnbiBMYW5ndWFnZSJ9LHsibmFtZSI6ImNoIiwic2hvcnRfZGVzY3JpcHRpb24iOiJkZSIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChTd2l0emVybGFuZCkifSx7Im5hbWUiOiJjaFx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoU3dpdHplcmxhbmQsIGxlZ2FjeSkifSx7Im5hbWUiOiJjaFx0ZGVfbm9kZWFka2V5cyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZGUiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoU3dpdHplcmxhbmQsIGVsaW1pbmF0ZSBkZWFkIGtleXMpIn0seyJuYW1lIjoiY2hcdGRlX3N1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJkZSIsImRlc2NyaXB0aW9uIjoiR2VybWFuIChTd2l0emVybGFuZCwgU3VuIGRlYWQga2V5cykifSx7Im5hbWUiOiJjaFx0ZnIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN3aXR6ZXJsYW5kKSJ9LHsibmFtZSI6ImNoXHRmcl9ub2RlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiJmciIsImRlc2NyaXB0aW9uIjoiRnJlbmNoIChTd2l0emVybGFuZCwgZWxpbWluYXRlIGRlYWQga2V5cykifSx7Im5hbWUiOiJjaFx0ZnJfc3VuZGVhZGtleXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN3aXR6ZXJsYW5kLCBTdW4gZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImNoXHRmcl9tYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKFN3aXR6ZXJsYW5kLCBNYWNpbnRvc2gpIn0seyJuYW1lIjoiY2hcdGRlX21hYyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZGUiLCJkZXNjcmlwdGlvbiI6Ikdlcm1hbiAoU3dpdHplcmxhbmQsIE1hY2ludG9zaCkifSx7Im5hbWUiOiJzeSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoU3lyaWEpIn0seyJuYW1lIjoic3lcdHN5YyIsInNob3J0X2Rlc2NyaXB0aW9uIjoic3ljIiwiZGVzY3JpcHRpb24iOiJTeXJpYWMifSx7Im5hbWUiOiJzeVx0c3ljX3Bob25ldGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiJzeWMiLCJkZXNjcmlwdGlvbiI6IlN5cmlhYyAocGhvbmV0aWMpIn0seyJuYW1lIjoic3lcdGt1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoU3lyaWEsIExhdGluIFEpIn0seyJuYW1lIjoic3lcdGt1X2YiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChTeXJpYSwgRikifSx7Im5hbWUiOiJzeVx0a3VfYWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoU3lyaWEsIExhdGluIEFsdC1RKSJ9LHsibmFtZSI6InRqIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0ZyIsImRlc2NyaXB0aW9uIjoiVGFqaWsifSx7Im5hbWUiOiJ0alx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlRhamlrIChsZWdhY3kpIn0seyJuYW1lIjoibGsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InNpIiwiZGVzY3JpcHRpb24iOiJTaW5oYWxhIChwaG9uZXRpYykifSx7Im5hbWUiOiJsa1x0dGFtX3VuaWNvZGUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRhIiwiZGVzY3JpcHRpb24iOiJUYW1pbCAoU3JpIExhbmthLCBVbmljb2RlKSJ9LHsibmFtZSI6ImxrXHR0YW1fVEFCIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlRhbWlsIChTcmkgTGFua2EsIFRBQiBUeXBld3JpdGVyKSJ9LHsibmFtZSI6InRoIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ0aCIsImRlc2NyaXB0aW9uIjoiVGhhaSJ9LHsibmFtZSI6InRoXHR0aXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGhhaSAoVElTLTgyMC4yNTM4KSJ9LHsibmFtZSI6InRoXHRwYXQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGhhaSAoUGF0dGFjaG90ZSkifSx7Im5hbWUiOiJ0ciIsInNob3J0X2Rlc2NyaXB0aW9uIjoidHIiLCJkZXNjcmlwdGlvbiI6IlR1cmtpc2gifSx7Im5hbWUiOiJ0clx0ZiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJUdXJraXNoIChGKSJ9LHsibmFtZSI6InRyXHRhbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVHVya2lzaCAoQWx0LVEpIn0seyJuYW1lIjoidHJcdHN1bmRlYWRrZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlR1cmtpc2ggKFN1biBkZWFkIGtleXMpIn0seyJuYW1lIjoidHJcdGt1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoVHVya2V5LCBMYXRpbiBRKSJ9LHsibmFtZSI6InRyXHRrdV9mIiwic2hvcnRfZGVzY3JpcHRpb24iOiJrdSIsImRlc2NyaXB0aW9uIjoiS3VyZGlzaCAoVHVya2V5LCBGKSJ9LHsibmFtZSI6InRyXHRrdV9hbHQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Imt1IiwiZGVzY3JpcHRpb24iOiJLdXJkaXNoIChUdXJrZXksIExhdGluIEFsdC1RKSJ9LHsibmFtZSI6InRyXHRpbnRsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlR1cmtpc2ggKGludGVybmF0aW9uYWwgd2l0aCBkZWFkIGtleXMpIn0seyJuYW1lIjoidHJcdGNyaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY3JoIiwiZGVzY3JpcHRpb24iOiJDcmltZWFuIFRhdGFyIChUdXJraXNoIFEpIn0seyJuYW1lIjoidHJcdGNyaF9mIiwic2hvcnRfZGVzY3JpcHRpb24iOiJjcmgiLCJkZXNjcmlwdGlvbiI6IkNyaW1lYW4gVGF0YXIgKFR1cmtpc2ggRikifSx7Im5hbWUiOiJ0clx0Y3JoX2FsdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiY3JoIiwiZGVzY3JpcHRpb24iOiJDcmltZWFuIFRhdGFyIChUdXJraXNoIEFsdC1RKSJ9LHsibmFtZSI6InR3Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJ6aCIsImRlc2NyaXB0aW9uIjoiVGFpd2FuZXNlIn0seyJuYW1lIjoidHdcdGluZGlnZW5vdXMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVGFpd2FuZXNlIChpbmRpZ2Vub3VzKSJ9LHsibmFtZSI6InR3XHRzYWlzaXlhdCIsInNob3J0X2Rlc2NyaXB0aW9uIjoieHN5IiwiZGVzY3JpcHRpb24iOiJTYWlzaXlhdCAoVGFpd2FuKSJ9LHsibmFtZSI6InVhIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ1ayIsImRlc2NyaXB0aW9uIjoiVWtyYWluaWFuIn0seyJuYW1lIjoidWFcdHBob25ldGljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAocGhvbmV0aWMpIn0seyJuYW1lIjoidWFcdHR5cGV3cml0ZXIiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVWtyYWluaWFuICh0eXBld3JpdGVyKSJ9LHsibmFtZSI6InVhXHR3aW5rZXlzIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAoV2luS2V5cykifSx7Im5hbWUiOiJ1YVx0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAobGVnYWN5KSJ9LHsibmFtZSI6InVhXHRyc3R1Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAoc3RhbmRhcmQgUlNUVSkifSx7Im5hbWUiOiJ1YVx0cnN0dV9ydSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJSdXNzaWFuIChVa3JhaW5lLCBzdGFuZGFyZCBSU1RVKSJ9LHsibmFtZSI6InVhXHRob21vcGhvbmljIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVrcmFpbmlhbiAoaG9tb3Bob25pYykifSx7Im5hbWUiOiJnYiIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZW4iLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLKSJ9LHsibmFtZSI6ImdiXHRleHRkIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBleHRlbmRlZCBXaW5LZXlzKSJ9LHsibmFtZSI6ImdiXHRpbnRsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBpbnRlcm5hdGlvbmFsIHdpdGggZGVhZCBrZXlzKSJ9LHsibmFtZSI6ImdiXHRkdm9yYWsiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoVUssIER2b3JhaykifSx7Im5hbWUiOiJnYlx0ZHZvcmFrdWtwIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBEdm9yYWsgd2l0aCBVSyBwdW5jdHVhdGlvbikifSx7Im5hbWUiOiJnYlx0bWFjIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBNYWNpbnRvc2gpIn0seyJuYW1lIjoiZ2JcdG1hY19pbnRsIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVuZ2xpc2ggKFVLLCBNYWNpbnRvc2ggaW50ZXJuYXRpb25hbCkifSx7Im5hbWUiOiJnYlx0Y29sZW1hayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChVSywgQ29sZW1haykifSx7Im5hbWUiOiJ1eiIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXoiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIn0seyJuYW1lIjoidXpcdGxhdGluIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlV6YmVrIChMYXRpbikifSx7Im5hbWUiOiJ2biIsInNob3J0X2Rlc2NyaXB0aW9uIjoidmkiLCJkZXNjcmlwdGlvbiI6IlZpZXRuYW1lc2UifSx7Im5hbWUiOiJrciIsInNob3J0X2Rlc2NyaXB0aW9uIjoia28iLCJkZXNjcmlwdGlvbiI6IktvcmVhbiJ9LHsibmFtZSI6ImtyXHRrcjEwNCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJLb3JlYW4gKDEwMS8xMDQga2V5IGNvbXBhdGlibGUpIn0seyJuYW1lIjoibmVjX3ZuZHIvanAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImphIiwiZGVzY3JpcHRpb24iOiJKYXBhbmVzZSAoUEMtOTh4eCBTZXJpZXMpIn0seyJuYW1lIjoiaWUiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImllIiwiZGVzY3JpcHRpb24iOiJJcmlzaCJ9LHsibmFtZSI6ImllXHRDbG9HYWVsYWNoIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkNsb0dhZWxhY2gifSx7Im5hbWUiOiJpZVx0VW5pY29kZUV4cGVydCIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJJcmlzaCAoVW5pY29kZUV4cGVydCkifSx7Im5hbWUiOiJpZVx0b2dhbSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJPZ2hhbSJ9LHsibmFtZSI6ImllXHRvZ2FtX2lzNDM0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6Ik9naGFtIChJUzQzNCkifSx7Im5hbWUiOiJwayIsInNob3J0X2Rlc2NyaXB0aW9uIjoidXIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKFBha2lzdGFuKSJ9LHsibmFtZSI6InBrXHR1cmQtY3J1bHAiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiVXJkdSAoUGFraXN0YW4sIENSVUxQKSJ9LHsibmFtZSI6InBrXHR1cmQtbmxhIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlVyZHUgKFBha2lzdGFuLCBOTEEpIn0seyJuYW1lIjoicGtcdGFyYSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiYXIiLCJkZXNjcmlwdGlvbiI6IkFyYWJpYyAoUGFraXN0YW4pIn0seyJuYW1lIjoicGtcdHNuZCIsInNob3J0X2Rlc2NyaXB0aW9uIjoic2QiLCJkZXNjcmlwdGlvbiI6IlNpbmRoaSJ9LHsibmFtZSI6Im12Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJkdiIsImRlc2NyaXB0aW9uIjoiRGhpdmVoaSJ9LHsibmFtZSI6InphIiwic2hvcnRfZGVzY3JpcHRpb24iOiJlbiIsImRlc2NyaXB0aW9uIjoiRW5nbGlzaCAoU291dGggQWZyaWNhKSJ9LHsibmFtZSI6ImVwbyIsInNob3J0X2Rlc2NyaXB0aW9uIjoiZW8iLCJkZXNjcmlwdGlvbiI6IkVzcGVyYW50byJ9LHsibmFtZSI6ImVwb1x0bGVnYWN5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkVzcGVyYW50byAoZGlzcGxhY2VkIHNlbWljb2xvbiBhbmQgcXVvdGUsIG9ic29sZXRlKSJ9LHsibmFtZSI6Im5wIiwic2hvcnRfZGVzY3JpcHRpb24iOiJuZSIsImRlc2NyaXB0aW9uIjoiTmVwYWxpIn0seyJuYW1lIjoibmciLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChOaWdlcmlhKSJ9LHsibmFtZSI6Im5nXHRpZ2JvIiwic2hvcnRfZGVzY3JpcHRpb24iOiJpZyIsImRlc2NyaXB0aW9uIjoiSWdibyJ9LHsibmFtZSI6Im5nXHR5b3J1YmEiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InlvIiwiZGVzY3JpcHRpb24iOiJZb3J1YmEifSx7Im5hbWUiOiJuZ1x0aGF1c2EiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImhhIiwiZGVzY3JpcHRpb24iOiJIYXVzYSJ9LHsibmFtZSI6ImV0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJhbSIsImRlc2NyaXB0aW9uIjoiQW1oYXJpYyJ9LHsibmFtZSI6InNuIiwic2hvcnRfZGVzY3JpcHRpb24iOiJ3byIsImRlc2NyaXB0aW9uIjoiV29sb2YifSx7Im5hbWUiOiJicmFpIiwic2hvcnRfZGVzY3JpcHRpb24iOiJicmwiLCJkZXNjcmlwdGlvbiI6IkJyYWlsbGUifSx7Im5hbWUiOiJicmFpXHRsZWZ0X2hhbmQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQnJhaWxsZSAobGVmdCBoYW5kKSJ9LHsibmFtZSI6ImJyYWlcdHJpZ2h0X2hhbmQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiQnJhaWxsZSAocmlnaHQgaGFuZCkifSx7Im5hbWUiOiJ0bSIsInNob3J0X2Rlc2NyaXB0aW9uIjoidGsiLCJkZXNjcmlwdGlvbiI6IlR1cmttZW4ifSx7Im5hbWUiOiJ0bVx0YWx0Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IlR1cmttZW4gKEFsdC1RKSJ9LHsibmFtZSI6Im1sIiwic2hvcnRfZGVzY3JpcHRpb24iOiJibSIsImRlc2NyaXB0aW9uIjoiQmFtYmFyYSJ9LHsibmFtZSI6Im1sXHRmci1vc3MiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImZyIiwiZGVzY3JpcHRpb24iOiJGcmVuY2ggKE1hbGksIGFsdGVybmF0aXZlKSJ9LHsibmFtZSI6Im1sXHR1cy1tYWMiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChNYWxpLCBVUyBNYWNpbnRvc2gpIn0seyJuYW1lIjoibWxcdHVzLWludGwiLCJzaG9ydF9kZXNjcmlwdGlvbiI6ImVuIiwiZGVzY3JpcHRpb24iOiJFbmdsaXNoIChNYWxpLCBVUyBpbnRlcm5hdGlvbmFsKSJ9LHsibmFtZSI6InR6Iiwic2hvcnRfZGVzY3JpcHRpb24iOiJzdyIsImRlc2NyaXB0aW9uIjoiU3dhaGlsaSAoVGFuemFuaWEpIn0seyJuYW1lIjoia2UiLCJzaG9ydF9kZXNjcmlwdGlvbiI6InN3IiwiZGVzY3JpcHRpb24iOiJTd2FoaWxpIChLZW55YSkifSx7Im5hbWUiOiJrZVx0a2lrIiwic2hvcnRfZGVzY3JpcHRpb24iOiJraSIsImRlc2NyaXB0aW9uIjoiS2lrdXl1In0seyJuYW1lIjoiYnciLCJzaG9ydF9kZXNjcmlwdGlvbiI6InRuIiwiZGVzY3JpcHRpb24iOiJUc3dhbmEifSx7Im5hbWUiOiJwaCIsInNob3J0X2Rlc2NyaXB0aW9uIjoicGgiLCJkZXNjcmlwdGlvbiI6IkZpbGlwaW5vIn0seyJuYW1lIjoicGhcdHF3ZXJ0eS1iYXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKFFXRVJUWSBCYXliYXlpbikifSx7Im5hbWUiOiJwaFx0Y2FwZXdlbGwtZHZvcmFrIiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZpbGlwaW5vIChDYXBld2VsbC1Edm9yYWsgTGF0aW4pIn0seyJuYW1lIjoicGhcdGNhcGV3ZWxsLWR2b3Jhay1iYXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKENhcGV3ZWxsLUR2b3JhayBCYXliYXlpbikifSx7Im5hbWUiOiJwaFx0Y2FwZXdlbGwtcXdlcmYyazYiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKENhcGV3ZWxsLVFXRVJGIDIwMDYgTGF0aW4pIn0seyJuYW1lIjoicGhcdGNhcGV3ZWxsLXF3ZXJmMms2LWJheSIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGaWxpcGlubyAoQ2FwZXdlbGwtUVdFUkYgMjAwNiBCYXliYXlpbikifSx7Im5hbWUiOiJwaFx0Y29sZW1hayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGaWxpcGlubyAoQ29sZW1hayBMYXRpbikifSx7Im5hbWUiOiJwaFx0Y29sZW1hay1iYXkiLCJzaG9ydF9kZXNjcmlwdGlvbiI6IiIsImRlc2NyaXB0aW9uIjoiRmlsaXBpbm8gKENvbGVtYWsgQmF5YmF5aW4pIn0seyJuYW1lIjoicGhcdGR2b3JhayIsInNob3J0X2Rlc2NyaXB0aW9uIjoiIiwiZGVzY3JpcHRpb24iOiJGaWxpcGlubyAoRHZvcmFrIExhdGluKSJ9LHsibmFtZSI6InBoXHRkdm9yYWstYmF5Iiwic2hvcnRfZGVzY3JpcHRpb24iOiIiLCJkZXNjcmlwdGlvbiI6IkZpbGlwaW5vIChEdm9yYWsgQmF5YmF5aW4pIn0seyJuYW1lIjoibWQiLCJzaG9ydF9kZXNjcmlwdGlvbiI6Im1kIiwiZGVzY3JpcHRpb24iOiJNb2xkYXZpYW4ifSx7Im5hbWUiOiJtZFx0Z2FnIiwic2hvcnRfZGVzY3JpcHRpb24iOiJnYWciLCJkZXNjcmlwdGlvbiI6Ik1vbGRhdmlhbiAoR2FnYXV6KSJ9XQ==")); - this.sessions = JSON.parse(atob("W3sibmFtZSI6IkxYREUiLCJrZXkiOiJMWERFIiwiY29tbWVudCI6IkxYREUgLSBMaWdodHdlaWdodCBYMTEgZGVza3RvcCBlbnZpcm9ubWVudCJ9LHsibmFtZSI6Ik9wZW5ib3giLCJrZXkiOiJvcGVuYm94IiwiY29tbWVudCI6IkxvZyBpbiB1c2luZyB0aGUgT3BlbmJveCB3aW5kb3cgbWFuYWdlciAod2l0aG91dCBhIHNlc3Npb24gbWFuYWdlcikifSx7Im5hbWUiOiJUV00iLCJrZXkiOiJ0d20iLCJjb21tZW50IjoiVGhlIFRhYiBXaW5kb3cgTWFuYWdlciJ9LHsibmFtZSI6IlRpbnl3bSIsImtleSI6InRpbnl3bSIsImNvbW1lbnQiOiJSaWRpY3Vsb3VzbHkgdGlueSB3aW5kb3cgbWFuYWdlciJ9XQ")); - this.language = this.languages[0].name; - this.layout = this.layouts[0].name; - this.default_session = this.sessions[0].name; - this.layout = this.layouts[0].name; - this.num_users = this.users.length; + var me = document.querySelector("script[src$=\"LightDMMock.js\"]"); - if(typeof timeout === "number" && timeout > 0) { - if(typeof autoGuest === "boolean" && autoGuest) { - this.autologin_user = null; - this.autologin_guest = autoGuest; + if(!(me instanceof HTMLElement)) + return window.console.error("Could not find my script element."); + + var includePath = me.src; + + if(includePath === undefined) + return window.console.error("Could not find my src attribute."); + + includePath = includePath.substr(0, includePath.lastIndexOf("/")); + + var asyncLoadEnd = function(that) { + that.default_session = that.sessions[0].name; + that.language = that.languages[0].name; + that.layout = that.layouts[0].name; + that.num_users = that.users.length; + + if(typeof timeout === "number" && timeout > 0) { + if(typeof autoGuest === "boolean" && autoGuest) { + that.autologin_user = null; + that.autologin_guest = autoGuest; + } + + that.autologin_user = that.users[0].username; + that.autologin_timeout = timeout * 1000; + + // @fixme: am I deprecated as well? + setTimeout(function() { + if((typeof autoGuest === "boolean" && autoGuest) || that.autologin_user !== null) + window.autologin_timer_expired(); + }.bind(that), that.timed_login_delay); } - this.autologin_user = this.users[0].name; - this.autologin_timeout = timeout * 1000; + for(var i = 0; i <= that.users; i++) { + that.users[i].logged_in = Boolean(Math.floor(Math.random() * 2)); + that.users[i].session = that.sessions[Math.floor((Math.random() * that.sessions.length))].name; + } + }; - setTimeout(function() { - if((typeof autoGuest === "boolean" && autoGuest) || this.autologin_user !== null) - window.autologin_timer_expired(); - }.bind(this), this.timed_login_delay); - } + // see + window.loadJSON(includePath + "/json/users.json", function(that) { + if(this.status !== 200) + return window.console.warn("users.json did not load correctly."); - for(var i = 0; i <= this.users; i++) { - this.users[i].logged_in = Boolean(Math.floor(Math.random() * 2)); - this.users[i].session = this.sessions[Math.floor((Math.random() * this.sessions.length))].name; - } + that.users = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + + // see + window.loadJSON(includePath + "/json/languages.json", function(that) { + if(this.status !== 200) + return window.console.warn("languages.json did not load correctly."); + + that.languages = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + + // see + window.loadJSON(includePath + "/json/layouts.json", function(that) { + if(this.status !== 200) + return window.console.warn("layouts.json did not load correctly."); + + that.layouts = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); + + // see + window.loadJSON(includePath + "/json/sessions.json", function(that) { + if(this.status !== 200) + return window.console.warn("sessions.json did not load correctly."); + + that.sessions = JSON.parse(this.responseText); + + if(that.users !== null && that.languages !== null && that.layouts !== null && that.sessions !== null) + asyncLoadEnd(that); + }, this, asyncLoadEnd); } } -/** - * Deprecated method. - */ -LightDMMock.prototype.cancel_timed_login = function() { - window.logCall("cancel_timed_login", arguments); - window.deprecationNotifier("method", "lightdm.cancel_timed_login()", "lightdm.cancel_autologin()"); -}; -/** - * Cancels the authentication of the autologin user. The older function - * lightdm.cancel_timed_login() has been deprecated. - */ -LightDMMock.prototype.cancel_autologin = function() { - window.logCall("cancel_autologin", arguments); - window.checkArguments(arguments, 0, []); - this.autologin_user = null; - this.autologin_guest = false; - this.autologin_timeout = 0; -}; - -/** - * Deprecated method. - */ -LightDMMock.prototype.start_authentication = function() { - window.logCall("start_authentication", arguments); - window.deprecationNotifier("method", "lightdm.start_authentication()", "lightdm.authenticate(username)"); -}; /** * Specifies the username of the user we'd like to start authenticating as. From b083dafb7f024a64f50ad033ed155a0a9e0beb9c Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:20:33 +0100 Subject: [PATCH 12/16] Replace name with username See issue #3 --- src/LightDMMock.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 6c31632..1fff812 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -174,7 +174,7 @@ LightDMMock.prototype.authenticate = function(username) { var exists = false; for(var i = 0; i <= this.users.length -1; i++) { - if(this.users[i].name === username) + if(this.users[i].username === username) exists = true; } From f2fe77a701eff2791e0e059c3189f300794c98ad Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:21:07 +0100 Subject: [PATCH 13/16] Fix alignment of equals symbol Because reasons... --- src/LightDMMock.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 1fff812..c03092f 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -184,7 +184,7 @@ LightDMMock.prototype.authenticate = function(username) { } this.authentication_user = username; - this.in_authentication = true; + this.in_authentication = true; window.show_prompt("Password:", "password"); }; @@ -205,7 +205,7 @@ LightDMMock.prototype.authenticate_as_guest = function() { } this.authentication_user = "guest"; - this.in_authentication = true; + this.in_authentication = true; }; /** From 853995cb0e31d9489aa876857357523531ec4715 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:21:41 +0100 Subject: [PATCH 14/16] Update section headers --- src/LightDMMock.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index c03092f..9c5f5ff 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -152,6 +152,9 @@ function LightDMMock(autofill, timeout, autoGuest) { } +/****************************************************************************** + * Methods * + ******************************************************************************/ /** @@ -361,8 +364,8 @@ LightDMMock.prototype.suspend = function() { /****************************************************************************** - * Deprecated * -*******************************************************************************/ + * Deprecated methods * + ******************************************************************************/ LightDMMock.prototype.cancel_timed_login = function() { window.logCall("cancel_timed_login", arguments); @@ -454,7 +457,7 @@ function IncompatibleArgumentTypesException(number, expected, received) { /****************************************************************************** * Helpers * -*******************************************************************************/ + ******************************************************************************/ /** * global helper deprecationNotifier @@ -587,7 +590,7 @@ window.loadJSON = function(url, callback) { /****************************************************************************** * Object.watch shim * -*******************************************************************************/ + ******************************************************************************/ /* * object.watch polyfill @@ -643,6 +646,11 @@ if(!Object.prototype.unwatch) { }); } + +/****************************************************************************** + * Deprecated properties * + ******************************************************************************/ + LightDMMock.watch('default_language', function() { window.deprecationNotifier("property", "default_language", "lightdm.language"); }); From 91667b64c2b8825e5c1ccaf5ca5a188462fd1ef6 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:21:58 +0100 Subject: [PATCH 15/16] Add link to original method definition --- src/LightDMMock.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 9c5f5ff..104cf19 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -156,6 +156,7 @@ function LightDMMock(autofill, timeout, autoGuest) { * Methods * ******************************************************************************/ +// see /** * Specifies the username of the user we'd like to start authenticating as. From f326ae92aac1d0d62ba41300e0aaf820b865f0d2 Mon Sep 17 00:00:00 2001 From: Roel Walraven Date: Fri, 24 Feb 2017 14:22:31 +0100 Subject: [PATCH 16/16] Update module loading --- src/LightDMMock.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/LightDMMock.js b/src/LightDMMock.js index 104cf19..be489e6 100644 --- a/src/LightDMMock.js +++ b/src/LightDMMock.js @@ -676,6 +676,14 @@ LightDMMock.watch('timed_login_delay', function() { window.deprecationNotifier("property", "timed_login_delay", "lightdm.autologin_timeout"); }); -if (module) { + +/****************************************************************************** + * Module loading * + ******************************************************************************/ + +/* jshint node : true */ + +if(typeof module !== "undefined" && module.exports) module.exports = LightDMMock; -} + +/* jshint node : false */