Edit

kc3-lang/libxkbcommon/test/data/keymaps/stringcomp-v2.data

Branch :

  • Show log

    Commit

  • Author : Peter Hutterer
    Date : 2024-02-14 09:47:15
    Hash : 7a7a3b38
    Message : keymap: Canonically map unmapped virtual modifiers Traditionally, *virtual* modifiers were merely name aliases for *real* modifiers (X *core* modifiers), e.g. `NumLock` was usually mapped to `Mod2` (see `modifier_map` statement). Virtual modifiers that were never mapped to a real ones had no effect on the keymap state. xkbcommon already supports the concept of “pure” virtual modifiers, i.e. virtual modifiers that are *encoded* using the full 32-bit range, not just the first 8 bits corresponding to the real modifiers. But until this commit, one had to declare such mapping *explicitly*: e.g. `virtual_modifiers M = 0x100;`. This has at least two drawbacks: - Numerical values may look quite arbitrary and are not user-friendly. It’s OK in the resulting compiled keymap, but it requires careful sync between sections when developing KcCGST files. - If the modifier is *also* mapped *implicitly* using the traditional `vmodmap`/`modifier_map`, then both mappings are OR-combined. This patch enables to automatically map unmapped virtual modifiers to their *canonical* mapping, i.e. themselves: their corresponding virtual and real modifier masks are identical: `1u << mod_index`. Since this feature is incompatible with X11, this is guarded by requiring at least keymap text format **v2**. Note that for now, canonical virtual modifiers cannot be used in an interpret action’s `AnyOf()`. An interpret action for a canonical virtual modifier must be `AnyOfOrNone()` to take effect: virtual_modifiers APureMod, …; interpret a+AnyOfOrNone(all) { virtualModifier= APureMod; action= SetMods(modifiers=APureMod); }; The above adds a virtual modifier `APureMod` for keysym `a`. It will be canonical iff it is not mapped implicitly.

  • test/data/keymaps/stringcomp-v2.data
  • xkb_keymap {
    xkb_keycodes "evdev_aliases(qwerty)" {
    	minimum = 8;
    	maximum = 255;
    	<ESC>                = 9;
    	<AE01>               = 10;
    	<AE02>               = 11;
    	<AE03>               = 12;
    	<AE04>               = 13;
    	<AE05>               = 14;
    	<AE06>               = 15;
    	<AE07>               = 16;
    	<AE08>               = 17;
    	<AE09>               = 18;
    	<AE10>               = 19;
    	<AE11>               = 20;
    	<AE12>               = 21;
    	<BKSP>               = 22;
    	<TAB>                = 23;
    	<AD01>               = 24;
    	<AD02>               = 25;
    	<AD03>               = 26;
    	<AD04>               = 27;
    	<AD05>               = 28;
    	<AD06>               = 29;
    	<AD07>               = 30;
    	<AD08>               = 31;
    	<AD09>               = 32;
    	<AD10>               = 33;
    	<AD11>               = 34;
    	<AD12>               = 35;
    	<RTRN>               = 36;
    	<LCTL>               = 37;
    	<AC01>               = 38;
    	<AC02>               = 39;
    	<AC03>               = 40;
    	<AC04>               = 41;
    	<AC05>               = 42;
    	<AC06>               = 43;
    	<AC07>               = 44;
    	<AC08>               = 45;
    	<AC09>               = 46;
    	<AC10>               = 47;
    	<AC11>               = 48;
    	<TLDE>               = 49;
    	<LFSH>               = 50;
    	<BKSL>               = 51;
    	<AB01>               = 52;
    	<AB02>               = 53;
    	<AB03>               = 54;
    	<AB04>               = 55;
    	<AB05>               = 56;
    	<AB06>               = 57;
    	<AB07>               = 58;
    	<AB08>               = 59;
    	<AB09>               = 60;
    	<AB10>               = 61;
    	<RTSH>               = 62;
    	<KPMU>               = 63;
    	<LALT>               = 64;
    	<SPCE>               = 65;
    	<CAPS>               = 66;
    	<FK01>               = 67;
    	<FK02>               = 68;
    	<FK03>               = 69;
    	<FK04>               = 70;
    	<FK05>               = 71;
    	<FK06>               = 72;
    	<FK07>               = 73;
    	<FK08>               = 74;
    	<FK09>               = 75;
    	<FK10>               = 76;
    	<NMLK>               = 77;
    	<SCLK>               = 78;
    	<KP7>                = 79;
    	<KP8>                = 80;
    	<KP9>                = 81;
    	<KPSU>               = 82;
    	<KP4>                = 83;
    	<KP5>                = 84;
    	<KP6>                = 85;
    	<KPAD>               = 86;
    	<KP1>                = 87;
    	<KP2>                = 88;
    	<KP3>                = 89;
    	<KP0>                = 90;
    	<KPDL>               = 91;
    	<LVL3>               = 92;
    	<LSGT>               = 94;
    	<FK11>               = 95;
    	<FK12>               = 96;
    	<AB11>               = 97;
    	<KATA>               = 98;
    	<HIRA>               = 99;
    	<HENK>               = 100;
    	<HKTG>               = 101;
    	<MUHE>               = 102;
    	<JPCM>               = 103;
    	<KPEN>               = 104;
    	<RCTL>               = 105;
    	<KPDV>               = 106;
    	<PRSC>               = 107;
    	<RALT>               = 108;
    	<LNFD>               = 109;
    	<HOME>               = 110;
    	<UP>                 = 111;
    	<PGUP>               = 112;
    	<LEFT>               = 113;
    	<RGHT>               = 114;
    	<END>                = 115;
    	<DOWN>               = 116;
    	<PGDN>               = 117;
    	<INS>                = 118;
    	<DELE>               = 119;
    	<I120>               = 120;
    	<MUTE>               = 121;
    	<VOL->               = 122;
    	<VOL+>               = 123;
    	<POWR>               = 124;
    	<KPEQ>               = 125;
    	<I126>               = 126;
    	<PAUS>               = 127;
    	<I128>               = 128;
    	<I129>               = 129;
    	<HNGL>               = 130;
    	<HJCV>               = 131;
    	<AE13>               = 132;
    	<LWIN>               = 133;
    	<RWIN>               = 134;
    	<COMP>               = 135;
    	<STOP>               = 136;
    	<AGAI>               = 137;
    	<PROP>               = 138;
    	<UNDO>               = 139;
    	<FRNT>               = 140;
    	<COPY>               = 141;
    	<OPEN>               = 142;
    	<PAST>               = 143;
    	<FIND>               = 144;
    	<CUT>                = 145;
    	<HELP>               = 146;
    	<I147>               = 147;
    	<I148>               = 148;
    	<I149>               = 149;
    	<I150>               = 150;
    	<I151>               = 151;
    	<I152>               = 152;
    	<I153>               = 153;
    	<I154>               = 154;
    	<I155>               = 155;
    	<I156>               = 156;
    	<I157>               = 157;
    	<I158>               = 158;
    	<I159>               = 159;
    	<I160>               = 160;
    	<I161>               = 161;
    	<I162>               = 162;
    	<I163>               = 163;
    	<I164>               = 164;
    	<I165>               = 165;
    	<I166>               = 166;
    	<I167>               = 167;
    	<I168>               = 168;
    	<I169>               = 169;
    	<I170>               = 170;
    	<I171>               = 171;
    	<I172>               = 172;
    	<I173>               = 173;
    	<I174>               = 174;
    	<I175>               = 175;
    	<I176>               = 176;
    	<I177>               = 177;
    	<I178>               = 178;
    	<I179>               = 179;
    	<I180>               = 180;
    	<I181>               = 181;
    	<I182>               = 182;
    	<I183>               = 183;
    	<I184>               = 184;
    	<I185>               = 185;
    	<I186>               = 186;
    	<I187>               = 187;
    	<I188>               = 188;
    	<I189>               = 189;
    	<I190>               = 190;
    	<FK13>               = 191;
    	<FK14>               = 192;
    	<FK15>               = 193;
    	<FK16>               = 194;
    	<FK17>               = 195;
    	<FK18>               = 196;
    	<FK19>               = 197;
    	<FK20>               = 198;
    	<FK21>               = 199;
    	<FK22>               = 200;
    	<FK23>               = 201;
    	<FK24>               = 202;
    	<MDSW>               = 203;
    	<ALT>                = 204;
    	<META>               = 205;
    	<SUPR>               = 206;
    	<HYPR>               = 207;
    	<I208>               = 208;
    	<I209>               = 209;
    	<I210>               = 210;
    	<I211>               = 211;
    	<I212>               = 212;
    	<I213>               = 213;
    	<I214>               = 214;
    	<I215>               = 215;
    	<I216>               = 216;
    	<I217>               = 217;
    	<I218>               = 218;
    	<I219>               = 219;
    	<I220>               = 220;
    	<I221>               = 221;
    	<I222>               = 222;
    	<I223>               = 223;
    	<I224>               = 224;
    	<I225>               = 225;
    	<I226>               = 226;
    	<I227>               = 227;
    	<I228>               = 228;
    	<I229>               = 229;
    	<I230>               = 230;
    	<I231>               = 231;
    	<I232>               = 232;
    	<I233>               = 233;
    	<I234>               = 234;
    	<I235>               = 235;
    	<I236>               = 236;
    	<I237>               = 237;
    	<I238>               = 238;
    	<I239>               = 239;
    	<I240>               = 240;
    	<I241>               = 241;
    	<I242>               = 242;
    	<I243>               = 243;
    	<I244>               = 244;
    	<I245>               = 245;
    	<I246>               = 246;
    	<I247>               = 247;
    	<I248>               = 248;
    	<I249>               = 249;
    	<I250>               = 250;
    	<I251>               = 251;
    	<I252>               = 252;
    	<I253>               = 253;
    	indicator 1 = "Caps Lock";
    	indicator 2 = "Num Lock";
    	indicator 3 = "Scroll Lock";
    	indicator 4 = "Compose";
    	indicator 5 = "Kana";
    	indicator 6 = "Sleep";
    	indicator 7 = "Suspend";
    	indicator 8 = "Mute";
    	indicator 9 = "Misc";
    	indicator 10 = "Mail";
    	indicator 11 = "Charging";
    	indicator 12 = "Shift Lock";
    	indicator 13 = "Group 2";
    	indicator 14 = "Mouse Keys";
    	alias <AC12>         = <BKSL>;
    	alias <MENU>         = <COMP>;
    	alias <HZTG>         = <TLDE>;
    	alias <LMTA>         = <LWIN>;
    	alias <RMTA>         = <RWIN>;
    	alias <ALGR>         = <RALT>;
    	alias <KPPT>         = <I129>;
    	alias <LatQ>         = <AD01>;
    	alias <LatW>         = <AD02>;
    	alias <LatE>         = <AD03>;
    	alias <LatR>         = <AD04>;
    	alias <LatT>         = <AD05>;
    	alias <LatY>         = <AD06>;
    	alias <LatU>         = <AD07>;
    	alias <LatI>         = <AD08>;
    	alias <LatO>         = <AD09>;
    	alias <LatP>         = <AD10>;
    	alias <LatA>         = <AC01>;
    	alias <LatS>         = <AC02>;
    	alias <LatD>         = <AC03>;
    	alias <LatF>         = <AC04>;
    	alias <LatG>         = <AC05>;
    	alias <LatH>         = <AC06>;
    	alias <LatJ>         = <AC07>;
    	alias <LatK>         = <AC08>;
    	alias <LatL>         = <AC09>;
    	alias <LatZ>         = <AB01>;
    	alias <LatX>         = <AB02>;
    	alias <LatC>         = <AB03>;
    	alias <LatV>         = <AB04>;
    	alias <LatB>         = <AB05>;
    	alias <LatN>         = <AB06>;
    	alias <LatM>         = <AB07>;
    };
    
    xkb_types "complete" {
    	virtual_modifiers NumLock,Alt,LevelThree,LAlt=Mod1,RAlt=0x100,RControl=0x210001,LControl=0x4000,ScrollLock=0x8000,LevelFive=0x10000,AltGr,Meta,Super,Hyper;
    
    	type "ONE_LEVEL" {
    		modifiers= none;
    		level_name[1]= "Any";
    	};
    	type "TWO_LEVEL" {
    		modifiers= Shift;
    		map[Shift]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    	};
    	type "ALPHABETIC" {
    		modifiers= Shift+Lock;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Caps";
    	};
    	type "SHIFT+ALT" {
    		modifiers= Shift+Alt;
    		map[Shift+Alt]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Shift+Alt";
    	};
    	type "PC_CONTROL_LEVEL2" {
    		modifiers= Control;
    		map[Control]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Control";
    	};
    	type "PC_LCONTROL_LEVEL2" {
    		modifiers= LControl;
    		map[LControl]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "LControl";
    	};
    	type "PC_RCONTROL_LEVEL2" {
    		modifiers= RControl;
    		map[RControl]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "RControl";
    	};
    	type "PC_ALT_LEVEL2" {
    		modifiers= Alt;
    		map[Alt]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Alt";
    	};
    	type "PC_LALT_LEVEL2" {
    		modifiers= LAlt;
    		map[LAlt]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "LAlt";
    	};
    	type "PC_RALT_LEVEL2" {
    		modifiers= RAlt;
    		map[RAlt]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "RAlt";
    	};
    	type "CTRL+ALT" {
    		modifiers= Shift+Control+Alt+LevelThree;
    		map[Shift]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Control+Alt]= 5;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    		level_name[5]= "Ctrl+Alt";
    	};
    	type "LOCAL_EIGHT_LEVEL" {
    		modifiers= Shift+Lock+Control+LevelThree;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		map[LevelThree]= 3;
    		map[Shift+Lock+LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock+LevelThree]= 4;
    		map[Control]= 5;
    		map[Shift+Lock+Control]= 5;
    		map[Shift+Control]= 6;
    		map[Lock+Control]= 6;
    		map[Control+LevelThree]= 7;
    		map[Shift+Lock+Control+LevelThree]= 7;
    		map[Shift+Control+LevelThree]= 8;
    		map[Lock+Control+LevelThree]= 8;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Level3";
    		level_name[4]= "Shift Level3";
    		level_name[5]= "Ctrl";
    		level_name[6]= "Shift Ctrl";
    		level_name[7]= "Level3 Ctrl";
    		level_name[8]= "Shift Level3 Ctrl";
    	};
    	type "THREE_LEVEL" {
    		modifiers= Shift+LevelThree;
    		map[Shift]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 3;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Level3";
    	};
    	type "EIGHT_LEVEL" {
    		modifiers= Shift+LevelThree+LevelFive;
    		map[Shift]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[LevelFive]= 5;
    		map[Shift+LevelFive]= 6;
    		map[LevelThree+LevelFive]= 7;
    		map[Shift+LevelThree+LevelFive]= 8;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    		level_name[5]= "X";
    		level_name[6]= "X Shift";
    		level_name[7]= "X Alt Base";
    		level_name[8]= "X Shift Alt";
    	};
    	type "EIGHT_LEVEL_ALPHABETIC" {
    		modifiers= Shift+Lock+LevelThree+LevelFive;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock+LevelThree]= 4;
    		map[Shift+Lock+LevelThree]= 3;
    		map[LevelFive]= 5;
    		map[Shift+LevelFive]= 6;
    		map[Lock+LevelFive]= 6;
    		map[LevelThree+LevelFive]= 7;
    		map[Shift+LevelThree+LevelFive]= 8;
    		map[Lock+LevelThree+LevelFive]= 8;
    		map[Shift+Lock+LevelThree+LevelFive]= 7;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    		level_name[5]= "X";
    		level_name[6]= "X Shift";
    		level_name[7]= "X Alt Base";
    		level_name[8]= "X Shift Alt";
    	};
    	type "EIGHT_LEVEL_SEMIALPHABETIC" {
    		modifiers= Shift+Lock+LevelThree+LevelFive;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock+LevelThree]= 3;
    		preserve[Lock+LevelThree]= Lock;
    		map[Shift+Lock+LevelThree]= 4;
    		preserve[Shift+Lock+LevelThree]= Lock;
    		map[LevelFive]= 5;
    		map[Shift+LevelFive]= 6;
    		map[Lock+LevelFive]= 6;
    		preserve[Lock+LevelFive]= Lock;
    		map[LevelThree+LevelFive]= 7;
    		map[Shift+LevelThree+LevelFive]= 8;
    		map[Lock+LevelThree+LevelFive]= 7;
    		preserve[Lock+LevelThree+LevelFive]= Lock;
    		map[Shift+Lock+LevelThree+LevelFive]= 8;
    		preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
    		map[Shift+Lock+LevelFive]= 1;
    		preserve[Shift+Lock+LevelFive]= Lock;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    		level_name[5]= "X";
    		level_name[6]= "X Shift";
    		level_name[7]= "X Alt Base";
    		level_name[8]= "X Shift Alt";
    	};
    	type "FOUR_LEVEL" {
    		modifiers= Shift+LevelThree;
    		map[Shift]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    	};
    	type "FOUR_LEVEL_ALPHABETIC" {
    		modifiers= Shift+Lock+LevelThree;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock+LevelThree]= 4;
    		map[Shift+Lock+LevelThree]= 3;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    	};
    	type "FOUR_LEVEL_SEMIALPHABETIC" {
    		modifiers= Shift+Lock+LevelThree;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock+LevelThree]= 3;
    		preserve[Lock+LevelThree]= Lock;
    		map[Shift+Lock+LevelThree]= 4;
    		preserve[Shift+Lock+LevelThree]= Lock;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    	};
    	type "FOUR_LEVEL_MIXED_KEYPAD" {
    		modifiers= Shift+NumLock+LevelThree;
    		map[NumLock]= 2;
    		map[Shift]= 2;
    		map[LevelThree]= 3;
    		map[NumLock+LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Shift+NumLock+LevelThree]= 4;
    		level_name[1]= "Base";
    		level_name[2]= "Number";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    	};
    	type "FOUR_LEVEL_X" {
    		modifiers= Shift+Control+Alt+LevelThree;
    		map[LevelThree]= 2;
    		map[Shift+LevelThree]= 3;
    		map[Control+Alt]= 4;
    		level_name[1]= "Base";
    		level_name[2]= "Alt Base";
    		level_name[3]= "Shift Alt";
    		level_name[4]= "Ctrl+Alt";
    	};
    	type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
    		modifiers= Shift+Lock+LevelThree;
    		map[Shift]= 2;
    		map[Lock]= 4;
    		preserve[Lock]= Lock;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock+LevelThree]= 3;
    		preserve[Lock+LevelThree]= Lock;
    		map[Shift+Lock+LevelThree]= 3;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "AltGr Base";
    		level_name[4]= "Shift AltGr";
    	};
    	type "FOUR_LEVEL_PLUS_LOCK" {
    		modifiers= Shift+Lock+LevelThree;
    		map[Shift]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[Lock]= 5;
    		map[Shift+Lock]= 2;
    		map[Lock+LevelThree]= 3;
    		map[Shift+Lock+LevelThree]= 4;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Shift Alt";
    		level_name[5]= "Lock";
    	};
    	type "KEYPAD" {
    		modifiers= Shift+NumLock;
    		map[Shift]= 2;
    		map[NumLock]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Number";
    	};
    	type "FOUR_LEVEL_KEYPAD" {
    		modifiers= Shift+NumLock+LevelThree;
    		map[Shift]= 2;
    		map[NumLock]= 2;
    		map[LevelThree]= 3;
    		map[Shift+LevelThree]= 4;
    		map[NumLock+LevelThree]= 4;
    		map[Shift+NumLock+LevelThree]= 3;
    		level_name[1]= "Base";
    		level_name[2]= "Number";
    		level_name[3]= "Alt Base";
    		level_name[4]= "Alt Number";
    	};
    };
    
    xkb_compatibility "complete_caps(caps_lock)_4_misc(assign_shift_left_action)_4_level5(level5_lock)_4" {
    	virtual_modifiers NumLock,Alt,LevelThree,LAlt=Mod1,RAlt=0x100,RControl=0x210001,LControl=0x4000,ScrollLock=0x8000,LevelFive=0x10000,AltGr,Meta,Super,Hyper;
    
    	interpret.useModMapMods= AnyLevel;
    	interpret.repeat= False;
    	interpret ISO_Level2_Latch+Exactly(Shift) {
    		useModMapMods=level1;
    		action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
    	};
    	interpret Shift_Lock+AnyOf(Shift+Lock) {
    		action= LockMods(modifiers=Shift);
    	};
    	interpret Num_Lock+AnyOf(all) {
    		virtualModifier= NumLock;
    		action= LockMods(modifiers=NumLock);
    	};
    	interpret ISO_Lock+AnyOf(all) {
    		action= NoAction();
    	};
    	interpret ISO_Level3_Shift+AnyOf(all) {
    		virtualModifier= LevelThree;
    		useModMapMods=level1;
    		action= SetMods(modifiers=LevelThree,clearLocks);
    	};
    	interpret ISO_Level3_Latch+AnyOf(all) {
    		virtualModifier= LevelThree;
    		useModMapMods=level1;
    		action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
    	};
    	interpret ISO_Level3_Lock+AnyOf(all) {
    		virtualModifier= LevelThree;
    		useModMapMods=level1;
    		action= LockMods(modifiers=LevelThree);
    	};
    	interpret Alt_L+AnyOf(all) {
    		virtualModifier= Alt;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Alt_R+AnyOf(all) {
    		virtualModifier= Alt;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Meta_L+AnyOf(all) {
    		virtualModifier= Meta;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Meta_R+AnyOf(all) {
    		virtualModifier= Meta;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Super_L+AnyOf(all) {
    		virtualModifier= Super;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Super_R+AnyOf(all) {
    		virtualModifier= Super;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Hyper_L+AnyOf(all) {
    		virtualModifier= Hyper;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Hyper_R+AnyOf(all) {
    		virtualModifier= Hyper;
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	interpret Scroll_Lock+AnyOf(all) {
    		virtualModifier= ScrollLock;
    		action= LockMods(modifiers=modMapMods);
    	};
    	interpret ISO_Level5_Shift+AnyOf(all) {
    		virtualModifier= LevelFive;
    		useModMapMods=level1;
    		action= SetMods(modifiers=LevelFive,clearLocks);
    	};
    	interpret ISO_Level5_Latch+AnyOf(all) {
    		virtualModifier= LevelFive;
    		action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
    	};
    	interpret ISO_Level5_Lock+AnyOf(all) {
    		virtualModifier= LevelFive;
    		action= LockMods(modifiers=LevelFive);
    	};
    	interpret Mode_switch+AnyOfOrNone(all) {
    		virtualModifier= AltGr;
    		useModMapMods=level1;
    		action= SetGroup(group=+1);
    	};
    	interpret ISO_Level3_Shift+AnyOfOrNone(all) {
    		action= SetMods(modifiers=LevelThree,clearLocks);
    	};
    	interpret ISO_Level3_Latch+AnyOfOrNone(all) {
    		action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
    	};
    	interpret ISO_Level3_Lock+AnyOfOrNone(all) {
    		action= LockMods(modifiers=LevelThree);
    	};
    	interpret ISO_Group_Latch+AnyOfOrNone(all) {
    		virtualModifier= AltGr;
    		useModMapMods=level1;
    		action= LatchGroup(group=2);
    	};
    	interpret ISO_Next_Group+AnyOfOrNone(all) {
    		virtualModifier= AltGr;
    		useModMapMods=level1;
    		action= LockGroup(group=+1);
    	};
    	interpret ISO_Prev_Group+AnyOfOrNone(all) {
    		virtualModifier= AltGr;
    		useModMapMods=level1;
    		action= LockGroup(group=-1);
    	};
    	interpret ISO_First_Group+AnyOfOrNone(all) {
    		action= LockGroup(group=1);
    	};
    	interpret ISO_Last_Group+AnyOfOrNone(all) {
    		action= LockGroup(group=2);
    	};
    	interpret KP_1+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=+1);
    	};
    	interpret KP_End+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=+1);
    	};
    	interpret KP_2+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+0,y=+1);
    	};
    	interpret KP_Down+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+0,y=+1);
    	};
    	interpret KP_3+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=+1);
    	};
    	interpret KP_Next+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=+1);
    	};
    	interpret KP_4+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=+0);
    	};
    	interpret KP_Left+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=+0);
    	};
    	interpret KP_6+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=+0);
    	};
    	interpret KP_Right+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=+0);
    	};
    	interpret KP_7+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=-1);
    	};
    	interpret KP_Home+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=-1);
    	};
    	interpret KP_8+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+0,y=-1);
    	};
    	interpret KP_Up+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+0,y=-1);
    	};
    	interpret KP_9+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=-1);
    	};
    	interpret KP_Prior+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=-1);
    	};
    	interpret KP_5+AnyOfOrNone(all) {
    		repeat= True;
    		action= PtrBtn(button=default);
    	};
    	interpret KP_Begin+AnyOfOrNone(all) {
    		repeat= True;
    		action= PtrBtn(button=default);
    	};
    	interpret KP_F2+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=1);
    	};
    	interpret KP_Divide+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=1);
    	};
    	interpret KP_F3+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=2);
    	};
    	interpret KP_Multiply+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=2);
    	};
    	interpret KP_F4+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=3);
    	};
    	interpret KP_Subtract+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=3);
    	};
    	interpret KP_Separator+AnyOfOrNone(all) {
    		repeat= True;
    		action= PtrBtn(button=default,count=2);
    	};
    	interpret KP_Add+AnyOfOrNone(all) {
    		repeat= True;
    		action= PtrBtn(button=default,count=2);
    	};
    	interpret KP_0+AnyOfOrNone(all) {
    		repeat= True;
    		action= LockPtrBtn(button=default,affect=lock);
    	};
    	interpret KP_Insert+AnyOfOrNone(all) {
    		repeat= True;
    		action= LockPtrBtn(button=default,affect=lock);
    	};
    	interpret KP_Decimal+AnyOfOrNone(all) {
    		repeat= True;
    		action= LockPtrBtn(button=default,affect=unlock);
    	};
    	interpret KP_Delete+AnyOfOrNone(all) {
    		repeat= True;
    		action= LockPtrBtn(button=default,affect=unlock);
    	};
    	interpret F25+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=1);
    	};
    	interpret F26+AnyOfOrNone(all) {
    		repeat= True;
    		action= SetPtrDflt(affect=button,button=2);
    	};
    	interpret F27+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=-1);
    	};
    	interpret F29+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=-1);
    	};
    	interpret F31+AnyOfOrNone(all) {
    		repeat= True;
    		action= PtrBtn(button=default);
    	};
    	interpret F33+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=-1,y=+1);
    	};
    	interpret F35+AnyOfOrNone(all) {
    		repeat= True;
    		action= MovePtr(x=+1,y=+1);
    	};
    	interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
    		action= PtrBtn(button=default);
    	};
    	interpret Pointer_Button1+AnyOfOrNone(all) {
    		action= PtrBtn(button=1);
    	};
    	interpret Pointer_Button2+AnyOfOrNone(all) {
    		action= PtrBtn(button=2);
    	};
    	interpret Pointer_Button3+AnyOfOrNone(all) {
    		action= PtrBtn(button=3);
    	};
    	interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
    		action= PtrBtn(button=default,count=2);
    	};
    	interpret Pointer_DblClick1+AnyOfOrNone(all) {
    		action= PtrBtn(button=1,count=2);
    	};
    	interpret Pointer_DblClick2+AnyOfOrNone(all) {
    		action= PtrBtn(button=2,count=2);
    	};
    	interpret Pointer_DblClick3+AnyOfOrNone(all) {
    		action= PtrBtn(button=3,count=2);
    	};
    	interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
    		action= LockPtrBtn(button=default,affect=both);
    	};
    	interpret Pointer_Drag1+AnyOfOrNone(all) {
    		action= LockPtrBtn(button=1,affect=both);
    	};
    	interpret Pointer_Drag2+AnyOfOrNone(all) {
    		action= LockPtrBtn(button=2,affect=both);
    	};
    	interpret Pointer_Drag3+AnyOfOrNone(all) {
    		action= LockPtrBtn(button=3,affect=both);
    	};
    	interpret Pointer_EnableKeys+AnyOfOrNone(all) {
    		action= LockControls(controls=MouseKeys);
    	};
    	interpret Pointer_Accelerate+AnyOfOrNone(all) {
    		action= LockControls(controls=MouseKeysAccel);
    	};
    	interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
    		action= SetPtrDflt(affect=button,button=+1);
    	};
    	interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
    		action= SetPtrDflt(affect=button,button=-1);
    	};
    	interpret AccessX_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=AccessXKeys);
    	};
    	interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=AccessXFeedback);
    	};
    	interpret RepeatKeys_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=RepeatKeys);
    	};
    	interpret SlowKeys_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=SlowKeys);
    	};
    	interpret BounceKeys_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=BounceKeys);
    	};
    	interpret StickyKeys_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=StickyKeys);
    	};
    	interpret MouseKeys_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=MouseKeys);
    	};
    	interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=MouseKeysAccel);
    	};
    	interpret Overlay1_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=none);
    	};
    	interpret Overlay2_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=none);
    	};
    	interpret AudibleBell_Enable+AnyOfOrNone(all) {
    		action= LockControls(controls=AudibleBell);
    	};
    	interpret Terminate_Server+AnyOfOrNone(all) {
    		action= Terminate();
    	};
    	interpret Alt_L+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Alt,clearLocks);
    	};
    	interpret Alt_R+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Alt,clearLocks);
    	};
    	interpret Meta_L+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Meta,clearLocks);
    	};
    	interpret Meta_R+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Meta,clearLocks);
    	};
    	interpret Super_L+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Super,clearLocks);
    	};
    	interpret Super_R+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Super,clearLocks);
    	};
    	interpret Hyper_L+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Hyper,clearLocks);
    	};
    	interpret Hyper_R+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Hyper,clearLocks);
    	};
    	interpret Shift_L+AnyOfOrNone(all) {
    		action= SetMods(modifiers=Shift);
    	};
    	interpret XF86Switch_VT_1+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=1,!same);
    	};
    	interpret XF86Switch_VT_2+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=2,!same);
    	};
    	interpret XF86Switch_VT_3+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=3,!same);
    	};
    	interpret XF86Switch_VT_4+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=4,!same);
    	};
    	interpret XF86Switch_VT_5+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=5,!same);
    	};
    	interpret XF86Switch_VT_6+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=6,!same);
    	};
    	interpret XF86Switch_VT_7+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=7,!same);
    	};
    	interpret XF86Switch_VT_8+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=8,!same);
    	};
    	interpret XF86Switch_VT_9+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=9,!same);
    	};
    	interpret XF86Switch_VT_10+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=10,!same);
    	};
    	interpret XF86Switch_VT_11+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=11,!same);
    	};
    	interpret XF86Switch_VT_12+AnyOfOrNone(all) {
    		repeat= True;
    		action= SwitchScreen(screen=12,!same);
    	};
    	interpret XF86LogGrabInfo+AnyOfOrNone(all) {
    		repeat= True;
    		action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
    	};
    	interpret XF86LogWindowTree+AnyOfOrNone(all) {
    		repeat= True;
    		action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
    	};
    	interpret XF86Next_VMode+AnyOfOrNone(all) {
    		repeat= True;
    		action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
    	};
    	interpret XF86Prev_VMode+AnyOfOrNone(all) {
    		repeat= True;
    		action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
    	};
    	interpret ISO_Level5_Shift+AnyOfOrNone(all) {
    		action= SetMods(modifiers=LevelFive,clearLocks);
    	};
    	interpret ISO_Level5_Latch+AnyOfOrNone(all) {
    		action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
    	};
    	interpret ISO_Level5_Lock+AnyOfOrNone(all) {
    		action= LockMods(modifiers=NumLock);
    	};
    	interpret Caps_Lock+AnyOfOrNone(all) {
    		action= LockMods(modifiers=Lock);
    	};
    	interpret Any+Exactly(Lock) {
    		action= LockMods(modifiers=Lock);
    	};
    	interpret Any+AnyOf(all) {
    		action= SetMods(modifiers=modMapMods,clearLocks);
    	};
    	indicator "Caps Lock" {
    		whichModState= locked;
    		modifiers= Lock;
    	};
    	indicator "Num Lock" {
    		whichModState= locked;
    		modifiers= NumLock;
    	};
    	indicator "Scroll Lock" {
    		whichModState= locked;
    		modifiers= ScrollLock;
    	};
    	indicator "Shift Lock" {
    		whichModState= locked;
    		modifiers= Shift;
    	};
    	indicator "Group 2" {
    		groups= 0xfe;
    	};
    	indicator "Mouse Keys" {
    		controls= MouseKeys;
    	};
    };
    
    xkb_symbols "pc_us_ru_2_ca(multix)_3_de(neo)_4_inet(evdev)" {
    	name[1]="English (US)";
    	name[2]="Russian";
    	name[3]="Canadian Multilingual";
    	name[4]="German (Neo 2)";
    
    	key <ESC>                {	[          Escape ] };
    	key <AE01>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               1,          exclam ],
    		symbols[2]= [               1,          exclam ],
    		symbols[3]= [               1,          exclam,       plusminus,        NoSymbol,     onesuperior,      exclamdown,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               1,          degree,     onesuperior,    onesubscript,     ordfeminine,        NoSymbol,         notsign,        NoSymbol ]
    	};
    	key <AE02>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               2,              at ],
    		symbols[2]= [               2,        quotedbl ],
    		symbols[3]= [               2,              at,              at,        NoSymbol,     twosuperior,        NoSymbol,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               2,         section,     twosuperior,    twosubscript,       masculine,        NoSymbol,       logicalor,        NoSymbol ]
    	};
    	key <AE03>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               3,      numbersign ],
    		symbols[2]= [               3,      numerosign ],
    		symbols[3]= [               3,      numbersign,        sterling,        NoSymbol,   threesuperior,        sterling,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               3,           U2113,   threesuperior,  threesubscript,      numerosign,        NoSymbol,      logicaland,        NoSymbol ]
    	};
    	key <AE04>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               4,          dollar ],
    		symbols[2]= [               4,       semicolon ],
    		symbols[3]= [               4,          dollar,            cent,        NoSymbol,      onequarter,        currency,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               4,  guillemotright,           U203A,    femalesymbol,        NoSymbol,        NoSymbol,           U22A5,        NoSymbol ]
    	};
    	key <AE05>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               5,         percent ],
    		symbols[2]= [               5,         percent ],
    		symbols[3]= [               5,         percent,        currency,        NoSymbol,         onehalf,    threeeighths,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               5,   guillemotleft,           U2039,      malesymbol,  periodcentered,        NoSymbol,           U2221,        NoSymbol ]
    	};
    	key <AE06>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [ { H, E, L, L, O },     asciicircum ],
    		symbols[2]= [               6,           colon ],
    		symbols[3]= [               6,        question,         notsign,        NoSymbol,   threequarters,     fiveeighths,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               6,          dollar,            cent,           U26A5,        sterling,        NoSymbol,           U2225,        NoSymbol ]
    	};
    	key <AE07>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [ { Y, E, S, space, T, H, I, S, space, I, S, space, D, O, G },       ampersand ],
    		symbols[2]= [               7,        question ],
    		symbols[3]= [               7,       ampersand,       braceleft,        NoSymbol,        NoSymbol,    seveneighths,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               7,        EuroSign,             yen,           U03F0,        currency,        NoSymbol,      rightarrow,        NoSymbol ]
    	};
    	key <AE08>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               8,        asterisk ],
    		symbols[2]= [               8,        asterisk ],
    		symbols[3]= [               8,        asterisk,      braceright,        NoSymbol,        NoSymbol,       trademark,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               8, doublelowquotemark, singlelowquotemark,           U27E8,             Tab,    ISO_Left_Tab,           U221E,        NoSymbol ]
    	};
    	key <AE09>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               9,       parenleft ],
    		symbols[2]= [               9,       parenleft ],
    		symbols[3]= [               9,       parenleft,     bracketleft,        NoSymbol,        NoSymbol,       plusminus,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               9, leftdoublequotemark, leftsinglequotemark,           U27E9,       KP_Divide,       KP_Divide,       variation,        NoSymbol ]
    	};
    	key <AE10>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [               0,      parenright ],
    		symbols[2]= [               0,      parenright ],
    		symbols[3]= [               0,      parenright,    bracketright,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               0, rightdoublequotemark, rightsinglequotemark,   zerosubscript,     KP_Multiply,     KP_Multiply,        emptyset,        NoSymbol ]
    	};
    	key <AE11>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [           minus,      underscore ],
    		symbols[2]= [           minus,      underscore ],
    		symbols[3]= [           minus,      underscore,         onehalf,        NoSymbol,        NoSymbol,    questiondown,        NoSymbol,        NoSymbol ],
    		symbols[4]= [           minus,          emdash,        NoSymbol,           U2011,     KP_Subtract,     KP_Subtract,          hyphen,        NoSymbol ]
    	};
    	key <AE12>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [           equal,            plus ],
    		symbols[2]= [           equal,            plus ],
    		symbols[3]= [           equal,            plus,         notsign,        NoSymbol,    dead_cedilla,     dead_ogonek,        NoSymbol,        NoSymbol ],
    		symbols[4]= [      dead_grave,    dead_cedilla,  dead_abovering, dead_abovereversedcomma,  dead_diaeresis,        NoSymbol,     dead_macron,        NoSymbol ]
    	};
    	key <BKSP>               {	[       BackSpace,       BackSpace ] };
    	key <TAB>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [             Tab,    ISO_Left_Tab ],
    		symbols[2]= [             Tab,    ISO_Left_Tab ],
    		symbols[3]= [             Tab,    ISO_Left_Tab ],
    		symbols[4]= [             Tab,    ISO_Left_Tab,       Multi_key, ISO_Level5_Lock,        NoSymbol,        NoSymbol,        NoSymbol, ISO_Level5_Lock ]
    	};
    	key <AD01>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               q,               Q ],
    		symbols[2]= [ Cyrillic_shorti, Cyrillic_SHORTI ],
    		symbols[3]= [               q,               Q,        NoSymbol,        NoSymbol,        NoSymbol,     Greek_OMEGA,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               x,               X,        ellipsis,        Greek_xi,           Prior,           Prior,        Greek_XI,        NoSymbol ]
    	};
    	key <AD02>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               w,               W ],
    		symbols[2]= [    Cyrillic_tse,    Cyrillic_TSE ],
    		symbols[3]= [               w,               W,        NoSymbol,        NoSymbol,         lstroke,         Lstroke,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               v,               V,      underscore,        NoSymbol,       BackSpace,       BackSpace,         radical,        NoSymbol ]
    	};
    	key <AD03>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               e,               E ],
    		symbols[2]= [      Cyrillic_u,      Cyrillic_U ],
    		symbols[3]= [               e,               E,        NoSymbol,        NoSymbol,              oe,              OE,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               l,               L,     bracketleft,     Greek_lamda,              Up,              Up,     Greek_LAMDA,        NoSymbol ]
    	};
    	key <AD04>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               r,               R ],
    		symbols[2]= [     Cyrillic_ka,     Cyrillic_KA ],
    		symbols[3]= [               r,               R,        NoSymbol,        NoSymbol,       paragraph,      registered,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               c,               C,    bracketright,       Greek_chi,          Delete,          Delete,           U2102,        NoSymbol ]
    	};
    	key <AD05>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               t,               T ],
    		symbols[2]= [     Cyrillic_ie,     Cyrillic_IE ],
    		symbols[3]= [               t,               T,        NoSymbol,        NoSymbol,          tslash,          Tslash,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               w,               W,     asciicircum,     Greek_omega,            Next,            Next,     Greek_OMEGA,        NoSymbol ]
    	};
    	key <AD06>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               y,               Y ],
    		symbols[2]= [     Cyrillic_en,     Cyrillic_EN ],
    		symbols[3]= [               y,               Y,        NoSymbol,        NoSymbol,       leftarrow,             yen,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               k,               K,          exclam,     Greek_kappa,      exclamdown,        NoSymbol,        multiply,        NoSymbol ]
    	};
    	key <AD07>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               u,               U ],
    		symbols[2]= [    Cyrillic_ghe,    Cyrillic_GHE ],
    		symbols[3]= [               u,               U,        NoSymbol,        NoSymbol,       downarrow,         uparrow,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               h,               H,            less,       Greek_psi,            KP_7,            KP_7,       Greek_PSI,        NoSymbol ]
    	};
    	key <AD08>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               i,               I ],
    		symbols[2]= [    Cyrillic_sha,    Cyrillic_SHA ],
    		symbols[3]= [               i,               I,        NoSymbol,        NoSymbol,      rightarrow,        idotless,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               g,               G,         greater,     Greek_gamma,            KP_8,            KP_8,     Greek_GAMMA,        NoSymbol ]
    	};
    	key <AD09>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               o,               O ],
    		symbols[2]= [  Cyrillic_shcha,  Cyrillic_SHCHA ],
    		symbols[3]= [               o,               O,         section,        NoSymbol,          oslash,          Oslash,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               f,               F,           equal,       Greek_phi,            KP_9,            KP_9,       Greek_PHI,        NoSymbol ]
    	};
    	key <AD10>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               p,               P ],
    		symbols[2]= [     Cyrillic_ze,     Cyrillic_ZE ],
    		symbols[3]= [               p,               P,       paragraph,        NoSymbol,           thorn,           THORN,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               q,               Q,       ampersand,           U03D5,          KP_Add,          KP_Add,           U211A,        NoSymbol ]
    	};
    	key <AD11>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [     bracketleft,       braceleft ],
    		symbols[2]= [     Cyrillic_ha,     Cyrillic_HA ],
    		symbols[3]= [ dead_circumflex,  dead_diaeresis,      dead_grave,        NoSymbol,        NoSymbol,  dead_abovering,        NoSymbol,        NoSymbol ],
    		symbols[4]= [          ssharp,           U1E9E,           U017F, Greek_finalsmallsigma,           U2212,        NoSymbol,             jot,        NoSymbol ]
    	};
    	key <AD12>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [    bracketright,      braceright ],
    		symbols[2]= [ Cyrillic_hardsign, Cyrillic_HARDSIGN ],
    		symbols[3]= [        ccedilla,        Ccedilla,      asciitilde,        NoSymbol,      dead_tilde,     dead_macron,        NoSymbol,        NoSymbol ],
    		symbols[4]= [      dead_acute,      dead_tilde,     dead_stroke, dead_abovecomma, dead_doubleacute,        NoSymbol,      dead_breve,        NoSymbol ]
    	};
    	key <RTRN>               {	[          Return ] };
    	key <LCTL>               {	[       Control_L ] };
    	key <AC01>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               a,               A ],
    		symbols[2]= [     Cyrillic_ef,     Cyrillic_EF ],
    		symbols[3]= [               a,               A,        NoSymbol,        NoSymbol,              ae,              AE,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               u,               U,       backslash,        NoSymbol,            Home,            Home,      includedin,        NoSymbol ]
    	};
    	key <AC02>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               s,               S ],
    		symbols[2]= [   Cyrillic_yeru,   Cyrillic_YERU ],
    		symbols[3]= [               s,               S,        NoSymbol,        NoSymbol,          ssharp,         section,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               i,               I,           slash,      Greek_iota,            Left,            Left,        integral,        NoSymbol ]
    	};
    	key <AC03>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               d,               D ],
    		symbols[2]= [     Cyrillic_ve,     Cyrillic_VE ],
    		symbols[3]= [               d,               D,        NoSymbol,        NoSymbol,             eth,             ETH,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               a,               A,       braceleft,     Greek_alpha,            Down,            Down,           U2200,        NoSymbol ]
    	};
    	key <AC04>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               f,               F ],
    		symbols[2]= [      Cyrillic_a,      Cyrillic_A ],
    		symbols[3]= [               f,               F,        NoSymbol,        NoSymbol,        NoSymbol,     ordfeminine,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               e,               E,      braceright,   Greek_epsilon,           Right,           Right,           U2203,        NoSymbol ]
    	};
    	key <AC05>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               g,               G ],
    		symbols[2]= [     Cyrillic_pe,     Cyrillic_PE ],
    		symbols[3]= [               g,               G,        NoSymbol,        NoSymbol,             eng,             ENG,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               o,               O,        asterisk,   Greek_omicron,             End,             End,       elementof,        NoSymbol ]
    	};
    	key <AC06>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               h,               H ],
    		symbols[2]= [     Cyrillic_er,     Cyrillic_ER ],
    		symbols[3]= [               h,               H,        NoSymbol,        NoSymbol,         hstroke,         Hstroke,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               s,               S,        question,     Greek_sigma,    questiondown,        NoSymbol,     Greek_SIGMA,        NoSymbol ]
    	};
    	key <AC07>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               j,               J ],
    		symbols[2]= [      Cyrillic_o,      Cyrillic_O ],
    		symbols[3]= [               j,               J,        NoSymbol,        NoSymbol,           U0133,           U0132,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               n,               N,       parenleft,        Greek_nu,            KP_4,            KP_4,           U2115,        NoSymbol ]
    	};
    	key <AC08>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               k,               K ],
    		symbols[2]= [     Cyrillic_el,     Cyrillic_EL ],
    		symbols[3]= [               k,               K,        NoSymbol,        NoSymbol,             kra,        NoSymbol,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               r,               R,      parenright,       Greek_rho,            KP_5,            KP_5,           U211D,        NoSymbol ]
    	};
    	key <AC09>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               l,               L ],
    		symbols[2]= [     Cyrillic_de,     Cyrillic_DE ],
    		symbols[3]= [               l,               L,        NoSymbol,        NoSymbol,           U0140,           U013F,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               t,               T,           minus,       Greek_tau,            KP_6,            KP_6, partialderivative,        NoSymbol ]
    	};
    	key <AC10>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [       semicolon,           colon ],
    		symbols[2]= [    Cyrillic_zhe,    Cyrillic_ZHE ],
    		symbols[3]= [       semicolon,           colon,          degree,        NoSymbol,      dead_acute, dead_doubleacute,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               d,               D,           colon,     Greek_delta,    KP_Separator,           comma,     Greek_DELTA,        NoSymbol ]
    	};
    	key <AC11>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [      apostrophe,        quotedbl ],
    		symbols[2]= [      Cyrillic_e,      Cyrillic_E ],
    		symbols[3]= [          egrave,          Egrave,       braceleft,        NoSymbol,        NoSymbol,      dead_caron,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               y,               Y,              at,   Greek_upsilon,          period,      KP_Decimal,           nabla,        NoSymbol ]
    	};
    	key <TLDE>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [           grave,      asciitilde ],
    		symbols[2]= [     Cyrillic_io,     Cyrillic_IO ],
    		symbols[3]= [           slash,       backslash,             bar,        NoSymbol,        NoSymbol,          hyphen,        NoSymbol,        NoSymbol ],
    		symbols[4]= [ dead_circumflex,      dead_caron,           U21BB,           U02DE,   dead_abovedot, Pointer_EnableKeys,   dead_belowdot,        NoSymbol ]
    	};
    	key <LFSH>               {
    		type[4]= "TWO_LEVEL",
    		symbols[1]= [         Shift_L ],
    		symbols[2]= [         Shift_L ],
    		symbols[3]= [         Shift_L ],
    		symbols[4]= [         Shift_L,       Caps_Lock ]
    	};
    	key <BKSL>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "ONE_LEVEL",
    		symbols[1]= [       backslash,             bar ],
    		symbols[2]= [       backslash,           slash ],
    		symbols[3]= [          agrave,          Agrave,      braceright,        NoSymbol,        NoSymbol,      dead_breve,        NoSymbol,        NoSymbol ],
    		symbols[4]= [ ISO_Level3_Shift ]
    	};
    	key <AB01>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "FOUR_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               z,               Z ],
    		symbols[2]= [     Cyrillic_ya,     Cyrillic_YA ],
    		symbols[3]= [               z,               Z,   guillemotleft,        NoSymbol ],
    		symbols[4]= [      udiaeresis,      Udiaeresis,      numbersign,        NoSymbol,          Escape,          Escape,           union,        NoSymbol ]
    	};
    	key <AB02>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "FOUR_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               x,               X ],
    		symbols[2]= [    Cyrillic_che,    Cyrillic_CHE ],
    		symbols[3]= [               x,               X,  guillemotright,        NoSymbol ],
    		symbols[4]= [      odiaeresis,      Odiaeresis,          dollar,           U03F5,             Tab,             Tab,    intersection,        NoSymbol ]
    	};
    	key <AB03>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               c,               C ],
    		symbols[2]= [     Cyrillic_es,     Cyrillic_ES ],
    		symbols[3]= [               c,               C,        NoSymbol,        NoSymbol,            cent,       copyright,        NoSymbol,        NoSymbol ],
    		symbols[4]= [      adiaeresis,      Adiaeresis,             bar,       Greek_eta,          Insert,          Insert,           U2135,        NoSymbol ]
    	};
    	key <AB04>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               v,               V ],
    		symbols[2]= [     Cyrillic_em,     Cyrillic_EM ],
    		symbols[3]= [               v,               V,        NoSymbol,        NoSymbol, leftdoublequotemark, leftsinglequotemark,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               p,               P,      asciitilde,        Greek_pi,          Return,          Return,        Greek_PI,        NoSymbol ]
    	};
    	key <AB05>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               b,               B ],
    		symbols[2]= [      Cyrillic_i,      Cyrillic_I ],
    		symbols[3]= [               b,               B,        NoSymbol,        NoSymbol, rightdoublequotemark, rightsinglequotemark,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               z,               Z,           grave,      Greek_zeta,            Undo,            Undo,           U2124,        NoSymbol ]
    	};
    	key <AB06>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               n,               N ],
    		symbols[2]= [     Cyrillic_te,     Cyrillic_TE ],
    		symbols[3]= [               n,               N,        NoSymbol,        NoSymbol,           U0149,           U266A,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               b,               B,            plus,      Greek_beta,           colon,        NoSymbol,           U21D0,        NoSymbol ]
    	};
    	key <AB07>               {
    		type[1]= "ALPHABETIC",
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [               m,               M ],
    		symbols[2]= [ Cyrillic_softsign, Cyrillic_SOFTSIGN ],
    		symbols[3]= [               m,               M,              mu,        NoSymbol,              mu,       masculine,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               m,               M,         percent,        Greek_mu,            KP_1,            KP_1,        ifonlyif,        NoSymbol ]
    	};
    	key <AB08>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [           comma,            less ],
    		symbols[2]= [     Cyrillic_be,     Cyrillic_BE ],
    		symbols[3]= [           comma,      apostrophe,            less,        NoSymbol,  Greek_horizbar,        multiply,        NoSymbol,        NoSymbol ],
    		symbols[4]= [           comma,          endash,        quotedbl,           U03F1,            KP_2,            KP_2,           U21D2,        NoSymbol ]
    	};
    	key <AB09>               {
    		type[2]= "ALPHABETIC",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [          period,         greater ],
    		symbols[2]= [     Cyrillic_yu,     Cyrillic_YU ],
    		symbols[3]= [          period,        quotedbl,         greater,        NoSymbol,  periodcentered,        division,        NoSymbol,        NoSymbol ],
    		symbols[4]= [          period, enfilledcircbullet,      apostrophe,           U03D1,            KP_3,            KP_3,           U21A6,        NoSymbol ]
    	};
    	key <AB10>               {
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		symbols[1]= [           slash,        question ],
    		symbols[2]= [          period,           comma ],
    		symbols[3]= [          eacute,          Eacute,      dead_acute,        NoSymbol,        NoSymbol,   dead_abovedot,        NoSymbol,        NoSymbol ],
    		symbols[4]= [               j,               J,       semicolon,     Greek_theta,       semicolon,        NoSymbol,     Greek_THETA,        NoSymbol ]
    	};
    	key <RTSH>               {
    		type[4]= "TWO_LEVEL",
    		symbols[1]= [         Shift_R ],
    		symbols[2]= [         Shift_R ],
    		symbols[3]= [         Shift_R ],
    		symbols[4]= [         Shift_R,       Caps_Lock ]
    	};
    	key <KPMU>               {
    		type[1]= "CTRL+ALT",
    		type[2]= "CTRL+ALT",
    		type[3]= "CTRL+ALT",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
    		symbols[2]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
    		symbols[3]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
    		symbols[4]= [     KP_Multiply,     KP_Multiply,           U2219,           U2299,        multiply,        NoSymbol,           U2297,        NoSymbol ]
    	};
    	key <LALT>               {	[           Alt_L,          Meta_L ] };
    	key <SPCE>               {
    		type[3]= "FOUR_LEVEL",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [           space ],
    		symbols[2]= [           space ],
    		symbols[3]= [           space,           space,    nobreakspace,        NoSymbol ],
    		symbols[4]= [           space,           space,           space,    nobreakspace,            KP_0,            KP_0,           U202F,        NoSymbol ]
    	};
    	key <CAPS>               {
    		type= "ONE_LEVEL",
    		symbols[1]= [       Caps_Lock ],
    		symbols[2]= [       Caps_Lock ],
    		symbols[3]= [       Caps_Lock ],
    		symbols[4]= [ ISO_Level3_Shift ]
    	};
    	key <FK01>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
    	};
    	key <FK02>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
    	};
    	key <FK03>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
    	};
    	key <FK04>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
    	};
    	key <FK05>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
    	};
    	key <FK06>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
    	};
    	key <FK07>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
    	};
    	key <FK08>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
    	};
    	key <FK09>               {
    		type= "CTRL+ALT",
    		symbols[1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
    	};
    	key <FK10>               {
    		type= "CTRL+ALT",
    		symbols[1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
    	};
    	key <NMLK>               {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [        Num_Lock ],
    		symbols[2]= [        Num_Lock ],
    		symbols[3]= [        Num_Lock ],
    		symbols[4]= [             Tab,    ISO_Left_Tab,           equal,        approxeq,        notequal, Pointer_EnableKeys,       identical,        NoSymbol ]
    	};
    	key <SCLK>               {	[     Scroll_Lock ] };
    	key <KP7>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [         KP_Home,            KP_7 ],
    		symbols[2]= [         KP_Home,            KP_7 ],
    		symbols[3]= [         KP_Home,            KP_7 ],
    		symbols[4]= [            KP_7,           U2714,           U2195,           U226A,         KP_Home,         KP_Home,         upstile,        NoSymbol ]
    	};
    	key <KP8>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [           KP_Up,            KP_8 ],
    		symbols[2]= [           KP_Up,            KP_8 ],
    		symbols[3]= [           KP_Up,            KP_8 ],
    		symbols[4]= [            KP_8,           U2718,         uparrow,    intersection,           KP_Up,           KP_Up,           U22C2,        NoSymbol ]
    	};
    	key <KP9>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [        KP_Prior,            KP_9 ],
    		symbols[2]= [        KP_Prior,            KP_9 ],
    		symbols[3]= [        KP_Prior,            KP_9 ],
    		symbols[4]= [            KP_9,          dagger,           U20D7,           U226B,        KP_Prior,        KP_Prior,           U2309,        NoSymbol ]
    	};
    	key <KPSU>               {
    		type[1]= "CTRL+ALT",
    		type[2]= "CTRL+ALT",
    		type[3]= "CTRL+ALT",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
    		symbols[2]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
    		symbols[3]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
    		symbols[4]= [     KP_Subtract,     KP_Subtract,           U2212,           U2296,           U2216,        NoSymbol,           U2238,        NoSymbol ]
    	};
    	key <KP4>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [         KP_Left,            KP_4 ],
    		symbols[2]= [         KP_Left,            KP_4 ],
    		symbols[3]= [         KP_Left,            KP_4 ],
    		symbols[4]= [            KP_4,            club,       leftarrow,      includedin,         KP_Left,         KP_Left,           U2286,        NoSymbol ]
    	};
    	key <KP5>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [        KP_Begin,            KP_5 ],
    		symbols[2]= [        KP_Begin,            KP_5 ],
    		symbols[3]= [        KP_Begin,            KP_5 ],
    		symbols[4]= [            KP_5,        EuroSign,           colon,           U22B6,        KP_Begin,        KP_Begin,           U22B7,        NoSymbol ]
    	};
    	key <KP6>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [        KP_Right,            KP_6 ],
    		symbols[2]= [        KP_Right,            KP_6 ],
    		symbols[3]= [        KP_Right,            KP_6 ],
    		symbols[4]= [            KP_6,           U2023,      rightarrow,        includes,        KP_Right,        KP_Right,           U2287,        NoSymbol ]
    	};
    	key <KPAD>               {
    		type[1]= "CTRL+ALT",
    		type[2]= "CTRL+ALT",
    		type[3]= "CTRL+ALT",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
    		symbols[2]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
    		symbols[3]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
    		symbols[4]= [          KP_Add,          KP_Add,       plusminus,           U2295,           U2213,        NoSymbol,           U2214,        NoSymbol ]
    	};
    	key <KP1>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [          KP_End,            KP_1 ],
    		symbols[2]= [          KP_End,            KP_1 ],
    		symbols[3]= [          KP_End,            KP_1 ],
    		symbols[4]= [            KP_1,         diamond,           U2194,   lessthanequal,          KP_End,          KP_End,       downstile,        NoSymbol ]
    	};
    	key <KP2>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [         KP_Down,            KP_2 ],
    		symbols[2]= [         KP_Down,            KP_2 ],
    		symbols[3]= [         KP_Down,            KP_2 ],
    		symbols[4]= [            KP_2,           heart,       downarrow,           union,         KP_Down,         KP_Down,           U22C3,        NoSymbol ]
    	};
    	key <KP3>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [         KP_Next,            KP_3 ],
    		symbols[2]= [         KP_Next,            KP_3 ],
    		symbols[3]= [         KP_Next,            KP_3 ],
    		symbols[4]= [            KP_3,           U2660,           U21CC, greaterthanequal,         KP_Next,         KP_Next,           U230B,        NoSymbol ]
    	};
    	key <KP0>                {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [       KP_Insert,            KP_0 ],
    		symbols[2]= [       KP_Insert,            KP_0 ],
    		symbols[3]= [       KP_Insert,            KP_0 ],
    		symbols[4]= [            KP_0,           U2423,         percent,           U2030,       KP_Insert,       KP_Insert,           U25A1,        NoSymbol ]
    	};
    	key <KPDL>               {
    		type[2]= "KEYPAD",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [       KP_Delete,      KP_Decimal ],
    		symbols[2]= [       KP_Delete,    KP_Separator ],
    		symbols[3]= [       KP_Delete,      KP_Decimal ],
    		symbols[4]= [    KP_Separator,          period,           comma,         minutes,       KP_Delete,       KP_Delete,         seconds,        NoSymbol ]
    	};
    	key <LVL3>               {	[ ISO_Level3_Shift ] };
    	key <LSGT>               {
    		type[1]= "FOUR_LEVEL",
    		type[3]= "EIGHT_LEVEL_SEMIALPHABETIC",
    		type[4]= "ONE_LEVEL",
    		symbols[1]= [            less,         greater,             bar,       brokenbar ],
    		symbols[2]= [           slash,             bar ],
    		symbols[3]= [          ugrave,          Ugrave,          degree,        NoSymbol,        NoSymbol,       brokenbar,        NoSymbol,        NoSymbol ],
    		symbols[4]= [ ISO_Level5_Shift ]
    	};
    	key <FK11>               {
    		type= "CTRL+ALT",
    		symbols[1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
    	};
    	key <FK12>               {
    		type= "CTRL+ALT",
    		symbols[1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
    	};
    	key <AB11>               {
    		repeat= No,
    		symbols[1]= [                      Control_L, {                      Control_L,                    Mode_switch } ],
    		actions[1]= [     SetMods(modifiers=Control), {     SetMods(modifiers=Control),             SetGroup(group=+1) } ],
    		symbols[2]= [ {                      Control_L,                    Mode_switch },                      Control_L ],
    		actions[2]= [ {     SetMods(modifiers=Control),             SetGroup(group=+1) },     SetMods(modifiers=Control) ]
    	};
    	key <KATA>               {	[        Katakana ] };
    	key <HIRA>               {	[        Hiragana ] };
    	key <HENK>               {	[     Henkan_Mode ] };
    	key <HKTG>               {	[ Hiragana_Katakana ] };
    	key <MUHE>               {	[        Muhenkan ] };
    	key <KPEN>               {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [        KP_Enter ],
    		symbols[2]= [        KP_Enter ],
    		symbols[3]= [        KP_Enter ],
    		symbols[4]= [        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        NoSymbol ]
    	};
    	key <RCTL>               {
    		type= "ONE_LEVEL",
    		symbols[1]= [       Control_R ],
    		symbols[2]= [       Control_R ],
    		symbols[3]= [ ISO_Level5_Shift ]
    	};
    	key <KPDV>               {
    		type[1]= "CTRL+ALT",
    		type[2]= "CTRL+ALT",
    		type[3]= "CTRL+ALT",
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
    		symbols[2]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
    		symbols[3]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
    		symbols[4]= [       KP_Divide,       KP_Divide,        division,           U2300,           U2215,        NoSymbol,           U2223,        NoSymbol ]
    	};
    	key <PRSC>               {
    		type= "PC_ALT_LEVEL2",
    		symbols[1]= [           Print,         Sys_Req ]
    	};
    	key <RALT>               {
    		type[1]= "TWO_LEVEL",
    		type[2]= "TWO_LEVEL",
    		type[3]= "ONE_LEVEL",
    		type[4]= "ONE_LEVEL",
    		symbols[1]= [           Alt_R,          Meta_R ],
    		symbols[2]= [           Alt_R,          Meta_R ],
    		symbols[3]= [ ISO_Level3_Shift ],
    		symbols[4]= [ ISO_Level5_Shift ]
    	};
    	key <LNFD>               {	[        Linefeed ] };
    	key <HOME>               {	[            Home ] };
    	key <UP>                 {	[              Up ] };
    	key <PGUP>               {	[           Prior ] };
    	key <LEFT>               {	[            Left ] };
    	key <RGHT>               {	[           Right ] };
    	key <END>                {	[             End ] };
    	key <DOWN>               {	[            Down ] };
    	key <PGDN>               {	[            Next ] };
    	key <INS>                {	[          Insert ] };
    	key <DELE>               {	[          Delete ] };
    	key <MUTE>               {	[   XF86AudioMute ] };
    	key <VOL->               {	[ XF86AudioLowerVolume ] };
    	key <VOL+>               {	[ XF86AudioRaiseVolume ] };
    	key <POWR>               {	[    XF86PowerOff ] };
    	key <KPEQ>               {
    		type[4]= "EIGHT_LEVEL",
    		symbols[1]= [        KP_Equal ],
    		symbols[2]= [        KP_Equal ],
    		symbols[3]= [        KP_Equal ],
    		symbols[4]= [        KP_Equal,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ]
    	};
    	key <I126>               {	[       plusminus ] };
    	key <PAUS>               {
    		type= "PC_CONTROL_LEVEL2",
    		symbols[1]= [           Pause,           Break ]
    	};
    	key <I128>               {	[     XF86LaunchA ] };
    	key <I129>               {	[      KP_Decimal,      KP_Decimal ] };
    	key <HNGL>               {	[          Hangul ] };
    	key <HJCV>               {	[    Hangul_Hanja ] };
    	key <LWIN>               {	[         Super_L ] };
    	key <RWIN>               {	[         Super_R ] };
    	key <COMP>               {	[            Menu ] };
    	key <STOP>               {	[          Cancel ] };
    	key <AGAI>               {	[            Redo ] };
    	key <PROP>               {	[        SunProps ] };
    	key <UNDO>               {	[            Undo ] };
    	key <FRNT>               {	[        SunFront ] };
    	key <COPY>               {	[        XF86Copy ] };
    	key <OPEN>               {	[         SunOpen ] };
    	key <PAST>               {	[       XF86Paste ] };
    	key <FIND>               {	[            Find ] };
    	key <CUT>                {	[         XF86Cut ] };
    	key <HELP>               {	[            Help ] };
    	key <I147>               {	[      XF86MenuKB ] };
    	key <I148>               {	[  XF86Calculator ] };
    	key <I150>               {	[       XF86Sleep ] };
    	key <I151>               {	[      XF86WakeUp ] };
    	key <I152>               {	[    XF86Explorer ] };
    	key <I153>               {	[        XF86Send ] };
    	key <I155>               {	[        XF86Xfer ] };
    	key <I156>               {	[     XF86Launch1 ] };
    	key <I157>               {	[     XF86Launch2 ] };
    	key <I158>               {	[         XF86WWW ] };
    	key <I159>               {	[         XF86DOS ] };
    	key <I160>               {	[ XF86ScreenSaver ] };
    	key <I162>               {	[ XF86RotateWindows ] };
    	key <I163>               {	[        XF86Mail ] };
    	key <I164>               {	[   XF86Favorites ] };
    	key <I165>               {	[  XF86MyComputer ] };
    	key <I166>               {	[        XF86Back ] };
    	key <I167>               {	[     XF86Forward ] };
    	key <I169>               {	[       XF86Eject ] };
    	key <I170>               {	[       XF86Eject,       XF86Eject ] };
    	key <I171>               {	[   XF86AudioNext ] };
    	key <I172>               {	[   XF86AudioPlay,  XF86AudioPause ] };
    	key <I173>               {	[   XF86AudioPrev ] };
    	key <I174>               {	[   XF86AudioStop,       XF86Eject ] };
    	key <I175>               {	[ XF86AudioRecord ] };
    	key <I176>               {	[ XF86AudioRewind ] };
    	key <I177>               {	[       XF86Phone ] };
    	key <I179>               {	[       XF86Tools ] };
    	key <I180>               {	[    XF86HomePage ] };
    	key <I181>               {	[      XF86Reload ] };
    	key <I182>               {	[       XF86Close ] };
    	key <I185>               {	[    XF86ScrollUp ] };
    	key <I186>               {	[  XF86ScrollDown ] };
    	key <I187>               {	[       parenleft ] };
    	key <I188>               {	[      parenright ] };
    	key <I189>               {	[         XF86New ] };
    	key <I190>               {	[            Redo ] };
    	key <FK13>               {	[       XF86Tools ] };
    	key <FK14>               {	[     XF86Launch5 ] };
    	key <FK15>               {	[     XF86Launch6 ] };
    	key <FK16>               {	[     XF86Launch7 ] };
    	key <FK17>               {	[     XF86Launch8 ] };
    	key <FK18>               {	[     XF86Launch9 ] };
    	key <FK21>               {	[ XF86TouchpadToggle ] };
    	key <FK22>               {	[  XF86TouchpadOn ] };
    	key <FK23>               {	[ XF86TouchpadOff ] };
    	key <MDSW>               {	[     Mode_switch ] };
    	key <ALT>                {	[        NoSymbol,           Alt_L ] };
    	key <META>               {	[        NoSymbol,          Meta_L ] };
    	key <SUPR>               {	[        NoSymbol,         Super_L ] };
    	key <HYPR>               {	[        NoSymbol,         Hyper_L ] };
    	key <I208>               {	[   XF86AudioPlay ] };
    	key <I209>               {	[  XF86AudioPause ] };
    	key <I210>               {	[     XF86Launch3 ] };
    	key <I211>               {	[     XF86Launch4 ] };
    	key <I212>               {	[     XF86LaunchB ] };
    	key <I213>               {	[     XF86Suspend ] };
    	key <I214>               {	[       XF86Close ] };
    	key <I215>               {	[   XF86AudioPlay ] };
    	key <I216>               {	[ XF86AudioForward ] };
    	key <I218>               {	[           Print ] };
    	key <I220>               {	[      XF86WebCam ] };
    	key <I223>               {	[        XF86Mail ] };
    	key <I224>               {	[   XF86Messenger ] };
    	key <I225>               {	[      XF86Search ] };
    	key <I226>               {	[          XF86Go ] };
    	key <I227>               {	[     XF86Finance ] };
    	key <I228>               {	[        XF86Game ] };
    	key <I229>               {	[        XF86Shop ] };
    	key <I231>               {	[          Cancel ] };
    	key <I232>               {	[ XF86MonBrightnessDown ] };
    	key <I233>               {	[ XF86MonBrightnessUp ] };
    	key <I234>               {	[  XF86AudioMedia ] };
    	key <I235>               {	[     XF86Display ] };
    	key <I236>               {	[ XF86KbdLightOnOff ] };
    	key <I237>               {	[ XF86KbdBrightnessDown ] };
    	key <I238>               {	[ XF86KbdBrightnessUp ] };
    	key <I239>               {	[        XF86Send ] };
    	key <I240>               {	[       XF86Reply ] };
    	key <I241>               {	[ XF86MailForward ] };
    	key <I242>               {	[        XF86Save ] };
    	key <I243>               {	[   XF86Documents ] };
    	key <I244>               {	[     XF86Battery ] };
    	key <I245>               {	[   XF86Bluetooth ] };
    	key <I246>               {	[        XF86WLAN ] };
    	modifier_map Shift { <LFSH>, <RTSH> };
    	modifier_map Lock { <CAPS> };
    	modifier_map Control { <LCTL> };
    	modifier_map Mod1 { <LALT>, <RALT>, <META> };
    	modifier_map Mod2 { <NMLK> };
    	modifier_map Mod3 { <RCTL> };
    	modifier_map Mod4 { <LWIN>, <RWIN>, <SUPR>, <HYPR> };
    	modifier_map Mod5 { <LVL3>, <MDSW> };
    };
    
    };