├── .github └── workflows │ ├── release.yml │ └── uefivars.yml ├── .gitignore ├── LICENSE ├── README.md ├── pyuefivars ├── __init__.py ├── aws.py ├── aws_file.py ├── aws_v0.py ├── edk2.py ├── efivarfs.py ├── json.py └── varstore.py ├── requirements.txt ├── setup.cfg ├── setup.py ├── snap └── snapcraft.yaml ├── test_uefivars.py ├── testdata ├── t01.efivarfs │ ├── Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── Key0000-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── Key0001-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── MTC-eb704011-1402-11d3-8e77-00a0c969723b │ ├── OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── PlatformRecovery0000-8be4df61-93ca-11d2-aa0d-00e098032b8c │ ├── Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c │ └── X-Nitro-SecurebootStatus-8be4df61-93ca-11d2-aa0d-00e098032b8c ├── t01.json ├── t02.aws ├── t02.edk2 └── t02.json └── uefivars /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | tags: 4 | - 'v*' 5 | 6 | jobs: 7 | pypi-publish: 8 | name: upload release to PyPI 9 | runs-on: ubuntu-latest 10 | environment: release 11 | permissions: 12 | id-token: write 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v3 16 | with: 17 | fetch-depth: 0 18 | - run: python3 -m pip install --upgrade build && python3 -m build 19 | - name: Publish package distributions to PyPI 20 | uses: pypa/gh-action-pypi-publish@release/v1 21 | -------------------------------------------------------------------------------- /.github/workflows/uefivars.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a single version of Python 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python 3 | 4 | name: Uefivars python application 5 | 6 | on: [push, pull_request] 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | build: 13 | 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v3 18 | - name: Set up Python 3.10 19 | uses: actions/setup-python@v3 20 | with: 21 | python-version: "3.10" 22 | - name: Install dependencies 23 | run: | 24 | python -m pip install --upgrade pip 25 | pip install flake8 pytest 26 | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi 27 | - name: Lint with flake8 28 | run: | 29 | # stop the build if there are any new flake8 issues 30 | flake8 . --count --show-source --statistics 31 | - name: Test with pytest 32 | run: | 33 | pytest 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *# 3 | *.swp 4 | 5 | *.DS_Store 6 | 7 | __pycache__/ 8 | *.py[cod] 9 | *$py.class 10 | *.egg-info/ 11 | 12 | /.coverage 13 | /.coverage.* 14 | /.cache 15 | /.pytest_cache 16 | /.mypy_cache 17 | 18 | /doc/_apidoc/ 19 | /build 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # uefivars 2 | 3 | This is a set of Python modules and a helper application "uefivars" to 4 | introspect and modify UEFI variable stores. 5 | 6 | ## Why do I need this? 7 | 8 | UEFI variable stores are typically opaque to users. You access them using 9 | UEFI runtime services as function calls. However, the data is then stored 10 | in a binary data format. When running virtual machines or extracting UEFI 11 | variable stores directly from Flash storage, you can receive and write that 12 | binary data and thus modify variables directly. 13 | 14 | This is useful in situations where you have incorrect UEFI variable data 15 | and need to modify variables without runtime service access. It can also 16 | be useful to analyze and introspect the variable store and check what data 17 | is stored inside. 18 | 19 | ## How do I use it? 20 | 21 | You can convert a variable store into human readable format by setting the 22 | output type to json. This will show you all variables that are currently 23 | present in the variable store. 24 | 25 | ```console 26 | $ uefivars -i edk2 -o json -I OVMF_VARS.secboot.fd 27 | [ 28 | { 29 | "name": "SecureBootEnable", 30 | "data": "AQ==", 31 | "guid": "f0a30bc7-af08-4556-99c4-001009c93a44", 32 | "attr": 3 33 | }, 34 | [...] 35 | ] 36 | ``` 37 | 38 | In addition, you can convert from the human readable json representation back 39 | into edk2 format: 40 | 41 | ```console 42 | $ uefivars -i json -o edk2 -I vars.json -O OVMF_VARS.fd 43 | ``` 44 | 45 | Given any variable store (including an empty one) the `--PK` , `--KEK` , `--db` and `--dbx` 46 | switches can be used to (over-)write the four SecureBoot variables from input files. 47 | (Usually .esl files). For a general rundown of the key generation process the [ArchLinux](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys) wiki has proven itself 48 | as a first point of guidance. 49 | 50 | You can also use the tool to convert between the AWS EC2 uefi-data format 51 | and edk2 to import and export UEFI variable stores between an EC2 instance 52 | and QEMU: 53 | 54 | ```console 55 | $ uefivars -i edk2 -o aws -I OVMF_VARS.fd -O uefi-data.aws 56 | ``` 57 | 58 | ```console 59 | $ uefivars -i aws -o edk2 -I uefi-data.aws -O OVMF_VARS.fd 60 | ``` 61 | 62 | ## How can I take a snapshot of my current UEFI variable store? 63 | 64 | If you are running on a live UEFI system, the variable store that gets exposed 65 | to the Operating System is incomplete: It does not contain UEFI variables that 66 | are only present at boot time and it does not get access to variable 67 | authentication data. 68 | 69 | If you don't need either - for example because you're only interested in saving 70 | the boot order - you can use the efivarfs backend to convert the local variable 71 | store into a file: 72 | 73 | ```console 74 | $ uefivars -i efivarfs -o aws -I /sys/firmware/efi/efivars -O uefi-data.aws 75 | ``` 76 | 77 | ## What formats are supported? 78 | 79 | This package currently supports the following formats: 80 | 81 | **aws** - File format used in [AWS EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html) \ 82 | **edk2** - File format used for flash storage in [OVMF](https://github.com/tianocore/edk2/blob/918288ab5a7c3abe9c58d576ccc0ae32e2c7dea0/OvmfPkg/README#L123) \ 83 | **efivarfs** - Ingests all non-authenticated variables from an [efivarfs](https://docs.kernel.org/filesystems/efivarfs.html) mount point (read only) 84 | -------------------------------------------------------------------------------- /pyuefivars/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import argparse 7 | import sys 8 | from .varstore import UEFIVar, UEFIVarStore 9 | from .aws import AWSUEFIVarStore 10 | from .edk2 import EDK2UEFIVarStore 11 | from .json import JSONUEFIVarStore 12 | from .efivarfs import EFIVARFSUEFIVarStore 13 | 14 | 15 | MIN_PYTHON = (3, 0) 16 | if sys.version_info < MIN_PYTHON: 17 | sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON) 18 | 19 | globalEfiGUID = bytes.fromhex("61 df e4 8b ca 93 d2 11 aa 0d 00 e0 98 03 2b 8c") 20 | secureDatabaseGUID = bytes.fromhex("cb b2 19 d7 3a 3d 96 45 a3 bc da d0 0e 67 65 6f") 21 | 22 | 23 | def Str2UEFIVarStore(s): 24 | formats = { 25 | "aws": AWSUEFIVarStore, 26 | "edk2": EDK2UEFIVarStore, 27 | "json": JSONUEFIVarStore, 28 | "efivarfs": EFIVARFSUEFIVarStore, 29 | "none": UEFIVarStore, 30 | } 31 | 32 | if s in formats: 33 | return formats[s] 34 | 35 | fmt = '", "'.join(formats) 36 | raise SystemExit(f'Unknown Input type "{s}", choose from ("{fmt}")') 37 | 38 | 39 | def ReadVar(arg, name, guid): 40 | EFI_VARIABLE_NON_VOLATILE = 0x00000001 41 | EFI_VARIABLE_BOOTSERVICE_ACCESS = 0x00000002 42 | EFI_VARIABLE_RUNTIME_ACCESS = 0x00000004 43 | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x00000020 44 | 45 | attr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | \ 46 | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 47 | 48 | varfile = open(arg, "rb") 49 | vardata = varfile.read() 50 | 51 | if (len(vardata) == 0): 52 | print('Read empty variable "{}". Aborting'.format(name), file=sys.stderr) 53 | sys.exit() 54 | 55 | return UEFIVar(name, vardata, guid, attr) 56 | 57 | 58 | def _parser(): 59 | parser = argparse.ArgumentParser() 60 | parser.add_argument("-i", "--input", help='Input type ("aws", "json", "edk2", "efivarfs", "none")', required=True) 61 | parser.add_argument("-o", "--output", help='Output type ("aws", "json", "edk2[,filesize=512]")', required=True) 62 | parser.add_argument("-I", "--inputfile", help='Input file (stdin if not given)') 63 | parser.add_argument("-O", "--outputfile", help='Output file (stdout if not given)') 64 | parser.add_argument("-P", "--PK", help='Insert PK from given file (usually PK.esl)') 65 | parser.add_argument("-K", "--KEK", help='Insert KEK from given file (usually KEK.esl)') 66 | parser.add_argument("-b", "--db", help='Insert db from given file (usually db.esl)') 67 | parser.add_argument("-x", "--dbx", help='Insert dbx from given file (usually dbx.esl)') 68 | 69 | args = parser.parse_args() 70 | return args 71 | 72 | 73 | def main(): 74 | pk_found = -1 75 | kek_found = -1 76 | db_found = -1 77 | dbx_found = -1 78 | args = _parser() 79 | 80 | inclass = Str2UEFIVarStore(args.input) 81 | 82 | args.output = [s.strip() for s in args.output.split(",")] 83 | output_options = args.output[1:] 84 | args.output = args.output[0] 85 | 86 | outclass = Str2UEFIVarStore(args.output) 87 | 88 | if args.input == 'none': 89 | indata = '' 90 | elif args.input == 'efivarfs': 91 | indata = args.inputfile 92 | else: 93 | if args.inputfile: 94 | infile = open(args.inputfile, "rb") 95 | else: 96 | infile = sys.stdin.buffer 97 | print("Reading uefivars from stdin", file=sys.stderr) 98 | 99 | indata = infile.read() 100 | 101 | varstore = inclass(indata) 102 | 103 | print("Read {} variables".format(varstore.vars.__len__()), file=sys.stderr) 104 | 105 | for i, s in enumerate(varstore.vars): 106 | var = varstore.vars[i] 107 | 108 | if (var.name == 'PK' and var.guid == globalEfiGUID): 109 | pk_found = i 110 | 111 | if (var.name == 'KEK' and var.guid == globalEfiGUID): 112 | kek_found = i 113 | 114 | if (var.name == 'db' and var.guid == secureDatabaseGUID): 115 | db_found = i 116 | 117 | if (var.name == 'dbx' and var.guid == secureDatabaseGUID): 118 | dbx_found = i 119 | 120 | if (args.PK): 121 | var = ReadVar(args.PK, 'PK', globalEfiGUID) 122 | if (pk_found != -1): 123 | print('Replacing PK', file=sys.stderr) 124 | varstore.vars[pk_found] = var 125 | else: 126 | varstore.vars.append(var) 127 | elif (pk_found == -1): 128 | print('No PK (PlatformKey) was set; SecureBoot will not be enabled without a PK', file=sys.stderr) 129 | 130 | if (args.KEK): 131 | var = ReadVar(args.KEK, 'KEK', globalEfiGUID) 132 | if (kek_found != -1): 133 | print('Replacing KEK', file=sys.stderr) 134 | varstore.vars[kek_found] = var 135 | else: 136 | varstore.vars.append(var) 137 | 138 | if (args.db): 139 | var = ReadVar(args.db, 'db', secureDatabaseGUID) 140 | if (db_found != -1): 141 | print('Replacing db', file=sys.stderr) 142 | varstore.vars[db_found] = var 143 | else: 144 | varstore.vars.append(var) 145 | 146 | if (args.dbx): 147 | var = ReadVar(args.dbx, 'dbx', secureDatabaseGUID) 148 | if (dbx_found != -1): 149 | print('Replacing dbx', file=sys.stderr) 150 | varstore.vars[dbx_found] = var 151 | else: 152 | varstore.vars.append(var) 153 | 154 | # convert the format by changing the output class 155 | varstore.__class__ = outclass 156 | if output_options: 157 | varstore.set_output_options(output_options) 158 | 159 | if args.outputfile: 160 | outfile = open(args.outputfile, "wb") 161 | else: 162 | outfile = sys.stdout.buffer 163 | outfile.write(bytes(varstore)) 164 | 165 | print("Writen {} variables".format(varstore.vars.__len__()), file=sys.stderr) 166 | 167 | 168 | if __name__ == '__main__': 169 | main() 170 | -------------------------------------------------------------------------------- /pyuefivars/aws.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import os 7 | import zlib 8 | import base64 9 | import tempfile 10 | import google_crc32c as crc32c 11 | from .varstore import UEFIVar, UEFIVarStore 12 | from .aws_v0 import UEFIVarStoreV0 13 | from .aws_file import AWSVarStoreFile 14 | 15 | 16 | class AWSUEFIVarStore(UEFIVarStore): 17 | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x20 18 | AMZNUEFI = 0x494645554e5a4d41 19 | 20 | def __init__(self, b64data: bytes): 21 | super().__init__() 22 | 23 | # Convert base64 to binary 24 | file = tempfile.SpooledTemporaryFile() 25 | file.write(base64.b64decode(b64data)) 26 | file.seek(0, os.SEEK_SET) 27 | 28 | # Then wrap the binary file with our reader and start parsing 29 | file = AWSVarStoreFile(file) 30 | magic = file.read64() 31 | if magic != self.AMZNUEFI: 32 | raise Exception("Invalid magic. Expected AMZNUEFI. Found 0x%x" % magic) 33 | crc32 = file.read32() 34 | 35 | # Validate crc32c 36 | location = file.file.tell() 37 | comp_crc32 = crc32c.value(file.readall()) 38 | if (comp_crc32 != crc32): 39 | raise Exception("Invalid checksum, please check you copied all data") 40 | file.file.seek(location, os.SEEK_SET) 41 | 42 | version = file.read32() 43 | if version != 0: 44 | raise Exception("Invalid version. Expected 0. Found 0x%x" % version) 45 | 46 | # Grab the zlib data that's embedded and parse it 47 | dec = zlib.decompressobj(0, zdict=UEFIVarStoreV0.dict) 48 | raw_data = dec.decompress(file.readall()) 49 | raw_file = tempfile.SpooledTemporaryFile() 50 | raw_file.write(raw_data) 51 | raw_file.seek(0, os.SEEK_SET) 52 | raw = AWSVarStoreFile(raw_file) 53 | nr_entries = raw.read64() 54 | for i in range(nr_entries): 55 | name = raw.readstr() 56 | data = raw.readdata() 57 | guid = raw.readguid() 58 | attr = raw.read32() 59 | if attr & self.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: 60 | timestamp = raw.readtimestamp() 61 | if timestamp == self.EMPTY_TIMESTAMP: 62 | timestamp = None 63 | digest = raw.readdata() 64 | if digest == self.EMPTY_DIGEST: 65 | digest = None 66 | self.vars.append(UEFIVar(name, data, guid, attr, timestamp, digest)) 67 | else: 68 | self.vars.append(UEFIVar(name, data, guid, attr)) 69 | 70 | def __bytes__(self) -> bytes: 71 | # Assemble the zlib compressed wrapped file 72 | raw = AWSVarStoreFile(tempfile.SpooledTemporaryFile()) 73 | raw.write64(len(self.vars)) 74 | for var in self.vars: 75 | raw.writestr(var.name) 76 | raw.writedata(var.data) 77 | raw.writeguid(var.guid) 78 | raw.write32(var.attr) 79 | if var.attr & self.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: 80 | timestamp = var.timestamp 81 | if timestamp is None: 82 | timestamp = self.EMPTY_TIMESTAMP 83 | 84 | digest = var.digest 85 | if digest is None: 86 | digest = self.EMPTY_DIGEST 87 | 88 | raw.writetimestamp(timestamp) 89 | raw.writedata(digest) 90 | raw.file.seek(0, os.SEEK_SET) 91 | 92 | enc = zlib.compressobj(9, zdict=UEFIVarStoreV0.dict) 93 | zdata = enc.compress(raw.file.read()) + enc.flush() 94 | 95 | # Create a full file with header + zdata 96 | f = tempfile.SpooledTemporaryFile() 97 | f = AWSVarStoreFile(f) 98 | f.write64(self.AMZNUEFI) 99 | f.write32(crc32c.value(int(0).to_bytes(4, byteorder='little') + zdata)) 100 | f.write32(0) # Version 0 101 | f.write(zdata) 102 | f.file.seek(0, os.SEEK_SET) 103 | 104 | # Then write it out as base64 data 105 | return base64.b64encode(f.file.read()) 106 | 107 | def __str__(self) -> str: 108 | return self.__bytes__().decode('utf-8') 109 | -------------------------------------------------------------------------------- /pyuefivars/aws_file.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | class AWSVarStoreFile(object): 7 | def __init__(self, file): 8 | self.file = file 9 | 10 | def read(self, size): 11 | value = self.file.read(size) 12 | if len(value) != size: 13 | raise Exception("Unexpected end of %s at 0x%x" % (self.file, self.file.tell())) 14 | return value 15 | 16 | def read64(self): 17 | return int.from_bytes(self.read(8), byteorder='little', signed=False) 18 | 19 | def read32(self): 20 | return int.from_bytes(self.read(4), byteorder='little', signed=False) 21 | 22 | def read16(self): 23 | return int.from_bytes(self.read(2), byteorder='little', signed=False) 24 | 25 | def read8(self): 26 | return int.from_bytes(self.read(1), byteorder='little', signed=False) 27 | 28 | def readdata(self): 29 | size = self.read64() 30 | return self.read(size) 31 | 32 | def readstr(self): 33 | return self.readdata().decode('utf-8') 34 | 35 | def readguid(self): 36 | return self.read(16) 37 | 38 | def readtimestamp(self): 39 | return self.read(16) 40 | 41 | def readall(self): 42 | return self.file.read() 43 | 44 | def write(self, data): 45 | self.file.write(data) 46 | 47 | def write64(self, data): 48 | self.write(data.to_bytes(8, byteorder='little')) 49 | 50 | def write32(self, data): 51 | self.write(data.to_bytes(4, byteorder='little')) 52 | 53 | def write16(self, data): 54 | self.write(data.to_bytes(2, byteorder='little')) 55 | 56 | def write8(self, data): 57 | self.write(data.to_bytes(1, byteorder='little')) 58 | 59 | def writedata(self, data): 60 | self.write64(len(data)) 61 | self.write(data) 62 | 63 | def writestr(self, data): 64 | return self.writedata(data.encode('utf-8')) 65 | 66 | def writeguid(self, data): 67 | return self.write(data) 68 | 69 | def writetimestamp(self, data): 70 | return self.write(data) 71 | -------------------------------------------------------------------------------- /pyuefivars/aws_v0.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | class UEFIVarStoreV0(object): 7 | dict = bytes([ 8 | 0x37, 0xa4, 0x30, 0xec, 0x12, 0x44, 0xfc, 0x0a, 0x1d, 0x10, 0x28, 0x9d, 9 | 0x00, 0x00, 0x87, 0xae, 0xe3, 0x9e, 0xd0, 0x73, 0x2d, 0x2b, 0x4b, 0xca, 10 | 0x1e, 0xac, 0x1c, 0xfb, 0x79, 0xc8, 0x7c, 0x05, 0xfb, 0xf4, 0xf4, 0xf5, 11 | 0xf7, 0x01, 0x43, 0x05, 0x28, 0x00, 0x06, 0x03, 0x84, 0xe2, 0xd1, 0x60, 12 | 0x28, 0x4b, 0x06, 0x77, 0x00, 0x04, 0x80, 0xc0, 0x04, 0x0a, 0x1c, 0x0e, 13 | 0x06, 0x10, 0x08, 0x0a, 0x09, 0x05, 0x07, 0x34, 0x07, 0x04, 0x0a, 0x0f, 14 | 0x03, 0x07, 0x09, 0x0c, 0x07, 0x04, 0x05, 0x06, 0x08, 0x85, 0xc1, 0x60, 15 | 0x61, 0x68, 0x48, 0x20, 0x09, 0x07, 0x03, 0x71, 0xa1, 0x3c, 0xd5, 0x87, 16 | 0x98, 0x01, 0xd8, 0x00, 0x24, 0x51, 0x0f, 0x22, 0x11, 0x4c, 0x51, 0x0c, 17 | 0x02, 0x01, 0x00, 0x00, 0x82, 0x00, 0x21, 0xc8, 0xb8, 0x60, 0x68, 0x68, 18 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 19 | 0x00, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 20 | 0x00, 0xb0, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 21 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 22 | 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 23 | 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 24 | 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 25 | 0x05, 0x00, 0x01, 0x03, 0x0d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 26 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 29 | 0x87, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 30 | 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 31 | 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 32 | 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 33 | 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 34 | 0x00, 0x0f, 0x01, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 35 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 36 | 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 37 | 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 38 | 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 39 | 0x05, 0x00, 0xef, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 40 | 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 41 | 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 42 | 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 43 | 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 44 | 0x01, 0x05, 0x00, 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49, 0xa0, 45 | 0xce, 0x65, 0x00, 0xfd, 0x9f, 0x1b, 0x95, 0x2c, 0xaf, 0x2c, 0x64, 0xfe, 46 | 0xff, 0xff, 0xff, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 47 | 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x4d, 0x69, 48 | 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, 0x64, 49 | 0x6f, 0x77, 0x73, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 50 | 0x6f, 0x6e, 0x20, 0x50, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 51 | 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 52 | 0x0d, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x61, 0xdf, 53 | 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 54 | 0x2b, 0x8c, 0x4c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 55 | 0x65, 0x6e, 0x67, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 56 | 0x1a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 57 | 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 58 | 0x50, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, 0x6f, 0x00, 59 | 0x72, 0x00, 0x6d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 60 | 0x00, 0x00, 0x65, 0x6e, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 61 | 0x07, 0x00, 0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0xd6, 62 | 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 63 | 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 64 | 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 65 | 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 66 | 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 67 | 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 68 | 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 69 | 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 70 | 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 71 | 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x05, 0x00, 72 | 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 73 | 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 74 | 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 75 | 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 76 | 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 77 | 0x03, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 78 | 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 79 | 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 80 | 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 81 | 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 82 | 0x00, 0x21, 0xe5, 0x7f, 0x93, 0xae, 0x95, 0x1a, 0x4d, 0x89, 0x29, 0x48, 83 | 0xbc, 0xd9, 0x0a, 0xd3, 0x1a, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 84 | 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 85 | 0x00, 0x35, 0x00, 0x36, 0x00, 0xe8, 0x7f, 0xb3, 0x04, 0xae, 0xf6, 0x0b, 86 | 0x48, 0xbd, 0xd5, 0x37, 0xd9, 0x8c, 0x5e, 0x89, 0xaa, 0x56, 0x00, 0x61, 87 | 0x00, 0x72, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x72, 88 | 0x00, 0x46, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0xff, 89 | 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x88, 0x9c, 0xd0, 0xf7, 0xb6, 90 | 0xc4, 0x7a, 0xd5, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x65, 0x00, 0x0e, 0x00, 91 | 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6e, 0xe5, 0xbe, 0xd9, 0xdc, 0x75, 92 | 0xd9, 0x49, 0xb4, 0xd7, 0xb5, 0x34, 0x21, 0x0f, 0x63, 0x7a, 0x63, 0x00, 93 | 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 94 | 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x23, 0x00, 95 | 0x00, 0x04, 0x01, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xbc, 96 | 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 97 | 0x00, 0x6f, 0xbd, 0x26, 0x17, 0x0a, 0xae, 0xeb, 0x11, 0xaf, 0xcc, 0xb2, 98 | 0x6f, 0x04, 0x02, 0x45, 0xc6, 0x02, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 99 | 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 100 | 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 101 | 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 102 | 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 103 | 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x12, 0x34, 0x56, 0xff, 104 | 0xff, 0xaa, 0x55, 0x50, 0x00, 0x58, 0x00, 0x45, 0x00, 0x76, 0x00, 0x43, 105 | 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 106 | 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 107 | 0x77, 0x00, 0x73, 0x00, 0x11, 0xd4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 108 | 0xc1, 0x4d, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 109 | 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 110 | 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 111 | 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 112 | 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 113 | 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x02, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 114 | 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x06, 115 | 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x3d, 0x03, 0x0e, 0x00, 116 | 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 117 | 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 118 | 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 119 | 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 120 | 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 121 | 0x01, 0x05, 0x00, 0x11, 0xd4, 0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 122 | 0x4d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 123 | 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x00, 124 | 0x50, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x79, 0x00, 125 | 0x2d, 0x88, 0x11, 0xd3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 126 | 0x00, 0xaf, 0xaf, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6f, 0x22, 0xec, 127 | 0xea, 0xa3, 0xc9, 0x7a, 0x47, 0xa8, 0x26, 0xdd, 0xc7, 0x16, 0xcd, 0xc0, 128 | 0xe3, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x6f, 0x22, 0xec, 0xea, 129 | 0xa3, 0xc9, 0x7a, 0x47, 0xa8, 0x26, 0xdd, 0xc7, 0x16, 0xcd, 0xc0, 0xe3, 130 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 131 | 0x00, 0x05, 0x00, 0x06, 0x00, 0x11, 0xd2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 132 | 0x69, 0x72, 0x3b, 0xbd, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 133 | 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x03, 0x18, 0x04, 0x00, 134 | 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 135 | 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0x00, 0x20, 0x00, 0x51, 136 | 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x0e, 137 | 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 138 | 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 139 | 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 140 | 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 141 | 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 142 | 0x41, 0x01, 0x05, 0x00, 0x30, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 143 | 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 144 | 0x80, 0xb4, 0xd9, 0x69, 0x31, 0xbf, 0x0d, 0x02, 0xfd, 0x91, 0xa6, 0x1e, 145 | 0x19, 0xd1, 0x4f, 0x1d, 0xa4, 0x52, 0xe6, 0x6d, 0xb2, 0x40, 0x8c, 0xa8, 146 | 0x60, 0x4d, 0x41, 0x1f, 0x92, 0x65, 0x9f, 0x0a, 0xbd, 0x9a, 0xfa, 0x77, 147 | 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0x07, 0x00, 0xaa, 0x55, 0x3d, 148 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 149 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 150 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 151 | 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 152 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x17, 0x00, 153 | 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 154 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 155 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 156 | 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 157 | 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 158 | 0x98, 0x6b, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 159 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 160 | 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 161 | 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 162 | 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 163 | 0x00, 0x00, 0x00, 0x7f, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 164 | 0x13, 0x21, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 165 | 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 166 | 0x4b, 0x45, 0x4b, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 167 | 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 168 | 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0xf3, 0x00, 0x00, 0x00, 0x61, 169 | 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 170 | 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 171 | 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 172 | 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 173 | 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 174 | 0x04, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 175 | 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x4b, 0x00, 0x65, 0x00, 176 | 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x5f, 0x00, 0x00, 0x37, 177 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 178 | 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 179 | 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 180 | 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 181 | 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 182 | 0xea, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 183 | 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x4b, 0x00, 184 | 0x65, 0x00, 0x79, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 185 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x51, 0xd7, 0x97, 0x9f, 0x00, 0x00, 186 | 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 187 | 0x00, 0x76, 0x00, 0x34, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4d, 0x00, 0x41, 188 | 0x00, 0x43, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 189 | 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 190 | 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 191 | 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 192 | 0x00, 0x00, 0x02, 0x03, 0x0b, 0x25, 0x00, 0x52, 0x54, 0x00, 0x12, 0x34, 193 | 0x56, 0x00, 0x00, 0x53, 0x00, 0x69, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 194 | 0x00, 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 195 | 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 197 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 198 | 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbd, 199 | 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 200 | 0x8f, 0x78, 0x4b, 0x4b, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x65, 201 | 0x00, 0x6c, 0x00, 0x5f, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x00, 0x00, 0xa1, 202 | 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 203 | 0x2b, 0xf0, 0x72, 0xd0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 204 | 0x03, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 205 | 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x30, 0x82, 0x03, 0xa0, 0x30, 206 | 0x82, 0x02, 0x88, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xfe, 207 | 0xf5, 0x88, 0xe8, 0xf3, 0x96, 0xc0, 0xf1, 0x30, 0x0d, 0x06, 0xb9, 0x00, 208 | 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 209 | 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 210 | 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 211 | 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 212 | 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 213 | 0x7f, 0x7a, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 214 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 215 | 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 216 | 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 217 | 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 218 | 0x00, 0x00, 0x00, 0x7f, 0x37, 0x32, 0x31, 0x32, 0x32, 0x34, 0x35, 0x5a, 219 | 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 0x37, 0x32, 0x31, 0x33, 0x32, 220 | 0x34, 0x35, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 221 | 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 222 | 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 223 | 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 224 | 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 225 | 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x00, 0x76, 0x00, 0x36, 0x00, 226 | 0x20, 0x00, 0x28, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x43, 0x00, 0x3a, 0x00, 227 | 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 228 | 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 229 | 0x29, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 230 | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x03, 0x0b, 231 | 0x25, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x4d, 232 | 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x52, 0x6f, 0x6f, 233 | 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 234 | 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 235 | 0x32, 0x30, 0x31, 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x31, 0x30, 236 | 0x31, 0x39, 0x31, 0x38, 0x34, 0x31, 0x34, 0x32, 0x5a, 0x17, 0x0d, 0x32, 237 | 0x36, 0x31, 0x30, 0x31, 0x39, 0x31, 0x38, 0x35, 0x31, 0x34, 0x32, 0x5a, 238 | 0x30, 0x81, 0x84, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x74, 0x30, 239 | 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 240 | 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x14, 0xfc, 0x7c, 0x71, 0x51, 241 | 0xa5, 0x79, 0xc2, 0x6e, 0xb2, 0xef, 0x39, 0x3e, 0xbc, 0x3c, 0x52, 0x0f, 242 | 0x6e, 0x2b, 0x3f, 0x10, 0x13, 0x73, 0xfe, 0xa8, 0x68, 0xd0, 0x48, 0xa6, 243 | 0x34, 0x4d, 0x8a, 0x96, 0x05, 0x26, 0xee, 0x31, 0x46, 0x90, 0x61, 0x79, 244 | 0xd6, 0x7f, 0xff, 0x04, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 246 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 247 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 248 | 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 249 | 0xe0, 0x98, 0x03, 0x2b, 0xc3, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 250 | 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 251 | 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 252 | 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 253 | 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 254 | 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x14, 0x00, 0x00, 0x00, 0x04, 255 | 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 256 | 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 257 | 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 258 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x07, 259 | 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xec, 0x76, 260 | 0xc0, 0x28, 0x70, 0x99, 0x43, 0xa0, 0x72, 0x71, 0xee, 0x5c, 0x44, 0x8b, 261 | 0x9f, 0x43, 0x00, 0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6d, 262 | 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 263 | 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xaa, 264 | 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 265 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 266 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 267 | 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x9f, 0x04, 0x19, 0x4c, 0x37, 268 | 0x41, 0xd3, 0x4d, 0x9c, 0x10, 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa, 0x4d, 269 | 0x00, 0x65, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x79, 0x00, 0x54, 270 | 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x66, 271 | 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 272 | 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x80, 273 | 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 274 | 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 275 | 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 276 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 277 | 0x00, 0xd5, 0xf6, 0x56, 0xcb, 0x8f, 0xe8, 0xa2, 0x5c, 0x62, 0x68, 0xd1, 278 | 0x3d, 0x94, 0x90, 0x5b, 0xd7, 0xce, 0x9a, 0x18, 0xc4, 0x30, 0x56, 0x06, 279 | 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4f, 0x30, 0x4d, 0x30, 0x4b, 0xa0, 0x49, 280 | 0xa0, 0x47, 0x86, 0x45, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 281 | 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 282 | 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 283 | 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 284 | 0x63, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 285 | 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x33, 0x2e, 0x63, 0x72, 286 | 0x6c, 0x30, 0x5a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 287 | 0x01, 0x04, 0x4e, 0x30, 0x4c, 0x30, 0x4a, 0x06, 0x08, 0x2b, 0x06, 0x01, 288 | 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 289 | 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 290 | 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x0c, 0x00, 0x00, 0x00, 0x22, 0x00, 291 | 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 292 | 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 293 | 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 294 | 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 295 | 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 296 | 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 297 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 298 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 299 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49, 0x00, 300 | 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 301 | 0x00, 0xe0, 0x98, 0x03, 0x03, 0x0f, 0x0b, 0x00, 0xff, 0xff, 0xff, 0xff, 302 | 0x03, 0x01, 0x01, 0x7f, 0x01, 0x04, 0x00, 0x01, 0x04, 0x14, 0x00, 0x9b, 303 | 0x5a, 0x5a, 0x86, 0x5d, 0xb8, 0x4c, 0x47, 0x84, 0x55, 0x65, 0xd1, 0xbe, 304 | 0x84, 0x4b, 0xe2, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 305 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0a, 306 | 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0x8d, 0x2b, 0xf1, 0xff, 0x96, 307 | 0x76, 0x8b, 0x4c, 0xa9, 0x85, 0x27, 0x47, 0x07, 0x5b, 0x4f, 0x50, 0x00, 308 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x46, 0x56, 0x48, 0xff, 309 | 0xfe, 0x04, 0x00, 0x48, 0x00, 0x19, 0xf9, 0x00, 0x00, 0x00, 0x02, 0x20, 310 | 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 311 | 0x00, 0x00, 0x00, 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43, 0xa1, 312 | 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92, 0xb8, 0xdf, 0x00, 0x00, 0x5a, 313 | 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 314 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 315 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 316 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 317 | 0x00, 0x00, 0x00, 0x0c, 0xec, 0x76, 0xc0, 0x28, 0x70, 0x99, 0x43, 0xa0, 318 | 0x72, 0x71, 0xee, 0x5c, 0x44, 0x8b, 0x9f, 0xf1, 0x00, 0x00, 0x00, 0x61, 319 | 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 320 | 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 321 | 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 322 | 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 323 | 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 324 | 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0xff, 325 | 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 326 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 327 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 328 | 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xe4, 0x73, 329 | 0x90, 0xec, 0x60, 0x6e, 0x4b, 0x99, 0x03, 0x4c, 0x22, 0x3c, 0x26, 0x0f, 330 | 0x3c, 0x56, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x72, 331 | 0x00, 0x4b, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x4e, 0x00, 0x76, 332 | 0x00, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 333 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 334 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 335 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 336 | 0x00, 0xc7, 0x0b, 0xa3, 0xf0, 0x08, 0xaf, 0x56, 0x45, 0x99, 0xc4, 0x00, 337 | 0x10, 0x09, 0xc9, 0x3a, 0x44, 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 338 | 0x00, 0x72, 0x00, 0x65, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 339 | 0x00, 0x45, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x65, 340 | 0x00, 0x00, 0x00, 0x01, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x00, 0x00, 0xff, 341 | 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 342 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 343 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 344 | 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0xd6, 345 | 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 346 | 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 347 | 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 348 | 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 349 | 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0xcb, 0xb2, 0x19, 0xd7, 0x3a, 0x3d, 350 | 0x96, 0x45, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f, 0x64, 0x00, 351 | 0x62, 0x00, 0x78, 0x00, 0x00, 0x00, 0x26, 0x16, 0xc4, 0xc1, 0x4c, 0x50, 352 | 0x92, 0x40, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28, 0x4c, 0x00, 353 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xa3, 0xa8, 354 | 0xba, 0xa0, 0x1d, 0x04, 0xa8, 0x48, 0xbc, 0x87, 0xc3, 0x6d, 0x12, 0x1b, 355 | 0x5e, 0x3d, 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 356 | 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 357 | 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55, 0x26, 0x16, 358 | 0xc4, 0xc1, 0x4c, 0x50, 0x92, 0x40, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 359 | 0x43, 0x28, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x40, 360 | 0x70, 0xeb, 0x02, 0x14, 0xd3, 0x11, 0x8e, 0x77, 0x00, 0xa0, 0xc9, 0x69, 361 | 0x72, 0x3b, 0x4d, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 362 | 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 363 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 364 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 365 | 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0xd6, 366 | 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 367 | 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 368 | 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 369 | 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 370 | 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xaa, 0x55, 371 | 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 372 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 373 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 374 | 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x45, 0x49, 0x32, 0x59, 0x44, 0xec, 375 | 0x0d, 0x4c, 0xb1, 0xcd, 0x9d, 0xb1, 0x39, 0xdf, 0x07, 0x0c, 0x41, 0x00, 376 | 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 377 | 0x20, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 378 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 379 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x74, 0x74, 0x65, 380 | 0x6d, 0x70, 0x74, 0x20, 0x31, 0x00, 0xf5, 0x2f, 0x83, 0xa3, 0xfa, 0x9c, 381 | 0xfb, 0xd6, 0x92, 0x0f, 0x72, 0x28, 0x24, 0xdb, 0xe4, 0x03, 0x45, 0x34, 382 | 0xd2, 0x5b, 0x85, 0x07, 0x24, 0x6b, 0x3b, 0x95, 0x7d, 0xac, 0x6e, 0x1b, 383 | 0xce, 0x7a, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 384 | 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc5, 0xd9, 0xd8, 0xa1, 0x86, 0xe2, 385 | 0xc8, 0x2d, 0x09, 0xaf, 0xaa, 0x2a, 0x6f, 0x7f, 0x2e, 0x73, 0x87, 0x0d, 386 | 0x3e, 0x64, 0xf7, 0x2c, 0x4e, 0x08, 0xef, 0x67, 0x79, 0x6a, 0x84, 0x0f, 387 | 0x0f, 0xbd, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 388 | 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x1a, 0xec, 0x84, 0xb8, 0x4b, 0x6c, 389 | 0x65, 0xa5, 0x12, 0x20, 0xa9, 0xbe, 0x71, 0x81, 0x96, 0x52, 0x30, 0x21, 390 | 0x0d, 0x62, 0xd6, 0xd3, 0x3c, 0x48, 0x99, 0x9c, 0x6b, 0x29, 0x5a, 0x2b, 391 | 0x0a, 0x06, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 392 | 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc3, 0xa9, 0x9a, 0x46, 0x0d, 0xa4, 393 | 0x64, 0xa0, 0x57, 0xc3, 0x58, 0x6d, 0x83, 0xce, 0xf5, 0xf4, 0xae, 0x08, 394 | 0xb7, 0x10, 0x39, 0x79, 0xed, 0x89, 0x32, 0x74, 0x2d, 0xf0, 0xed, 0x53, 395 | 0x0c, 0x66, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 396 | 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x58, 0xfb, 0x94, 0x1a, 0xef, 0x95, 397 | 0xa2, 0x59, 0x43, 0xb3, 0xfb, 0x5f, 0x25, 0x10, 0xa0, 0xdf, 0x3f, 0xe4, 398 | 0x4c, 0x58, 0xc9, 0x5e, 0x0a, 0xb8, 0x04, 0x87, 0x29, 0x75, 0x68, 0xab, 399 | 0x97, 0x71, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 400 | 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x53, 0x91, 0xc3, 0xa2, 0xfb, 0x11, 401 | 0x21, 0x02, 0xa6, 0xaa, 0x1e, 0xdc, 0x25, 0xae, 0x77, 0xe1, 0x9f, 0x5d, 402 | 0x6f, 0x09, 0xcd, 0x09, 0xee, 0xb2, 0x50, 0x99, 0x22, 0xbf, 0xcd, 0x59, 403 | 0x92, 0xea, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 404 | 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xd6, 0x26, 0x15, 0x7e, 0x1d, 0x6a, 405 | 0x71, 0x8b, 0xc1, 0x24, 0xab, 0x8d, 0xa2, 0x7c, 0xbb, 0x65, 0x07, 0x2c, 406 | 0xa0, 0x3a, 0x7b, 0x6b, 0x25, 0x7d, 0xbd, 0xcb, 0xbd, 0x60, 0xf6, 0x5e, 407 | 0xf3, 0xd1, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 408 | 0x28, 0xf4, 0xe7, 0xff, 0x04, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 409 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 410 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 411 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 412 | 0x00, 0xc6, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 413 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0xff, 0x04, 0x00, 0xaa, 0x55, 0x3c, 414 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 415 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 416 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 417 | 0x00, 0xb4, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 418 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x28, 0x00, 0x00, 419 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 420 | 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 421 | 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 422 | 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 423 | 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 424 | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xaa, 0x55, 0x3f, 425 | 0x00, 0x03, 0x00, 0xdd, 0x0c, 0xbb, 0xa2, 0xe4, 0x2e, 0x09, 0xe3, 0xe7, 426 | 0xc5, 0xf7, 0x96, 0x69, 0xbc, 0x00, 0x21, 0xbd, 0x69, 0x33, 0x33, 0xef, 427 | 0xad, 0x04, 0xcb, 0x54, 0x80, 0xee, 0x06, 0x83, 0xbb, 0xc5, 0x20, 0x84, 428 | 0xd9, 0xf7, 0xd2, 0x8b, 0xf3, 0x38, 0xb0, 0xab, 0xa4, 0xad, 0x2d, 0x7c, 429 | 0x62, 0x79, 0x05, 0xff, 0xe3, 0x4a, 0x3f, 0x04, 0x35, 0x20, 0x70, 0xe3, 430 | 0xc4, 0xe7, 0x6b, 0xe0, 0x9c, 0xc0, 0x36, 0x75, 0xe9, 0x8a, 0x31, 0xdd, 431 | 0x8d, 0x70, 0xe5, 0xdc, 0x37, 0xb5, 0x74, 0x46, 0x96, 0x28, 0x5b, 0x87, 432 | 0x60, 0x23, 0x2c, 0xbf, 0xdc, 0x47, 0xa5, 0x67, 0xf7, 0x51, 0x27, 0x9e, 433 | 0x72, 0xeb, 0x07, 0xa6, 0xc9, 0xb9, 0x1e, 0x3b, 0x53, 0x35, 0x7c, 0xe5, 434 | 0xd3, 0xec, 0x27, 0xb9, 0x87, 0x1c, 0xfe, 0xb9, 0xc9, 0x23, 0x09, 0x6f, 435 | 0xa8, 0x46, 0x91, 0xc1, 0x6e, 0x96, 0x3c, 0x41, 0xd3, 0xcb, 0xa3, 0x3f, 436 | 0x5d, 0x02, 0x6a, 0x4d, 0xec, 0x69, 0x1f, 0x25, 0x28, 0x5c, 0x36, 0xff, 437 | 0xfd, 0x43, 0x15, 0x0a, 0x94, 0xe0, 0x19, 0xb4, 0xcf, 0xdf, 0xc2, 0x12, 438 | 0xe2, 0xc2, 0x5b, 0x27, 0xee, 0x27, 0x78, 0x30, 0x8b, 0x5b, 0x2a, 0x09, 439 | 0x6b, 0x22, 0x89, 0x53, 0x60, 0x16, 0x2c, 0xc0, 0x68, 0x1d, 0x53, 0xba, 440 | 0xec, 0x49, 0xf3, 0x9d, 0x61, 0x8c, 0x85, 0x68, 0x09, 0x73, 0x44, 0x5d, 441 | 0x7d, 0xa2, 0x54, 0x2b, 0xdd, 0x79, 0xf7, 0x15, 0xcf, 0x35, 0x5d, 0x6c, 442 | 0x1c, 0x2b, 0x5c, 0xce, 0xbc, 0x9c, 0x23, 0x8b, 0x6f, 0x6e, 0xb5, 0x26, 443 | 0xd9, 0x36, 0x13, 0xc3, 0x4f, 0xd6, 0x27, 0xae, 0xb9, 0x32, 0x3b, 0x41, 444 | 0x92, 0x2c, 0xe1, 0xc7, 0xcd, 0x77, 0xe8, 0xaa, 0x54, 0x4e, 0xf7, 0x5c, 445 | 0x0b, 0x04, 0x87, 0x65, 0xb4, 0x43, 0x18, 0xa8, 0xb2, 0xe0, 0x6d, 0x19, 446 | 0x77, 0xec, 0x5a, 0x24, 0xfa, 0x48, 0x03, 0x02, 0x03, 0x01, 0x00, 0x01, 447 | 0xa3, 0x82, 0x01, 0x43, 0x30, 0x82, 0x01, 0x3f, 0x30, 0x10, 0x06, 0x09, 448 | 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 449 | 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 450 | 0x14, 0xa9, 0x29, 0x02, 0x39, 0x8e, 0x16, 0xc4, 0x97, 0x78, 0xcd, 0x90, 451 | 0xf9, 0x9e, 0x4f, 0x9a, 0xe1, 0x7c, 0x55, 0xaf, 0x53, 0x30, 0x19, 0x06, 452 | 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 453 | 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 454 | 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 455 | 0x86, 0x30, 0x0f, 0xc4, 0xe8, 0xb5, 0x8a, 0xbf, 0xad, 0x57, 0x26, 0xb0, 456 | 0x26, 0xc3, 0xea, 0xe7, 0xfb, 0x57, 0x7a, 0x44, 0x02, 0x5d, 0x07, 0x0d, 457 | 0xda, 0x4a, 0xe5, 0x74, 0x2a, 0xe6, 0xb0, 0x0f, 0xec, 0x6d, 0xeb, 0xec, 458 | 0x7f, 0xb9, 0xe3, 0x5a, 0x63, 0x32, 0x7c, 0x11, 0x17, 0x4f, 0x0e, 0xe3, 459 | 0x0b, 0xa7, 0x38, 0x15, 0x93, 0x8e, 0xc6, 0xf5, 0xe0, 0x84, 0xb1, 0x9a, 460 | 0x9b, 0x2c, 0xe7, 0xf5, 0xb7, 0x91, 0xd6, 0x09, 0xe1, 0xe2, 0xc0, 0x04, 461 | 0xa8, 0xac, 0x30, 0x1c, 0xdf, 0x48, 0xf3, 0x06, 0x50, 0x9a, 0x64, 0xa7, 462 | 0x51, 0x7f, 0xc8, 0x85, 0x4f, 0x8f, 0x20, 0x86, 0xce, 0xfe, 0x2f, 0xe1, 463 | 0x9f, 0xff, 0x82, 0xc0, 0xed, 0xe9, 0xcd, 0xce, 0xf4, 0x53, 0x6a, 0x62, 464 | 0x3a, 0x0b, 0x43, 0xb9, 0xe2, 0x25, 0xfd, 0xfe, 0x05, 0xf9, 0xd4, 0xc4, 465 | 0x14, 0xab, 0x11, 0xe2, 0x23, 0x89, 0x8d, 0x70, 0xb7, 0xa4, 0x1d, 0x4d, 466 | 0xec, 0xae, 0xe5, 0x9c, 0xfa, 0x16, 0xc2, 0xd7, 0xc1, 0xcb, 0xd4, 0xe8, 467 | 0xc4, 0x2f, 0xe5, 0x99, 0xee, 0x24, 0x8b, 0x03, 0xec, 0x8d, 0xf2, 0x8b, 468 | 0xea, 0xc3, 0x4a, 0xfb, 0x43, 0x11, 0x12, 0x0b, 0x7e, 0xb5, 0x47, 0x92, 469 | 0x6c, 0xdc, 0xe6, 0x04, 0x89, 0xeb, 0xf5, 0x33, 0x04, 0xeb, 0x10, 0x01, 470 | 0x2a, 0x71, 0xe5, 0xf9, 0x83, 0x13, 0x3c, 0xff, 0x25, 0x09, 0x2f, 0x68, 471 | 0x76, 0x46, 0xff, 0xba, 0x4f, 0xbe, 0xdc, 0xad, 0x71, 0x2a, 0x58, 0xaa, 472 | 0xfb, 0x0e, 0xd2, 0x79, 0x3d, 0xe4, 0x9b, 0x65, 0x3b, 0xcc, 0x29, 0x2a, 473 | 0x9f, 0xfc, 0x72, 0x59, 0xa2, 0xeb, 0xae, 0x92, 0xef, 0xf6, 0x35, 0x13, 474 | 0x80, 0xc6, 0x02, 0xec, 0xe4, 0x5f, 0xcc, 0x9d, 0x76, 0xcd, 0xef, 0x63, 475 | 0x92, 0xc1, 0xaf, 0x79, 0x40, 0x84, 0x79, 0x87, 0x7f, 0xe3, 0x52, 0xa8, 476 | 0xe8, 0x9d, 0x7b, 0x07, 0x69, 0x8f, 0x15, 0x02, 0x03, 0x01, 0x00, 0x01, 477 | 0xa3, 0x82, 0x01, 0x4f, 0x30, 0x82, 0x01, 0x4b, 0x30, 0x10, 0x06, 0x09, 478 | 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 479 | 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 480 | 0x14, 0x62, 0xfc, 0x43, 0xcd, 0xa0, 0x3e, 0xa4, 0xcb, 0x67, 0x12, 0xd2, 481 | 0x5b, 0xd9, 0x55, 0xac, 0x7b, 0xcc, 0xb6, 0x8a, 0x5f, 0x30, 0x19, 0x06, 482 | 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 483 | 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 484 | 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 485 | 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 486 | 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0xff, 0x04, 0x00, 487 | 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 488 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 489 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 490 | 0x00, 0x0e, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 491 | 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 492 | 0x35, 0x08, 0x42, 0xff, 0x30, 0xcc, 0xce, 0xf7, 0x76, 0x0c, 0xad, 0x10, 493 | 0x68, 0x58, 0x35, 0x29, 0x46, 0x32, 0x76, 0x27, 0x7c, 0xef, 0x12, 0x41, 494 | 0x27, 0x42, 0x1b, 0x4a, 0xaa, 0x6d, 0x81, 0x38, 0x48, 0x59, 0x13, 0x55, 495 | 0xf3, 0xe9, 0x58, 0x34, 0xa6, 0x16, 0x0b, 0x82, 0xaa, 0x5d, 0xad, 0x82, 496 | 0xda, 0x80, 0x83, 0x41, 0x06, 0x8f, 0xb4, 0x1d, 0xf2, 0x03, 0xb9, 0xf3, 497 | 0x1a, 0x5d, 0x1b, 0xf1, 0x50, 0x90, 0xf9, 0xb3, 0x55, 0x84, 0x42, 0x28, 498 | 0x1c, 0x20, 0xbd, 0xb2, 0xae, 0x51, 0x14, 0xc5, 0xc0, 0xac, 0x97, 0x95, 499 | 0x21, 0x1c, 0x90, 0xdb, 0x0f, 0xfc, 0x77, 0x9e, 0x95, 0x73, 0x91, 0x88, 500 | 0xca, 0xbd, 0xbd, 0x52, 0xb9, 0x05, 0x50, 0x0d, 0xdf, 0x57, 0x9e, 0xa0, 501 | 0x61, 0xed, 0x0d, 0xe5, 0x6d, 0x25, 0xd9, 0x40, 0x0f, 0x17, 0x40, 0xc8, 502 | 0xce, 0xa3, 0x4a, 0xc2, 0x4d, 0xaf, 0x9a, 0x12, 0x1d, 0x08, 0x54, 0x8f, 503 | 0xbd, 0xc7, 0xbc, 0xb9, 0x2b, 0x3d, 0x49, 0x2b, 0x1f, 0x32, 0xfc, 0x6a, 504 | 0x21, 0x69, 0x4f, 0x9b, 0xc8, 0x7e, 0x42, 0x34, 0xfc, 0x36, 0x06, 0x17, 505 | 0x8b, 0x8f, 0x20, 0x40, 0xc0, 0xb3, 0x9a, 0x25, 0x75, 0x27, 0xcd, 0xc9, 506 | 0x03, 0xa3, 0xf6, 0x5d, 0xd1, 0xe7, 0x36, 0x54, 0x7a, 0xb9, 0x50, 0xb5, 507 | 0xd3, 0x12, 0xd1, 0x07, 0xbf, 0xbb, 0x74, 0xdf, 0xdc, 0x1e, 0x8f, 0x80, 508 | 0xd5, 0xed, 0x18, 0xf4, 0x2f, 0x14, 0x16, 0x6b, 0x2f, 0xde, 0x66, 0x8c, 509 | 0xb0, 0x23, 0xe5, 0xc7, 0x84, 0xd8, 0xed, 0xea, 0xc1, 0x33, 0x82, 0xad, 510 | 0x56, 0x4b, 0x18, 0x2d, 0xf1, 0x68, 0x95, 0x07, 0xcd, 0xcf, 0xf0, 0x72, 511 | 0xf0, 0xae, 0xbb, 0xdd, 0x86, 0x85, 0x98, 0x2c, 0x21, 0x4c, 0x33, 0x2b, 512 | 0xf0, 0x0f, 0x4a, 0xf0, 0x68, 0x87, 0xb5, 0x92, 0x55, 0x32, 0x75, 0xa1, 513 | 0x6a, 0x82, 0x6a, 0x3c, 0xa3, 0x25, 0x11, 0xa4, 0xed, 0xad, 0xd7, 0x04, 514 | 0xae, 0xcb, 0xd8, 0x40, 0x59, 0xa0, 0x84, 0xd1, 0x95, 0x4c, 0x62, 0x91, 515 | 0x22, 0x1a, 0x74, 0x1d, 0x8c, 0x3d, 0x47, 0x0e, 0x44, 0xa6, 0xe4, 0xb0, 516 | 0x9b, 0x34, 0x35, 0xb1, 0xfa, 0xb6, 0x53, 0xa8, 0x2c, 0x81, 0xec, 0xa4, 517 | 0x05, 0x71, 0xc8, 0x9d, 0xb8, 0xba, 0xe8, 0x1b, 0x44, 0x66, 0xe4, 0x47, 518 | 0x54, 0x0e, 0x8e, 0x56, 0x7f, 0xb3, 0x9f, 0x16, 0x98, 0xb2, 0x86, 0xd0, 519 | 0x68, 0x3e, 0x90, 0x23, 0xb5, 0x2f, 0x5e, 0x8f, 0x50, 0x85, 0x8d, 0xc6, 520 | 0x8d, 0x82, 0x5f, 0x41, 0xa1, 0xf4, 0x2e, 0x0d, 0xe0, 0x99, 0xd2, 0x6c, 521 | 0x75, 0xe4, 0xb6, 0x69, 0xb5, 0x21, 0x86, 0xfa, 0x07, 0xd1, 0xf6, 0xe2, 522 | 0x4d, 0xd1, 0xda, 0xad, 0x2c, 0x77, 0x53, 0x1e, 0x25, 0x32, 0x37, 0xc7, 523 | 0x6c, 0x52, 0x72, 0x95, 0x86, 0xb0, 0xf1, 0x35, 0x61, 0x6a, 0x19, 0xf5, 524 | 0xb2, 0x3b, 0x81, 0x50, 0x56, 0xa6, 0x32, 0x2d, 0xfe, 0xa2, 0x89, 0xf9, 525 | 0x42, 0x86, 0x27, 0x18, 0x55, 0xa1, 0x82, 0xca, 0x5a, 0x9b, 0xf8, 0x30, 526 | 0x98, 0x54, 0x14, 0xa6, 0x47, 0x96, 0x25, 0x2f, 0xc8, 0x26, 0xe4, 0x41, 527 | 0x94, 0x1a, 0x5c, 0x02, 0x3f, 0xe5, 0x96, 0xe3, 0x85, 0x5b, 0x3c, 0x3e, 528 | 0x3f, 0xbb, 0x47, 0x16, 0x72, 0x55, 0xe2, 0x25, 0x22, 0xb1, 0xd9, 0x7b, 529 | 0xe7, 0x03, 0x06, 0x2a, 0xa3, 0xf7, 0x1e, 0x90, 0x46, 0xc3, 0x00, 0x0d, 530 | 0xd6, 0x19, 0x89, 0xe3, 0x0e, 0x35, 0x27, 0x62, 0x03, 0x71, 0x15, 0xa6, 531 | 0xef, 0xd0, 0x27, 0xa0, 0xa0, 0x59, 0x37, 0x60, 0xf8, 0x38, 0x94, 0xb8, 532 | 0xe0, 0x78, 0x70, 0xf8, 0xba, 0x4c, 0x86, 0x87, 0x94, 0xf6, 0xe0, 0xae, 533 | 0x02, 0x45, 0xee, 0x65, 0xc2, 0xb6, 0xa3, 0x7e, 0x69, 0x16, 0x75, 0x07, 534 | 0x92, 0x9b, 0xf5, 0xa6, 0xbc, 0x59, 0x83, 0x58, 0xff, 0xff, 0xff, 0xaa, 535 | 0x55, 0x3c, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 536 | 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 537 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 538 | 0x00, 0x02, 0x02, 0x09, 0x00, 0xfe, 0xf5, 0x88, 0xe8, 0xf3, 0x96, 0xc0, 539 | 0xf1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 540 | 0x01, 0x0b, 0x05, 0x00, 0x30, 0x51, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 541 | 0x55, 0x04, 0x03, 0x13, 0x22, 0x52, 0x65, 0x64, 0x20, 0x48, 0x61, 0x74, 542 | 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x42, 0x6f, 0x6f, 0x74, 543 | 0x20, 0x28, 0x50, 0x4b, 0x2f, 0x4b, 0x45, 0x4b, 0x20, 0x6b, 0x65, 0x79, 544 | 0x20, 0x31, 0x29, 0x31, 0x22, 0x30, 0x20, 0x06, 0x09, 0x2a, 0x86, 0x48, 545 | 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x13, 0x73, 0x65, 0x63, 0x61, 546 | 0x6c, 0x65, 0x72, 0x74, 0x40, 0x72, 0x65, 0x64, 0x68, 0x61, 0x74, 0x2e, 547 | 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x33, 548 | 0x31, 0x31, 0x31, 0x31, 0x35, 0x33, 0x37, 0x5a, 0x17, 0x0d, 0x33, 0x37, 549 | 0x31, 0x30, 0x32, 0x35, 0x31, 0x31, 0x31, 0x35, 0x33, 0x37, 0x5a, 0x30, 550 | 0x51, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 551 | 0x52, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 552 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 553 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 554 | 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x61, 555 | 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 556 | 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 557 | 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 558 | 0x00, 0x2c, 0x00, 0x55, 0x00, 0x69, 0x00, 0x41, 0x00, 0x70, 0x00, 0x70, 559 | 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0xd4, 0x84, 0x88, 0xf5, 0x14, 0x94, 560 | 0x18, 0x02, 0xca, 0x2a, 0x3c, 0xfb, 0x2a, 0x92, 0x1c, 0x0c, 0xd7, 0xa0, 561 | 0xd1, 0xf1, 0xe8, 0x52, 0x66, 0xa8, 0xee, 0xa2, 0xb5, 0x75, 0x7a, 0x90, 562 | 0x00, 0xaa, 0x2d, 0xa4, 0x76, 0x5a, 0xea, 0x79, 0xb7, 0xb9, 0x37, 0x6a, 563 | 0x51, 0x7b, 0x10, 0x64, 0xf6, 0xe1, 0x64, 0xf2, 0x02, 0x67, 0xbe, 0xf7, 564 | 0xa8, 0x1b, 0x78, 0xbd, 0xba, 0xce, 0x88, 0x58, 0x64, 0x0c, 0xd6, 0x57, 565 | 0xc8, 0x19, 0xa3, 0x5f, 0x05, 0xd6, 0xdb, 0xc6, 0xd0, 0x69, 0xce, 0x48, 566 | 0x4b, 0x32, 0xb7, 0xeb, 0x5d, 0xd2, 0x30, 0xf5, 0xc0, 0xf5, 0xb8, 0xba, 567 | 0x78, 0x07, 0xa3, 0x2b, 0xfe, 0x9b, 0xdb, 0x34, 0x56, 0x84, 0xec, 0x82, 568 | 0xca, 0xae, 0x41, 0x25, 0x70, 0x9c, 0x6b, 0xe9, 0xfe, 0x90, 0x0f, 0xd7, 569 | 0x96, 0x1f, 0xe5, 0xe7, 0x94, 0x1f, 0xb2, 0x2a, 0x0c, 0x8d, 0x4b, 0xff, 570 | 0x28, 0x29, 0x10, 0x7b, 0xf7, 0xd7, 0x7c, 0xa5, 0xd1, 0x76, 0xb9, 0x05, 571 | 0xc8, 0x79, 0xed, 0x0f, 0x90, 0x92, 0x9c, 0xc2, 0xfe, 0xdf, 0x6f, 0x7e, 572 | 0x6c, 0x0f, 0x7b, 0xd4, 0xc1, 0x45, 0xdd, 0x34, 0x51, 0x96, 0x39, 0x0f, 573 | 0xe5, 0x5e, 0x56, 0xd8, 0x18, 0x05, 0x96, 0xf4, 0x07, 0xa6, 0x42, 0xb3, 574 | 0xa0, 0x77, 0xfd, 0x08, 0x19, 0xf2, 0x71, 0x56, 0xcc, 0x9f, 0x86, 0x23, 575 | 0xa4, 0x87, 0xcb, 0xa6, 0xfd, 0x58, 0x7e, 0xd4, 0x69, 0x67, 0x15, 0x91, 576 | 0x7e, 0x81, 0xf2, 0x7f, 0x13, 0xe5, 0x0d, 0x8b, 0x8a, 0x3c, 0x87, 0x84, 577 | 0xeb, 0xe3, 0xce, 0xbd, 0x43, 0xe5, 0xad, 0x2d, 0x84, 0x93, 0x8e, 0x6a, 578 | 0x2b, 0x5a, 0x7c, 0x44, 0xfa, 0x52, 0xaa, 0x81, 0xc8, 0x2d, 0x1c, 0xbb, 579 | 0xe0, 0x52, 0xdf, 0x00, 0x11, 0xf8, 0x9a, 0x3d, 0xc1, 0x60, 0xb0, 0xe1, 580 | 0x33, 0xb5, 0xa3, 0x88, 0xd1, 0x65, 0x19, 0x0a, 0x1a, 0xe7, 0xac, 0x7c, 581 | 0xa4, 0xc1, 0x82, 0x87, 0x4e, 0x38, 0xb1, 0x2f, 0x0d, 0xc5, 0x14, 0x87, 582 | 0x6f, 0xfd, 0x8d, 0x2e, 0xbc, 0x39, 0xb6, 0xe7, 0xe6, 0xc3, 0xe0, 0xe4, 583 | 0xcd, 0x27, 0x84, 0xef, 0x94, 0x42, 0xef, 0x29, 0x8b, 0x90, 0x46, 0x41, 584 | 0x3b, 0x81, 0x1b, 0x67, 0xd8, 0xf9, 0x43, 0x59, 0x65, 0xcb, 0x0d, 0xbc, 585 | 0xfd, 0x00, 0x92, 0x4f, 0xf4, 0x75, 0x3b, 0xa7, 0xa9, 0x24, 0xfc, 0x50, 586 | 0x41, 0x40, 0x79, 0xe0, 0x2d, 0x4f, 0x0a, 0x6a, 0x27, 0x76, 0x6e, 0x52, 587 | 0xed, 0x96, 0x69, 0x7b, 0xaf, 0x0f, 0xf7, 0x87, 0x05, 0xd0, 0x45, 0xc2, 588 | 0xad, 0x53, 0x14, 0x81, 0x1f, 0xfb, 0x30, 0x04, 0xaa, 0x37, 0x36, 0x61, 589 | 0xda, 0x4a, 0x69, 0x1b, 0x34, 0xd8, 0x68, 0xed, 0xd6, 0x02, 0xcf, 0x6c, 590 | 0x94, 0x0c, 0xd3, 0xcf, 0x6c, 0x22, 0x79, 0xad, 0xb1, 0xf0, 0xbc, 0x03, 591 | 0xa2, 0x46, 0x60, 0xa9, 0xc4, 0x07, 0xc2, 0x21, 0x82, 0xf1, 0xfd, 0xf2, 592 | 0xe8, 0x79, 0x32, 0x60, 0xbf, 0xd8, 0xac, 0xa5, 0x22, 0x14, 0x4b, 0xca, 593 | 0xc1, 0xd8, 0x4b, 0xeb, 0x7d, 0x3f, 0x57, 0x35, 0xb2, 0xe6, 0x4f, 0x75, 594 | 0xb4, 0xb0, 0x60, 0x03, 0x22, 0x53, 0xae, 0x91, 0x79, 0x1d, 0xd6, 0x9b, 595 | 0x41, 0x1f, 0x15, 0x86, 0x54, 0x70, 0xb2, 0xde, 0x0d, 0x35, 0x0f, 0x7c, 596 | 0xb0, 0x34, 0x72, 0xba, 0x97, 0x60, 0x3b, 0xf0, 0x79, 0xeb, 0xa2, 0xb2, 597 | 0x1c, 0x5d, 0xa2, 0x16, 0xb8, 0x87, 0xc5, 0xe9, 0x1b, 0xf6, 0xb5, 0x97, 598 | 0x25, 0x6f, 0x38, 0x9f, 0xe3, 0x91, 0xfa, 0x8a, 0x79, 0x98, 0xc3, 0x69, 599 | 0x0e, 0xb7, 0xa3, 0x1c, 0x20, 0x05, 0x97, 0xf8, 0xca, 0x14, 0xae, 0x00, 600 | 0xd7, 0xc4, 0xf3, 0xc0, 0x14, 0x10, 0x75, 0x6b, 0x34, 0xa0, 0x1b, 0xb5, 601 | 0x99, 0x60, 0xf3, 0x5c, 0xb0, 0xc5, 0x57, 0x4e, 0x36, 0xd2, 0x32, 0x84, 602 | 0xbf, 0x9e, 0xaa, 0x55, 0x3f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 603 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 604 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 605 | 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd0, 0x03, 0x00, 0x00, 0x61, 0xdf, 606 | 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xd0, 0x63, 0xec, 607 | 0x28, 0xf6, 0x7e, 0xba, 0x53, 0xf1, 0x64, 0x2d, 0xbf, 0x7d, 0xff, 0x33, 608 | 0xc6, 0xa3, 0x2a, 0xdd, 0x86, 0x9f, 0x60, 0x13, 0xfe, 0x16, 0x2e, 0x2c, 609 | 0x32, 0xf1, 0xcb, 0xe5, 0x6d, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 610 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x29, 0xc6, 0xeb, 611 | 0x52, 0xb4, 0x3c, 0x3a, 0xa1, 0x8b, 0x2c, 0xd8, 0xed, 0x6e, 0xa8, 0x60, 612 | 0x7c, 0xef, 0x3c, 0xfa, 0xe1, 0xba, 0xfe, 0x11, 0x65, 0x75, 0x5c, 0xf2, 613 | 0xe6, 0x14, 0x84, 0x4a, 0x44, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 614 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x90, 0xfb, 0xe7, 615 | 0x0e, 0x69, 0xd6, 0x33, 0x40, 0x8d, 0x3e, 0x17, 0x0c, 0x68, 0x32, 0xdb, 616 | 0xb2, 0xd2, 0x09, 0xe0, 0x27, 0x25, 0x27, 0xdf, 0xb6, 0x3d, 0x49, 0xd2, 617 | 0x95, 0x72, 0xa6, 0xf4, 0x4c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 618 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x10, 0x6f, 0xac, 619 | 0xea, 0xcf, 0xec, 0xfd, 0x4e, 0x30, 0x3b, 0x74, 0xf4, 0x80, 0xa0, 0x80, 620 | 0x98, 0xe2, 0xd0, 0x80, 0x2b, 0x93, 0x6f, 0x8e, 0xc7, 0x74, 0xce, 0x21, 621 | 0xf3, 0x16, 0x86, 0x68, 0x9c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 622 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x17, 0x4e, 0x3a, 623 | 0x0b, 0x5b, 0x43, 0xc6, 0xa6, 0x07, 0xbb, 0xd3, 0x40, 0x4f, 0x05, 0x34, 624 | 0x1e, 0x3d, 0xcf, 0x39, 0x62, 0x67, 0xce, 0x94, 0xf8, 0xb5, 0x0e, 0x2e, 625 | 0x23, 0xa9, 0xda, 0x92, 0x0c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 626 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x2b, 0x99, 0xcf, 627 | 0x26, 0x42, 0x2e, 0x92, 0xfe, 0x36, 0x5f, 0xbf, 0x4b, 0xc3, 0x0d, 0x27, 628 | 0x08, 0x6c, 0x9e, 0xe1, 0x4b, 0x7a, 0x6f, 0xff, 0x44, 0xfb, 0x2f, 0x6b, 629 | 0x90, 0x01, 0x69, 0x99, 0x39, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 630 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x2e, 0x70, 0x91, 631 | 0x67, 0x86, 0xa6, 0xf7, 0x73, 0x51, 0x1f, 0xa7, 0x18, 0x1f, 0xab, 0x0f, 632 | 0x1d, 0x70, 0xb5, 0x57, 0xc6, 0x32, 0x2e, 0xa9, 0x23, 0xb2, 0xa8, 0xd3, 633 | 0xb9, 0x2b, 0x51, 0xaf, 0x7d, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 634 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x3f, 0xce, 0x9b, 635 | 0x9f, 0xdf, 0x3e, 0xf0, 0x9d, 0x54, 0x52, 0xb0, 0xf9, 0x5e, 0xe4, 0x81, 636 | 0xc2, 0xb7, 0xf0, 0x6d, 0x74, 0x3a, 0x73, 0x79, 0x71, 0x55, 0x8e, 0x70, 637 | 0x13, 0x6a, 0xce, 0x3e, 0x73, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 638 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x47, 0xcc, 0x08, 639 | 0x61, 0x27, 0xe2, 0x06, 0x9a, 0x86, 0xe0, 0x3a, 0x6b, 0xef, 0x2c, 0xd4, 640 | 0x10, 0xf8, 0xc5, 0x5a, 0x6d, 0x6b, 0xdb, 0x36, 0x21, 0x68, 0xc3, 0x1b, 641 | 0x2c, 0xe3, 0x2a, 0x5a, 0xdf, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 642 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x71, 0xf2, 0x90, 643 | 0x6f, 0xd2, 0x22, 0x49, 0x7e, 0x54, 0xa3, 0x46, 0x62, 0xab, 0x24, 0x97, 644 | 0xfc, 0xc8, 0x10, 0x20, 0x77, 0x0f, 0xf5, 0x13, 0x68, 0xe9, 0xe3, 0xd9, 645 | 0xbf, 0xcb, 0xfd, 0x63, 0x75, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 646 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x82, 0xdb, 0x3b, 647 | 0xce, 0xb4, 0xf6, 0x08, 0x43, 0xce, 0x9d, 0x97, 0xc3, 0xd1, 0x87, 0xcd, 648 | 0x9b, 0x59, 0x41, 0xcd, 0x3d, 0xe8, 0x10, 0x0e, 0x58, 0x6f, 0x2b, 0xda, 649 | 0x56, 0x37, 0x57, 0x5f, 0x67, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 650 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x8a, 0xd6, 0x48, 651 | 0x59, 0xf1, 0x95, 0xb5, 0xf5, 0x8d, 0xaf, 0xaa, 0x94, 0x0b, 0x6a, 0x61, 652 | 0x67, 0xac, 0xd6, 0x7a, 0x88, 0x6e, 0x8f, 0x46, 0x93, 0x64, 0x17, 0x72, 653 | 0x21, 0xc5, 0x59, 0x45, 0xb9, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 654 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x8d, 0x8e, 0xa2, 655 | 0x89, 0xcf, 0xe7, 0x0a, 0x1c, 0x07, 0xab, 0x73, 0x65, 0xcb, 0x28, 0xee, 656 | 0x51, 0xed, 0xd3, 0x3c, 0xf2, 0x50, 0x6d, 0xe8, 0x88, 0xfb, 0xad, 0xd6, 657 | 0x0e, 0xbf, 0x80, 0x48, 0x1c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 658 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xae, 0xeb, 0xae, 659 | 0x31, 0x51, 0x27, 0x12, 0x73, 0xed, 0x95, 0xaa, 0x2e, 0x67, 0x11, 0x39, 660 | 0xed, 0x31, 0xa9, 0x85, 0x67, 0x30, 0x3a, 0x33, 0x22, 0x98, 0xf8, 0x37, 661 | 0x09, 0xa9, 0xd5, 0x5a, 0xa1, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 662 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc4, 0x09, 0xbd, 663 | 0xac, 0x47, 0x75, 0xad, 0xd8, 0xdb, 0x92, 0xaa, 0x22, 0xb5, 0xb7, 0x18, 664 | 0xfb, 0x8c, 0x94, 0xa1, 0x46, 0x2c, 0x1f, 0xe9, 0xa4, 0x16, 0xb9, 0x5d, 665 | 0x8a, 0x33, 0x88, 0xc2, 0xfc, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 666 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc6, 0x17, 0xc1, 667 | 0xa8, 0xb1, 0xee, 0x2a, 0x81, 0x1c, 0x28, 0xb5, 0xa8, 0x1b, 0x4c, 0x83, 668 | 0xd7, 0xc9, 0x8b, 0x5b, 0x0c, 0x27, 0x28, 0x1d, 0x61, 0x02, 0x07, 0xeb, 669 | 0xe6, 0x92, 0xc2, 0x96, 0x7f, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 670 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc9, 0x0f, 0x33, 671 | 0x66, 0x17, 0xb8, 0xe7, 0xf9, 0x83, 0x97, 0x54, 0x13, 0xc9, 0x97, 0xf1, 672 | 0x0b, 0x73, 0xeb, 0x26, 0x7f, 0xd8, 0xa1, 0x0c, 0xb9, 0xe3, 0xbd, 0xbf, 673 | 0xc6, 0x67, 0xab, 0xdb, 0x8b, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 674 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x64, 0x57, 0x5b, 675 | 0xd9, 0x12, 0x78, 0x9a, 0x2e, 0x14, 0xad, 0x56, 0xf6, 0x34, 0x1f, 0x52, 676 | 0xaf, 0x6b, 0xf8, 0x0c, 0xf9, 0x44, 0x00, 0x78, 0x59, 0x75, 0xe9, 0xf0, 677 | 0x4e, 0x2d, 0x64, 0xd7, 0x45, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 678 | 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x45, 0xc7, 0xc8, 679 | 0xae, 0x75, 0x0a, 0xcf, 0xbb, 0x48, 0xfc, 0x37, 0x52, 0x7d, 0x64, 0x12, 680 | 0xdd, 0x64, 0x4d, 0xae, 0xd8, 0x91, 0x3c, 0xcd, 0x8a, 0x24, 0xc9, 0x4d, 681 | 0x85, 0x69, 0x67, 0xdf, 0x8e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 682 | 0x02, 0x01, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 683 | 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 684 | 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 685 | 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 686 | 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 687 | 0x00, 0x00, 0x7f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 688 | 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 689 | 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x6c, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 690 | 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 691 | 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 692 | 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 693 | 0x00, 0x55, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x51, 694 | 0x00, 0x45, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x20, 0x00, 0x44, 0x00, 0x56, 695 | 0x00, 0x44, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x20, 696 | 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 697 | 0x00, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 698 | 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 699 | 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 700 | 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 701 | 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0xff, 0xff, 0xaa, 0x55, 0x3c, 702 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 703 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 704 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 705 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 706 | 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 707 | 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 708 | 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xff, 709 | 0xff, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 710 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 711 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 712 | 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 713 | 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 714 | 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 715 | 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 716 | 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 717 | 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 718 | 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 719 | 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 720 | 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0xe4, 0xaf, 0x65, 0x16, 0xa1, 0x04, 721 | 0x06, 0x14, 0x00, 0x83, 0xa5, 0x04, 0x7c, 0x3e, 0x9e, 0x1c, 0x4f, 0xad, 722 | 0x65, 0xe0, 0x52, 0x68, 0xd0, 0xb4, 0xd1, 0x7f, 0xff, 0x04, 0x00, 0xff, 723 | 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x01, 0xff, 0xaa, 0x55, 0x3f, 724 | 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 725 | 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 726 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 727 | 0x00, 0x47, 0x0c, 0x00, 0x00, 0xcb, 0xb2, 0x19, 0xd7, 0x3a, 0x3d, 0x96, 728 | 0x45, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f, 0x64, 0x00, 0x62, 729 | 0x00, 0x00, 0x00, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 730 | 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0x07, 0x06, 0x00, 0x00, 0x00, 731 | 0x00, 0x00, 0x00, 0xeb, 0x05, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 732 | 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x30, 733 | 0x82, 0x05, 0xd7, 0x30, 0x82, 0x03, 0xbf, 0xa0, 0x03, 0x02, 0x01, 0x02, 734 | 0x02, 0x0a, 0x61, 0x07, 0x76, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 735 | 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 736 | 0x0b, 0x05, 0x00, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 737 | 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 738 | 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 739 | 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 740 | 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 741 | 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x6c, 0x00, 0x00, 0x00, 0x61, 0xdf, 742 | 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 743 | 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 744 | 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 745 | 0x20, 0x00, 0x55, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 746 | 0x51, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x20, 0x00, 0x44, 0x00, 747 | 0x56, 0x00, 0x44, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4d, 0x00, 748 | 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 749 | 0x31, 0x00, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 750 | 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 751 | 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 752 | 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 753 | 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0xff, 0xff, 0xaa, 0x55, 754 | 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 755 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 756 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 757 | 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 758 | 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 759 | 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 760 | 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 761 | 0xff, 0xff, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 762 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 763 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 764 | 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 765 | 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 766 | 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 767 | 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 768 | 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 769 | 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 770 | 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 771 | 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 772 | 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0xe4, 0xaf, 0x65, 0x16, 0xa1, 773 | 0x04, 0x06, 0x14, 0x00, 0x83, 0xa5, 0x04, 0x7c, 0x3e, 0x9e, 0x1c, 0x4f, 774 | 0xad, 0x65, 0xe0, 0x52, 0x68, 0xd0, 0xb4, 0xd1, 0x7f, 0xff, 0x04, 0x00, 775 | 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x30, 0x81, 0x91, 0x31, 776 | 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 777 | 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 778 | 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 779 | 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 780 | 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 781 | 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 782 | 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 783 | 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, 0x4d, 0x69, 784 | 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 785 | 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x54, 0x68, 0x69, 0x72, 786 | 0x64, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x20, 0x4d, 0x61, 0x72, 0x6b, 787 | 0x65, 0x74, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x52, 0x6f, 0x6f, 0x74, 788 | 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x36, 0x32, 0x34, 0x32, 0x30, 789 | 0x34, 0x31, 0x32, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 790 | 0x34, 0x32, 0x30, 0x35, 0x31, 0x32, 0x39, 0x5a, 0x30, 0x81, 0x80, 0x31, 791 | 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 792 | 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 793 | 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 794 | 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 795 | 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 796 | 0x01, 0x04, 0x14, 0x00, 0x9b, 0x5a, 0x5a, 0x86, 0x5d, 0xb8, 0x4c, 0x47, 797 | 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2, 0x03, 0x0e, 0x13, 0x00, 798 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 799 | 0x00, 0x00, 0x00, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 800 | 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7f, 801 | 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x20, 802 | 0x55, 0x45, 0x46, 0x49, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 803 | 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 804 | 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 805 | 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa5, 0x08, 0x6c, 806 | 0x4c, 0xc7, 0x45, 0x09, 0x6a, 0x4b, 0x0c, 0xa4, 0xc0, 0x87, 0x7f, 0x06, 807 | 0x75, 0x0c, 0x43, 0x01, 0x54, 0x64, 0xe0, 0x16, 0x7f, 0x07, 0xed, 0x92, 808 | 0x7d, 0x0b, 0xb2, 0x73, 0xbf, 0x0c, 0x0a, 0xc6, 0x4a, 0x45, 0x61, 0xa0, 809 | 0xc5, 0x16, 0x2d, 0x96, 0xd3, 0xf5, 0x2b, 0xa0, 0xfb, 0x4d, 0x49, 0x9b, 810 | 0x41, 0x80, 0x90, 0x3c, 0xb9, 0x54, 0xfd, 0xe6, 0xbc, 0xd1, 0x9d, 0xc4, 811 | 0xa4, 0x18, 0x8a, 0x7f, 0x41, 0x8a, 0x5c, 0x59, 0x83, 0x68, 0x32, 0xbb, 812 | 0x8c, 0x47, 0xc9, 0xee, 0x71, 0xbc, 0x21, 0x4f, 0x9a, 0x8a, 0x7c, 0xff, 813 | 0x44, 0x3f, 0x8d, 0x8f, 0x32, 0xb2, 0x26, 0x48, 0xae, 0x75, 0xb5, 0xee, 814 | 0xc9, 0x4c, 0x1e, 0x4a, 0x19, 0x7e, 0xe4, 0x82, 0x9a, 0x1d, 0x78, 0x77, 815 | 0x4d, 0x0c, 0xb0, 0xbd, 0xf6, 0x0f, 0xd3, 0x16, 0xd3, 0xbc, 0xfa, 0x2b, 816 | 0xa5, 0x51, 0x38, 0x5d, 0xf5, 0xfb, 0xba, 0xdb, 0x78, 0x02, 0xdb, 0xff, 817 | 0xec, 0x0a, 0x1b, 0x96, 0xd5, 0x83, 0xb8, 0x19, 0x13, 0xe9, 0xb6, 0xc0, 818 | 0x7b, 0x40, 0x7b, 0xe1, 0x1f, 0x28, 0x27, 0xc9, 0xfa, 0xef, 0x56, 0x5e, 819 | 0x1c, 0xe6, 0x7e, 0x94, 0x7e, 0xc0, 0xf0, 0x44, 0xb2, 0x79, 0x39, 0xe5, 820 | 0xda, 0xb2, 0x62, 0x8b, 0x4d, 0xbf, 0x38, 0x70, 0xe2, 0x68, 0x24, 0x14, 821 | 0xc9, 0x33, 0xa4, 0x08, 0x37, 0xd5, 0x58, 0x69, 0x5e, 0xd3, 0x7c, 0xed, 822 | 0xc1, 0x04, 0x53, 0x08, 0xe7, 0x4e, 0xb0, 0x2a, 0x87, 0x63, 0x08, 0x61, 823 | 0x6f, 0x63, 0x15, 0x59, 0xea, 0xb2, 0x2b, 0x79, 0xd7, 0x0c, 0x61, 0x67, 824 | 0x8a, 0x5b, 0xfd, 0x5e, 0xad, 0x87, 0x7f, 0xba, 0x86, 0x67, 0x4f, 0x71, 825 | 0x58, 0x12, 0x22, 0x04, 0x22, 0x22, 0xce, 0x8b, 0xef, 0x54, 0x71, 0x00, 826 | 0xce, 0x50, 0x35, 0x58, 0x76, 0x95, 0x08, 0xee, 0x6a, 0xb1, 0xa2, 0x01, 827 | 0xd5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x76, 0x30, 0x82, 828 | 0x01, 0x72, 0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 829 | 0x37, 0x15, 0x01, 0x04, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x23, 830 | 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x02, 0x04, 831 | 0x16, 0x04, 0x14, 0xf8, 0xc1, 0x6b, 0xb7, 0x7f, 0x77, 0x53, 0x4a, 0xf3, 832 | 0x25, 0x37, 0x1d, 0x4e, 0xa1, 0x26, 0x7b, 0x0f, 0x20, 0x70, 0x80, 0x30, 833 | 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x13, 0xad, 834 | 0xbf, 0x43, 0x09, 0xbd, 0x82, 0x70, 0x9c, 0x8c, 0xd5, 0x4f, 0x31, 0x6e, 835 | 0xd5, 0x22, 0x98, 0x8a, 0x1b, 0xd4, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 836 | 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 837 | 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 838 | 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 839 | 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 840 | 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 841 | 0x30, 0x16, 0x80, 0x14, 0x45, 0x66, 0x52, 0x43, 0xe1, 0x7e, 0x58, 0x11, 842 | 0xbf, 0xd6, 0x4e, 0x9e, 0x23, 0x55, 0x08, 0x3b, 0x3a, 0x22, 0x6a, 0xa8, 843 | 0x30, 0x5c, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x55, 0x30, 0x53, 0x30, 844 | 0x51, 0xa0, 0x4f, 0xa0, 0x4d, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70, 0x3a, 845 | 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 846 | 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 847 | 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 848 | 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 849 | 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 850 | 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x60, 851 | 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x54, 852 | 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 853 | 0x30, 0x02, 0x86, 0x44, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 854 | 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 855 | 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65, 0x72, 856 | 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 857 | 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 858 | 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x74, 859 | 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 860 | 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 861 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 862 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 863 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x92, 0x00, 864 | 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 865 | 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 866 | 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 867 | 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 868 | 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x00, 0x00, 0x00, 869 | 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 870 | 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 871 | 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 872 | 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 873 | 0x06, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x82, 0x01, 874 | 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 875 | 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 876 | 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x90, 0x1f, 0x84, 0x7b, 0x8d, 0xbc, 877 | 0xeb, 0x97, 0x26, 0x82, 0x6d, 0x88, 0xab, 0x8a, 0xc9, 0x8c, 0x68, 0x70, 878 | 0xf9, 0xdf, 0x4b, 0x07, 0xb2, 0x37, 0x83, 0x0b, 0x02, 0xc8, 0x67, 0x68, 879 | 0x30, 0x9e, 0xe3, 0xf0, 0xf0, 0x99, 0x4a, 0xb8, 0x59, 0x57, 0xc6, 0x41, 880 | 0xf6, 0x38, 0x8b, 0xfe, 0x66, 0x4c, 0x49, 0xe9, 0x37, 0x37, 0x92, 0x2e, 881 | 0x98, 0x01, 0x1e, 0x5b, 0x14, 0x50, 0xe6, 0xa8, 0x8d, 0x25, 0x0d, 0xf5, 882 | 0x86, 0xe6, 0xab, 0x30, 0xcb, 0x40, 0x16, 0xea, 0x8d, 0x8b, 0x16, 0x86, 883 | 0x70, 0x43, 0x37, 0xf2, 0xce, 0xc0, 0x91, 0xdf, 0x71, 0x14, 0x8e, 0x99, 884 | 0x0e, 0x89, 0xb6, 0x4c, 0x6d, 0x24, 0x1e, 0x8c, 0xe4, 0x2f, 0x4f, 0x25, 885 | 0xd0, 0xba, 0x06, 0xf8, 0xc6, 0xe8, 0x19, 0x18, 0x76, 0x73, 0x1d, 0x81, 886 | 0x6d, 0xa8, 0xd8, 0x05, 0xcf, 0x3a, 0xc8, 0x7b, 0x28, 0xc8, 0x36, 0xa3, 887 | 0x16, 0x0d, 0x29, 0x8c, 0x99, 0x9a, 0x68, 0xdc, 0xab, 0xc0, 0x4d, 0x8d, 888 | 0xbf, 0x5a, 0xbb, 0x2b, 0xa9, 0x39, 0x4b, 0x04, 0x97, 0x1c, 0xf9, 0x36, 889 | 0xbb, 0xc5, 0x3a, 0x86, 0x04, 0xae, 0xaf, 0xd4, 0x82, 0x7b, 0xe0, 0xab, 890 | 0xde, 0x49, 0x05, 0x68, 0xfc, 0xf6, 0xae, 0x68, 0x1a, 0x6c, 0x90, 0x4d, 891 | 0x57, 0x19, 0x3c, 0x64, 0x66, 0x03, 0xf6, 0xc7, 0x52, 0x9b, 0xf7, 0x94, 892 | 0xcf, 0x93, 0x6a, 0xa1, 0x68, 0xc9, 0xaa, 0xcf, 0x99, 0x6b, 0xbc, 0xaa, 893 | 0x5e, 0x08, 0xe7, 0x39, 0x1c, 0xf7, 0xf8, 0x0f, 0xba, 0x06, 0x7e, 0xf1, 894 | 0xcb, 0xe8, 0x76, 0xdd, 0xfe, 0x22, 0xda, 0xad, 0x3a, 0x5e, 0x5b, 0x34, 895 | 0xea, 0xb3, 0xc9, 0xe0, 0x4d, 0x04, 0x29, 0x7e, 0xb8, 0x60, 0xb9, 0x05, 896 | 0xef, 0xb5, 0xd9, 0x17, 0x58, 0x56, 0x16, 0x60, 0xb9, 0x30, 0x32, 0xf0, 897 | 0x36, 0x4a, 0xc3, 0xf2, 0x79, 0x8d, 0x12, 0x40, 0x70, 0xf3, 0x02, 0x03, 898 | 0x01, 0x00, 0x01, 0xa3, 0x7b, 0x30, 0x79, 0x30, 0x09, 0x06, 0x03, 0x55, 899 | 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x2c, 0x06, 0x09, 0x60, 0x86, 900 | 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x0d, 0x04, 0x1f, 0x16, 0x1d, 0x4f, 901 | 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 902 | 0x61, 0x74, 0x65, 0x64, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 903 | 0x63, 0x61, 0x74, 0x65, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 904 | 0x16, 0x04, 0x14, 0x3c, 0xe9, 0x60, 0xe3, 0xff, 0x19, 0xa1, 0x0a, 0x7b, 905 | 0xa3, 0x42, 0xf4, 0x8d, 0x42, 0x2e, 0xb4, 0xd5, 0x9c, 0x72, 0xec, 0x30, 906 | 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 907 | 0x3c, 0xe9, 0x60, 0xe3, 0xff, 0x19, 0xa1, 0x0a, 0x7b, 0xa3, 0x42, 0xf4, 908 | 0x8d, 0x42, 0x2e, 0xb4, 0xd5, 0x9c, 0x72, 0xec, 0x30, 0x0d, 0x06, 0x09, 909 | 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 910 | 0x82, 0x01, 0x01, 0x00, 0x5c, 0x4d, 0x92, 0x88, 0xb4, 0x82, 0x5f, 0x1d, 911 | 0xad, 0x8b, 0x11, 0xec, 0xdf, 0x06, 0xa6, 0x7a, 0xa5, 0x2b, 0x9f, 0x37, 912 | 0x55, 0x0c, 0x8d, 0x6e, 0x05, 0x00, 0xad, 0xb7, 0x0c, 0x41, 0x89, 0x69, 913 | 0xcf, 0xd6, 0x65, 0x06, 0x9b, 0x51, 0x78, 0xd2, 0xad, 0xc7, 0xbf, 0x9c, 914 | 0xdc, 0x05, 0x73, 0x7f, 0xe7, 0x1e, 0x39, 0x13, 0xb4, 0xea, 0xb6, 0x30, 915 | 0x7d, 0x40, 0x75, 0xab, 0x9c, 0x43, 0x0b, 0xdf, 0xb0, 0xc2, 0x1b, 0xbf, 916 | 0x30, 0xe0, 0xf4, 0xfe, 0xc0, 0xdb, 0x62, 0x21, 0x98, 0xf6, 0xc5, 0xaf, 917 | 0xde, 0x3b, 0x4f, 0x49, 0x0a, 0xe6, 0x1e, 0xf9, 0x86, 0xb0, 0x3f, 0x0d, 918 | 0xd6, 0xd4, 0x46, 0x37, 0xdb, 0x54, 0x74, 0x5e, 0xff, 0x11, 0xc2, 0x60, 919 | 0xc6, 0x70, 0x58, 0xc5, 0x1c, 0x6f, 0xec, 0xb2, 0xd8, 0x6e, 0x6f, 0xc3, 920 | 0xbc, 0x33, 0x87, 0x38, 0xa4, 0xf3, 0x44, 0x64, 0x9c, 0x34, 0x3b, 0x28, 921 | 0x94, 0x26, 0x78, 0x27, 0x9f, 0x16, 0x17, 0xe8, 0x3b, 0x69, 0x0a, 0x25, 922 | 0xa9, 0x73, 0x36, 0x7e, 0x9e, 0x37, 0x5c, 0xec, 0xe8, 0x3f, 0xdb, 0x91, 923 | 0xf9, 0x12, 0xb3, 0x3d, 0xce, 0xe7, 0xdd, 0x15, 0xc3, 0xae, 0x8c, 0x05, 924 | 0x20, 0x61, 0x9b, 0x95, 0xde, 0x9b, 0xaf, 0xfa, 0xb1, 0x5c, 0x1c, 0xe5, 925 | 0x97, 0xe7, 0xc3, 0x34, 0x11, 0x85, 0xf5, 0x8a, 0x27, 0x26, 0xa4, 0x70, 926 | 0x36, 0xec, 0x0c, 0xf6, 0x83, 0x3d, 0x90, 0xf7, 0x36, 0xf3, 0xf9, 0xf3, 927 | 0x15, 0xd4, 0x90, 0x62, 0xbe, 0x53, 0xb4, 0xaf, 0xd3, 0x49, 0xaf, 0xef, 928 | 0xf4, 0x73, 0xe8, 0x7b, 0x76, 0xe4, 0x44, 0x2a, 0x37, 0xba, 0x81, 0xa4, 929 | 0x99, 0x0c, 0x3a, 0x31, 0x24, 0x71, 0xa0, 0xe4, 0xe4, 0xb7, 0x1a, 0xcb, 930 | 0x47, 0xe4, 0xaa, 0x22, 0xcf, 0xef, 0x75, 0x61, 0x80, 0xe3, 0x43, 0xb7, 931 | 0x48, 0x57, 0x73, 0x11, 0x3d, 0x78, 0x9b, 0x69, 0xa1, 0x59, 0xc0, 0xa5, 932 | 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 933 | 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x05, 0x00, 0x00, 934 | 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 935 | 0xe7, 0x8f, 0x78, 0x4b, 0x30, 0x82, 0x05, 0xe8, 0x30, 0x82, 0x03, 0xd0, 936 | 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x0a, 0xd1, 0x88, 0x00, 937 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 938 | 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 939 | 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7f, 940 | 0x01, 0x04, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 941 | 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 942 | 0x00, 0xd0, 0x41, 0x01, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 943 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 944 | 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 945 | 0xbe, 0xf9, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 946 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 947 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 948 | 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x61, 949 | 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 950 | 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 951 | 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 952 | 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 953 | 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 954 | 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 955 | 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 956 | 0xc1, 0xe0, 0xbe, 0xf9, 0xd2]) 957 | -------------------------------------------------------------------------------- /pyuefivars/edk2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import struct 7 | import tempfile 8 | import os 9 | from .aws_file import AWSVarStoreFile 10 | from .varstore import UEFIVar, UEFIVarStore 11 | 12 | 13 | class EDK2Cert(object): 14 | def __init__(self, name: str, guid: bytes, digest: bytes): 15 | self.name = name 16 | self.guid = guid 17 | self.digest = digest 18 | 19 | 20 | class EDK2CertDB(object): 21 | GUID_CERTDB = b'\x6e\xe5\xbe\xd9\xdc\x75\xd9\x49\xb4\xd7\xb5\x34\x21\x0f\x63\x7a' 22 | 23 | def __init__(self, uefivar: UEFIVar = None): 24 | self.certs = [] 25 | if uefivar is not None: 26 | self.init_from_var(uefivar) 27 | 28 | def init_from_var(self, uefivar: UEFIVar): 29 | file = tempfile.SpooledTemporaryFile() 30 | file.write(uefivar.data) 31 | file.seek(0, os.SEEK_SET) 32 | file = AWSVarStoreFile(file) 33 | size = file.read32() 34 | if size != len(uefivar.data): 35 | raise Exception("Invalid certdb length") 36 | size = size - 4 37 | 38 | while size != 0: 39 | guid = file.readguid() 40 | cert_node_size = file.read32() 41 | cert_node_size # Unused, silence F841 42 | name_size = file.read32() * 2 43 | digest_size = file.read32() 44 | name = file.read(name_size).decode('utf-16le').rstrip('\0') 45 | digest = file.read(digest_size) 46 | self.certs.append(EDK2Cert(name, guid, digest)) 47 | size = size - (16 + 4 + 4 + 4 + name_size + digest_size) 48 | 49 | def to_var(self, vars: UEFIVar): 50 | file = tempfile.SpooledTemporaryFile() 51 | file = AWSVarStoreFile(file) 52 | file.write32(0) # file size, gets patched in later 53 | pubkeyidx = 0 54 | for var in vars: 55 | if not var.digest: 56 | continue 57 | name_size = len(var.name) + 1 58 | digest_size = len(var.digest) 59 | file.writeguid(var.guid) 60 | file.write32(16 + 4 + 4 + 4 + name_size + digest_size) 61 | file.write32(name_size) 62 | file.write32(digest_size) 63 | file.write(var.name.encode('utf-16le') + b'\0\0') 64 | file.write(var.digest) 65 | var.pubkeyidx = pubkeyidx 66 | pubkeyidx = pubkeyidx + 1 67 | filesize = file.file.tell() 68 | file.file.seek(0, os.SEEK_SET) 69 | file.write32(filesize) 70 | file.file.seek(0, os.SEEK_SET) 71 | data = file.file.read() 72 | return UEFIVar("certdb", data, self.GUID_CERTDB, 0x7) 73 | 74 | 75 | class EDK2UEFIVarStore(UEFIVarStore): 76 | GUID_CERTDB = b'\x6e\xe5\xbe\xd9\xdc\x75\xd9\x49\xb4\xd7\xb5\x34\x21\x0f\x63\x7a' 77 | GUID_NVFS = b'\x8d\x2b\xf1\xff\x96\x76\x8b\x4c\xa9\x85\x27\x47\x07\x5b\x4f\x50' 78 | GUID_VARSTORE = b'\x78\x2c\xf3\xaa\x7b\x94\x9a\x43\xa1\x80\x2e\x14\x4e\xc3\x77\x92' 79 | STATE_SETTLED = 0x3f 80 | VARSTORE_STATUS = b'\x5a\xfe\x00\x00\x00\x00\x00\x00' 81 | DEFAULT_LENGTH = 540672 82 | EFI_FVB2_READ_DISABLED_CAP = 0x00000001 83 | EFI_FVB2_READ_ENABLED_CAP = 0x00000002 84 | EFI_FVB2_READ_STATUS = 0x00000004 85 | EFI_FVB2_WRITE_DISABLED_CAP = 0x00000008 86 | EFI_FVB2_WRITE_ENABLED_CAP = 0x00000010 87 | EFI_FVB2_WRITE_STATUS = 0x00000020 88 | EFI_FVB2_LOCK_CAP = 0x00000040 89 | EFI_FVB2_LOCK_STATUS = 0x00000080 90 | EFI_FVB2_STICKY_WRITE = 0x00000200 91 | EFI_FVB2_MEMORY_MAPPED = 0x00000400 92 | EFI_FVB2_ERASE_POLARITY = 0x00000800 93 | EFI_FVB2_READ_LOCK_CAP = 0x00001000 94 | EFI_FVB2_READ_LOCK_STATUS = 0x00002000 95 | EFI_FVB2_WRITE_LOCK_CAP = 0x00004000 96 | EFI_FVB2_WRITE_LOCK_STATUS = 0x00008000 97 | EFI_FVB2_ALIGNMENT = 0x001F0000 98 | EFI_FVB2_WEAK_ALIGNMENT = 0x80000000 99 | EFI_FVB2_ALIGNMENT_1 = 0x00000000 100 | EFI_FVB2_ALIGNMENT_2 = 0x00010000 101 | EFI_FVB2_ALIGNMENT_4 = 0x00020000 102 | EFI_FVB2_ALIGNMENT_8 = 0x00030000 103 | EFI_FVB2_ALIGNMENT_16 = 0x00040000 104 | EFI_FVB2_ALIGNMENT_32 = 0x00050000 105 | EFI_FVB2_ALIGNMENT_64 = 0x00060000 106 | EFI_FVB2_ALIGNMENT_128 = 0x00070000 107 | EFI_FVB2_ALIGNMENT_256 = 0x00080000 108 | EFI_FVB2_ALIGNMENT_512 = 0x00090000 109 | EFI_FVB2_ALIGNMENT_1K = 0x000A0000 110 | EFI_FVB2_ALIGNMENT_2K = 0x000B0000 111 | EFI_FVB2_ALIGNMENT_4K = 0x000C0000 112 | EFI_FVB2_ALIGNMENT_8K = 0x000D0000 113 | EFI_FVB2_ALIGNMENT_16K = 0x000E0000 114 | EFI_FVB2_ALIGNMENT_32K = 0x000F0000 115 | EFI_FVB2_ALIGNMENT_64K = 0x00100000 116 | EFI_FVB2_ALIGNMENT_128K = 0x00110000 117 | EFI_FVB2_ALIGNMENT_256K = 0x00120000 118 | EFI_FVB2_ALIGNMENT_512K = 0x00130000 119 | EFI_FVB2_ALIGNMENT_1M = 0x00140000 120 | EFI_FVB2_ALIGNMENT_2M = 0x00150000 121 | EFI_FVB2_ALIGNMENT_4M = 0x00160000 122 | EFI_FVB2_ALIGNMENT_8M = 0x00170000 123 | EFI_FVB2_ALIGNMENT_16M = 0x00180000 124 | EFI_FVB2_ALIGNMENT_32M = 0x00190000 125 | EFI_FVB2_ALIGNMENT_64M = 0x001A0000 126 | EFI_FVB2_ALIGNMENT_128M = 0x001B0000 127 | EFI_FVB2_ALIGNMENT_256M = 0x001C0000 128 | EFI_FVB2_ALIGNMENT_512M = 0x001D0000 129 | EFI_FVB2_ALIGNMENT_1G = 0x001E0000 130 | EFI_FVB2_ALIGNMENT_2G = 0x001F0000 131 | AAVMF_BLOCK_SIZE = 0x00040000 132 | OVMF_BLOCK_SIZE = 0x00001000 133 | 134 | def __init__(self, data): 135 | super().__init__() 136 | 137 | self.certdb = EDK2CertDB() 138 | 139 | # Get a streaming file object 140 | file = tempfile.SpooledTemporaryFile() 141 | file.write(data) 142 | file.seek(0, os.SEEK_SET) 143 | file = AWSVarStoreFile(file) 144 | 145 | # Parse FV header 146 | zerovector = file.read(0x10) 147 | if zerovector != b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0': 148 | raise Exception("Invalid Zero Vector: %s" % zerovector) 149 | 150 | fsguid = file.readguid() 151 | if fsguid != self.GUID_NVFS: 152 | raise Exception("Invalid GUID: %s" % fsguid) 153 | 154 | self.length = file.read64() 155 | if self.length > len(data): 156 | raise Exception("Invalid length: %s" % self.length) 157 | 158 | sig = file.read(4) 159 | if sig != b'_FVH': 160 | raise Exception('Invalid FVH signature: %s' % sig) 161 | 162 | self.attrs = file.read32() 163 | hlength = file.read16() 164 | csum_hdr = file.read16() 165 | if (self.csum16(data[:hlength]) != 0): 166 | raise Exception("Invalid header checksum: 0x%x" % csum_hdr) 167 | 168 | # Ensure there isn't an extension header we don't understand 169 | ext_hdr_offset = file.read16() 170 | if ext_hdr_offset != 0: 171 | raise Exception('FVH with extension header not supported') 172 | 173 | # Reserved field (should always be 0) 174 | reserved = file.read8() 175 | if reserved != 0: 176 | raise Exception('Wrong value for FVH.Reserved: %s' % reserved) 177 | 178 | # Read revision 179 | rev = file.read8() 180 | if rev != 0x2: 181 | raise Exception('Invalid FVH Revision: 0x%x' % rev) 182 | 183 | # Read blockmap 184 | self.blockmap = [] 185 | total_bytes = 0 186 | while True: 187 | block_cnt, block_bytes = file.read32(), file.read32() 188 | if block_cnt == 0 and block_bytes == 0: 189 | break 190 | self.blockmap.append((block_cnt, block_bytes)) 191 | total_bytes += block_cnt * block_bytes 192 | if self.length != total_bytes: 193 | raise Exception('Invalid blockmap: %s' % self.blockmap) 194 | 195 | # Verify header length (ext headers not supported so must match current pos) 196 | if hlength != file.file.tell(): 197 | raise Exception('Invalid header length: %s' % hlength) 198 | 199 | # Parse varstore header 200 | vsguid = file.readguid() 201 | if vsguid != self.GUID_VARSTORE: 202 | raise Exception('Invalid Varstore GUID: %s' % vsguid) 203 | 204 | self.varsize = file.read32() 205 | status = file.read(8) 206 | if status != self.VARSTORE_STATUS: 207 | raise Exception('Invalid Varstore Status: %s' % status) 208 | 209 | # Extract all variables 210 | while file.read16() == 0x55aa: 211 | state = file.read8() 212 | file.read8() 213 | attr = file.read32() 214 | monotoniccount = file.read64() 215 | monotoniccount # Unused, silence F841 216 | timestamp = file.readtimestamp() 217 | pubkeyidx = file.read32() 218 | pubkeyidx # Unused, silence F841 219 | namelen = file.read32() 220 | datalen = file.read32() 221 | guid = file.readguid() 222 | name = file.read(namelen).decode('utf-16le').rstrip('\0') 223 | data = file.read(datalen) 224 | if state == self.STATE_SETTLED: 225 | if timestamp == self.EMPTY_TIMESTAMP: 226 | timestamp = None 227 | var = UEFIVar(name, data, guid, attr, timestamp, None) 228 | if name == "certdb" and guid == self.GUID_CERTDB: 229 | self.certdb = EDK2CertDB(var) 230 | else: 231 | self.vars.append(var) 232 | file.file.seek((file.file.tell() + 0x3) & ~0x3, os.SEEK_SET) 233 | 234 | # Extract all certdb entries into digest fields 235 | for cert in self.certdb.certs: 236 | for var in self.vars: 237 | if var.name == cert.name and var.guid == cert.guid: 238 | var.digest = cert.digest 239 | 240 | def csum16(self, var: bytes): 241 | u16 = struct.unpack("<" + str(int(len(var) / 2)) + "H", var) 242 | csum = 0 243 | for b in u16: 244 | # print("0x%x + 0x%x = 0x%x" % (csum, b, csum + b)) 245 | csum = csum + b 246 | return (csum & 0xffff) 247 | 248 | def write_var(self, raw: AWSVarStoreFile, var: UEFIVar): 249 | raw.write16(0x55aa) 250 | raw.write8(self.STATE_SETTLED) 251 | raw.write8(0) 252 | raw.write32(var.attr) 253 | raw.write64(0) # monotonic count 254 | if var.timestamp: 255 | raw.write(var.timestamp) 256 | else: 257 | raw.write(b'\0' * 16) 258 | if hasattr(var, 'pubkeyidx'): 259 | raw.write32(var.pubkeyidx) 260 | else: 261 | raw.write32(0) 262 | raw.write32(len(var.name + '\0') * 2) 263 | raw.write32(len(var.data)) 264 | raw.write(var.guid) 265 | raw.write((var.name + '\0').encode('utf-16le')) 266 | raw.write(var.data) 267 | raw.file.seek((raw.file.tell() + 0x3) & ~0x3, os.SEEK_SET) 268 | 269 | def __bytes__(self) -> bytes: 270 | if not hasattr(self, 'certdb'): 271 | self.certdb = EDK2CertDB() 272 | if not hasattr(self, 'length'): 273 | self.length = self.DEFAULT_LENGTH 274 | if not hasattr(self, 'attrs'): 275 | self.attrs = self.EFI_FVB2_READ_DISABLED_CAP | \ 276 | self.EFI_FVB2_READ_ENABLED_CAP | \ 277 | self.EFI_FVB2_READ_STATUS | \ 278 | self.EFI_FVB2_WRITE_DISABLED_CAP | \ 279 | self.EFI_FVB2_WRITE_ENABLED_CAP | \ 280 | self.EFI_FVB2_WRITE_STATUS | \ 281 | self.EFI_FVB2_LOCK_CAP | \ 282 | self.EFI_FVB2_LOCK_STATUS | \ 283 | self.EFI_FVB2_STICKY_WRITE | \ 284 | self.EFI_FVB2_MEMORY_MAPPED | \ 285 | self.EFI_FVB2_ERASE_POLARITY | \ 286 | self.EFI_FVB2_READ_LOCK_CAP | \ 287 | self.EFI_FVB2_READ_LOCK_STATUS | \ 288 | self.EFI_FVB2_WRITE_LOCK_CAP | \ 289 | self.EFI_FVB2_WRITE_LOCK_STATUS | \ 290 | self.EFI_FVB2_ALIGNMENT_16 291 | if not hasattr(self, 'varsize'): 292 | self.varsize = int(self.length / 2) - 8264 293 | if not hasattr(self, 'blockmap'): 294 | # What is a sensible default here? Examples: 295 | # - AAVMF uses 256K blocks (virtual NOR) 296 | # - OVMF uses 4K blocks (page size) 297 | self.blockmap = [(self.length // self.OVMF_BLOCK_SIZE, self.OVMF_BLOCK_SIZE)] 298 | 299 | # Assemble the flash file 300 | raw = AWSVarStoreFile(tempfile.SpooledTemporaryFile()) 301 | 302 | # Write FV header 303 | raw.write(b'\0' * 16) 304 | raw.write(self.GUID_NVFS) 305 | raw.write64(self.length) 306 | raw.write(b'_FVH') 307 | raw.write32(self.attrs) 308 | # Leave room for header length 309 | hlength_pos = raw.file.tell() 310 | raw.write16(0) 311 | # Skip checksum - need to fill in later 312 | csum_pos = raw.file.tell() 313 | raw.write16(0) 314 | # No ext header offset + set reversed byte to 0 315 | raw.write(b'\0' * 3) 316 | # Revision 317 | raw.write8(0x2) 318 | # Blockmap 319 | for block_cnt, block_bytes in self.blockmap: 320 | raw.write32(block_cnt) 321 | raw.write32(block_bytes) 322 | raw.write32(0) 323 | raw.write32(0) 324 | # Write header length 325 | hlength = raw.file.tell() 326 | raw.file.seek(hlength_pos, os.SEEK_SET) 327 | raw.write16(hlength) 328 | # Checksum 329 | raw.file.seek(0, os.SEEK_SET) 330 | fvh = raw.file.read(hlength) 331 | raw.file.seek(csum_pos, os.SEEK_SET) 332 | raw.write16((0x10000 - self.csum16(fvh) & 0xffff)) 333 | # Go to end of FV header 334 | raw.file.seek(hlength, os.SEEK_SET) 335 | 336 | # Write varstore header 337 | raw.write(self.GUID_VARSTORE) 338 | raw.write32(self.varsize) 339 | raw.write(self.VARSTORE_STATUS) 340 | 341 | # Write variables 342 | self.write_var(raw, self.certdb.to_var(self.vars)) 343 | 344 | for var in self.vars: 345 | self.write_var(raw, var) 346 | 347 | # Make sure it all fits 348 | if raw.file.tell() > self.length: 349 | raise Exception("Can not fit variables into store") 350 | 351 | # Expand to maximum file size 352 | raw.file.seek(self.length - 1, os.SEEK_SET) 353 | raw.write8(0) 354 | 355 | raw.file.seek(0, os.SEEK_SET) 356 | return raw.file.read() 357 | 358 | def set_output_options(self, options): 359 | for option in [option.strip().split("=") for option in options]: 360 | if option[0] == 'filesize': 361 | if (len(option) != 2 or not option[1]): 362 | raise SystemExit( 363 | 'option "filesize" requires a second argument' 364 | ) 365 | self.length = int(option[1]) * 1024 366 | else: 367 | raise SystemExit( 368 | 'Unknown Option type "{}"'.format(option) 369 | ) 370 | -------------------------------------------------------------------------------- /pyuefivars/efivarfs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import os 7 | from .varstore import UEFIVar, UEFIVarStore 8 | import uuid 9 | import sys 10 | 11 | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x20 12 | 13 | 14 | class EFIVARFSUEFIVarStore(UEFIVarStore): 15 | """ 16 | Varstore class to ingest an efivarfs directory as UEFI variables. 17 | 18 | Please beware that efivarfs only exposes UEFI variables that execute 19 | at runtime, so any boot time variables are unavailable. Also, additional 20 | metadata such as secure variable details are not readable through efivarfs. 21 | """ 22 | 23 | def __init__(self, path): 24 | super().__init__() 25 | self.is_empty = False 26 | 27 | if not path: 28 | path = '/sys/firmware/efi/efivars' 29 | 30 | if not os.path.isdir(path): 31 | raise Exception(f'"{path}" is not a valid efivarfs path') 32 | 33 | var_names = os.listdir(path) 34 | # example: 'X-Nitro-BootServicesExited-8be4df61-93ca-11d2-aa0d-00e098032b8c' 35 | 36 | for var_name in var_names: 37 | # efivarfs file name are f'{name}-{guid}' 38 | s = var_name.split('-') 39 | 40 | try: 41 | # The last 5 elements make up the GUID 42 | guid = uuid.UUID('-'.join(s[-5:])).bytes_le 43 | except ValueError: 44 | raise Exception(f'Invalid efivarfs file "{var_name}"') 45 | 46 | # Anything before that is the name of the variable 47 | name = '-'.join(s[:-5]) 48 | 49 | # efivarfs file contents are f'{attr.le32}{data}' 50 | content = open(os.path.join(path, var_name), 'rb').read() 51 | data = content[4:] 52 | attr = int.from_bytes(content[:4], "little") 53 | 54 | # UEFI Secure Boot variables are special; they contain hidden 55 | # key material that we can not extract from efivarfs. Skip them. 56 | if attr & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: 57 | print(f'Skipping authenticated variable "{var_name}"', file=sys.stderr) 58 | continue 59 | 60 | # Now that we reassembled everything, remember the variable 61 | self.vars.append(UEFIVar(name, data, guid, attr)) 62 | 63 | def __str__(self) -> str: 64 | raise Exception('Unable to serialize efivarfs into a file') 65 | -------------------------------------------------------------------------------- /pyuefivars/json.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import json 7 | import uuid 8 | from .varstore import UEFIVar, UEFIVarStore 9 | 10 | 11 | class JSONVar(UEFIVar): 12 | def __init__(self, jvar): 13 | name = jvar['name'] 14 | data = bytes.fromhex(jvar['data']) 15 | guid = uuid.UUID(jvar['guid']).bytes_le 16 | attr = int(jvar['attr']) 17 | timestamp = None 18 | digest = None 19 | if 'timestamp' in jvar: 20 | timestamp = bytes.fromhex(jvar['timestamp']) 21 | if 'digest' in jvar: 22 | digest = bytes.fromhex(jvar['digest']) 23 | super().__init__(name, data, guid, attr, timestamp, digest) 24 | 25 | def __dict__(self): 26 | super().__dict__() 27 | 28 | 29 | class JSONUEFIVarStore(UEFIVarStore): 30 | current_version = 2 31 | 32 | def __init__(self, data): 33 | super().__init__() 34 | 35 | # Read the JSON file 36 | jdata = json.loads(data.decode('utf-8')) 37 | vardata = [] 38 | if isinstance(jdata, list): 39 | self.version = 1 40 | vardata = jdata 41 | else: 42 | self.version = jdata.get('version', self.current_version) 43 | vardata = jdata.get('variables', []) 44 | 45 | if self.version > self.current_version: 46 | raise SystemExit( 47 | 'Unknown Version "{}", this tool only supports up to version "{}"'.format( 48 | self.version, self.current_version) 49 | ) 50 | 51 | # Copy all JSON elements to the UEFIVars for the store 52 | for jvar in vardata: 53 | new_var = JSONVar(jvar) 54 | new_var.__class__ = UEFIVar 55 | self.vars.append(new_var) 56 | 57 | def __bytes__(self): 58 | return self.__str__().encode('utf-8') 59 | 60 | def prepare(self, var): 61 | new_var = var.__dict__() 62 | 63 | if 'guid' in new_var: 64 | new_var["guid"] = str(uuid.UUID(bytes_le=var.guid)) 65 | 66 | for key in new_var: 67 | if isinstance(new_var[key], bytes): 68 | new_var[key] = new_var[key].hex() 69 | 70 | return new_var 71 | 72 | def __str__(self): 73 | encoded_vars = list(map(self.prepare, self.vars)) 74 | store = { 75 | "version": self.current_version, 76 | "variables": encoded_vars, 77 | } 78 | return json.dumps(store, indent=4) 79 | -------------------------------------------------------------------------------- /pyuefivars/varstore.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import sys 7 | 8 | 9 | class UEFIVar(object): 10 | def __init__(self, name: str, data: bytes, guid: bytes, attr: int, timestamp: bytes = None, digest: bytes = None): 11 | self.name = name 12 | self.data = data 13 | self.guid = guid 14 | self.attr = attr 15 | self.timestamp = timestamp 16 | self.digest = digest 17 | 18 | def __dict__(self): 19 | var = {} 20 | var['name'] = self.name 21 | var['data'] = self.data 22 | var['guid'] = self.guid 23 | var['attr'] = self.attr 24 | if self.timestamp is not None: 25 | var['timestamp'] = self.timestamp 26 | if self.digest is not None: 27 | var['digest'] = self.digest 28 | 29 | return var 30 | 31 | 32 | class UEFIVarStore(object): 33 | EMPTY_TIMESTAMP = b'\0' * 16 34 | EMPTY_DIGEST = b'\0' * 32 35 | 36 | def __init__(self, data=''): 37 | self.vars = [] 38 | 39 | def __dict__(self): 40 | return self.vars 41 | 42 | def __bytes__(self): 43 | print("This output backend does not implement writing the variable store", file=sys.stderr) 44 | sys.exit() 45 | 46 | def set_output_options(self, options): 47 | print("This output backend does not implement output options: {}".format(options), file=sys.stderr) 48 | sys.exit() 49 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | google_crc32c 2 | deepdiff 3 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [pep8] 2 | max-line-length = 120 3 | ignore = E221 4 | 5 | [flake8] 6 | max-line-length=120 7 | extend-ignore = E221 8 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import setuptools 7 | 8 | with open("README.md", "r") as fh: 9 | long_description = fh.read() 10 | 11 | setuptools.setup( 12 | name="uefivars", 13 | version="1.2", 14 | author="Amazon Web Services", 15 | author_email="graf@amazon.com", 16 | description="UEFI variable store tools", 17 | long_description=long_description, 18 | long_description_content_type='text/markdown', 19 | url="https://github.com/awslabs/python-uefivars", 20 | packages=setuptools.find_packages(), 21 | install_requires=['google-crc32c', 'deepdiff'], 22 | entry_points={ 23 | 'console_scripts': [ 24 | 'uefivars = pyuefivars:main', 25 | ], 26 | }, 27 | classifiers=[ 28 | "Programming Language :: Python :: 3", 29 | "License :: OSI Approved :: MIT License", 30 | "Operating System :: OS Independent", 31 | ], 32 | ) 33 | -------------------------------------------------------------------------------- /snap/snapcraft.yaml: -------------------------------------------------------------------------------- 1 | name: uefivars 2 | version: git 3 | summary: Create a binary blob containing a pre-filled variable store 4 | description: | 5 | Create a binary blob containing a pre-filled variable store 6 | base: core22 7 | confinement: strict 8 | source-code: https://github.com/awslabs/python-uefivars 9 | issues: https://github.com/awslabs/python-uefivars/issues 10 | 11 | parts: 12 | uefivars: 13 | plugin: python 14 | source: . 15 | 16 | apps: 17 | uefivars: 18 | command: bin/uefivars 19 | plugs: 20 | - home 21 | -------------------------------------------------------------------------------- /test_uefivars.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | from deepdiff import DeepDiff 7 | import json 8 | import subprocess 9 | 10 | 11 | def run_uefivars(input_type: str = None, input_file: str = None, 12 | output_type: str = None, output_file: str = None, 13 | extra_args: list = None, input_data: str = None): 14 | args = ['./uefivars'] 15 | if input_type: 16 | args += ['-i', input_type] 17 | if input_file: 18 | args += ['-I', input_file] 19 | if output_type: 20 | args += ['-o', output_type] 21 | if output_file: 22 | args += ['-O', output_file] 23 | if extra_args: 24 | args += extra_args 25 | 26 | return subprocess.run(args, 27 | input=input_data, 28 | stdout=subprocess.PIPE, 29 | stderr=subprocess.PIPE) 30 | 31 | 32 | def run_convert(input_type: str = None, input_file: str = None, 33 | output_type: str = None, output_file: str = None, 34 | extra_args: list = None, input_data: str = None) -> bytes: 35 | result = run_uefivars(input_type, input_file, output_type, output_file, 36 | extra_args, input_data) 37 | 38 | assert result.returncode == 0 39 | 40 | return result.stdout 41 | 42 | 43 | def check_json(out: str, check: str): 44 | # Order can vary; we only care that contents match 45 | out_dict = json.loads(out.decode('utf-8')) 46 | check_dict = json.loads(check.decode('utf-8')) 47 | assert DeepDiff(out_dict, check_dict, ignore_order=True) == {} 48 | 49 | 50 | def check_convert(input_type: str, input_file: str, 51 | output_type: str, check_file: str) -> None: 52 | out = run_convert(input_type=input_type, input_file=input_file, 53 | output_type=output_type) 54 | 55 | if check_file: 56 | check = open(check_file, 'rb').read() 57 | 58 | if output_type == 'json': 59 | check_json(out, check) 60 | else: 61 | assert out == check 62 | 63 | # T01: Check basic functionality: Convert between json and efivarfs 64 | 65 | 66 | def test_t01_json_to_json(): 67 | check_convert('json', 'testdata/t01.json', 'json', 'testdata/t01.json') 68 | 69 | 70 | def test_t01_efivarfs_to_json(): 71 | check_convert('efivarfs', 'testdata/t01.efivarfs', 'json', 'testdata/t01.json') 72 | 73 | # T02: Check extended attributes: Convert authenticated variables between json, edk2 and aws 74 | 75 | 76 | def test_t02_aws_to_json(): 77 | check_convert('aws', 'testdata/t02.aws', 'json', 'testdata/t02.json') 78 | 79 | 80 | def test_t02_aws_to_edk2(): 81 | check_convert('aws', 'testdata/t02.aws', 'edk2', 'testdata/t02.edk2') 82 | 83 | 84 | def test_t02_aws_to_edk2_json_aws_json(): 85 | # We test through all formats here, ending with JSON. That way we can ignore file format 86 | # specifics like compression differences or sparse entries. 87 | 88 | edk2 = run_convert(input_type='aws', input_file='testdata/t02.aws', output_type='edk2') 89 | json = run_convert(input_type='edk2', input_data=edk2, output_type='json') 90 | aws = run_convert(input_type='json', input_data=json, output_type='aws') 91 | json = run_convert(input_type='aws', input_data=aws, output_type='json') 92 | 93 | check_json(json, open('testdata/t02.json', 'rb').read()) 94 | -------------------------------------------------------------------------------- /testdata/t01.efivarfs/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /testdata/t01.efivarfs/BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /testdata/t01.efivarfs/BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /testdata/t01.efivarfs/ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/Key0000-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/Key0000-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/Key0001-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/Key0001-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 | eng -------------------------------------------------------------------------------- /testdata/t01.efivarfs/LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 | engfraengfra -------------------------------------------------------------------------------- /testdata/t01.efivarfs/MTC-eb704011-1402-11d3-8e77-00a0c969723b: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /testdata/t01.efivarfs/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /testdata/t01.efivarfs/PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 | en -------------------------------------------------------------------------------- /testdata/t01.efivarfs/PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 | en;fr;en-US;fr-FR -------------------------------------------------------------------------------- /testdata/t01.efivarfs/PlatformRecovery0000-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t01.efivarfs/PlatformRecovery0000-8be4df61-93ca-11d2-aa0d-00e098032b8c -------------------------------------------------------------------------------- /testdata/t01.efivarfs/Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /testdata/t01.efivarfs/X-Nitro-SecurebootStatus-8be4df61-93ca-11d2-aa0d-00e098032b8c: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /testdata/t01.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "variables": [ 4 | { 5 | "name": "X-Nitro-SecurebootStatus", 6 | "data": "0000000000000000", 7 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 8 | "attr": 6 9 | }, 10 | { 11 | "name": "Boot0001", 12 | "data": "0100000026005500450046004900200041006d0061007a006f006e00200045006c0061007300740069006300200042006c006f0063006b002000530074006f0072006500200076006f006c003000660064006500630039003100390034003200360032003500660030003700640020003100000002010c00d041030a00000000010106000004031710000100000000000000000000007fff04004eac0881119f594d850ee21a522c59b2", 13 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 14 | "attr": 7 15 | }, 16 | { 17 | "name": "Boot0000", 18 | "data": "090100002c0055006900410070007000000004071400fe4a07640a34e64b94ba91b5b4d0f71e0406140021aa2c4614760345836e8ab6f46623317fff0400", 19 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 20 | "attr": 7 21 | }, 22 | { 23 | "name": "BootOrder", 24 | "data": "00000100", 25 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 26 | "attr": 7 27 | }, 28 | { 29 | "name": "LangCodes", 30 | "data": "656e67667261656e6766726100", 31 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 32 | "attr": 6 33 | }, 34 | { 35 | "name": "ConOutDev", 36 | "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14005347c1e0bef9d2119a0c0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14000bc7ae7be057764c8e872f9e280883437f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400d6a015adec8bcf4aa073d01de77e2d887f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400806d917db15b8c45a48fe25fdd51ef947fff0400", 37 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 38 | "attr": 6 39 | }, 40 | { 41 | "name": "ConInDev", 42 | "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14005347c1e0bef9d2119a0c0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14000bc7ae7be057764c8e872f9e280883437f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400d6a015adec8bcf4aa073d01de77e2d887f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400806d917db15b8c45a48fe25fdd51ef947fff0400", 43 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 44 | "attr": 6 45 | }, 46 | { 47 | "name": "Lang", 48 | "data": "656e6700", 49 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 50 | "attr": 7 51 | }, 52 | { 53 | "name": "ErrOut", 54 | "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7fff0400", 55 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 56 | "attr": 7 57 | }, 58 | { 59 | "name": "PlatformLangCodes", 60 | "data": "656e3b66723b656e2d55533b66722d465200", 61 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 62 | "attr": 6 63 | }, 64 | { 65 | "name": "BootCurrent", 66 | "data": "0100", 67 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 68 | "attr": 6 69 | }, 70 | { 71 | "name": "ErrOutDev", 72 | "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14005347c1e0bef9d2119a0c0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14000bc7ae7be057764c8e872f9e280883437f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400d6a015adec8bcf4aa073d01de77e2d887f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400806d917db15b8c45a48fe25fdd51ef947fff0400", 73 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 74 | "attr": 6 75 | }, 76 | { 77 | "name": "MTC", 78 | "data": "01000000", 79 | "guid": "eb704011-1402-11d3-8e77-00a0c969723b", 80 | "attr": 7 81 | }, 82 | { 83 | "name": "PlatformRecovery0000", 84 | "data": "010000003600440065006600610075006c007400200050006c006100740066006f0072006d005200650063006f0076006500720079000000040432005c004500460049005c0042004f004f0054005c0042004f004f00540041004100360034002e0045004600490000007fff0400", 85 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 86 | "attr": 6 87 | }, 88 | { 89 | "name": "Key0000", 90 | "data": "000000405d4d80dd00000c000000", 91 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 92 | "attr": 7 93 | }, 94 | { 95 | "name": "PlatformLang", 96 | "data": "656e00", 97 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 98 | "attr": 7 99 | }, 100 | { 101 | "name": "BootOptionSupport", 102 | "data": "13030000", 103 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 104 | "attr": 6 105 | }, 106 | { 107 | "name": "Timeout", 108 | "data": "0000", 109 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 110 | "attr": 7 111 | }, 112 | { 113 | "name": "ConIn", 114 | "data": "030f0b00ffffffff0301017f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7fff0400", 115 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 116 | "attr": 7 117 | }, 118 | { 119 | "name": "Key0001", 120 | "data": "000000405d4d80dd000017000000", 121 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 122 | "attr": 7 123 | }, 124 | { 125 | "name": "ConOut", 126 | "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7fff0400", 127 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 128 | "attr": 7 129 | }, 130 | { 131 | "name": "OsIndicationsSupported", 132 | "data": "4100000000000000", 133 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 134 | "attr": 6 135 | } 136 | ] 137 | } -------------------------------------------------------------------------------- /testdata/t02.aws: -------------------------------------------------------------------------------- 1 | QU1aTlVFRkmz9HKtAAAAAHj5a7fZ9+1cCTyU3/4exjL2JWsSWuzLCCNZItn3LbsYxs5k7CJLRJaytUh2oRCRXSSi7KJEpKwJ2WUp7oykDN1f96/u/d3/bT6fMd53njnned/znu9Znucc6o2cKDc+lWB2cIS7pvsZmJy9ORxht95NOLZJ6KsjFWUe2LfRK1PdMA8obfgwh4FfMFfYvpkI0A0LuBvpoF6yJ0+qym/msO1iSIGYoPVvUFZIDMCGxgP4poI/GLa5KsIcqZJ6qnDe+HZsICYmqnvwdrRouVeIQ8Uf1E8cblv4GneDNeqFmllUQZjBEKRb+vLfwh/6/Ub9mGnLHVJxgSFcEVZOMHWYgzPM0UkSbu+EgNsqwk1tvlMwW0Sul9FTvhVPPCtPXUHlF4lKh/5n0vkujQohvP6OIxUSSaoXvQM6rrPhfvVqIF9ItJw934/vHS76SPR7jwLyJu10nTjf0lZxdqL5ceIkP0rhK3klTUmcLU8OusaM+11hosoEDAZD3LaItdD1foPzen/b+V96BrCw+AEGGz12gy2pGAAckb11K4AdwA0AAfADuJHtnzny+MsIZacLQuMoEPQ9R3HwT40LUC4tLeR5RyQD1MQwfN3xC0O2vozI/89sGnRQTi0MIA2AAJX8mzzCdZdDztL6J2oUUfTC4zEldoZ4HJMWlXqAsuBPcuY32cJZYpOzMpKDE8B1nY/NTsVMuf4XgLL+AVRPhYUV/ThcYfwkGT6/LWSYN8mcQgYR13VXNWz9yGr9Jjlv3kwJgCbyzYjsSJ7cHISeRGKsAC7rv2BFDkO5kUO2He1uZOt/MVAD0i+R8CfZHvl9bME/xRbwr7Dl1dzCdv93bLfyM0MeOyKL/C/u2nr4xfj5/MH/l/zBf5H/P7t+4m/xyhFuC0PGLCW4GQx/kwWqeaJFvi9cE3XvOYknU+AdUPzuc+Uz3I3pvXWMrYkTqrVTNLG32IwsAJg9l5bGjnl+bbpQeJzv8BY7ook2vteAIjmaW1loOCF7fd8iPAY6M5YdqhbjTy6l+ZqsGdTtEvGm3RbN8xNK/M0/tAuX+Dr+d/tnIHz+bUoM3ARulFAz/xrdbO0UmknJq8zGsq06j5NiK11267cZrrcclZCG3pg6bvVo0d5mEroEzveElz9xKwpbCgXyD/2/8ucg8X83UQnX6D0O9kXNkETjvNUJ0m4RxrrVWOomTJvod2nni8nUj27DD9dm6JjB703WugNXWe9RYTActFiNHK7ggMTErwm1xqPj8fpOK6uRg8bdSuzIW30Pfy4EXggbSIAjIt3UdWNhN5nR8QRlkpHdWR7FseDULJgzb8nZ5UysJQKinKGlwrHwRFMndDwhTZSQC9csJFO0FSfVtM9BT6gldy5S2sCY2Nam88HFUHQ8EVFFPZxtPBHOt9cLMRikQI7nnS97/Rg7RWLncRVSCpJt+KezKzFXmWSr689DjjiHiXV8CiMA4Jbo8w6rX2Zv0v/07xbpaPj42dawoRMJ14BiZLI9H4a4Krjl7DRJC1pePDF71kayW1GPo5IzvXi6i4Hlg3rhCrthq1yxHkes+k1DcyiOL1au1iI6ntOxi+9wqV3D0MWO1FoR/Sgt3cnIlSnVCdWafpA6zrTXbkVDsDnrsqYrWJu1VF7aa6T1qIfmvFW7S0KzkfP4xWdhlFHb4hVoonQ+m0QilSLJ1aOSJ8fIAshvYVQdY2Ql4BdPeOcZOv6oxDMmSBjl+U4DfMxhJmMhJVtlfAvjwgXcEiC0PEAfc7cipuS17vrz8d6muJ4FhJF9kuVcPHkZ8wnMnzyIFTq6nKkidyt6qgXxrjr6FVC0ilHWMh0ICS7UdH9AWJnyuKp1Luwm2EQAHa83Kvc+SGssalDoVa1+N/eJAE6ePouLyxQWkIFqCRIOA3S8Df0eH7dBieC0sLGz+UY4xpEtMvFjoYNN5COtiMb7PNvirW2QpkzYc93+KLVi5oe2xZWTHNHZAkcFAhFtUYvcbfVk6Hg4Beuaw9NXxM9zGLjPVjZkmnk+gvXO50U1FTLP4x9zM9qtyIuwESvUxLIGzy6Kxl5tBi6cGc3AaTsTDHQY5qqJ4zxYtQ3/5gGNRYth3KlMyuA+4d5yv8ojGS/v0Ica8djNRLO+eImOd2PJiYFwLk85eGUP3qt8Ixnc5lCl1/tItkh/sT5VIe8xOt43owRW5t8eaBPNdlvTt/GKBk3LHQryl6AnKcKf+damBncrUl/UuxawQF1Pf65DpSpJhsBhdvrAUWjXWlzjsf6+SCrRnN2K2iFz/PfjAY0fKTGTm8JBsAaMcWHRRBGBCtXTfWefm84z7VYEj7nebloTUUH1wKmUtEQpMgJAReYI70mTTDE3Kyfh1TuBjo+Xt6LmNbHk1vr8bnXeeCxonGG1JwcLwGD+sP4jbl4RPzo+rYCSAaLVnpxDJMOi624zmMpIrHkl/aWVs6KsbIATKB0dnz7LoxqmnLuafQN0bkm5rRR/3HD44yR8Ko0jqqLPUCoMHZ9tyfw22o65/f2spUFQl1fAa2GlBlHi/ru+ddjGbSLajLsV/XP6gfgrXpzde5aW+Y5hDqhYqOWMk+WSvmo6ydCnKI6Zj44vUNk/DDFlyLbEDhPGEwTurSohbKDGYRfaV2+Z82qQSAsdXzzl1nU+Wb6Gj8k0KkiAoimKky+HZqT3TJCin8AcizYEHV/iAbqIfRN4evq5gl2BMFmJi7ll15LWIU/MEFbBzkTFLnR8eWCa5Ttac9mbBaAPPmrnq+Ktmw61ULvfTIQ+G/DvJk7/u5scGmwCQsTbE6+76FAWRFapycsZq+S8ANF2B3Wm219zW/2Ijm8WXq7QfeH5LivsszzVxxqxpUeH1I6Xw3S1OwWW2ebFm9HxLxvGrgnMW3BAzqlcbaqTszIxpMaVH7VFKJ1oxqRanF1Gx49yHhgTPnXihcH+R/UzMs90ZY5+KPPO99978gpctz+3bRv+c6+9KNt7/zon0Wx5uld1gILVqvyIpSPi4Rey6uhfvNoW31ZNM1TcOJ+2f5ppXPpEttIqaBwYqPMMGjBBbh7bY2+HsQ3fknekjTtGwU7WkNPBAhF8S13XP9sgbb8z1QEG3BsU256femp6E/mwc+T7oqJDW1e12mN8l9r23rYHSuFLqLM8qtVHx2uVxBINiZavyurdrhNsOV5INSkasVwQc8czk3Yi3bSgFB3v2ktLkkIUtGYkjLEXf3g/FM+NcA+BhlFD4PBUUDCBDQ86/onIPaED2THzxk7Szr2CjdE92XoMDWkyPB/4yRy6hN75o+OFMQM1xAirW8f3ZhxsmLotceclgtK9rSbGh6utOg1SfBsdH3Xjw9z8slo/n3j1zGC4bHMQQt3680f16vTZlJnyBGO5322qQTdL7Gawi7k52OWg+HoOfeZ/ZWNE3If81B99nnIZX0MmUOCk3sqZy1CwH7AB7IeZ/3W56GjXmtXw7MgguutC6Uc6t6SJrZU5HGFvZcJLDib9onPjqZrYwhklbJ3gvJTgPV/UecJTSq4mCBgno5y9KTdKVwcf5QXzQngFeSFg1KJQXiHeI3y8G4e/Ojs/DMbtCh4RSsEDrSt4j2HpUi0W3rOU3O7E3hpljS4sV4usl0FReVn+Tro9x6m17YawlVaHSsrpSTJ9fAlSKz+ZPVnVlFYwjFqbBAdVitgexp8kh0sX9nAPp3Q7TPkMpTAdWJYVCDltztZSQueYHLzKpt50621H58JUIbU/reTl0KvH5pQsFGTv8+65Wat4efD8yWRV/FTn/ISnuSWECWPldXUh/Fw3Do/6Xk8W6Wa/dbnNe2GIjOI4zkUKBqzgfRPY3qIlI71k/ti5wuHFCR002IRGmmr3XyvfysaaEw4hCJAOMkyKJr/QMa2xL/PpYF+yXc6bm1dEnGuZaNwXOHMXSnsy8g2L73uIew/XYObq7fHGxACm+OaAfbO+E+LkX5ZiIXBFWcldcXprG0uwsSTK6sBeX4Q4F7CTz46AJLVUlV9ceH7fPZSEX/TFDaV8B9HvzOR97pqau+YvaRhZ9hGGEanER+WPzA1dgdviSblTsTBWx0Ufz331cKRIKjJdQS5dMiSaQLfuNQ2M199Z46FAORUBR1Ts8xV19URdkIhg6jyG2uLxB9CzAofHa8sKmOKSqQ19gok+0SkGapw3vU/wXC6KyGoBwTfe/eGJUFjWZesKH77it5YDJ/HNgc5S9fXsb0g/qONIHamnsyhqPVQeW5EcoUuIf46fnVnllg9lSbvMwSaCaoWn0YuSbfBAWaHS15NUfnsalPCPY1clVZh552l2OF71CkjzePyhXU1RWcS1vE+cTg5qfGYRRNB7hHWsTV8bxA3IeKjPJODACpE8dm3UNgW96o9sVP2Gnat+EbLqJ3yt+gOK6Xr4Jjoa6FUfsXNxEu5UnIQ7FCfhluLkPQhmWvfjEO79cnqL113DysLeyt5i3XeDcqzzgyH8ggJCGwZ2XqGNw/8Ip7+yAQw4pJ5CkEZek3NXPx0BdxCPo11accNiK8sceJhzwZAqSe753bHpHhvcS69flFw/YF+GcdnH0HOeZXLybLziIR9r6wbijlUnKIMFf07w4QMmSxo9QKyJGFBihVthxoXRWcyxS/G11pSSkf1J3e8npEnbn4Af3uaCS+i5Oi8qiFpbOPaM0BJLh+Qs3xsvVBGNyY7XfdcthMO8xw9R1kmlI9X9UNitw3AOSxocsepAtNJedD5IxRez2aCA4EHj6CgGOd20pa+gMcWEvo2ObuKBQL4LcrBT8d1NVFIMN/i7sAEnsKj1HrEsk8IRMAJCh3PORrbhpFiO429ucdjW7nvUQgu5UMXwxQagClb+Lohg6XqLMawcIiglmZoyNMo9LUa50LlFzd8R8JfVHPSgMK1MK2XspaKiMc8kc5e3oIcse1x+NBOTGG63y9lxQYz3a9j7h1uC9gYo39+bFfCIcD8UdDl/Sc9f78DwEn1NKzheSCSC0m2+n5FOHd+OwoT3iob0GiMtPBorRj4PT8kv+xV4xouZiX2PQZX7jaM1bAOkLMHYSW8krMuSj437++XfyebR6ZkoByaF2He/tpHz7KQbqQFJ78Ef1uRjbKrJc51uflJEMBJaLex5s2sm4En5J3HqKU9vEvyuWY+IIrwreLjcbgvAg5xiH0ZvJNgpEANxpqrvWtES+8SZi737XPR5zi55xO38Sf/+bLVYtcbh6RYSUi85ks59mI+dLz1Vl8FDr+biGzPwh3B20vZxSJFVffGrtg9qr/miJW8zVv6N/Xe/afOIH3H+tjpmZ85//HZ//Hb/vX47DMCfdYv/2+sW/4bG/B/G4t+6Pc+vpbq7rQ63txx/1t//e9bf/7Mm4W+/6w9aY/CDtHe5D9XaUW4pm7mHQ6zF3fSXg1/hde6tU8SHmFuHjtN1YoVn0FCnxpb0ix+BuNRU6dVWDmI9fE/VnlVtOQnN6tW0VQXrpI15rkanK1+aG/e84Kj9SJ3JkV9vNiX41BOsbly8icWQgea5c5fuTi0QBINWjj+lR3hrFI9VmL4ZEOWF5foOzWQ1UaUmiGbci310ojXc/7Qm/drF96X0MuHwXEdliQTxhNNDSex5ZBGOwUysU82vHYVOi2UaGI/3AUkz2vFG5xauBhR6qwWZy9CGJeeSi/qyW2K7lkUoQs8WVuHWlXoE8gOJFaAeMaP1n5rlBZ9ypWp77lsV7Skm0Vt+UZOPGYB57H1+l/2gFZPga9+2BWdabIv2KG0jNjqhJx+43jYNSjnqtz5r9sikovWT1mk1ivPNt8ixFZgpHzp+qF8gGd8ZZ4HmVEyHG2cbNt1YaxBG3B3Saey+0nOcpkU4sQeZapbcbPt1qHEgHBHkwMbUrhmu0qXoOPEJGqnp5mADG7FMYPsZGnZ86zenZdqem+IfmcnphDCwn9EbOqELclDQLj133neKSWRuX9XjkvAo4iCpqAuj9xhjKq43PL6Sagh9kWgKYnzgTOrqJTorVZJwLaFB2wfOdxurxTUVuk/33K+ciPzqulGQUtiL86OZyN14kP8rxim/aZ3Qjzjvcp/HLY3Nn01I/lObkPzvjT/+7Abxv70bBLpF9FcoYKoKPJvnJkK5pdb6QhXuYqjRXOC25OTaOE8G2D4NDviVZP4BPfnG1Q== 2 | 3 | -------------------------------------------------------------------------------- /testdata/t02.edk2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awslabs/python-uefivars/60b9542eb1e8c2a8e874dcc6f46c1713f33829c5/testdata/t02.edk2 -------------------------------------------------------------------------------- /testdata/t02.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "variables": [ 4 | { 5 | "name": "MemoryTypeInformation", 6 | "data": "00000a00000004000000090000001c0000000600000050000000050000004d00000003000000e603000004000000952900000f00000000000000", 7 | "guid": "4c19049f-4137-4dd3-9c10-8b97a83ffdfa", 8 | "attr": 7 9 | }, 10 | { 11 | "name": "HDDP", 12 | "data": "000002010c00d041030a00000000010106000010030208000000000004012a000100000000080000000000000000100000000000bde66b963c26924fa456b6f560a99b8702027fff0400", 13 | "guid": "fab7e9e1-39dd-4f2b-8408-e20e906cb6de", 14 | "attr": 7 15 | }, 16 | { 17 | "name": "BootOrder", 18 | "data": "00000600000001000200030004000500", 19 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 20 | "attr": 7 21 | }, 22 | { 23 | "name": "MemoryOverwriteRequestControlLock", 24 | "data": "000000", 25 | "guid": "bb983ccf-151d-40e1-a07b-4a17be168292", 26 | "attr": 7 27 | }, 28 | { 29 | "name": "MemoryOverwriteRequestControl", 30 | "data": "000000", 31 | "guid": "e20939be-32d4-41be-a150-897f85d49829", 32 | "attr": 7 33 | }, 34 | { 35 | "name": "ConIn", 36 | "data": "000002010c00d041030a0000000001010600000702010c00d0410303000000007f010400030f0b00ffffffff0301017fff0400", 37 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 38 | "attr": 7 39 | }, 40 | { 41 | "name": "ConOut", 42 | "data": "000002010c00d041030a0000000001010600000f7fff0400", 43 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 44 | "attr": 7 45 | }, 46 | { 47 | "name": "MTC", 48 | "data": "00000a000000", 49 | "guid": "eb704011-1402-11d3-8e77-00a0c969723b", 50 | "attr": 7 51 | }, 52 | { 53 | "name": "Boot0006", 54 | "data": "00000100000062007500620075006e0074007500000004012a000100000000080000000000000000100000000000bde66b963c26924fa456b6f560a99b870202040434005c004500460049005c007500620075006e00740075005c007300680069006d007800360034002e0065006600690000007fff0400", 55 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 56 | "attr": 7 57 | }, 58 | { 59 | "name": "Boot0005", 60 | "data": "0000010000403000450046004900200049006e007400650072006e0061006c0020005300680065006c006c002000280055006e0073007500700070006f00720074006500640020006f007000740069006f006e0029000000010318000b00000000e0b20c00000000ffaff90c0000000004061400b7d67ac51505a8409d21551652854e377fff0400", 61 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 62 | "attr": 7 63 | }, 64 | { 65 | "name": "Boot0004", 66 | "data": "000001000040410045004600490020004e006500740077006f0072006b00000002010c00d041030a00000000010106000015010106000000030b25000050568d8db70000000000000000000000000000000000000000000000000000017fff0400", 67 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 68 | "attr": 7 69 | }, 70 | { 71 | "name": "Boot0003", 72 | "data": "0000010000402600450046004900200056004d00770061007200650020005600690072007400750061006c002000530041005400410020004300440052004f004d002000440072006900760065002000280031002e0030002900000002010c00d041030a0000000001010600001101010600000103120a000100000000007fff0400", 73 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 74 | "attr": 7 75 | }, 76 | { 77 | "name": "Boot0002", 78 | "data": "0000010000402600450046004900200056004d00770061007200650020005600690072007400750061006c002000530041005400410020004300440052004f004d002000440072006900760065002000280030002e0030002900000002010c00d041030a0000000001010600001101010600000103120a000000000000007fff0400", 79 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 80 | "attr": 7 81 | }, 82 | { 83 | "name": "Boot0001", 84 | "data": "0000010000401e0045004600490020005600690072007400750061006c0020006400690073006b002000280031002e0030002900000002010c00d041030a0000000001010600001003020800010000007fff0400", 85 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 86 | "attr": 7 87 | }, 88 | { 89 | "name": "Boot0000", 90 | "data": "0000010000401e0045004600490020005600690072007400750061006c0020006400690073006b002000280030002e0030002900000002010c00d041030a0000000001010600001003020800000000007fff0400", 91 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 92 | "attr": 7 93 | }, 94 | { 95 | "name": "ConsoleOutMode", 96 | "data": "00005000000019000000", 97 | "guid": "793d9786-44dc-4709-b57f-85b8e8fdbfd2", 98 | "attr": 7 99 | }, 100 | { 101 | "name": "PlatformLang", 102 | "data": "0000656e2d555300", 103 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 104 | "attr": 7 105 | }, 106 | { 107 | "name": "Lang", 108 | "data": "0000656e6700", 109 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 110 | "attr": 7 111 | }, 112 | { 113 | "name": "SbConfigState", 114 | "data": "000001", 115 | "guid": "793d9786-44dc-4709-b57f-85b8e8fdbfd2", 116 | "attr": 39 117 | }, 118 | { 119 | "name": "dbx", 120 | "data": "00002616c4c14c509240aca941f9369343288c0e00000000000030000000bd9afa775903324dbd6028f4e78f784b80b4d96931bf0d02fd91a61e19d14f1da452e66db2408ca8604d411f92659f0abd9afa775903324dbd6028f4e78f784bf52f83a3fa9cfbd6920f722824dbe4034534d25b8507246b3b957dac6e1bce7abd9afa775903324dbd6028f4e78f784bc5d9d8a186e2c82d09afaa2a6f7f2e73870d3e64f72c4e08ef67796a840f0fbdbd9afa775903324dbd6028f4e78f784b363384d14d1f2e0b7815626484c459ad57a318ef4396266048d058c5a19bbf76bd9afa775903324dbd6028f4e78f784b1aec84b84b6c65a51220a9be7181965230210d62d6d33c48999c6b295a2b0a06bd9afa775903324dbd6028f4e78f784be6ca68e94146629af03f69c2f86e6bef62f930b37c6fbcc878b78df98c0334e5bd9afa775903324dbd6028f4e78f784bc3a99a460da464a057c3586d83cef5f4ae08b7103979ed8932742df0ed530c66bd9afa775903324dbd6028f4e78f784b58fb941aef95a25943b3fb5f2510a0df3fe44c58c95e0ab80487297568ab9771bd9afa775903324dbd6028f4e78f784b5391c3a2fb112102a6aa1edc25ae77e19f5d6f09cd09eeb2509922bfcd5992eabd9afa775903324dbd6028f4e78f784bd626157e1d6a718bc124ab8da27cbb65072ca03a7b6b257dbdcbbd60f65ef3d1bd9afa775903324dbd6028f4e78f784bd063ec28f67eba53f1642dbf7dff33c6a32add869f6013fe162e2c32f1cbe56dbd9afa775903324dbd6028f4e78f784b29c6eb52b43c3aa18b2cd8ed6ea8607cef3cfae1bafe1165755cf2e614844a44bd9afa775903324dbd6028f4e78f784b90fbe70e69d633408d3e170c6832dbb2d209e0272527dfb63d49d29572a6f44cbd9afa775903324dbd6028f4e78f784b075eea060589548ba060b2feed10da3c20c7fe9b17cd026b94e8a683b8115238bd9afa775903324dbd6028f4e78f784b07e6c6a858646fb1efc67903fe28b116011f2367fe92e6be2b36999eff39d09ebd9afa775903324dbd6028f4e78f784b09df5f4e511208ec78b96d12d08125fdb603868de39f6f72927852599b659c26bd9afa775903324dbd6028f4e78f784b0bbb4392daac7ab89b30a4ac657531b97bfaab04f90b0dafe5f9b6eb90a06374bd9afa775903324dbd6028f4e78f784b0c189339762df336ab3dd006a463df715a39cfb0f492465c600e6c6bd7bd898cbd9afa775903324dbd6028f4e78f784b0d0dbeca6f29eca06f331a7d72e4884b12097fb348983a2a14a0d73f4f10140fbd9afa775903324dbd6028f4e78f784b0dc9f3fb99962148c3ca833632758d3ed4fc8d0b0007b95b31e6528f2acd5bfcbd9afa775903324dbd6028f4e78f784b106faceacfecfd4e303b74f480a08098e2d0802b936f8ec774ce21f31686689cbd9afa775903324dbd6028f4e78f784b174e3a0b5b43c6a607bbd3404f05341e3dcf396267ce94f8b50e2e23a9da920cbd9afa775903324dbd6028f4e78f784b18333429ff0562ed9f97033e1148dceee52dbe2e496d5410b5cfd6c864d2d10fbd9afa775903324dbd6028f4e78f784b2b99cf26422e92fe365fbf4bc30d27086c9ee14b7a6fff44fb2f6b9001699939bd9afa775903324dbd6028f4e78f784b2bbf2ca7b8f1d91f27ee52b6fb2a5dd049b85a2b9b529c5d6662068104b055f8bd9afa775903324dbd6028f4e78f784b2c73d93325ba6dcbe589d4a4c63c5b935559ef92fbf050ed50c4e2085206f17dbd9afa775903324dbd6028f4e78f784b2e70916786a6f773511fa7181fab0f1d70b557c6322ea923b2a8d3b92b51af7dbd9afa775903324dbd6028f4e78f784b306628fa5477305728ba4a467de7d0387a54f569d3769fce5e75ec89d28d1593bd9afa775903324dbd6028f4e78f784b3608edbaf5ad0f41a414a1777abf2faf5e670334675ec3995e6935829e0caad2bd9afa775903324dbd6028f4e78f784b3841d221368d1583d75c0a02e62160394d6c4e0a6760b6f607b90362bc855b02bd9afa775903324dbd6028f4e78f784b3fce9b9fdf3ef09d5452b0f95ee481c2b7f06d743a737971558e70136ace3e73bd9afa775903324dbd6028f4e78f784b4397daca839e7f63077cb50c92df43bc2d2fb2a8f59f26fc7a0e4bd4d9751692bd9afa775903324dbd6028f4e78f784b47cc086127e2069a86e03a6bef2cd410f8c55a6d6bdb362168c31b2ce32a5adfbd9afa775903324dbd6028f4e78f784b518831fe7382b514d03e15c621228b8ab65479bd0cbfa3c5c1d0f48d9c306135bd9afa775903324dbd6028f4e78f784b5ae949ea8855eb93e439dbc65bda2e42852c2fdf6789fa146736e3c3410f2b5cbd9afa775903324dbd6028f4e78f784b6b1d138078e4418aa68deb7bb35e066092cf479eeb8ce4cd12e7d072ccb42f66bd9afa775903324dbd6028f4e78f784b6c8854478dd559e29351b826c06cb8bfef2b94ad3538358772d193f82ed1ca11bd9afa775903324dbd6028f4e78f784b6f1428ff71c9db0ed5af1f2e7bbfcbab647cc265ddf5b293cdb626f50a3a785ebd9afa775903324dbd6028f4e78f784b71f2906fd222497e54a34662ab2497fcc81020770ff51368e9e3d9bfcbfd6375bd9afa775903324dbd6028f4e78f784b726b3eb654046a30f3f83d9b96ce03f670e9a806d1708a0371e62dc49d2c23c1bd9afa775903324dbd6028f4e78f784b72e0bd1867cf5d9d56ab158adf3bddbc82bf32a8d8aa1d8c5e2f6df29428d6d8bd9afa775903324dbd6028f4e78f784b7827af99362cfaf0717dade4b1bfe0438ad171c15addc248b75bf8caa44bb2c5bd9afa775903324dbd6028f4e78f784b81a8b965bb84d3876b9429a95481cc955318cfaa1412d808c8a33bfd33fff0e4bd9afa775903324dbd6028f4e78f784b82db3bceb4f60843ce9d97c3d187cd9b5941cd3de8100e586f2bda5637575f67bd9afa775903324dbd6028f4e78f784b895a9785f617ca1d7ed44fc1a1470b71f3f1223862d9ff9dcc3ae2df92163dafbd9afa775903324dbd6028f4e78f784b8ad64859f195b5f58dafaa940b6a6167acd67a886e8f469364177221c55945b9bd9afa775903324dbd6028f4e78f784b8bf434b49e00ccf71502a2cd900865cb01ec3b3da03c35be505fdf7bd563f521bd9afa775903324dbd6028f4e78f784b8d8ea289cfe70a1c07ab7365cb28ee51edd33cf2506de888fbadd60ebf80481cbd9afa775903324dbd6028f4e78f784b9998d363c491be16bd74ba10b94d9291001611736fdca643a36664bc0f315a42bd9afa775903324dbd6028f4e78f784b9e4a69173161682e55fde8fef560eb88ec1ffedcaf04001f66c0caf707b2b734bd9afa775903324dbd6028f4e78f784ba6b5151f3655d3a2af0d472759796be4a4200e5495a7d869754c4848857408a7bd9afa775903324dbd6028f4e78f784ba7f32f508d4eb0fead9a087ef94ed1ba0aec5de6f7ef6ff0a62b93bedf5d458dbd9afa775903324dbd6028f4e78f784bad6826e1946d26d3eaf3685c88d97d85de3b4dcb3d0ee2ae81c70560d13c5720bd9afa775903324dbd6028f4e78f784baeebae3151271273ed95aa2e671139ed31a98567303a332298f83709a9d55aa1bd9afa775903324dbd6028f4e78f784bafe2030afb7d2cda13f9fa333a02e34f6751afec11b010dbcd441fdf4c4002b3bd9afa775903324dbd6028f4e78f784bb54f1ee636631fad68058d3b0937031ac1b90ccb17062a391cca68afdbe40d55bd9afa775903324dbd6028f4e78f784bb8f078d983a24ac433216393883514cd932c33af18e7dd70884c8235f4275736bd9afa775903324dbd6028f4e78f784bb97a0889059c035ff1d54b6db53b11b9766668d9f955247c028b2837d7a04cd9bd9afa775903324dbd6028f4e78f784bbc87a668e81966489cb508ee805183c19e6acd24cf17799ca062d2e384da0ea7bd9afa775903324dbd6028f4e78f784bc409bdac4775add8db92aa22b5b718fb8c94a1462c1fe9a416b95d8a3388c2fcbd9afa775903324dbd6028f4e78f784bc617c1a8b1ee2a811c28b5a81b4c83d7c98b5b0c27281d610207ebe692c2967fbd9afa775903324dbd6028f4e78f784bc90f336617b8e7f983975413c997f10b73eb267fd8a10cb9e3bdbfc667abdb8bbd9afa775903324dbd6028f4e78f784bcb6b858b40d3a098765815b592c1514a49604fafd60819da88d7a76e9778fef7bd9afa775903324dbd6028f4e78f784bce3bfabe59d67ce8ac8dfd4a16f7c43ef9c224513fbc655957d735fa29f540cebd9afa775903324dbd6028f4e78f784bd8cbeb9735f5672b367e4f96cdc74969615d17074ae96c724d42ce0216f8f3fabd9afa775903324dbd6028f4e78f784be92c22eb3b5642d65c1ec2caf247d2594738eebb7fb3841a44956f59e2b0d1fabd9afa775903324dbd6028f4e78f784bfddd6e3d29ea84c7743dad4a1bdbc700b5fec1b391f932409086acc71dd6dbd8bd9afa775903324dbd6028f4e78f784bfe63a84f782cc9d3fcf2ccf9fc11fbd03760878758d26285ed12669bdc6e6d01bd9afa775903324dbd6028f4e78f784bfecfb232d12e994b6d485d2c7167728aa5525984ad5ca61e7516221f079a1436bd9afa775903324dbd6028f4e78f784bca171d614a8d7e121c93948cd0fe55d39981f9d11aa96e03450a415227c2c65bbd9afa775903324dbd6028f4e78f784b55b99b0de53dbcfe485aa9c737cf3fb616ef3d91fab599aa7cab19eda763b5babd9afa775903324dbd6028f4e78f784b77dd190fa30d88ff5e3b011a0ae61e6209780c130b535ecb87e6f0888a0b6b2fbd9afa775903324dbd6028f4e78f784bc83cb13922ad99f560744675dd37cc94dcad5a1fcba6472fee341171d939e884bd9afa775903324dbd6028f4e78f784b3b0287533e0cc3d0ec1aa823cbf0a941aad8721579d1c499802dd1c3a636b8a9bd9afa775903324dbd6028f4e78f784b939aeef4f5fa51e23340c3f2e49048ce8872526afdf752c3a7f3a3f2bc9f6049bd9afa775903324dbd6028f4e78f784b64575bd912789a2e14ad56f6341f52af6bf80cf94400785975e9f04e2d64d745bd9afa775903324dbd6028f4e78f784b45c7c8ae750acfbb48fc37527d6412dd644daed8913ccd8a24c94d856967df8e", 121 | "guid": "d719b2cb-3d3a-4596-a3bc-dad00e67656f", 122 | "attr": 39 123 | }, 124 | { 125 | "name": "db", 126 | "data": "0000a159c0a5e494a74a87b5ab155c2bf072fb03000000000000df0300005be9d5a38f0a53478735445afb708f62308203cb308202b3a003020102020900e9d9ff69e6f3e7e4300d06092a864886f70d01010b0500304d310b3009060355040613025553311330110603550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31153013060355040a130c564d776172652c20496e632e301e170d3038313031363137313630355a170d3139313233313137313630355a304d310b3009060355040613025553311330110603550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31153013060355040a130c564d776172652c20496e632e30820120300d06092a864886f70d01010105000382010d00308201080282010100c565a745cf677ff3152e790e7f53bbcc762796b76afa0893b2ac847459dc3f17576de5054dfee5b9bc1d0fab80810ba4bffc64c8fe54464b5d93ffef3088bf3c6c250aef126f46b6dc2ee6a3da71f080e5a32122fa48358b5f6629cfb91b73a28afe2952cda5e1d4d7f6f0b6178419438f8c963af44d674b48b431139cc64c8fe48344a2500aa475b39fc9b0b90c9febbcc7c78b342d9a25e98198a23cda2aa58fd17ff6e511143f0689141f048a1ced057f3db9e7dd118405b03b90b89fd418050c5e5451b4de4ea5ad04f43b8b0b8546885da1941286d4f1531cabc9e4dfa26dafe09c953c75c6211879f62cb0f6badca8b35db8b47a407fe6c402b05a137f020103a381af3081ac301d0603551d0e041604144ad8ba0472073d28127706ddc6ccb9050441bbc7307d0603551d230476307480144ad8ba0472073d28127706ddc6ccb9050441bbc7a151a44f304d310b3009060355040613025553311330110603550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31153013060355040a130c564d776172652c20496e632e820900e9d9ff69e6f3e7e4300c0603551d13040530030101ff300d06092a864886f70d01010b0500038201010070efb42ec4c4ae66d81820271c0c8d0d4f9e93b3e7f4e5956f6c094579162720c39d943fb0dbc0e7b74592a74b49a7438b940b59c7de186531847553c035bc160b2b939bd5fb5252a059083c37a4f50151f83fbd627b3525ecc6bbb5219da2175d808a0dfc1b4c87538363b40bd549930d69f67233ecdaeec8398dac8f6abe8033b8e168e3440a66037545caca2ae010ee52064532ca1b67b7d024bc9bbea291590c0a7e342a264fa58015b9d34723cd0bc34bc994f843d16f874839badeef168213cb4d0a3f05c1a1be647fb254d473967d85a67ac5eed3514c4e3c77bcdf401b49626070f8080bdd3228ebd15b57082e00a8c05b2135712836433a97e96ca3a159c0a5e494a74a87b5ab155c2bf072e703000000000000cb0300005be9d5a38f0a53478735445afb708f62308203b73082029fa003020102020900e34ca75a0a615853300d06092a864886f70d01010b05003072310b30090603550406130255533113301106035504080c0a43616c69666f726e69613112301006035504070c0950616c6f20416c746f31153013060355040a0c0c564d776172652c20496e632e3123302106035504030c1a564d776172652053656375726520426f6f74205369676e696e67301e170d3137313032343036343735395a170d3337313031393036343735395a3072310b30090603550406130255533113301106035504080c0a43616c69666f726e69613112301006035504070c0950616c6f20416c746f31153013060355040a0c0c564d776172652c20496e632e3123302106035504030c1a564d776172652053656375726520426f6f74205369676e696e6730820122300d06092a864886f70d01010105000382010f003082010a0282010100e371a456721092974979525f916f71409d19f9fb780429bbabe3c0af865d16a149d5aeebf1dc6b078eded6b998226ebb018f805d7cf527efef7b9e4c24806a6acb0ed4fe74621f6734af8a252261f953dc0304ed9908a0be78b6a886e9f302eb8e9ec66a154392e2a1daeaed4610d3c830c0a92d6f415a7775f84b3d6a6773dce7190e468baffab1ecb64f3d99ad9e59e8da390626138272bbd7165845dac03b78d45df404463091fe710dfbd3b783884f8102ce5cb50bbdcce9e901121bf16881376014ed5b6b5859a0228733864965569edacd16451f9a34d905004204175ac227fa106f72650b0c717e755e6c90100473ece0a52b6cc61cc2cf193686c11f0203010001a350304e301d0603551d0e0416041404597f3e1ffb240bba0ff0f05d5eb05f3e15f6d7301f0603551d2304183016801404597f3e1ffb240bba0ff0f05d5eb05f3e15f6d7300c0603551d13040530030101ff300d06092a864886f70d01010b0500038201010008bdb6a6bb55a3ebd84c4c602fef26d97f377a482a9db39421213e07da767bec3701eaff051ee6cf881a854eb41aac85c20c1e62088fb3f95a845a22e6f91dc4d0309e393c911578f5e2201b520a6d146131955346ff20196f9404994ab2094d82addb30f27d26212a135cc1799a38c429e310278a05a1e0416abba23aec8482b3aaad2f58dcedbc03a18b6edade6b497cd71be7c40846130ae6543320cdc4b277f1cec8b70be78cc33b7c9cd9f285c8bcfc4017f07c7f0f0ad9f37a91b7099509072e78f603232c3eeee99a9f6d4b0e0306f0c3ae69190e809d663ee8fdb7fdf46da2e778834484e2ad519b51cce6f1cf0f107d490fd71c02c5758ec9524709a159c0a5e494a74a87b5ab155c2bf072400600000000000024060000bd9afa775903324dbd6028f4e78f784b30820610308203f8a003020102020a6108d3c4000000000004300d06092a864886f70d01010b0500308191310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e313b3039060355040313324d6963726f736f667420436f72706f726174696f6e205468697264205061727479204d61726b6574706c61636520526f6f74301e170d3131303632373231323234355a170d3236303632373231333234355a308181310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e312b3029060355040313224d6963726f736f667420436f72706f726174696f6e2055454649204341203230313130820122300d06092a864886f70d01010105000382010f003082010a0282010100a5086c4cc745096a4b0ca4c0877f06750c43015464e0167f07ed927d0bb273bf0c0ac64a4561a0c5162d96d3f52ba0fb4d499b4180903cb954fde6bcd19dc4a4188a7f418a5c59836832bb8c47c9ee71bc214f9a8a7cff443f8d8f32b22648ae75b5eec94c1e4a197ee4829a1d78774d0cb0bdf60fd316d3bcfa2ba551385df5fbbadb7802dbffec0a1b96d583b81913e9b6c07b407be11f2827c9faef565e1ce67e947ec0f044b27939e5dab2628b4dbf3870e2682414c933a40837d558695ed37cedc1045308e74eb02a876308616f631559eab22b79d70c61678a5bfd5ead877fba86674f71581222042222ce8bef547100ce503558769508ee6ab1a201d50203010001a382017630820172301206092b060104018237150104050203010001302306092b060104018237150204160414f8c16bb77f77534af325371d4ea1267b0f207080301d0603551d0e0416041413adbf4309bd82709c8cd54f316ed522988a1bd4301906092b0601040182371402040c1e0a00530075006200430041300b0603551d0f040403020186300f0603551d130101ff040530030101ff301f0603551d2304183016801445665243e17e5811bfd64e9e2355083b3a226aa8305c0603551d1f045530533051a04fa04d864b687474703a2f2f63726c2e6d6963726f736f66742e636f6d2f706b692f63726c2f70726f64756374732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e63726c306006082b0601050507010104543052305006082b060105050730028644687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b692f63657274732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e637274300d06092a864886f70d01010b05000382020100350842ff30cccef7760cad1068583529463276277cef124127421b4aaa6d813848591355f3e95834a6160b82aa5dad82da808341068fb41df203b9f31a5d1bf15090f9b3558442281c20bdb2ae5114c5c0ac9795211c90db0ffc779e95739188cabdbd52b905500ddf579ea061ed0de56d25d9400f1740c8cea34ac24daf9a121d08548fbdc7bcb92b3d492b1f32fc6a21694f9bc87e4234fc3606178b8f2040c0b39a257527cdc903a3f65dd1e736547ab950b5d312d107bfbb74dfdc1e8f80d5ed18f42f14166b2fde668cb023e5c784d8edeac13382ad564b182df1689507cdcff072f0aebbdd8685982c214c332bf00f4af06887b592553275a16a826a3ca32511a4edadd704aecbd84059a084d1954c6291221a741d8c3d470e44a6e4b09b3435b1fab653a82c81eca40571c89db8bae81b4466e447540e8e567fb39f1698b286d0683e9023b52f5e8f50858dc68d825f41a1f42e0de099d26c75e4b669b52186fa07d1f6e24dd1daad2c77531e253237c76c52729586b0f135616a19f5b23b815056a6322dfea289f94286271855a182ca5a9bf830985414a64796252fc826e441941a5c023fe596e3855b3c3e3fbb47167255e22522b1d97be703062aa3f71e9046c3000dd61989e30e352762037115a6efd027a0a0593760f83894b8e07870f8ba4c868794f6e0ae0245ee65c2b6a37e69167507929bf5a6bc598358a159c0a5e494a74a87b5ab155c2bf0720706000000000000eb050000bd9afa775903324dbd6028f4e78f784b308205d7308203bfa003020102020a61077656000000000008300d06092a864886f70d01010b0500308188310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e31323030060355040313294d6963726f736f667420526f6f7420436572746966696361746520417574686f726974792032303130301e170d3131313031393138343134325a170d3236313031393138353134325a308184310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e312e302c060355040313254d6963726f736f66742057696e646f77732050726f64756374696f6e20504341203230313130820122300d06092a864886f70d01010105000382010f003082010a0282010100dd0cbba2e42e09e3e7c5f79669bc0021bd693333efad04cb5480ee0683bbc52084d9f7d28bf338b0aba4ad2d7c627905ffe34a3f04352070e3c4e76be09cc03675e98a31dd8d70e5dc37b5744696285b8760232cbfdc47a567f751279e72eb07a6c9b91e3b53357ce5d3ec27b9871cfeb9c923096fa84691c16e963c41d3cba33f5d026a4dec691f25285c36fffd43150a94e019b4cfdfc212e2c25b27ee2778308b5b2a096b22895360162cc0681d53baec49f39d618c85680973445d7da2542bdd79f715cf355d6c1c2b5ccebc9c238b6f6eb526d93613c34fd627aeb9323b41922ce1c7cd77e8aa544ef75c0b048765b44318a8b2e06d1977ec5a24fa48030203010001a38201433082013f301006092b06010401823715010403020100301d0603551d0e04160414a92902398e16c49778cd90f99e4f9ae17c55af53301906092b0601040182371402040c1e0a00530075006200430041300b0603551d0f040403020186300f0603551d130101ff040530030101ff301f0603551d23041830168014d5f656cb8fe8a25c6268d13d94905bd7ce9a18c430560603551d1f044f304d304ba049a0478645687474703a2f2f63726c2e6d6963726f736f66742e636f6d2f706b692f63726c2f70726f64756374732f4d6963526f6f4365724175745f323031302d30362d32332e63726c305a06082b06010505070101044e304c304a06082b06010505073002863e687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b692f63657274732f4d6963526f6f4365724175745f323031302d30362d32332e637274300d06092a864886f70d01010b0500038202010014fc7c7151a579c26eb2ef393ebc3c520f6e2b3f101373fea868d048a6344d8a960526ee3146906179d6ff382e456bf4c0e528b8da1d8f8adb09d71ac74c0a36666a8cec1bd70490a81817a49bb9e240323676c4c15ac6bfe404c0ea16d3acc368ef62acdd546c503058a6eb7cfe94a74e8ef4ec7c867357c2522173345af3a38a56c804da0709edf88be3cef47e8eaef0f60b8a08fb3fc91d727f53b8ebbe63e0e33d3165b081e5f2accd16a49f3da8b19bc242d090845f541dff89eaba1d47906fb0734e419f409f5fe5a12ab21191738a2128f0cede73395f3eab5c60ecdf0310a8d309e9f4f69685b67f51886647198da2b0123d812a680577bb914c627bb6c107c7ba7a8734030e4b627a99e9cafcce4a37c92da4577c1cfe3ddcb80f5afad6c4b30285023aeab3d96ee4692137de81d1f675190567d393575e291b39c8ee2de1cde445735bd0d2ce7aab1619824658d05e9d81b367af6c35f2bce53f24e235a20a7506f6185699d4782cd1051bebd088019daa10f105dfba7e2c63b7069b2321c4f9786ce2581706362b911203cca4d9f22dbaf9949d40ed1845f1ce8a5c6b3eab03d370182a0a6ae05f47d1d5630a32f2afd7361f2a705ae5425908714b57ba7e8381f0213cf41cc1c5b990930e88459386e9b12099be98cbc595a45d62d6a0630820bd7510777d3df345b99f979fcb57806f33a904cf77a4621c597e", 127 | "guid": "d719b2cb-3d3a-4596-a3bc-dad00e67656f", 128 | "attr": 39 129 | }, 130 | { 131 | "name": "KEK", 132 | "data": "0000a159c0a5e494a74a87b5ab155c2bf0721806000000000000fc050000bd9afa775903324dbd6028f4e78f784b308205e8308203d0a003020102020a610ad188000000000003300d06092a864886f70d01010b0500308191310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e313b3039060355040313324d6963726f736f667420436f72706f726174696f6e205468697264205061727479204d61726b6574706c61636520526f6f74301e170d3131303632343230343132395a170d3236303632343230353132395a308180310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e312a3028060355040313214d6963726f736f667420436f72706f726174696f6e204b454b204341203230313130820122300d06092a864886f70d01010105000382010f003082010a0282010100c4e8b58abfad5726b026c3eae7fb577a44025d070dda4ae5742ae6b00fec6debec7fb9e35a63327c11174f0ee30ba73815938ec6f5e084b19a9b2ce7f5b791d609e1e2c004a8ac301cdf48f306509a64a7517fc8854f8f2086cefe2fe19fff82c0ede9cdcef4536a623a0b43b9e225fdfe05f9d4c414ab11e223898d70b7a41d4decaee59cfa16c2d7c1cbd4e8c42fe599ee248b03ec8df28beac34afb4311120b7eb547926cdce60489ebf53304eb10012a71e5f983133cff25092f687646ffba4fbedcad712a58aafb0ed2793de49b653bcc292a9ffc7259a2ebae92eff6351380c602ece45fcc9d76cdef6392c1af79408479877fe352a8e89d7b07698f150203010001a382014f3082014b301006092b06010401823715010403020100301d0603551d0e0416041462fc43cda03ea4cb6712d25bd955ac7bccb68a5f301906092b0601040182371402040c1e0a00530075006200430041300b0603551d0f040403020186300f0603551d130101ff040530030101ff301f0603551d2304183016801445665243e17e5811bfd64e9e2355083b3a226aa8305c0603551d1f045530533051a04fa04d864b687474703a2f2f63726c2e6d6963726f736f66742e636f6d2f706b692f63726c2f70726f64756374732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e63726c306006082b0601050507010104543052305006082b060105050730028644687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b692f63657274732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e637274300d06092a864886f70d01010b05000382020100d48488f514941802ca2a3cfb2a921c0cd7a0d1f1e85266a8eea2b5757a9000aa2da4765aea79b7b9376a517b1064f6e164f20267bef7a81b78bdbace8858640cd657c819a35f05d6dbc6d069ce484b32b7eb5dd230f5c0f5b8ba7807a32bfe9bdb345684ec82caae4125709c6be9fe900fd7961fe5e7941fb22a0c8d4bff2829107bf7d77ca5d176b905c879ed0f90929cc2fedf6f7e6c0f7bd4c145dd345196390fe55e56d8180596f407a642b3a077fd0819f27156cc9f8623a487cba6fd587ed4696715917e81f27f13e50d8b8a3c8784ebe3cebd43e5ad2d84938e6a2b5a7c44fa52aa81c82d1cbbe052df0011f89a3dc160b0e133b5a388d165190a1ae7ac7ca4c182874e38b12f0dc514876ffd8d2ebc39b6e7e6c3e0e4cd2784ef9442ef298b9046413b811b67d8f9435965cb0dbcfd00924ff4753ba7a924fc50414079e02d4f0a6a27766e52ed96697baf0ff78705d045c2ad5314811ffb3004aa373661da4a691b34d868edd602cf6c940cd3cf6c2279adb1f0bc03a24660a9c407c22182f1fdf2e8793260bfd8aca522144bcac1d84beb7d3f5735b2e64f75b4b060032253ae91791dd69b411f15865470b2de0d350f7cb03472ba97603bf079eba2b21c5da216b887c5e91bf6b597256f389fe391fa8a7998c3690eb7a31c200597f8ca14ae00d7c4f3c01410756b34a01bb59960f35cb0c5574e36d23284bf9e", 133 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 134 | "attr": 39 135 | }, 136 | { 137 | "name": "PK", 138 | "data": "0000ed8c2e45ffdf8c4bae015118862e682c2d00000000000000110000005be9d5a38f0a53478735445afb708f6200", 139 | "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", 140 | "attr": 39 141 | } 142 | ] 143 | } -------------------------------------------------------------------------------- /uefivars: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | # SPDX-License-Identifier: MIT 5 | 6 | import pyuefivars 7 | 8 | 9 | if __name__ == '__main__': 10 | pyuefivars.main() 11 | --------------------------------------------------------------------------------