diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 3ae88d3..9e6ea78 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -27,142 +27,157 @@
 #
 
 # Mapping between USIM Service Number and its description
+import pySim.ts_102_221
+from pySim.ts_51_011 import EF_ACMmax, EF_AAeM, EF_eMLPP, EF_CMI, EF_PNN
+from pySim.ts_51_011 import EF_MMSN, EF_MMSICP, EF_MMSUP, EF_MMSUCP, EF_VGCS, EF_VGCSS, EF_NIA
+from pySim.ts_51_011 import EF_SMSR, EF_DCK, EF_EXT, EF_CNL, EF_OPL, EF_MBI, EF_MWIS
+from pySim.ts_51_011 import EF_CBMID, EF_CBMIR, EF_ADN, EF_SMS, EF_MSISDN, EF_SMSP, EF_SMSS
+from pySim.ts_51_011 import EF_IMSI, EF_xPLMNwAcT, EF_SPN, EF_CBMI, EF_ACC, EF_PLMNsel
+from pySim.ts_102_221 import EF_ARR
+from pySim.tlv import *
+from pySim.filesystem import *
+from pySim.construct import *
+from construct import Optional as COptional
+from construct import *
+from typing import Tuple
+from struct import unpack, pack
+import enum
 EF_UST_map = {
-	1: 'Local Phone Book',
-	2: 'Fixed Dialling Numbers (FDN)',
-	3: 'Extension 2',
-	4: 'Service Dialling Numbers (SDN)',
-	5: 'Extension3',
-	6: 'Barred Dialling Numbers (BDN)',
-	7: 'Extension4',
-	8: 'Outgoing Call Information (OCI and OCT)',
-	9: 'Incoming Call Information (ICI and ICT)',
-	10: 'Short Message Storage (SMS)',
-	11: 'Short Message Status Reports (SMSR)',
-	12: 'Short Message Service Parameters (SMSP)',
-	13: 'Advice of Charge (AoC)',
-	14: 'Capability Configuration Parameters 2 (CCP2)',
-	15: 'Cell Broadcast Message Identifier',
-	16: 'Cell Broadcast Message Identifier Ranges',
-	17: 'Group Identifier Level 1',
-	18: 'Group Identifier Level 2',
-	19: 'Service Provider Name',
-	20: 'User controlled PLMN selector with Access Technology',
-	21: 'MSISDN',
-	22: 'Image (IMG)',
-	23: 'Support of Localised Service Areas (SoLSA)',
-	24: 'Enhanced Multi-Level Precedence and Pre-emption Service',
-	25: 'Automatic Answer for eMLPP',
-	26: 'RFU',
-	27: 'GSM Access',
-	28: 'Data download via SMS-PP',
-	29: 'Data download via SMS-CB',
-	30: 'Call Control by USIM',
-	31: 'MO-SMS Control by USIM',
-	32: 'RUN AT COMMAND command',
-	33: 'shall be set to 1',
-	34: 'Enabled Services Table',
-	35: 'APN Control List (ACL)',
-	36: 'Depersonalisation Control Keys',
-	37: 'Co-operative Network List',
-	38: 'GSM security context',
-	39: 'CPBCCH Information',
-	40: 'Investigation Scan',
-	41: 'MexE',
-	42: 'Operator controlled PLMN selector with Access Technology',
-	43: 'HPLMN selector with Access Technology',
-	44: 'Extension 5',
-	45: 'PLMN Network Name',
-	46: 'Operator PLMN List',
-	47: 'Mailbox Dialling Numbers',
-	48: 'Message Waiting Indication Status',
-	49: 'Call Forwarding Indication Status',
-	50: 'Reserved and shall be ignored',
-	51: 'Service Provider Display Information',
-	52: 'Multimedia Messaging Service (MMS)',
-	53: 'Extension 8',
-	54: 'Call control on GPRS by USIM',
-	55: 'MMS User Connectivity Parameters',
-	56: 'Network\'s indication of alerting in the MS (NIA)',
-	57: 'VGCS Group Identifier List (EFVGCS and EFVGCSS)',
-	58: 'VBS Group Identifier List (EFVBS and EFVBSS)',
-	59: 'Pseudonym',
-	60: 'User Controlled PLMN selector for I-WLAN access',
-	61: 'Operator Controlled PLMN selector for I-WLAN access',
-	62: 'User controlled WSID list',
-	63: 'Operator controlled WSID list',
-	64: 'VGCS security',
-	65: 'VBS security',
-	66: 'WLAN Reauthentication Identity',
-	67: 'Multimedia Messages Storage',
-	68: 'Generic Bootstrapping Architecture (GBA)',
-	69: 'MBMS security',
-	70: 'Data download via USSD and USSD application mode',
-	71: 'Equivalent HPLMN',
-	72: 'Additional TERMINAL PROFILE after UICC activation',
-	73: 'Equivalent HPLMN Presentation Indication',
-	74: 'Last RPLMN Selection Indication',
-	75: 'OMA BCAST Smart Card Profile',
-	76: 'GBA-based Local Key Establishment Mechanism',
-	77: 'Terminal Applications',
-	78: 'Service Provider Name Icon',
-	79: 'PLMN Network Name Icon',
-	80: 'Connectivity Parameters for USIM IP connections',
-	81: 'Home I-WLAN Specific Identifier List',
-	82: 'I-WLAN Equivalent HPLMN Presentation Indication',
-	83: 'I-WLAN HPLMN Priority Indication',
-	84: 'I-WLAN Last Registered PLMN',
-	85: 'EPS Mobility Management Information',
-	86: 'Allowed CSG Lists and corresponding indications',
-	87: 'Call control on EPS PDN connection by USIM',
-	88: 'HPLMN Direct Access',
-	89: 'eCall Data',
-	90: 'Operator CSG Lists and corresponding indications',
-	91: 'Support for SM-over-IP',
-	92: 'Support of CSG Display Control',
-	93: 'Communication Control for IMS by USIM',
-	94: 'Extended Terminal Applications',
-	95: 'Support of UICC access to IMS',
-	96: 'Non-Access Stratum configuration by USIM',
-	97: 'PWS configuration by USIM',
-	98: 'RFU',
-	99: 'URI support by UICC',
-	100: 'Extended EARFCN support',
-	101: 'ProSe',
-	102: 'USAT Application Pairing',
-	103: 'Media Type support',
-	104: 'IMS call disconnection cause',
-	105: 'URI support for MO SHORT MESSAGE CONTROL',
-	106: 'ePDG configuration Information support',
-	107: 'ePDG configuration Information configured',
-	108: 'ACDC support',
-	109: 'MCPTT',
-	110: 'ePDG configuration Information for Emergency Service support',
-	111: 'ePDG configuration Information for Emergency Service configured',
-	112: 'eCall Data over IMS',
-	113: 'URI support for SMS-PP DOWNLOAD as defined in 3GPP TS 31.111 [12]',
-	114: 'From Preferred',
-	115: 'IMS configuration data',
-	116: 'TV configuration',
-	117: '3GPP PS Data Off',
-	118: '3GPP PS Data Off Service List',
-	119: 'V2X',
-	120: 'XCAP Configuration Data',
-	121: 'EARFCN list for MTC/NB-IOT UEs',
-	122: '5GS Mobility Management Information',
-	123: '5G Security Parameters',
-	124: 'Subscription identifier privacy support',
-	125: 'SUCI calculation by the USIM',
-	126: 'UAC Access Identities support',
-	127: 'Expect control plane-based Steering of Roaming information during initial registration in VPLMN',
-	128: 'Call control on PDU Session by USIM',
-	129: '5GS Operator PLMN List',
-	130: 'Support for SUPI of type NSI or GLI or GCI',
-	131: '3GPP PS Data Off separate Home and Roaming lists',
-	132: 'Support for URSP by USIM',
-	133: '5G Security Parameters extended',
-	134: 'MuD and MiD configuration data',
-	135: 'Support for Trusted non-3GPP access networks by USIM'
+    1: 'Local Phone Book',
+    2: 'Fixed Dialling Numbers (FDN)',
+    3: 'Extension 2',
+    4: 'Service Dialling Numbers (SDN)',
+    5: 'Extension3',
+    6: 'Barred Dialling Numbers (BDN)',
+    7: 'Extension4',
+    8: 'Outgoing Call Information (OCI and OCT)',
+    9: 'Incoming Call Information (ICI and ICT)',
+    10: 'Short Message Storage (SMS)',
+    11: 'Short Message Status Reports (SMSR)',
+    12: 'Short Message Service Parameters (SMSP)',
+    13: 'Advice of Charge (AoC)',
+    14: 'Capability Configuration Parameters 2 (CCP2)',
+    15: 'Cell Broadcast Message Identifier',
+    16: 'Cell Broadcast Message Identifier Ranges',
+    17: 'Group Identifier Level 1',
+    18: 'Group Identifier Level 2',
+    19: 'Service Provider Name',
+    20: 'User controlled PLMN selector with Access Technology',
+    21: 'MSISDN',
+    22: 'Image (IMG)',
+    23: 'Support of Localised Service Areas (SoLSA)',
+    24: 'Enhanced Multi-Level Precedence and Pre-emption Service',
+    25: 'Automatic Answer for eMLPP',
+    26: 'RFU',
+    27: 'GSM Access',
+    28: 'Data download via SMS-PP',
+    29: 'Data download via SMS-CB',
+    30: 'Call Control by USIM',
+    31: 'MO-SMS Control by USIM',
+    32: 'RUN AT COMMAND command',
+    33: 'shall be set to 1',
+    34: 'Enabled Services Table',
+    35: 'APN Control List (ACL)',
+    36: 'Depersonalisation Control Keys',
+    37: 'Co-operative Network List',
+    38: 'GSM security context',
+    39: 'CPBCCH Information',
+    40: 'Investigation Scan',
+    41: 'MexE',
+    42: 'Operator controlled PLMN selector with Access Technology',
+    43: 'HPLMN selector with Access Technology',
+    44: 'Extension 5',
+    45: 'PLMN Network Name',
+    46: 'Operator PLMN List',
+    47: 'Mailbox Dialling Numbers',
+    48: 'Message Waiting Indication Status',
+    49: 'Call Forwarding Indication Status',
+    50: 'Reserved and shall be ignored',
+    51: 'Service Provider Display Information',
+    52: 'Multimedia Messaging Service (MMS)',
+    53: 'Extension 8',
+    54: 'Call control on GPRS by USIM',
+    55: 'MMS User Connectivity Parameters',
+    56: 'Network\'s indication of alerting in the MS (NIA)',
+    57: 'VGCS Group Identifier List (EFVGCS and EFVGCSS)',
+    58: 'VBS Group Identifier List (EFVBS and EFVBSS)',
+    59: 'Pseudonym',
+    60: 'User Controlled PLMN selector for I-WLAN access',
+    61: 'Operator Controlled PLMN selector for I-WLAN access',
+    62: 'User controlled WSID list',
+    63: 'Operator controlled WSID list',
+    64: 'VGCS security',
+    65: 'VBS security',
+    66: 'WLAN Reauthentication Identity',
+    67: 'Multimedia Messages Storage',
+    68: 'Generic Bootstrapping Architecture (GBA)',
+    69: 'MBMS security',
+    70: 'Data download via USSD and USSD application mode',
+    71: 'Equivalent HPLMN',
+    72: 'Additional TERMINAL PROFILE after UICC activation',
+    73: 'Equivalent HPLMN Presentation Indication',
+    74: 'Last RPLMN Selection Indication',
+    75: 'OMA BCAST Smart Card Profile',
+    76: 'GBA-based Local Key Establishment Mechanism',
+    77: 'Terminal Applications',
+    78: 'Service Provider Name Icon',
+    79: 'PLMN Network Name Icon',
+    80: 'Connectivity Parameters for USIM IP connections',
+    81: 'Home I-WLAN Specific Identifier List',
+    82: 'I-WLAN Equivalent HPLMN Presentation Indication',
+    83: 'I-WLAN HPLMN Priority Indication',
+    84: 'I-WLAN Last Registered PLMN',
+    85: 'EPS Mobility Management Information',
+    86: 'Allowed CSG Lists and corresponding indications',
+    87: 'Call control on EPS PDN connection by USIM',
+    88: 'HPLMN Direct Access',
+    89: 'eCall Data',
+    90: 'Operator CSG Lists and corresponding indications',
+    91: 'Support for SM-over-IP',
+    92: 'Support of CSG Display Control',
+    93: 'Communication Control for IMS by USIM',
+    94: 'Extended Terminal Applications',
+    95: 'Support of UICC access to IMS',
+    96: 'Non-Access Stratum configuration by USIM',
+    97: 'PWS configuration by USIM',
+    98: 'RFU',
+    99: 'URI support by UICC',
+    100: 'Extended EARFCN support',
+    101: 'ProSe',
+    102: 'USAT Application Pairing',
+    103: 'Media Type support',
+    104: 'IMS call disconnection cause',
+    105: 'URI support for MO SHORT MESSAGE CONTROL',
+    106: 'ePDG configuration Information support',
+    107: 'ePDG configuration Information configured',
+    108: 'ACDC support',
+    109: 'MCPTT',
+    110: 'ePDG configuration Information for Emergency Service support',
+    111: 'ePDG configuration Information for Emergency Service configured',
+    112: 'eCall Data over IMS',
+    113: 'URI support for SMS-PP DOWNLOAD as defined in 3GPP TS 31.111 [12]',
+    114: 'From Preferred',
+    115: 'IMS configuration data',
+    116: 'TV configuration',
+    117: '3GPP PS Data Off',
+    118: '3GPP PS Data Off Service List',
+    119: 'V2X',
+    120: 'XCAP Configuration Data',
+    121: 'EARFCN list for MTC/NB-IOT UEs',
+    122: '5GS Mobility Management Information',
+    123: '5G Security Parameters',
+    124: 'Subscription identifier privacy support',
+    125: 'SUCI calculation by the USIM',
+    126: 'UAC Access Identities support',
+    127: 'Expect control plane-based Steering of Roaming information during initial registration in VPLMN',
+    128: 'Call control on PDU Session by USIM',
+    129: '5GS Operator PLMN List',
+    130: 'Support for SUPI of type NSI or GLI or GCI',
+    131: '3GPP PS Data Off separate Home and Roaming lists',
+    132: 'Support for URSP by USIM',
+    133: '5G Security Parameters extended',
+    134: 'MuD and MiD configuration data',
+    135: 'Support for Trusted non-3GPP access networks by USIM'
 }
 
 # Mapping between USIM Enbled Service Number and its description
@@ -173,138 +188,123 @@
 }
 
 LOCI_STATUS_map = {
-	0:	'updated',
-	1:	'not updated',
-	2:	'plmn not allowed',
-	3:	'locatation area not allowed'
+    0:	'updated',
+    1:	'not updated',
+    2:	'plmn not allowed',
+    3:	'locatation area not allowed'
 }
 
 EF_USIM_ADF_map = {
-	'LI': '6F05',
-	'ARR': '6F06',
-	'IMSI': '6F07',
-	'Keys': '6F08',
-	'KeysPS': '6F09',
-	'DCK': '6F2C',
-	'HPPLMN': '6F31',
-	'CNL': '6F32',
-	'ACMmax': '6F37',
-	'UST': '6F38',
-	'ACM': '6F39',
-	'FDN': '6F3B',
-	'SMS': '6F3C',
-	'GID1': '6F3E',
-	'GID2': '6F3F',
-	'MSISDN': '6F40',
-	'PUCT': '6F41',
-	'SMSP': '6F42',
-	'SMSS': '6F42',
-	'CBMI': '6F45',
-	'SPN': '6F46',
-	'SMSR': '6F47',
-	'CBMID': '6F48',
-	'SDN': '6F49',
-	'EXT2': '6F4B',
-	'EXT3': '6F4C',
-	'BDN': '6F4D',
-	'EXT5': '6F4E',
-	'CCP2': '6F4F',
-	'CBMIR': '6F50',
-	'EXT4': '6F55',
-	'EST': '6F56',
-	'ACL': '6F57',
-	'CMI': '6F58',
-	'START-HFN': '6F5B',
-	'THRESHOLD': '6F5C',
-	'PLMNwAcT': '6F60',
-	'OPLMNwAcT': '6F61',
-	'HPLMNwAcT': '6F62',
-	'PSLOCI': '6F73',
-	'ACC': '6F78',
-	'FPLMN': '6F7B',
-	'LOCI': '6F7E',
-	'ICI': '6F80',
-	'OCI': '6F81',
-	'ICT': '6F82',
-	'OCT': '6F83',
-	'AD': '6FAD',
-	'VGCS': '6FB1',
-	'VGCSS': '6FB2',
-	'VBS': '6FB3',
-	'VBSS': '6FB4',
-	'eMLPP': '6FB5',
-	'AAeM': '6FB6',
-	'ECC': '6FB7',
-	'Hiddenkey': '6FC3',
-	'NETPAR': '6FC4',
-	'PNN': '6FC5',
-	'OPL': '6FC6',
-	'MBDN': '6FC7',
-	'EXT6': '6FC8',
-	'MBI': '6FC9',
-	'MWIS': '6FCA',
-	'CFIS': '6FCB',
-	'EXT7': '6FCC',
-	'SPDI': '6FCD',
-	'MMSN': '6FCE',
-	'EXT8': '6FCF',
-	'MMSICP': '6FD0',
-	'MMSUP': '6FD1',
-	'MMSUCP': '6FD2',
-	'NIA': '6FD3',
-	'VGCSCA': '6FD4',
-	'VBSCA': '6FD5',
-	'GBAP': '6FD6',
-	'MSK': '6FD7',
-	'MUK': '6FD8',
-	'EHPLMN': '6FD9',
-	'GBANL': '6FDA',
-	'EHPLMNPI': '6FDB',
-	'LRPLMNSI': '6FDC',
-	'NAFKCA': '6FDD',
-	'SPNI': '6FDE',
-	'PNNI': '6FDF',
-	'NCP-IP': '6FE2',
-	'EPSLOCI': '6FE3',
-	'EPSNSC': '6FE4',
-	'UFC': '6FE6',
-	'UICCIARI': '6FE7',
-	'NASCONFIG': '6FE8',
-	'PWC': '6FEC',
-	'FDNURI': '6FED',
-	'BDNURI': '6FEE',
-	'SDNURI': '6FEF',
-	'IWL': '6FF0',
-	'IPS': '6FF1',
-	'IPD': '6FF2',
-	'ePDGId': '6FF3',
-	'ePDGSelection': '6FF4',
-	'ePDGIdEm': '6FF5',
-	'ePDGSelectionEm': '6FF6',
+    'LI': '6F05',
+    'ARR': '6F06',
+    'IMSI': '6F07',
+    'Keys': '6F08',
+    'KeysPS': '6F09',
+    'DCK': '6F2C',
+    'HPPLMN': '6F31',
+    'CNL': '6F32',
+    'ACMmax': '6F37',
+    'UST': '6F38',
+    'ACM': '6F39',
+    'FDN': '6F3B',
+    'SMS': '6F3C',
+    'GID1': '6F3E',
+    'GID2': '6F3F',
+    'MSISDN': '6F40',
+    'PUCT': '6F41',
+    'SMSP': '6F42',
+    'SMSS': '6F42',
+    'CBMI': '6F45',
+    'SPN': '6F46',
+    'SMSR': '6F47',
+    'CBMID': '6F48',
+    'SDN': '6F49',
+    'EXT2': '6F4B',
+    'EXT3': '6F4C',
+    'BDN': '6F4D',
+    'EXT5': '6F4E',
+    'CCP2': '6F4F',
+    'CBMIR': '6F50',
+    'EXT4': '6F55',
+    'EST': '6F56',
+    'ACL': '6F57',
+    'CMI': '6F58',
+    'START-HFN': '6F5B',
+    'THRESHOLD': '6F5C',
+    'PLMNwAcT': '6F60',
+    'OPLMNwAcT': '6F61',
+    'HPLMNwAcT': '6F62',
+    'PSLOCI': '6F73',
+    'ACC': '6F78',
+    'FPLMN': '6F7B',
+    'LOCI': '6F7E',
+    'ICI': '6F80',
+    'OCI': '6F81',
+    'ICT': '6F82',
+    'OCT': '6F83',
+    'AD': '6FAD',
+    'VGCS': '6FB1',
+    'VGCSS': '6FB2',
+    'VBS': '6FB3',
+    'VBSS': '6FB4',
+    'eMLPP': '6FB5',
+    'AAeM': '6FB6',
+    'ECC': '6FB7',
+    'Hiddenkey': '6FC3',
+    'NETPAR': '6FC4',
+    'PNN': '6FC5',
+    'OPL': '6FC6',
+    'MBDN': '6FC7',
+    'EXT6': '6FC8',
+    'MBI': '6FC9',
+    'MWIS': '6FCA',
+    'CFIS': '6FCB',
+    'EXT7': '6FCC',
+    'SPDI': '6FCD',
+    'MMSN': '6FCE',
+    'EXT8': '6FCF',
+    'MMSICP': '6FD0',
+    'MMSUP': '6FD1',
+    'MMSUCP': '6FD2',
+    'NIA': '6FD3',
+    'VGCSCA': '6FD4',
+    'VBSCA': '6FD5',
+    'GBAP': '6FD6',
+    'MSK': '6FD7',
+    'MUK': '6FD8',
+    'EHPLMN': '6FD9',
+    'GBANL': '6FDA',
+    'EHPLMNPI': '6FDB',
+    'LRPLMNSI': '6FDC',
+    'NAFKCA': '6FDD',
+    'SPNI': '6FDE',
+    'PNNI': '6FDF',
+    'NCP-IP': '6FE2',
+    'EPSLOCI': '6FE3',
+    'EPSNSC': '6FE4',
+    'UFC': '6FE6',
+    'UICCIARI': '6FE7',
+    'NASCONFIG': '6FE8',
+    'PWC': '6FEC',
+    'FDNURI': '6FED',
+    'BDNURI': '6FEE',
+    'SDNURI': '6FEF',
+    'IWL': '6FF0',
+    'IPS': '6FF1',
+    'IPD': '6FF2',
+    'ePDGId': '6FF3',
+    'ePDGSelection': '6FF4',
+    'ePDGIdEm': '6FF5',
+    'ePDGSelectionEm': '6FF6',
 }
 
 ######################################################################
 # ADF.USIM
 ######################################################################
 
-import enum
-from struct import unpack, pack
-from typing import Tuple
-from construct import *
-from construct import Optional as COptional
-from pySim.construct import *
-from pySim.filesystem import *
-from pySim.tlv import *
-from pySim.ts_102_221 import EF_ARR
-from pySim.ts_51_011 import EF_IMSI, EF_xPLMNwAcT, EF_SPN, EF_CBMI, EF_ACC, EF_PLMNsel
-from pySim.ts_51_011 import EF_CBMID, EF_CBMIR, EF_ADN, EF_SMS, EF_MSISDN, EF_SMSP, EF_SMSS
-from pySim.ts_51_011 import EF_SMSR, EF_DCK, EF_EXT, EF_CNL, EF_OPL, EF_MBI, EF_MWIS
-from pySim.ts_51_011 import EF_MMSN, EF_MMSICP, EF_MMSUP, EF_MMSUCP, EF_VGCS, EF_VGCSS, EF_NIA
-from pySim.ts_51_011 import EF_ACMmax, EF_AAeM, EF_eMLPP, EF_CMI, EF_PNN
-
-import pySim.ts_102_221
 
 # 3GPP TS 31.102 Section 4.4.11.4 (EF_5GS3GPPNSC)
+
 class EF_5GS3GPPNSC(LinFixedEF):
     class NgKSI(BER_TLV_IE, tag=0x80):
         _construct = Int8ub
@@ -327,17 +327,19 @@
         _construct = BitStruct('ciphering'/Nibble, 'integrity'/Nibble)
 
     class FiveGSNasSecurityContext(BER_TLV_IE, tag=0xA0,
-            nested=[NgKSI, K_AMF, UplinkNASCount,
-                    DownlinkNASCount, IdsOfSelectedNasAlgos,
-                    IdsOfSelectedEpsAlgos]):
+                                   nested=[NgKSI, K_AMF, UplinkNASCount,
+                                           DownlinkNASCount, IdsOfSelectedNasAlgos,
+                                           IdsOfSelectedEpsAlgos]):
         pass
 
     def __init__(self, fid="4f03", sfid=0x03, name='EF.5GS3GPPNSC', rec_len={57, None},
-        desc='5GS 3GPP Access NAS Security Context'):
+                 desc='5GS 3GPP Access NAS Security Context'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._tlv = EF_5GS3GPPNSC.FiveGSNasSecurityContext
 
 # 3GPP TS 31.102 Section 4.4.11.6
+
+
 class EF_5GAUTHKEYS(TransparentEF):
     class K_AUSF(BER_TLV_IE, tag=0x80):
         _construct = HexAdapter(GreedyBytes)
@@ -349,42 +351,50 @@
         pass
 
     def __init__(self, fid='4f05', sfid=0x05, name='EF.5GAUTHKEYS', size={68, None},
-            desc='5G authentication keys'):
+                 desc='5G authentication keys'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._tlv = EF_5GAUTHKEYS.FiveGAuthKeys
 
 # 3GPP TS 31.102 Section 4.4.11.8
+
+
 class ProtSchemeIdList(BER_TLV_IE, tag=0xa0):
     # FIXME: 3GPP TS 24.501 Protection Scheme Identifier
     # repeated sequence of (id, index) tuples
-    _construct = GreedyRange(Struct('id'/Enum(Byte, null=0, A=1, B=2), 'index'/Int8ub))
+    _construct = GreedyRange(
+        Struct('id'/Enum(Byte, null=0, A=1, B=2), 'index'/Int8ub))
+
 
 class HomeNetPubKeyId(BER_TLV_IE, tag=0x80):
     # 3GPP TS 24.501 / 3GPP TS 23.003
     _construct = Int8ub
 
+
 class HomeNetPubKey(BER_TLV_IE, tag=0x81):
     # FIXME: RFC 5480
     _construct = HexAdapter(GreedyBytes)
 
+
 class HomeNetPubKeyList(BER_TLV_IE, tag=0xa1,
-        nested=[HomeNetPubKeyId, HomeNetPubKey]):
+                        nested=[HomeNetPubKeyId, HomeNetPubKey]):
     pass
 
 # 3GPP TS 31.102 Section 4.4.11.6
-class SUCI_CalcInfo(TLV_IE_Collection, nested=[ProtSchemeIdList,HomeNetPubKeyList]):
+
+
+class SUCI_CalcInfo(TLV_IE_Collection, nested=[ProtSchemeIdList, HomeNetPubKeyList]):
     pass
 
 
 # TS 31.102 4.4.11.8
 class EF_SUCI_Calc_Info(TransparentEF):
     def __init__(self, fid="4f07", sfid=0x07, name='EF.SUCI_Calc_Info', size={2, None},
-        desc='SUCI Calc Info'):
+                 desc='SUCI Calc Info'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
 
     def _encode_prot_scheme_id_list(self, in_list):
         out_bytes = [0xa0]
-        out_bytes.append(len(in_list)*2) # two byte per entry
+        out_bytes.append(len(in_list)*2)  # two byte per entry
 
         # position in list determines priority; high-priority items (low index) come first
         for scheme in sorted(in_list, key=lambda item: item["priority"]):
@@ -394,15 +404,15 @@
         return out_bytes
 
     def _encode_hnet_pubkey_list(self, hnet_pubkey_list):
-        out_bytes = [0xa1] # pubkey list tag
-        out_bytes.append(0x00) # length filled later
+        out_bytes = [0xa1]  # pubkey list tag
+        out_bytes.append(0x00)  # length filled later
         length = 0
 
         for key in hnet_pubkey_list:
-            out_bytes.append(0x80) # identifier tag
-            out_bytes.append(0x01) # TODO size, fixed to 1 byte
+            out_bytes.append(0x80)  # identifier tag
+            out_bytes.append(0x01)  # TODO size, fixed to 1 byte
             out_bytes.append(key["hnet_pubkey_identifier"])
-            out_bytes.append(0x81) # key tag
+            out_bytes.append(0x81)  # key tag
             out_bytes.append(len(key["hnet_pubkey"])//2)
             length += 5+len(key["hnet_pubkey"])//2
 
@@ -414,7 +424,8 @@
         return out_bytes
 
     def _encode_hex(self, in_json):
-        out_bytes = self._encode_prot_scheme_id_list(in_json['prot_scheme_id_list'])
+        out_bytes = self._encode_prot_scheme_id_list(
+            in_json['prot_scheme_id_list'])
         out_bytes += self._encode_hnet_pubkey_list(in_json['hnet_pubkey_list'])
         return "".join(["%02X" % i for i in out_bytes])
 
@@ -424,7 +435,7 @@
         # two bytes per entry
         while pos < len(in_bytes):
             prot_scheme = {
-                'priority':   pos//2, # first in list: high priority
+                'priority':   pos//2,  # first in list: high priority
                 'identifier': in_bytes[pos],
                 'key_index':  in_bytes[pos+1]
             }
@@ -447,7 +458,8 @@
                 print("missing Home Network Public Key Identifier tag")
                 return {}
             pos += 1
-            hnet_pubkey_id_len = in_bytes[pos] # TODO might be more than 1 byte?
+            # TODO might be more than 1 byte?
+            hnet_pubkey_id_len = in_bytes[pos]
             pos += 1
             hnet_pubkey_id = in_bytes[pos:pos+hnet_pubkey_id_len][0]
             pos += hnet_pubkey_id_len
@@ -479,10 +491,11 @@
             return {}
         pos += 1
 
-        prot_scheme_id_list_len = in_bytes[pos] # TODO maybe more than 1 byte
+        prot_scheme_id_list_len = in_bytes[pos]  # TODO maybe more than 1 byte
         pos += 1
         # decode Protection Scheme Identifier List data object
-        prot_scheme_id_list = self._decode_prot_scheme_id_list(in_bytes[pos:pos+prot_scheme_id_list_len])
+        prot_scheme_id_list = self._decode_prot_scheme_id_list(
+            in_bytes[pos:pos+prot_scheme_id_list_len])
         pos += prot_scheme_id_list_len
 
         # remaining data holds Home Network Public Key Data Object
@@ -496,16 +509,19 @@
     def _encode_bin(self, in_json):
         return h2b(self._encode_hex(in_json))
 
+
 class EF_LI(TransRecEF):
-    def __init__(self, fid='6f05', sfid=None, name='EF.LI', size={2,None}, rec_len=2,
+    def __init__(self, fid='6f05', sfid=None, name='EF.LI', size={2, None}, rec_len=2,
                  desc='Language Indication'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, rec_len=rec_len)
+
     def _decode_record_bin(self, in_bin):
         if in_bin == b'\xff\xff':
             return None
         else:
             # officially this is 7-bit GSM alphabet with one padding bit in each byte
             return in_bin.decode('ascii')
+
     def _encode_record_bin(self, in_json):
         if in_json == None:
             return b'\xff\xff'
@@ -513,63 +529,75 @@
             # officially this is 7-bit GSM alphabet with one padding bit in each byte
             return in_json.encode('ascii')
 
+
 class EF_Keys(TransparentEF):
-    def __init__(self, fid='6f08', sfid=0x08, name='EF.Keys', size={33,33},
+    def __init__(self, fid='6f08', sfid=0x08, name='EF.Keys', size={33, 33},
                  desc='Ciphering and Integrity Keys'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
-        self._construct = Struct('ksi'/Int8ub, 'ck'/HexAdapter(Bytes(16)), 'ik'/HexAdapter(Bytes(16)))
+        self._construct = Struct(
+            'ksi'/Int8ub, 'ck'/HexAdapter(Bytes(16)), 'ik'/HexAdapter(Bytes(16)))
 
 # TS 31.102 Section 4.2.6
+
+
 class EF_HPPLMN(TransparentEF):
-    def __init__(self, fid='6f31', sfid=0x12, name='EF.HPPLMN', size={1,1},
+    def __init__(self, fid='6f31', sfid=0x12, name='EF.HPPLMN', size={1, 1},
                  desc='Higher Priority PLMN search period'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Int8ub
 
 # TS 31.102 Section 4.2.8
+
+
 class EF_UServiceTable(TransparentEF):
     def __init__(self, fid, sfid, name, desc, size, table):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, size=size)
         self.table = table
         # add those commands to the general commands of a TransparentEF
         self.shell_commands += [self.AddlShellCommands()]
+
     @staticmethod
-    def _bit_byte_offset_for_service(service:int) -> Tuple[int, int]:
+    def _bit_byte_offset_for_service(service: int) -> Tuple[int, int]:
         i = service - 1
         byte_offset = i//8
         bit_offset = (i % 8)
         return (byte_offset, bit_offset)
+
     def _decode_bin(self, in_bin):
         ret = {}
-        for i in range (0, len(in_bin)):
+        for i in range(0, len(in_bin)):
             byte = in_bin[i]
-            for bitno in range(0,7):
+            for bitno in range(0, 7):
                 service_nr = i * 8 + bitno + 1
                 ret[service_nr] = {
-                        'activated': True if byte & (1 << bitno) else False
+                    'activated': True if byte & (1 << bitno) else False
                 }
                 if service_nr in self.table:
                     ret[service_nr]['description'] = self.table[service_nr]
         return ret
+
     def _encode_bin(self, in_json):
         # compute the required binary size
         bin_len = 0
         for srv in in_json.keys():
             service_nr = int(srv)
-            (byte_offset, bit_offset) = EF_UServiceTable._bit_byte_offset_for_service(service_nr)
+            (byte_offset, bit_offset) = EF_UServiceTable._bit_byte_offset_for_service(
+                service_nr)
             if byte_offset >= bin_len:
                 bin_len = byte_offset+1
         # encode the actual data
         out = bytearray(b'\x00' * bin_len)
         for srv in in_json.keys():
             service_nr = int(srv)
-            (byte_offset, bit_offset) = EF_UServiceTable._bit_byte_offset_for_service(service_nr)
+            (byte_offset, bit_offset) = EF_UServiceTable._bit_byte_offset_for_service(
+                service_nr)
             if in_json[srv]['activated'] == True:
                 bit = 1
             else:
                 bit = 0
             out[byte_offset] |= (bit) << bit_offset
         return out
+
     @with_default_category('File-Specific Commands')
     class AddlShellCommands(CommandSet):
         def __init__(self):
@@ -584,14 +612,18 @@
             self._cmd.card.update_ust(int(arg), 0)
 
 # TS 31.103 Section 4.2.7 - *not* the same as DF.GSM/EF.ECC!
+
+
 class EF_ECC(LinFixedEF):
     cc_construct = Rpad(BcdAdapter(Rpad(Bytes(3))), pattern='f')
     category_construct = FlagsEnum(Byte, police=1, ambulance=2, fire_brigade=3, marine_guard=4,
                                    mountain_rescue=5, manual_ecall=6, automatic_ecall=7)
     alpha_construct = GsmStringAdapter(Rpad(GreedyBytes))
+
     def __init__(self, fid='6fb7', sfid=0x01, name='EF.ECC',
                  desc='Emergency Call Codes'):
-        super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len={4,20})
+        super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len={4, 20})
+
     def _decode_record_bin(self, in_bin):
         # mandatory parts
         code = in_bin[:3]
@@ -599,12 +631,13 @@
             return None
         svc_category = in_bin[-1:]
         ret = {'call_code': parse_construct(EF_ECC.cc_construct, code),
-               'service_category': parse_construct(EF_ECC.category_construct, svc_category) }
+               'service_category': parse_construct(EF_ECC.category_construct, svc_category)}
         # optional alpha identifier
         if len(in_bin) > 4:
             alpha_id = in_bin[3:-1]
             ret['alpha_id'] = parse_construct(EF_ECC.alpha_construct, alpha_id)
         return ret
+
     def _encode_record_bin(self, in_json):
         if in_json is None:
             return b'\xff\xff\xff\xff'
@@ -617,21 +650,23 @@
 
 # TS 31.102 Section 4.2.17
 class EF_LOCI(TransparentEF):
-    def __init__(self, fid='6f7e', sfid=0x0b, name='EF.LOCI', desc='Location information', size={11,11}):
+    def __init__(self, fid='6f7e', sfid=0x0b, name='EF.LOCI', desc='Location information', size={11, 11}):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Struct('tmsi'/HexAdapter(Bytes(4)), 'lai'/HexAdapter(Bytes(5)), 'rfu'/Int8ub,
                                  'lu_status'/Int8ub)
 # TS 31.102 Section 4.2.18
+
+
 class EF_AD(TransparentEF):
     class OP_MODE(enum.IntEnum):
-        normal                                  = 0x00
-        type_approval                           = 0x80
-        normal_and_specific_facilities          = 0x01
-        type_approval_and_specific_facilities   = 0x81
-        maintenance_off_line                    = 0x02
-        cell_test                               = 0x04
+        normal = 0x00
+        type_approval = 0x80
+        normal_and_specific_facilities = 0x01
+        type_approval_and_specific_facilities = 0x81
+        maintenance_off_line = 0x02
+        cell_test = 0x04
 
-    def __init__(self, fid='6fad', sfid=0x03, name='EF.AD', desc='Administrative Data', size={4,6}):
+    def __init__(self, fid='6fad', sfid=0x03, name='EF.AD', desc='Administrative Data', size={4, 6}):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = BitStruct(
             # Byte 1
@@ -645,15 +680,19 @@
         )
 
 # TS 31.102 Section 4.2.23
+
+
 class EF_PSLOCI(TransparentEF):
-    def __init__(self, fid='6f73', sfid=0x0c, name='EF.PSLOCI', desc='PS Location information', size={14,14}):
+    def __init__(self, fid='6f73', sfid=0x0c, name='EF.PSLOCI', desc='PS Location information', size={14, 14}):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Struct('ptmsi'/HexAdapter(Bytes(4)), 'ptmsi_sig'/HexAdapter(Bytes(3)),
                                  'rai'/HexAdapter(Bytes(6)), 'rau_status'/Int8ub)
 
 # TS 31.102 Section 4.2.33
+
+
 class EF_ICI(CyclicEF):
-    def __init__(self, fid='6f80', sfid=0x14, name='EF.ICI', rec_len={28,48},
+    def __init__(self, fid='6f80', sfid=0x14, name='EF.ICI', rec_len={28, 48},
                  desc='Incoming Call Information'):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._construct = Struct('alpha_id'/Bytes(this._.total_len-28),
@@ -668,8 +707,10 @@
                                  'link_to_phonebook'/Bytes(3))
 
 # TS 31.102 Section 4.2.34
+
+
 class EF_OCI(CyclicEF):
-    def __init__(self, fid='6f81', sfid=0x15, name='EF.OCI', rec_len={27,47},
+    def __init__(self, fid='6f81', sfid=0x15, name='EF.OCI', rec_len={27, 47},
                  desc='Outgoing Call Information'):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._construct = Struct('alpha_id'/Bytes(this._.total_len-27),
@@ -683,191 +724,254 @@
                                  'link_to_phonebook'/Bytes(3))
 
 # TS 31.102 Section 4.2.35
+
+
 class EF_ICT(CyclicEF):
-    def __init__(self, fid='6f82', sfid=None, name='EF.ICT', rec_len={3,3},
+    def __init__(self, fid='6f82', sfid=None, name='EF.ICT', rec_len={3, 3},
                  desc='Incoming Call Timer'):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._construct = Struct('accumulated_call_timer'/Int24ub)
 
 # TS 31.102 Section 4.2.38
+
+
 class EF_CCP2(LinFixedEF):
     def __init__(self, fid='6f4f', sfid=0x16, name='EF.CCP2', desc='Capability Configuration Parameters 2'):
-        super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={15,None})
+        super().__init__(fid=fid, sfid=sfid,
+                         name=name, desc=desc, rec_len={15, None})
 
 # TS 31.102 Section 4.2.48
+
+
 class EF_ACL(TransparentEF):
-    def __init__(self, fid='6f57', sfid=None, name='EF.ACL', size={32,None},
+    def __init__(self, fid='6f57', sfid=None, name='EF.ACL', size={32, None},
                  desc='Access Point Name Control List'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Struct('num_of_apns'/Int8ub, 'tlvs'/GreedyBytes)
 
 # TS 31.102 Section 4.2.51
+
+
 class EF_START_HFN(TransparentEF):
-    def __init__(self, fid='6f5b', sfid=0x0f, name='EF.START-HFN', size={6,6},
+    def __init__(self, fid='6f5b', sfid=0x0f, name='EF.START-HFN', size={6, 6},
                  desc='Initialisation values for Hyperframe number'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Struct('start_cs'/Int24ub, 'start_ps'/Int24ub)
 
 # TS 31.102 Section 4.2.52
+
+
 class EF_THRESHOLD(TransparentEF):
-    def __init__(self, fid='6f5c', sfid=0x10, name='EF.THRESHOLD', size={3,3},
+    def __init__(self, fid='6f5c', sfid=0x10, name='EF.THRESHOLD', size={3, 3},
                  desc='Maximum value of START'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Struct('max_start'/Int24ub)
 
 # TS 31.102 Section 4.2.77
+
+
 class EF_VGCSCA(TransRecEF):
-    def __init__(self, fid='6fd4', sfid=None, name='EF.VGCSCA', size={2,100}, rec_len=2,
+    def __init__(self, fid='6fd4', sfid=None, name='EF.VGCSCA', size={2, 100}, rec_len=2,
                  desc='Voice Group Call Service Ciphering Algorithm'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, rec_len=rec_len)
         self._construct = Struct('alg_v_ki_1'/Int8ub, 'alg_v_ki_2'/Int8ub)
 
 # TS 31.102 Section 4.2.79
+
+
 class EF_GBABP(TransparentEF):
-    def __init__(self, fid='6fd6', sfid=None, name='EF.GBABP', size={3,50},
+    def __init__(self, fid='6fd6', sfid=None, name='EF.GBABP', size={3, 50},
                  desc='GBA Bootstrapping parameters'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = Struct('rand'/LV, 'b_tid'/LV, 'key_lifetime'/LV)
 
 # TS 31.102 Section 4.2.80
+
+
 class EF_MSK(LinFixedEF):
     def __init__(self, fid='6fd7', sfid=None, name='EF.MSK', desc='MBMS Service Key List'):
-        super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={20,None})
+        super().__init__(fid=fid, sfid=sfid,
+                         name=name, desc=desc, rec_len={20, None})
         msk_ts_constr = Struct('msk_id'/Int32ub, 'timestamp_counter'/Int32ub)
         self._construct = Struct('key_domain_id'/Bytes(3),
                                  'num_msk_id'/Int8ub,
                                  'msk_ids'/msk_ts_constr[this.num_msk_id])
 # TS 31.102 Section 4.2.81
+
+
 class EF_MUK(LinFixedEF):
     class MUK_Idr(BER_TLV_IE, tag=0x80):
         _construct = HexAdapter(GreedyBytes)
+
     class MUK_Idi(BER_TLV_IE, tag=0x82):
         _construct = HexAdapter(GreedyBytes)
+
     class MUK_ID(BER_TLV_IE, tag=0xA0, nested=[MUK_Idr, MUK_Idi]):
         pass
+
     class TimeStampCounter(BER_TLV_IE, tag=0x81):
         pass
+
     class EF_MUK_Collection(TLV_IE_Collection, nested=[MUK_ID, TimeStampCounter]):
         pass
+
     def __init__(self, fid='6fd8', sfid=None, name='EF.MUK', desc='MBMS User Key'):
-        super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={None,None})
+        super().__init__(fid=fid, sfid=sfid, name=name,
+                         desc=desc, rec_len={None, None})
         self._tlv = EF_MUK.EF_MUK_Collection
 
 # TS 31.102 Section 4.2.83
+
+
 class EF_GBANL(LinFixedEF):
     class NAF_ID(BER_TLV_IE, tag=0x80):
         _construct = HexAdapter(GreedyBytes)
+
     class B_TID(BER_TLV_IE, tag=0x81):
         _construct = HexAdapter(GreedyBytes)
+
     class EF_GBANL_Collection(BER_TLV_IE, nested=[NAF_ID, B_TID]):
         pass
+
     def __init__(self, fid='6fda', sfid=None, name='EF.GBANL', desc='GBA NAF List'):
-        super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={None,None})
+        super().__init__(fid=fid, sfid=sfid, name=name,
+                         desc=desc, rec_len={None, None})
         self._tlv = EF_GBANL.EF_GBANL_Collection
 
 # TS 31.102 Section 4.2.85
+
+
 class EF_EHPLMNPI(TransparentEF):
-    def __init__(self, fid='6fdb', sfid=None, name='EF.EHPLMNPI', size={1,1},
+    def __init__(self, fid='6fdb', sfid=None, name='EF.EHPLMNPI', size={1, 1},
                  desc='Equivalent HPLMN Presentation Indication'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
-        self._construct = Struct('presentation_ind'/
+        self._construct = Struct('presentation_ind' /
                                  Enum(Byte, no_preference=0, display_highest_prio_only=1, display_all=2))
 
 # TS 31.102 Section 4.2.87
+
+
 class EF_NAFKCA(LinFixedEF):
     class NAF_KeyCentreAddress(BER_TLV_IE, tag=0x80):
         _construct = HexAdapter(GreedyBytes)
     def __init__(self, fid='6fdd', sfid=None, name='EF.NAFKCA', rec_len={None, None},
-            desc='NAF Key Centre Address'):
+                 desc='NAF Key Centre Address'):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._tlv = EF_NAFKCA.NAF_KeyCentreAddress
 
 # TS 31.102 Section 4.2.90
+
+
 class EF_NCP_IP(LinFixedEF):
     class DataDestAddrRange(TLV_IE, tag=0x83):
         _construct = Struct('type_of_address'/Enum(Byte, IPv4=0x21, IPv6=0x56),
                             'prefix_length'/Int8ub,
                             'prefix'/HexAdapter(GreedyBytes))
+
     class AccessPointName(TLV_IE, tag=0x80):
         # coded as per TS 23.003
         _construct = HexAdapter(GreedyBytes)
+
     class Login(TLV_IE, tag=0x81):
         # as per SMS DCS TS 23.038
         _construct = GsmStringAdapter(GreedyBytes)
+
     class Password(TLV_IE, tag=0x82):
         # as per SMS DCS TS 23.038
         _construct = GsmStringAdapter(GreedyBytes)
+
     class BearerDescription(TLV_IE, tag=0x84):
         # Bearer descriptionTLV DO as per TS 31.111
         pass
+
     class EF_NCP_IP_Collection(TLV_IE_Collection,
                                nested=[AccessPointName, Login, Password, BearerDescription]):
         pass
     def __init__(self, fid='6fe2', sfid=None, name='EF.NCP-IP', rec_len={None, None},
-            desc='Network Connectivity Parameters for USIM IP connections'):
+                 desc='Network Connectivity Parameters for USIM IP connections'):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._tlv = EF_NCP_IP.EF_NCP_IP_Collection
 
 # TS 31.102 Section 4.2.91
+
+
 class EF_EPSLOCI(TransparentEF):
-    def __init__(self, fid='6fe3', sfid=0x1e, name='EF.EPSLOCI', size={18,18},
+    def __init__(self, fid='6fe3', sfid=0x1e, name='EF.EPSLOCI', size={18, 18},
                  desc='EPS Location Information'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
-        upd_status_constr = Enum(Byte, updated=0, not_updated=1, roaming_not_allowed=2)
+        upd_status_constr = Enum(
+            Byte, updated=0, not_updated=1, roaming_not_allowed=2)
         self._construct = Struct('guti'/Bytes(12), 'last_visited_registered_tai'/Bytes(5),
                                  'eps_update_status'/upd_status_constr)
 
 # TS 31.102 Section 4.2.92
+
+
 class EF_EPSNSC(LinFixedEF):
-    class KSI_ASME(BER_TLV_IE, tag= 0x80):
+    class KSI_ASME(BER_TLV_IE, tag=0x80):
         _construct = Int8ub
-    class K_ASME(BER_TLV_IE, tag= 0x81):
+
+    class K_ASME(BER_TLV_IE, tag=0x81):
         _construct = HexAdapter(GreedyBytes)
+
     class UplinkNASCount(BER_TLV_IE, tag=0x82):
         _construct = Int32ub
+
     class DownlinkNASCount(BER_TLV_IE, tag=0x83):
         _construct = Int32ub
+
     class IDofNASAlgorithms(BER_TLV_IE, tag=0x84):
         _construct = HexAdapter(GreedyBytes)
+
     class EPS_NAS_Security_Context(BER_TLV_IE, tag=0xa0,
-                               nested=[KSI_ASME, K_ASME, UplinkNASCount, DownlinkNASCount,
-                                   IDofNASAlgorithms]):
+                                   nested=[KSI_ASME, K_ASME, UplinkNASCount, DownlinkNASCount,
+                                           IDofNASAlgorithms]):
         pass
-    def __init__(self,fid='6fe4', sfid=0x18, name='EF.EPSNSC', rec_len={54,128},
-            desc='EPS NAS Security Context'):
+    def __init__(self, fid='6fe4', sfid=0x18, name='EF.EPSNSC', rec_len={54, 128},
+                 desc='EPS NAS Security Context'):
         super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._tlv = EF_EPSNSC.EPS_NAS_Security_Context
 
 # TS 31.102 Section 4.2.96
+
+
 class EF_PWS(TransparentEF):
-    def __init__(self, fid='6fec', sfid=None, name='EF.PWS', desc='Public Warning System', size={1,1}):
+    def __init__(self, fid='6fec', sfid=None, name='EF.PWS', desc='Public Warning System', size={1, 1}):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
-        pws_config = FlagsEnum(Byte, ignore_pws_in_hplmn_and_equivalent=1, ignore_pws_in_vplmn=2)
+        pws_config = FlagsEnum(
+            Byte, ignore_pws_in_hplmn_and_equivalent=1, ignore_pws_in_vplmn=2)
         self._construct = Struct('pws_configuration'/pws_config)
 
 # TS 31.102 Section 4.2.101
+
+
 class EF_IPS(CyclicEF):
-    def __init__(self, fid='6ff1', sfid=None, name='EF.IPS', rec_len={4,4},
+    def __init__(self, fid='6ff1', sfid=None, name='EF.IPS', rec_len={4, 4},
                  desc='IMEI(SV) Pairing Status'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=rec_len)
         self._construct = Struct('status'/PaddedString(2, 'ascii'),
                                  'link_to_ef_ipd'/Int8ub, 'rfu'/Byte)
 
 # TS 31.102 Section 4.2.103
+
+
 class EF_ePDGId(TransparentEF):
     class ePDGId(BER_TLV_IE, tag=0x80, nested=[]):
         _construct = Struct('type_of_ePDG_address'/Enum(Byte, FQDN=0, IPv4=1, IPv6=2),
                             'ePDG_address'/Switch(this.type_of_address,
-                                { 'FQDN': GreedyString("utf8"),
-                                  'IPv4': HexAdapter(GreedyBytes),
-                                  'IPv6': HexAdapter(GreedyBytes) }))
+                                                  {'FQDN': GreedyString("utf8"),
+                                                   'IPv4': HexAdapter(GreedyBytes),
+                                                   'IPv6': HexAdapter(GreedyBytes)}))
+
     def __init__(self, fid='6ff3', sfid=None, name='EF.eDPDGId', desc='Home ePDG Identifier'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc)
         self._tlv = EF_ePDGId.ePDGId
 
 # TS 31.102 Section 4.2.106
+
+
 class EF_FromPreferred(TransparentEF):
-    def __init__(self, fid='6ff7', sfid=None, name='EF.FromPreferred', size={1,1},
+    def __init__(self, fid='6ff7', sfid=None, name='EF.FromPreferred', size={1, 1},
                  desc='From Preferred'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self._construct = BitStruct('rfu'/BitsRFU(7), 'from_preferred'/Bit)
@@ -877,76 +981,104 @@
 ######################################################################
 
 # TS 31.102 Section 4.4.11.2
+
+
 class EF_5GS3GPPLOCI(TransparentEF):
-    def __init__(self, fid='4f01', sfid=0x01, name='EF.5GS3GPPLOCI', size={20,20},
+    def __init__(self, fid='4f01', sfid=0x01, name='EF.5GS3GPPLOCI', size={20, 20},
                  desc='5S 3GP location information'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
-        upd_status_constr = Enum(Byte, updated=0, not_updated=1, roaming_not_allowed=2)
+        upd_status_constr = Enum(
+            Byte, updated=0, not_updated=1, roaming_not_allowed=2)
         self._construct = Struct('5g_guti'/Bytes(13), 'last_visited_registered_tai_in_5gs'/Bytes(6),
                                  '5gs_update_status'/upd_status_constr)
 
 # TS 31.102 Section 4.4.11.7
+
+
 class EF_UAC_AIC(TransparentEF):
-    def __init__(self, fid='4f06', sfid=0x06, name='EF.UAC_AIC', size={4,4},
+    def __init__(self, fid='4f06', sfid=0x06, name='EF.UAC_AIC', size={4, 4},
                  desc='UAC Access Identities Configuration'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         cfg_constr = FlagsEnum(Byte, multimedia_priority_service=1,
-                                     mission_critical_service=2)
+                               mission_critical_service=2)
         self._construct = Struct('uac_access_id_config'/cfg_constr)
 
 # TS 31.102 Section 4.4.11.9
+
+
 class EF_OPL5G(LinFixedEF):
     def __init__(self, fid='6f08', sfid=0x08, name='EF.OPL5G', desc='5GS Operator PLMN List'):
-        super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, rec_len={10,None})
+        super().__init__(fid=fid, sfid=sfid,
+                         name=name, desc=desc, rec_len={10, None})
         self._construct = Struct('tai'/Bytes(9), 'pnn_record_id'/Int8ub)
 
 # TS 31.102 Section 4.4.11.10
+
+
 class EF_SUPI_NAI(TransparentEF):
     class NetworkSpecificIdentifier(TLV_IE, tag=0x80):
         # RFC 7542 encoded as UTF-8 string
         _construct = GreedyString("utf8")
+
     class GlobalLineIdentifier(TLV_IE, tag=0x81):
         # TS 23.003 clause 28.16.2
         pass
+
     class GlobalCableIdentifier(TLV_IE, tag=0x82):
         # TS 23.003 clause 28.15.2
         pass
+
     class NAI_TLV_Collection(TLV_IE_Collection,
-            nested=[NetworkSpecificIdentifier, GlobalLineIdentifier, GlobalCableIdentifier]):
+                             nested=[NetworkSpecificIdentifier, GlobalLineIdentifier, GlobalCableIdentifier]):
         pass
     def __init__(self, fid='4f09', sfid=0x09, name='EF.SUPI_NAI',
-            desc='SUPI as Network Access Identifier'):
+                 desc='SUPI as Network Access Identifier'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc)
         self._tlv = EF_SUPI_NAI.NAI_TLV_Collection
 
+
 class EF_TN3GPPSNN(TransparentEF):
     class ServingNetworkName(BER_TLV_IE, tag=0x80):
         _construct = GreedyString("utf8")
     def __init__(self, fid='4f0c', sfid=0x0c, name='EF.TN3GPPSNN',
-            desc='Trusted non-3GPP Serving network names list'):
+                 desc='Trusted non-3GPP Serving network names list'):
         super().__init__(fid, sfid=sfid, name=name, desc=desc)
         self._tlv = EF_TN3GPPSNN.ServingNetworkName
 
 # TS 31.102 Section 4.4.5
+
+
 class DF_WLAN(CardDF):
     def __init__(self, fid='5f40', name='DF.WLAN', desc='Files for WLAN purpose'):
         super().__init__(fid=fid, name=name, desc=desc)
         files = [
             TransparentEF('4f41', 0x01, 'EF.Pseudo', 'Pseudonym'),
-            TransparentEF('4f42', 0x02, 'EF.UPLMNWLAN', 'User controlled PLMN selector for I-WLAN Access'),
-            TransparentEF('4f43', 0x03, 'EF.OPLMNWLAN', 'Operator controlled PLMN selector for I-WLAN Access'),
-            LinFixedEF('4f44', 0x04, 'EF.UWSIDL', 'User controlled WLAN Specific Identifier List'),
-            LinFixedEF('4f45', 0x05, 'EF.OWSIDL', 'Operator controlled WLAN Specific Identifier List'),
-            TransparentEF('4f46', 0x06, 'EF.WRI', 'WLAN Reauthentication Identity'),
-            LinFixedEF('4f47', 0x07, 'EF.HWSIDL', 'Home I-WLAN Specific Identifier List'),
-            TransparentEF('4f48', 0x08, 'EF.WEHPLMNPI', 'I-WLAN Equivalent HPLMN Presentation Indication'),
-            TransparentEF('4f49', 0x09, 'EF.WHPI', 'I-WLAN HPLMN Priority Indication'),
-            TransparentEF('4f4a', 0x0a, 'EF.WLRPLMN', 'I-WLAN Last Registered PLMN'),
-            TransparentEF('4f4b', 0x0b, 'EF.HPLMNDAI', 'HPLMN Direct Access Indicator'),
-            ]
+            TransparentEF('4f42', 0x02, 'EF.UPLMNWLAN',
+                          'User controlled PLMN selector for I-WLAN Access'),
+            TransparentEF('4f43', 0x03, 'EF.OPLMNWLAN',
+                          'Operator controlled PLMN selector for I-WLAN Access'),
+            LinFixedEF('4f44', 0x04, 'EF.UWSIDL',
+                       'User controlled WLAN Specific Identifier List'),
+            LinFixedEF('4f45', 0x05, 'EF.OWSIDL',
+                       'Operator controlled WLAN Specific Identifier List'),
+            TransparentEF('4f46', 0x06, 'EF.WRI',
+                          'WLAN Reauthentication Identity'),
+            LinFixedEF('4f47', 0x07, 'EF.HWSIDL',
+                       'Home I-WLAN Specific Identifier List'),
+            TransparentEF('4f48', 0x08, 'EF.WEHPLMNPI',
+                          'I-WLAN Equivalent HPLMN Presentation Indication'),
+            TransparentEF('4f49', 0x09, 'EF.WHPI',
+                          'I-WLAN HPLMN Priority Indication'),
+            TransparentEF('4f4a', 0x0a, 'EF.WLRPLMN',
+                          'I-WLAN Last Registered PLMN'),
+            TransparentEF('4f4b', 0x0b, 'EF.HPLMNDAI',
+                          'HPLMN Direct Access Indicator'),
+        ]
         self.add_files(files)
 
 # TS 31.102 Section 4.4.6
+
+
 class DF_HNB(CardDF):
     def __init__(self, fid='5f50', name='DF.HNB', desc='Files for HomeNodeB purpose'):
         super().__init__(fid=fid, name=name, desc=desc)
@@ -957,51 +1089,69 @@
             LinFixedEF('4f04', 0x04, 'EF.OCSGL', 'Operator CSG Lists'),
             LinFixedEF('4f05', 0x05, 'EF.OCSGT', 'Operator CSG Type'),
             LinFixedEF('4f06', 0x06, 'EF.OHNBN', 'Operator Home NodeB Name'),
-            ]
+        ]
         self.add_files(files)
 
 # TS 31.102 Section 4.4.8
+
+
 class DF_ProSe(CardDF):
     def __init__(self, fid='5f90', name='DF.ProSe', desc='Files for ProSe purpose'):
         super().__init__(fid=fid, name=name, desc=desc)
         files = [
-            LinFixedEF('4f01', 0x01, 'EF.PROSE_MON', 'ProSe Monitoring Parameters'),
-            LinFixedEF('4f02', 0x02, 'EF.PROSE_ANN', 'ProSe Announcing Parameters'),
+            LinFixedEF('4f01', 0x01, 'EF.PROSE_MON',
+                       'ProSe Monitoring Parameters'),
+            LinFixedEF('4f02', 0x02, 'EF.PROSE_ANN',
+                       'ProSe Announcing Parameters'),
             LinFixedEF('4f03', 0x03, 'EF.PROSEFUNC', 'HPLMN ProSe Function'),
-            TransparentEF('4f04', 0x04, 'EF.PROSE_RADIO_COM', 'ProSe Direct Communication Radio Parameters'),
-            TransparentEF('4f05', 0x05, 'EF.PROSE_RADIO_MON', 'ProSe Direct Discovery Monitoring Radio Parameters'),
-            TransparentEF('4f06', 0x06, 'EF.PROSE_RADIO_ANN', 'ProSe Direct Discovery Announcing Radio Parameters'),
-            LinFixedEF('4f07', 0x07, 'EF.PROSE_POLICY', 'ProSe Policy Parameters'),
+            TransparentEF('4f04', 0x04, 'EF.PROSE_RADIO_COM',
+                          'ProSe Direct Communication Radio Parameters'),
+            TransparentEF('4f05', 0x05, 'EF.PROSE_RADIO_MON',
+                          'ProSe Direct Discovery Monitoring Radio Parameters'),
+            TransparentEF('4f06', 0x06, 'EF.PROSE_RADIO_ANN',
+                          'ProSe Direct Discovery Announcing Radio Parameters'),
+            LinFixedEF('4f07', 0x07, 'EF.PROSE_POLICY',
+                       'ProSe Policy Parameters'),
             LinFixedEF('4f08', 0x08, 'EF.PROSE_PLMN', 'ProSe PLMN Parameters'),
             TransparentEF('4f09', 0x09, 'EF.PROSE_GC', 'ProSe Group Counter'),
             TransparentEF('4f10', 0x10, 'EF.PST', 'ProSe Service Table'),
-            TransparentEF('4f11', 0x11, 'EF.UIRC', 'ProSe UsageInformationReportingConfiguration'),
-            LinFixedEF('4f12', 0x12, 'EF.PROSE_GM_DISCOVERY', 'ProSe Group Member Discovery Parameters'),
-            LinFixedEF('4f13', 0x13, 'EF.PROSE_RELAY', 'ProSe Relay Parameters'),
-            TransparentEF('4f14', 0x14, 'EF.PROSE_RELAY_DISCOVERY', 'ProSe Relay Discovery Parameters'),
-            ]
+            TransparentEF('4f11', 0x11, 'EF.UIRC',
+                          'ProSe UsageInformationReportingConfiguration'),
+            LinFixedEF('4f12', 0x12, 'EF.PROSE_GM_DISCOVERY',
+                       'ProSe Group Member Discovery Parameters'),
+            LinFixedEF('4f13', 0x13, 'EF.PROSE_RELAY',
+                       'ProSe Relay Parameters'),
+            TransparentEF('4f14', 0x14, 'EF.PROSE_RELAY_DISCOVERY',
+                          'ProSe Relay Discovery Parameters'),
+        ]
         self.add_files(files)
 
+
 class DF_USIM_5GS(CardDF):
     def __init__(self, fid='5FC0', name='DF.5GS', desc='5GS related files'):
         super().__init__(fid=fid, name=name, desc=desc)
         files = [
-          # I'm looking at 31.102 R16.6
-          EF_5GS3GPPLOCI(),
-          EF_5GS3GPPLOCI('4f02', 0x02, 'EF.5GSN3GPPLOCI', '5GS non-3GPP location information'),
-          EF_5GS3GPPNSC(),
-          EF_5GS3GPPNSC('4f04', 0x04, 'EF.5GSN3GPPNSC', '5GS non-3GPP Access NAS Security Context'),
-          EF_5GAUTHKEYS(),
-          EF_UAC_AIC(),
-          EF_SUCI_Calc_Info(),
-          EF_OPL5G(),
-          EF_SUPI_NAI(),
-          TransparentEF('4F0A', 0x0a, 'EF.Routing_Indicator', 'Routing Indicator', size={4,4}),
-          TransparentEF('4F0B', 0x0b, 'EF.URSP', 'UE Route Selector Policies per PLMN'),
-          EF_TN3GPPSNN(),
+            # I'm looking at 31.102 R16.6
+            EF_5GS3GPPLOCI(),
+            EF_5GS3GPPLOCI('4f02', 0x02, 'EF.5GSN3GPPLOCI',
+                           '5GS non-3GPP location information'),
+            EF_5GS3GPPNSC(),
+            EF_5GS3GPPNSC('4f04', 0x04, 'EF.5GSN3GPPNSC',
+                          '5GS non-3GPP Access NAS Security Context'),
+            EF_5GAUTHKEYS(),
+            EF_UAC_AIC(),
+            EF_SUCI_Calc_Info(),
+            EF_OPL5G(),
+            EF_SUPI_NAI(),
+            TransparentEF('4F0A', 0x0a, 'EF.Routing_Indicator',
+                          'Routing Indicator', size={4, 4}),
+            TransparentEF('4F0B', 0x0b, 'EF.URSP',
+                          'UE Route Selector Policies per PLMN'),
+            EF_TN3GPPSNN(),
         ]
         self.add_files(files)
 
+
 class ADF_USIM(CardADF):
     def __init__(self, aid='a0000000871002', name='ADF.USIM', fid=None, sfid=None,
                  desc='USIM Application'):
@@ -1010,113 +1160,130 @@
         self.shell_commands += [self.AddlShellCommands()]
 
         files = [
-          EF_LI(sfid=0x02),
-          EF_IMSI(sfid=0x07),
-          EF_Keys(),
-          EF_Keys('6f09', 0x09, 'EF.KeysPS', desc='Ciphering and Integrity Keys for PS domain'),
-          EF_xPLMNwAcT('6f60', 0x0a, 'EF.PLMNwAcT',
-                       'User controlled PLMN Selector with Access Technology'),
-          EF_HPPLMN(),
-          EF_ACMmax(),
-          EF_UServiceTable('6f38', 0x04, 'EF.UST', 'USIM Service Table', size={1,17}, table=EF_UST_map),
-          CyclicEF('6f39', None, 'EF.ACM', 'Accumulated call meter', rec_len={3,3}),
-          TransparentEF('6f3e', None, 'EF.GID1', 'Group Identifier Level 1'),
-          TransparentEF('6f3f', None, 'EF.GID2', 'Group Identifier Level 2'),
-          EF_SPN(),
-          TransparentEF('6f41', None, 'EF.PUCT', 'Price per unit and currency table', size={5,5}),
-          EF_CBMI(),
-          EF_ACC(sfid=0x06),
-          EF_PLMNsel('6f7b', 0x0d, 'EF.FPLMN', 'Forbidden PLMNs', size={12,None}),
-          EF_LOCI(),
-          EF_AD(),
-          EF_CBMID(sfid=0x0e),
-          EF_ECC(),
-          EF_CBMIR(),
-          EF_PSLOCI(),
-          EF_ADN('6f3b', None, 'EF.FDN', 'Fixed Dialling Numbers'),
-          EF_SMS('6f3c', None),
-          EF_MSISDN(),
-          EF_SMSP(),
-          EF_SMSS(),
-          EF_ADN('6f49', None, 'EF.SDN', 'Service Dialling Numbers'),
-          EF_EXT('6f4b', None, 'EF.EXT2', 'Extension2 (FDN)'),
-          EF_EXT('6f4c', None, 'EF.EXT3', 'Extension2 (SDN)'),
-          EF_SMSR(),
-          EF_ICI(),
-          EF_OCI(),
-          EF_ICT(),
-          EF_ICT('6f83', None, 'EF.OCT', 'Outgoing Call Timer'),
-          EF_EXT('6f4e', None, 'EF.EXT5', 'Extension5 (ICI/OCI/MSISDN)'),
-          EF_CCP2(),
-          EF_eMLPP(),
-          EF_AAeM(),
-          # EF_Hiddenkey
-          EF_ADN('6f4d', None, 'EF.BDN', 'Barred Dialling Numbers'),
-          EF_EXT('6f55', None, 'EF.EXT4', 'Extension4 (BDN/SSC)'),
-          EF_CMI(),
-          EF_UServiceTable('6f56', 0x05, 'EF.EST', 'Enabled Services Table', size={1,None}, table=EF_EST_map),
-          EF_ACL(),
-          EF_DCK(),
-          EF_CNL(),
-          EF_START_HFN(),
-          EF_THRESHOLD(),
-          EF_xPLMNwAcT('6f61', 0x11, 'EF.OPLMNwAcT',
-                       'User controlled PLMN Selector with Access Technology'),
-          EF_ARR('6f06', 0x17),
-          TransparentEF('6fc4', None, 'EF.NETPAR', 'Network Parameters'),
-          EF_PNN('6fc5', 0x19),
-          EF_OPL(),
-          EF_ADN('6fc7', None, 'EF.MBDN', 'Mailbox Dialling Numbers'),
-          EF_MBI(),
-          EF_MWIS(),
-          EF_ADN('6fcb', None, 'EF.CFIS', 'Call Forwarding Indication Status'),
-          EF_EXT('6fcc', None, 'EF.EXT7', 'Extension7 (CFIS)'),
-          TransparentEF('6fcd', None, 'EF.SPDI', 'Service Provider Display Information'),
-          EF_MMSN(),
-          EF_EXT('6fcf', None, 'EF.EXT8', 'Extension8 (MMSN)'),
-          EF_MMSICP(),
-          EF_MMSUP(),
-          EF_MMSUCP(),
-          EF_NIA(),
-          EF_VGCS(),
-          EF_VGCSS(),
-          EF_VGCS('6fb3', None, 'EF.VBS', 'Voice Broadcast Service'),
-          EF_VGCSS('6fb4', None, 'EF.VBSS', 'Voice Broadcast Service Status'),
-          EF_VGCSCA(),
-          EF_VGCSCA('6fd5', None, 'EF.VBCSCA', 'Voice Broadcast Service Ciphering Algorithm'),
-          EF_GBABP(),
-          EF_MSK(),
-          EF_MUK(),
-          EF_GBANL(),
-          EF_PLMNsel('6fd9', 0x1d, 'EF.EHPLMN', 'Equivalent HPLMN', size={12,None}),
-          EF_EHPLMNPI(),
-          EF_NAFKCA(),
-          TransparentEF('6fde', None, 'EF.SPNI', 'Service Provider Name Icon'),
-          LinFixedEF('6fdf', None, 'EF.PNNI', 'PLMN Network Name Icon'),
-          EF_NCP_IP(),
-          EF_EPSLOCI('6fe3', 0x1e, 'EF.EPSLOCI', 'EPS location information'),
-          EF_EPSNSC(),
-          TransparentEF('6fe6', None, 'EF.UFC', 'USAT Facility Control', size={1,16}),
-          TransparentEF('6fe8', None, 'EF.NASCONFIG', 'Non Access Stratum Configuration'),
-          # UICC IARI (only in cards that have no ISIM)
-          EF_PWS(),
-          LinFixedEF('6fed', None, 'EF.FDNURI', 'Fixed Dialling Numbers URI'),
-          LinFixedEF('6fee', None, 'EF.BDNURI', 'Barred Dialling Numbers URI'),
-          LinFixedEF('6fef', None, 'EF.SDNURI', 'Service Dialling Numbers URI'),
-          EF_IPS(),
-          EF_ePDGId(),
-          # FIXME: from EF_ePDGSelection onwards
-          EF_FromPreferred(),
-          # FIXME: DF_SoLSA
-          # FIXME: DF_PHONEBOOK
-          # FIXME: DF_GSM_ACCESS
-          DF_WLAN(),
-          DF_HNB(),
-          DF_ProSe(),
-          # FIXME: DF_ACDC
-          # FIXME: DF_TV
-          DF_USIM_5GS(),
-          ]
+            EF_LI(sfid=0x02),
+            EF_IMSI(sfid=0x07),
+            EF_Keys(),
+            EF_Keys('6f09', 0x09, 'EF.KeysPS',
+                    desc='Ciphering and Integrity Keys for PS domain'),
+            EF_xPLMNwAcT('6f60', 0x0a, 'EF.PLMNwAcT',
+                         'User controlled PLMN Selector with Access Technology'),
+            EF_HPPLMN(),
+            EF_ACMmax(),
+            EF_UServiceTable('6f38', 0x04, 'EF.UST', 'USIM Service Table', size={
+                             1, 17}, table=EF_UST_map),
+            CyclicEF('6f39', None, 'EF.ACM',
+                     'Accumulated call meter', rec_len={3, 3}),
+            TransparentEF('6f3e', None, 'EF.GID1', 'Group Identifier Level 1'),
+            TransparentEF('6f3f', None, 'EF.GID2', 'Group Identifier Level 2'),
+            EF_SPN(),
+            TransparentEF('6f41', None, 'EF.PUCT',
+                          'Price per unit and currency table', size={5, 5}),
+            EF_CBMI(),
+            EF_ACC(sfid=0x06),
+            EF_PLMNsel('6f7b', 0x0d, 'EF.FPLMN',
+                       'Forbidden PLMNs', size={12, None}),
+            EF_LOCI(),
+            EF_AD(),
+            EF_CBMID(sfid=0x0e),
+            EF_ECC(),
+            EF_CBMIR(),
+            EF_PSLOCI(),
+            EF_ADN('6f3b', None, 'EF.FDN', 'Fixed Dialling Numbers'),
+            EF_SMS('6f3c', None),
+            EF_MSISDN(),
+            EF_SMSP(),
+            EF_SMSS(),
+            EF_ADN('6f49', None, 'EF.SDN', 'Service Dialling Numbers'),
+            EF_EXT('6f4b', None, 'EF.EXT2', 'Extension2 (FDN)'),
+            EF_EXT('6f4c', None, 'EF.EXT3', 'Extension2 (SDN)'),
+            EF_SMSR(),
+            EF_ICI(),
+            EF_OCI(),
+            EF_ICT(),
+            EF_ICT('6f83', None, 'EF.OCT', 'Outgoing Call Timer'),
+            EF_EXT('6f4e', None, 'EF.EXT5', 'Extension5 (ICI/OCI/MSISDN)'),
+            EF_CCP2(),
+            EF_eMLPP(),
+            EF_AAeM(),
+            # EF_Hiddenkey
+            EF_ADN('6f4d', None, 'EF.BDN', 'Barred Dialling Numbers'),
+            EF_EXT('6f55', None, 'EF.EXT4', 'Extension4 (BDN/SSC)'),
+            EF_CMI(),
+            EF_UServiceTable('6f56', 0x05, 'EF.EST', 'Enabled Services Table', size={
+                1, None}, table=EF_EST_map),
+            EF_ACL(),
+            EF_DCK(),
+            EF_CNL(),
+            EF_START_HFN(),
+            EF_THRESHOLD(),
+            EF_xPLMNwAcT('6f61', 0x11, 'EF.OPLMNwAcT',
+                         'User controlled PLMN Selector with Access Technology'),
+            EF_ARR('6f06', 0x17),
+            TransparentEF('6fc4', None, 'EF.NETPAR', 'Network Parameters'),
+            EF_PNN('6fc5', 0x19),
+            EF_OPL(),
+            EF_ADN('6fc7', None, 'EF.MBDN', 'Mailbox Dialling Numbers'),
+            EF_MBI(),
+            EF_MWIS(),
+            EF_ADN('6fcb', None, 'EF.CFIS',
+                   'Call Forwarding Indication Status'),
+            EF_EXT('6fcc', None, 'EF.EXT7', 'Extension7 (CFIS)'),
+            TransparentEF('6fcd', None, 'EF.SPDI',
+                          'Service Provider Display Information'),
+            EF_MMSN(),
+            EF_EXT('6fcf', None, 'EF.EXT8', 'Extension8 (MMSN)'),
+            EF_MMSICP(),
+            EF_MMSUP(),
+            EF_MMSUCP(),
+            EF_NIA(),
+            EF_VGCS(),
+            EF_VGCSS(),
+            EF_VGCS('6fb3', None, 'EF.VBS', 'Voice Broadcast Service'),
+            EF_VGCSS('6fb4', None, 'EF.VBSS',
+                     'Voice Broadcast Service Status'),
+            EF_VGCSCA(),
+            EF_VGCSCA('6fd5', None, 'EF.VBCSCA',
+                      'Voice Broadcast Service Ciphering Algorithm'),
+            EF_GBABP(),
+            EF_MSK(),
+            EF_MUK(),
+            EF_GBANL(),
+            EF_PLMNsel('6fd9', 0x1d, 'EF.EHPLMN',
+                       'Equivalent HPLMN', size={12, None}),
+            EF_EHPLMNPI(),
+            EF_NAFKCA(),
+            TransparentEF('6fde', None, 'EF.SPNI',
+                          'Service Provider Name Icon'),
+            LinFixedEF('6fdf', None, 'EF.PNNI', 'PLMN Network Name Icon'),
+            EF_NCP_IP(),
+            EF_EPSLOCI('6fe3', 0x1e, 'EF.EPSLOCI', 'EPS location information'),
+            EF_EPSNSC(),
+            TransparentEF('6fe6', None, 'EF.UFC',
+                          'USAT Facility Control', size={1, 16}),
+            TransparentEF('6fe8', None, 'EF.NASCONFIG',
+                          'Non Access Stratum Configuration'),
+            # UICC IARI (only in cards that have no ISIM)
+            EF_PWS(),
+            LinFixedEF('6fed', None, 'EF.FDNURI',
+                       'Fixed Dialling Numbers URI'),
+            LinFixedEF('6fee', None, 'EF.BDNURI',
+                       'Barred Dialling Numbers URI'),
+            LinFixedEF('6fef', None, 'EF.SDNURI',
+                       'Service Dialling Numbers URI'),
+            EF_IPS(),
+            EF_ePDGId(),
+            # FIXME: from EF_ePDGSelection onwards
+            EF_FromPreferred(),
+            # FIXME: DF_SoLSA
+            # FIXME: DF_PHONEBOOK
+            # FIXME: DF_GSM_ACCESS
+            DF_WLAN(),
+            DF_HNB(),
+            DF_ProSe(),
+            # FIXME: DF_ACDC
+            # FIXME: DF_TV
+            DF_USIM_5GS(),
+        ]
         self.add_files(files)
 
     def decode_select_response(self, data_hex):
@@ -1131,6 +1298,7 @@
         authenticate_parser.add_argument('rand', help='Random challenge')
         authenticate_parser.add_argument('autn', help='Authentication Nonce')
         #authenticate_parser.add_argument('--context', help='Authentication context', default='3G')
+
         @cmd2.with_argparser(authenticate_parser)
         def do_authenticate(self, opts):
             """Perform Authentication and Key Agreement (AKA)."""
@@ -1151,7 +1319,8 @@
             """Send an ENVELOPE command to the card."""
             tpdu_ie = SMS_TPDU()
             tpdu_ie.from_bytes(h2b(arg))
-            dev_ids = DeviceIdentities(decoded={'source_dev_id':'network','dest_dev_id':'uicc'})
+            dev_ids = DeviceIdentities(
+                decoded={'source_dev_id': 'network', 'dest_dev_id': 'uicc'})
             sms_dl = SMSPPDownload(children=[dev_ids, tpdu_ie])
             (data, sw) = self._cmd.card._scc.envelope(b2h(sms_dl.to_tlv()))
             self._cmd.poutput('SW: %s, data: %s' % (sw, data))
@@ -1168,6 +1337,7 @@
     }
 }
 
+
 class CardApplicationUSIM(CardApplication):
     def __init__(self):
-	    super().__init__('USIM', adf=ADF_USIM(), sw=sw_usim)
+        super().__init__('USIM', adf=ADF_USIM(), sw=sw_usim)
