Skip to content

Commit

Permalink
refactoring/renaming of functions
Browse files Browse the repository at this point in the history
  • Loading branch information
impratikjaiswal committed Jul 12, 2024
1 parent bc329cf commit 4aa5fd8
Show file tree
Hide file tree
Showing 21 changed files with 110 additions and 85 deletions.
2 changes: 1 addition & 1 deletion asn1_play/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@

from incremental import Version

__version__ = Version("asn1_play", 8, 3, 2)
__version__ = Version("asn1_play", 8, 3, 3)
__all__ = ["__version__"]
2 changes: 1 addition & 1 deletion asn1_play/main/asn1play.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def process_data():
data_type.set_input_format()
data_type.set_asn1_element()
data_type.set_data_pool()
DataTypeMaster.parse_safe(data_type, error_handling_mode)
DataTypeMaster.process_safe(data_type, error_handling_mode)


def set_configurations():
Expand Down
27 changes: 24 additions & 3 deletions asn1_play/main/convert/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from asn1_play.generated_code.asn1.asn1 import Asn1
from asn1_play.main.helper.constants import Constants
from asn1_play.main.helper.defaults import Defaults
from asn1_play.main.helper.formats import Formats
from asn1_play.main.helper.formats_group import FormatsGroup
from asn1_play.main.helper.methods import Methods
Expand Down Expand Up @@ -39,8 +38,30 @@ def convert_data(input_data, output_format):
return None


def decode_encode_asn(input_data=PhConstants.STR_EMPTY, parse_only=True, input_format=Defaults.FORMAT_INPUT,
output_format=Defaults.FORMAT_OUTPUT, asn1_element=None):
def process_data(data, meta_data, flip_output=False):
"""
:param meta_data:
:param flip_output:
:param data:
:return:
"""

if flip_output is True:
input_data = meta_data.parsed_data
input_format = data.output_format
output_format = data.input_format
else:
input_data = data.input_data
input_format = data.input_format
output_format = data.output_format
parse_only = True
asn1_element = data.asn1_element
return decode_encode_asn(input_data=input_data, parse_only=parse_only, input_format=input_format,
output_format=output_format, asn1_element=asn1_element)


def decode_encode_asn(input_data, parse_only, input_format, output_format, asn1_element):
"""
Ref: https://github.com/P1sec/pycrate/wiki/Using-the-pycrate-asn1-runtime
:param input_data:
Expand Down
32 changes: 18 additions & 14 deletions asn1_play/main/convert/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@
from asn1_play.generated_code.asn1.GSMA.SGP_32 import version as sgp_32_version
from asn1_play.generated_code.asn1.TCA.eUICC_Profile_Package import version as epp_version
from asn1_play.main.convert import converter
from asn1_play.main.convert.handler import decode_encode_asn
from asn1_play.main.convert.handler import process_data
from asn1_play.main.helper.constants import Constants
from asn1_play.main.helper.constants_config import ConfigConst as ConfigConst_local
from asn1_play.main.helper.formats_group import FormatsGroup
from asn1_play.main.helper.metadata import MetaData


def parse_or_update_any_data(data, meta_data=None):
def process_all_data_types(data, meta_data=None):
"""
:param meta_data:
:param data:
:return:
"""
"""
Bulk Mode
Bulk Data Handling (Recursive)
"""
converter.set_defaults_for_printing(data)
byte_array_format = True if data.input_format in FormatsGroup.BYTE_ARRAY_FORMATS else False
Expand All @@ -56,23 +56,23 @@ def parse_or_update_any_data(data, meta_data=None):
sub_data.set_auto_generated_remarks_if_needed(PhUtil.get_key_value_pair(key='item', value=index,
sep=PhConstants.SEPERATOR_TWO_WORDS,
dic_format=False))
parsed_data_list.append(parse_or_update_any_data(sub_data))
parsed_data_list.append(process_all_data_types(sub_data))
return parsed_data_list
if not byte_array_format and data.input_data and os.path.isdir(os.path.abspath(data.input_data)):
# directory is provided
PhUtil.print_heading(data.get_remarks_as_str(), heading_level=3)
meta_data.input_mode_key = PhKeys.INPUT_DIR
data.append_input_modes_hierarchy(meta_data.input_mode_key)
PhUtil.print_heading(data.get_remarks_as_str(), heading_level=3)
converter.print_data(data, meta_data)
converter.set_includes_excludes_files(data, meta_data)
files_list = PhUtil.traverse_it(top=os.path.abspath(data.input_data), traverse_mode='Regex',
include_files=meta_data.include_files, excludes=meta_data.excludes)
if files_list:
files_list_data = data
files_list_data.input_data = files_list
return parse_or_update_any_data(files_list_data)
return process_all_data_types(files_list_data)
"""
Individual
Individual File Handling
"""
file_dic_all_str = {}
data.set_auto_generated_remarks_if_needed()
Expand All @@ -98,6 +98,9 @@ def parse_or_update_any_data(data, meta_data=None):
converter.set_input_output_format(data)
data.input_data = resp
data.append_input_modes_hierarchy(meta_data.input_mode_key)
"""
Individual Data Handling
"""
# Needed for scenario when remarks will be fetched from YML
data.set_auto_generated_remarks_if_needed()
converter.set_defaults(data, meta_data)
Expand All @@ -119,10 +122,13 @@ def parse_or_update_any_data(data, meta_data=None):
PhUtil.get_tool_name_w_version(PhKeys.EUICC_PROFILE_PACKAGE, epp_version, dic_format=True))
output_versions_dic.update(
PhUtil.get_key_value_pair(PhKeys.TIME_STAMP, PhUtil.get_time_stamp(files_format=False), dic_format=True))
# parse Data
meta_data.parsed_data = decode_encode_asn(input_data=data.input_data, parse_only=True,
input_format=data.input_format, output_format=data.output_format,
asn1_element=data.asn1_element)
"""
Data Processing
"""
meta_data.parsed_data = process_data(data, meta_data)
"""
Output Handling
"""
if meta_data.parsed_data and data.tlv_parsing_of_output is True:
data_type_tlv = DataTypeMaster()
data_type_tlv.set_data_pool(data_pool=Data(input_data=meta_data.parsed_data, quite_mode=True))
Expand All @@ -131,9 +137,7 @@ def parse_or_update_any_data(data, meta_data=None):
if meta_data.parsed_data_tlv and PhConstants.EXCEPTION_OCCURRED not in meta_data.parsed_data_tlv:
meta_data.parsed_data = meta_data.parsed_data_tlv
if data.re_parse_output:
meta_data.re_parsed_data = decode_encode_asn(input_data=meta_data.parsed_data, parse_only=True,
input_format=data.output_format,
output_format=data.input_format, asn1_element=data.asn1_element)
meta_data.re_parsed_data = process_data(data, meta_data, flip_output=True)
converter.print_data(data, meta_data)
if meta_data.input_mode_key == PhKeys.INPUT_YML:
converter.write_yml_file(meta_data.output_file_path, file_dic_all_str, meta_data.output_dic,
Expand Down
12 changes: 6 additions & 6 deletions asn1_play/main/data_type/data_type_master.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from asn1_play.generated_code.asn1.asn1 import Asn1
from asn1_play.main.convert import converter
from asn1_play.main.convert.converter import read_web_request, set_defaults
from asn1_play.main.convert.parser import parse_or_update_any_data
from asn1_play.main.convert.parser import process_all_data_types
from asn1_play.main.helper.data import Data
from asn1_play.main.helper.keywords import KeyWords
from asn1_play.main.helper.metadata import MetaData
Expand Down Expand Up @@ -73,7 +73,7 @@ def set_asn1_element(self, asn1_element):
def set_data_pool(self, data_pool):
self.data_pool = data_pool

def parse_safe(self, error_handling_mode, data=None):
def process_safe(self, error_handling_mode, data=None):
"""
:param data:
Expand All @@ -87,7 +87,7 @@ def parse_safe(self, error_handling_mode, data=None):
Handle Pool
"""
for data_item in data:
self.parse_safe(error_handling_mode=error_handling_mode, data=data_item)
self.process_safe(error_handling_mode=error_handling_mode, data=data_item)
return
"""
Handle Individual Request
Expand All @@ -98,7 +98,7 @@ def parse_safe(self, error_handling_mode, data=None):
Web Form
"""
data = read_web_request(data)
self.__parse_safe_individual(data)
self.__process_safe_individual(data)
except Exception as e:
known = False
summary_msg = None
Expand Down Expand Up @@ -145,7 +145,7 @@ def parse_safe(self, error_handling_mode, data=None):
if error_handling_mode == PhErrorHandlingModes.STOP_ON_ERROR:
raise

def __parse_safe_individual(self, data):
def __process_safe_individual(self, data):
"""
Handle Individual Request
:param data:
Expand Down Expand Up @@ -203,7 +203,7 @@ def __parse_safe_individual(self, data):
converter.path_generalisation(data, PhKeys.REMARKS)
meta_data = MetaData(input_data_org=data.input_data)
self.__master_data = (data, meta_data)
parse_or_update_any_data(data, meta_data)
process_all_data_types(data, meta_data)

def get_output_data(self, only_output=True):
"""
Expand Down
2 changes: 1 addition & 1 deletion asn1_play/test/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def test_sample_data(cls):
data_type = DataTypeMaster()
data_type.set_data_pool(
data_pool=[Data(input_data=input_data, input_format=input_format, output_format=output_format)])
data_type.parse_safe(PhErrorHandlingModes.CONTINUE_ON_ERROR)
data_type.process_safe(PhErrorHandlingModes.CONTINUE_ON_ERROR)
print(f'input_data {input_data}')
print(f'input_format {input_format}')
print(f'output_format {output_format}')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ input:
input_data: BF22820145810302030182030201008303040400840F81010082040007D63A830400001C32850502FFFFFFFC86030902008703020300880401FFFFFEA92C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD8AA2C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD88B01009902064004030000010C0D534D2D43542D55502D30353233AC48801F312E322E3834302E313233343536372F6D79506C6174666F726D4C6162656C812568747470733A2F2F6D79636F6D70616E792E636F6D2F6D79444C4F415265676973747261728D0205E08E0130AF050403030200900100B12C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD892071A9283DE7465F09303030000
output:
remarks: DerInput; Asn1Output; YmlInput; Asn1Element; StoreMetadataRequest; VersionVariable; OutputKeyword
info: 'Transaction Id: vmaqvbzh0erj; Mode: Yml_Encoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: EUICCInfo2; Input Format: der; Output Format: asn1'
info: 'Transaction Id: ssrdyx8xb2oa; Mode: Yml_Encoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: EUICCInfo2; Input Format: der; Output Format: asn1'
input_yml: ..\..\Data\SampleData\GSMA\SGP_22\v3_1\EUICCInfo2\EUICCInfo2.hex.yml
output_file: ../../Data/SampleData/GSMA/SGP_22/v3_1/EUICCInfo2/\EUICCInfo2.hex.yml
input_data: BF22820145810302030182030201008303040400840F81010082040007D63A830400001C32850502FFFFFFFC86030902008703020300880401FFFFFEA92C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD8AA2C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD88B01009902064004030000010C0D534D2D43542D55502D30353233AC48801F312E322E3834302E313233343536372F6D79506C6174666F726D4C6162656C812568747470733A2F2F6D79636F6D70616E792E636F6D2F6D79444C4F415265676973747261728D0205E08E0130AF050403030200900100B12C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD892071A9283DE7465F09303030000
Expand Down Expand Up @@ -52,8 +52,8 @@ output:
output_version:
Python: v3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
pythonHelpers: v3.1.5
asn1Play: v8.3.1
asn1Play: v8.3.3
SGP22: v3_1
SGP32: v1_1
eUICC_Profile_Package: v3_3_1
time_stamp: Saturday, Jun 29 2024, 22:10:34:348341, IST (GMT+0530)
time_stamp: Friday, Jul 12 2024, 09:56:29:257183, IST (GMT+0530)
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ input:
}
output:
remarks: Asn1Input; DerOutput; YmlInput; Asn1Element; StoreMetadataRequest; VersionVariable; OutputKeyword
info: 'Transaction Id: iiqawc4vmch9; Mode: Yml_Decoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: StoreMetadataRequest; Input Format: asn1; Output Format: der; Output File Name Keyword: output'
info: 'Transaction Id: 4yiczpw1qj5r; Mode: Yml_Decoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: StoreMetadataRequest; Input Format: asn1; Output Format: der; Output File Name Keyword: output'
input_yml: D:\Other\Github_Self\asn1Play\Data\SampleData\GSMA\SGP_22\v3_1\StoreMetadataRequest\StoreMetadataRequest.asn1.yml
output_file: D:/Other/Github_Self/asn1Play/Data/SampleData/GSMA/SGP_22/v3_1/StoreMetadataRequest/\StoreMetadataRequest.asn1_output.yml
input_data: |-
Expand Down Expand Up @@ -74,8 +74,8 @@ output:
output_version:
Python: v3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
pythonHelpers: v3.1.5
asn1Play: v8.3.1
asn1Play: v8.3.3
SGP22: v3_1
SGP32: v1_1
eUICC_Profile_Package: v3_3_1
time_stamp: Saturday, Jun 29 2024, 22:10:32:637246, IST (GMT+0530)
time_stamp: Friday, Jul 12 2024, 09:56:28:028098, IST (GMT+0530)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ input:
output_file_name_keyword: output
output:
remarks: DerInput; Asn1Output; YmlInput; Asn1Element; StoreMetadataRequest; VersionVariable; OutputKeyword
info: 'Transaction Id: h67bpiq8eytq; Mode: Yml_Encoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: StoreMetadataRequest; Input Format: der; Output Format: asn1; Output File Name Keyword: output'
info: 'Transaction Id: yz3qqor690hc; Mode: Yml_Encoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: StoreMetadataRequest; Input Format: der; Output Format: asn1; Output File Name Keyword: output'
input_yml: D:\Other\Github_Self\asn1Play\Data\SampleData\GSMA\SGP_22\v3_1\StoreMetadataRequest\StoreMetadataRequest.hex.yml
output_file: D:/Other/Github_Self/asn1Play/Data/SampleData/GSMA/SGP_22/v3_1/StoreMetadataRequest/\StoreMetadataRequest.hex_output.yml
input_data:
Expand Down Expand Up @@ -46,8 +46,8 @@ output:
output_version:
Python: v3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
pythonHelpers: v3.1.5
asn1Play: v8.3.1
asn1Play: v8.3.3
SGP22: v3_1
SGP32: v1_1
eUICC_Profile_Package: v3_3_1
time_stamp: Saturday, Jun 29 2024, 22:10:32:917798, IST (GMT+0530)
time_stamp: Friday, Jul 12 2024, 09:56:28:145142, IST (GMT+0530)
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ input:
}
output:
remarks: Asn1Input; DerOutput; YmlInput; Asn1Element; ReParseOutput; StoreMetadataRequest; VersionVariable; OutputKeyword
info: 'Transaction Id: a0grzh2kd7xr; Mode: Yml_Decoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: StoreMetadataRequest; Input Format: asn1; Output Format: der; Output File Name Keyword: output'
info: 'Transaction Id: 8vygdmv4ivfx; Mode: Yml_Decoding_Mode; Asn1 Module: RSPDefinitions; Asn1 Module Version: v3_1; Asn1 Object: StoreMetadataRequest; Input Format: asn1; Output Format: der; Output File Name Keyword: output'
input_yml: D:\Other\Github_Self\asn1Play\Data\SampleData\GSMA\SGP_22\v3_1\StoreMetadataRequest\StoreMetadataRequest_Mandatory.asn1.yml
output_file: D:/Other/Github_Self/asn1Play/Data/SampleData/GSMA/SGP_22/v3_1/StoreMetadataRequest/\StoreMetadataRequest_Mandatory.asn1_output.yml
re_output_file: D:/Other/Github_Self/asn1Play/Data/SampleData/GSMA/SGP_22/v3_1/StoreMetadataRequest/\StoreMetadataRequest_Mandatory.asn1_output_re_parsed.yml
Expand All @@ -33,8 +33,8 @@ output:
output_version:
Python: v3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
pythonHelpers: v3.1.5
asn1Play: v8.3.1
asn1Play: v8.3.3
SGP22: v3_1
SGP32: v1_1
eUICC_Profile_Package: v3_3_1
time_stamp: Saturday, Jun 29 2024, 22:10:33:052798, IST (GMT+0530)
time_stamp: Friday, Jul 12 2024, 09:56:28:238098, IST (GMT+0530)
10 changes: 5 additions & 5 deletions data/SampleData/GSMA/SGP_32/v1_1/EUICCInfo2/EUICCInfo2.hex.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ input:
input_data: BF22820145810302030182030201008303040400840F81010082040007D63A830400001C32850502FFFFFFFC86030902008703020300880401FFFFFEA92C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD8AA2C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD88B01009902064004030000010C0D534D2D43542D55502D30353233AC48801F312E322E3834302E313233343536372F6D79506C6174666F726D4C6162656C812568747470733A2F2F6D79636F6D70616E792E636F6D2F6D79444C4F415265676973747261728D0205E08E0130AF050403030200900100B12C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD892071A9283DE7465F09303030000
output:
remarks: DerInput; Asn1Output; YmlInput; Asn1Element; StoreMetadataRequest; VersionVariable; OutputKeyword
info: 'Transaction Id: jsxxau34zpzi; Mode: Yml_Encoding_Mode; Asn1 Module: SGP32Definitions; Asn1 Module Version: v1_1; Asn1 Object: EUICCInfo2; Input Format: der; Output Format: asn1'
info: 'Transaction Id: nplnvdjocdaf; Mode: Yml_Encoding_Mode; Asn1 Module: SGP32Definitions; Asn1 Module Version: v1_1; Asn1 Object: EUICCInfo2; Input Format: der; Output Format: asn1'
input_yml: ..\..\Data\SampleData\GSMA\SGP_32\v1_1\EUICCInfo2\EUICCInfo2.hex.yml
output_file: ../../Data/SampleData/GSMA/SGP_32/v1_1/EUICCInfo2/\EUICCInfo2.hex.yml
input_data: BF22820145810302030182030201008303040400840F81010082040007D63A830400001C32850502FFFFFFFC86030902008703020300880401FFFFFEA92C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD8AA2C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD88B01009902064004030000010C0D534D2D43542D55502D30353233AC48801F312E322E3834302E313233343536372F6D79506C6174666F726D4C6162656C812568747470733A2F2F6D79636F6D70616E792E636F6D2F6D79444C4F415265676973747261728D0205E08E0130AF050403030200900100B12C0414F54172BDF98A95D65CBEB88A38A1C11D800A85C30414C0BC70BA36929D43B467FF57570530E57AB8FCD892071A9283DE7465F09303030000
Expand Down Expand Up @@ -52,8 +52,8 @@ output:
output_version:
Python: v3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
pythonHelpers: v3.1.5
asn1Play: v8.3.1
SGP22: v3_0_0
asn1Play: v8.3.3
SGP22: v3_1
SGP32: v1_1
eUICC_Profile_Package: v3_2
time_stamp: Saturday, Jun 29 2024, 22:13:35:095758, IST (GMT+0530)
eUICC_Profile_Package: v3_3_1
time_stamp: Friday, Jul 12 2024, 09:56:29:274138, IST (GMT+0530)
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@ input:
output_file_name_keyword: output
output:
remarks: HexInput; AsciiOutput; DirectInput; ExportKeyword; OutputFile
info: 'Transaction Id: u2osywpokk8f; Mode: Yml_Conversion_Mode; Input Format: hex; Output Format: ascii; Output File: ..\..\Data\SampleData\Generic\ASCII; Output File Name Keyword: output'
info: 'Transaction Id: xg2xwg6knz0l; Mode: Yml_Conversion_Mode; Input Format: hex; Output Format: ascii; Output File: ..\..\Data\SampleData\Generic\ASCII; Output File Name Keyword: output'
input_yml: ..\..\Data\SampleData\Generic\ASCII\HexInput_AsciiOutput_DirectInput_ExportKeyword_OutputFile_export.yml
output_file: ../../Data/SampleData/Generic/\ASCII\HexInput_AsciiOutput_DirectInput_ExportKeyword_OutputFile_output.yml
input_data: 57656c636f6d6520546f2041736e506c61792021212157656c636f6d6520546f2041736e506c61792021212157656c636f6d6520546f2041736e506c61792021212157656c636f6d6520546f2041736e506c617920212121
output_data: Welcome To AsnPlay !!!Welcome To AsnPlay !!!Welcome To AsnPlay !!!Welcome To AsnPlay !!!
output_version:
Python: v3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
pythonHelpers: v3.1.5
asn1Play: v8.3.1
SGP22: v3_0_0
asn1Play: v8.3.3
SGP22: v3_1
SGP32: v1_1
eUICC_Profile_Package: v3_2
time_stamp: Saturday, Jun 29 2024, 22:13:32:992939, IST (GMT+0530)
eUICC_Profile_Package: v3_3_1
time_stamp: Friday, Jul 12 2024, 09:56:27:110748, IST (GMT+0530)
Loading

0 comments on commit 4aa5fd8

Please sign in to comment.