Skip to content

Instantly share code, notes, and snippets.

@Vbitz
Created January 5, 2024 04:45
Show Gist options
  • Save Vbitz/03c6d5dfe18988548171678b4e9933a7 to your computer and use it in GitHub Desktop.
Save Vbitz/03c6d5dfe18988548171678b4e9933a7 to your computer and use it in GitHub Desktop.
Declarative Struct Format
# iso 9660
type strA string
type strD string
struct int32_lsb_msb {
lsb i32_le
msb i32_be
}
type int32_lsb i32_le
type int32_msb i32_be
struct int16_lsb_msb {
lsb i16_le
msb i16_be
}
type int16_lsb i16_le
type int16_msb i16_be
struct dec_datetime {
year [4]strD
month [2]strD
day [2]strD
hour [2]strD
minute [2]strD
second [2]strD
hundredthsSecond [2]strD
timeZoneOffset i8
}
struct dir_datetime {
year u8
month u8
day u8
hour u8
minute u8
second u8
gmtOffset u8
}
struct pathTableEntry {
recordLength u8
extendedAttributeRecordLength u8
locationOfExtent u32_le
parentNumber u16_le
name [$length]strD
# _ [(sizeof($_) % 2)]u8 # padding
}
bitfield fileFlags : u8 {
hidden
directory
associatedFile
extendedFormat
extendedOwnerGroup
_
_
notFinal
}
struct directoryRecord {
recordLength i8
extendedAttributeRecordLength i8
location int32_lsb_msb
length int32_lsb_msb
recordingDateTime dir_datetime
flags fileFlags
fileUnitSize i8
interleaveGapSize i8
volumeSequenceNumber int16_lsb_msb
filenameLength i8
filename [$filenameLength]strD
# _ [(sizeof($_) % 2)]u8 # padding
}
enum volumeDescriptorType : u8 {
bootRecord = 0
primary = 1
supplementary = 2
partition = 3
terminator = 255
}
interface baseVolumeDescriptor
struct bootRecord : baseVolumeDescriptor {
bootSystemIdentifier [32]strA
bootIdentifier [32]strA
bootSystemUse [1977]byte
}
struct primary : baseVolumeDescriptor {
_ [1]u8 # unused
systemIdentifier [32]strA
volumeIdentifier [32]strD
_ [8]u8 # unused
volumeSpaceSize int32_lsb_msb
_ [32]u8 # unused
volumeSetSize int16_lsb_msb
volumeSequenceNumber int16_lsb_msb
logicalBlockSize int16_lsb_msb
pathTableSize int32_lsb_msb
locationOfTypeLPathTable int32_lsb
locationOfOptionalTypeLPathTable int32_lsb
locationOfTypeMPathTable int32_msb
locationOfOptionalTypeMPathTable int32_msb
rootDirectoryEntry directoryRecord
volumeSetIdentifier [128]strD
publisherIdentifier [128]strA
dataPreparerIdentifier [128]strA
applicationIdentifier [128]strA
copyrightFileIdentifier [37]strD
abstractFileIdentifier [37]strD
bibliographicFileIdentifier [37]strD
volumeCreationDateTime dec_datetime
volumeModificationDateTime dec_datetime
volumeExpirationDateTime dec_datetime
volumeEffectiveDateTime dec_datetime
fileStructureVersion i8
_ [1]u8 # unused
applicationUsed [512]byte
_ [653]u8 # reserved
}
struct volumeDescriptor {
volumeType volumeDescriptorType
identifier [5]strA
version u8
data baseVolumeDescriptor = match $volumeType {
@volumeDescriptorType.bootRecord => read(bootRecord)
@volumeDescriptorType.primary => read(primary)
@volumeDescriptorType.supplementary => read([2041]byte)
@volumeDescriptorType.partition => read([2041]byte)
@volumeDescriptorType.terminator => read([2041]byte)
_ => unimplemented
}
}
struct iso9660 {
offset 0x8000 {
descriptors []volumeDescriptor = loop {
var i = read(volumeDescriptor)
if ($i.volumeType == @volumeDescriptorType.terminator) {
break
}
$i
}
}
}
root iso9660
| 00000000 | | iso9660 | <root> | ---
| 00008000 | | | descriptors | ---
| 00008000 | | volumeDescriptor | | ---
| 00008000 | 01 | volumeDescriptorType | volumeType | primary
| 00008001 | 43 44 30 30 31 | string | identifier | "CD001"
| 00008006 | 01 | u8 | version | 1
| 00008007 | | primary | data | ---
| 00008008 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | string | systemIdentifier | " "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| 00008028 | 57 49 4E 39 38 20 53 45 20 20 20 20 20 20 20 20 | string | volumeIdentifier | "WIN98 SE "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| 00008050 | | int32_lsb_msb | volumeSpaceSize | ---
| 00008050 | 71 E2 04 .. | i32_le | lsb | 320113
| 00008054 | .. 04 E2 71 | i32_be | msb | 320113
| 00008078 | | int16_lsb_msb | volumeSetSize | ---
| 00008078 | 01 .. | i16_le | lsb | 1
| 0000807A | .. 01 | i16_be | msb | 1
| 0000807C | | int16_lsb_msb | volumeSequenceNumber | ---
| 0000807C | 01 .. | i16_le | lsb | 1
| 0000807E | .. 01 | i16_be | msb | 1
| 00008080 | | int16_lsb_msb | logicalBlockSize | ---
| 00008080 | .. 08 | i16_le | lsb | 2048
| 00008082 | 08 .. | i16_be | msb | 2048
| 00008084 | | int32_lsb_msb | pathTableSize | ---
| 00008084 | 64 14 .. .. | i32_le | lsb | 5220
| 00008088 | .. .. 14 64 | i32_be | msb | 5220
| 0000808C | ED 02 .. .. | i32_le | locationOfTypeLPathTable | 749
| 00008090 | .. .. .. .. | i32_le | locationOfOptionalTypeLPathTable | 0
| 00008094 | .. .. 02 F0 | i32_be | locationOfTypeMPathTable | 752
| 00008098 | .. .. .. .. | i32_be | locationOfOptionalTypeMPathTable | 0
| 0000809C | | directoryRecord | rootDirectoryEntry | ---
| 0000809C | 22 | i8 | recordLength | 34
| 0000809D | .. | i8 | extendedAttributeRecordLength | 0
| 0000809E | | int32_lsb_msb | location | ---
| 0000809E | 7C 04 .. .. | i32_le | lsb | 1148
| 000080A2 | .. .. 04 7C | i32_be | msb | 1148
| 000080A6 | | int32_lsb_msb | length | ---
| 000080A6 | BA 01 .. .. | i32_le | lsb | 442
| 000080AA | .. .. 01 BA | i32_be | msb | 442
| 000080AE | | dir_datetime | recordingDateTime | ---
| 000080AE | 63 | u8 | year | 99
| 000080AF | 04 | u8 | month | 4
| 000080B0 | 17 | u8 | day | 23
| 000080B1 | 16 | u8 | hour | 22
| 000080B2 | 16 | u8 | minute | 22
| 000080B3 | .. | u8 | second | 0
| 000080B4 | .. | u8 | gmtOffset | 0
| 000080B5 | 02 | fileFlags | flags | {"directory":true}
| 000080B6 | .. | i8 | fileUnitSize | 0
| 000080B7 | .. | i8 | interleaveGapSize | 0
| 000080B8 | | int16_lsb_msb | volumeSequenceNumber | ---
| 000080B8 | 01 .. | i16_le | lsb | 1
| 000080BA | .. 01 | i16_be | msb | 1
| 000080BC | 01 | i8 | filenameLength | 1
| 000080BD | .. | string | filename | "\u0000"
| 000080BE | 57 49 4E 39 38 20 53 45 20 20 20 20 20 20 20 20 | string | volumeSetIdentifier | "WIN98 SE
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | | "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| 0000813E | 4D 49 43 52 4F 53 4F 46 54 20 43 4F 52 50 4F 52 | string | publisherIdentifier | "MICROSOFT CORPORATION
| | 41 54 49 4F 4E 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | | "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| 000081BE | 4D 49 43 52 4F 53 4F 46 54 20 43 4F 52 50 4F 52 | string | dataPreparerIdentifier | "MICROSOFT CORPORATION, ONE MICROSOFT WA
| | 41 54 49 4F 4E 2C 20 4F 4E 45 20 4D 49 43 52 4F | | | Y, REDMOND WA 98052, (425) 882-8080
| | 53 4F 46 54 20 57 41 59 2C 20 52 45 44 4D 4F 4E | | |
| | 44 20 57 41 20 39 38 30 35 32 2C 20 28 34 32 35 | | | "
| | 29 20 38 38 32 2D 38 30 38 30 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| 0000823E | 43 44 49 4D 41 47 45 20 32 2E 33 39 20 28 31 32 | string | applicationIdentifier | "CDIMAGE 2.39 (12/04/97 TM)
| | 2F 30 34 2F 39 37 20 54 4D 29 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | | "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| 000082BE | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | string | copyrightFileIdentifier | " "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 | | |
| 000082E3 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | string | abstractFileIdentifier | " "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 | | |
| 00008308 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | string | bibliographicFileIdentifier | " "
| | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | |
| | 20 20 20 20 20 | | |
| 0000832D | | dec_datetime | volumeCreationDateTime | ---
| 0000832D | 31 39 39 39 | string | year | "1999"
| 00008331 | 30 34 | string | month | "04"
| 00008333 | 32 33 | string | day | "23"
| 00008335 | 32 32 | string | hour | "22"
| 00008337 | 32 32 | string | minute | "22"
| 00008339 | 30 30 | string | second | "00"
| 0000833B | 30 30 | string | hundredthsSecond | "00"
| 0000833D | 04 | i8 | timeZoneOffset | 4
| 0000833E | | dec_datetime | volumeModificationDateTime | ---
| 0000833E | 30 30 30 30 | string | year | "0000"
| 00008342 | 30 30 | string | month | "00"
| 00008344 | 30 30 | string | day | "00"
| 00008346 | 30 30 | string | hour | "00"
| 00008348 | 30 30 | string | minute | "00"
| 0000834A | 30 30 | string | second | "00"
| 0000834C | 30 30 | string | hundredthsSecond | "00"
| 0000834E | .. | i8 | timeZoneOffset | 0
| 0000834F | | dec_datetime | volumeExpirationDateTime | ---
| 0000834F | 30 30 30 30 | string | year | "0000"
| 00008353 | 30 30 | string | month | "00"
| 00008355 | 30 30 | string | day | "00"
| 00008357 | 30 30 | string | hour | "00"
| 00008359 | 30 30 | string | minute | "00"
| 0000835B | 30 30 | string | second | "00"
| 0000835D | 30 30 | string | hundredthsSecond | "00"
| 0000835F | .. | i8 | timeZoneOffset | 0
| 00008360 | | dec_datetime | volumeEffectiveDateTime | ---
| 00008360 | 30 30 30 30 | string | year | "0000"
| 00008364 | 30 30 | string | month | "00"
| 00008366 | 30 30 | string | day | "00"
| 00008368 | 30 30 | string | hour | "00"
| 0000836A | 30 30 | string | minute | "00"
| 0000836C | 30 30 | string | second | "00"
| 0000836E | 30 30 | string | hundredthsSecond | "00"
| 00008370 | .. | i8 | timeZoneOffset | 0
| 00008371 | 01 | i8 | fileStructureVersion | 1
| 00008373 | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | []byte | applicationUsed | ---
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| 00008800 | | volumeDescriptor | | ---
| 00008800 | .. | volumeDescriptorType | volumeType | bootRecord
| 00008801 | 43 44 30 30 31 | string | identifier | "CD001"
| 00008806 | 01 | u8 | version | 1
| 00008807 | | bootRecord | data | ---
| 00008807 | 45 4C 20 54 4F 52 49 54 4F 20 53 50 45 43 49 46 | string | bootSystemIdentifier | "EL TORITO SPECIFICATION\u0000\u0000\u00
| | 49 43 41 54 49 4F 4E .. .. .. .. .. .. .. .. .. | | | 00\u0000\u0000\u0000\u0000\u0000\u0000"
| 00008827 | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | string | bootIdentifier | "\u0000\u0000\u0000\u0000\u0000\u0000\u0
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | | 000\u0000\u0000\u0000\u0000\u0000\u0000\
| | | | | u0000\u0000\u0000\u0000\u0000\u0000\u000
| | | | | 0\u0000\u0000\u0000\u0000\u0000\u0000\u0
| | | | | 000\u0000\u0000\u0000\u0000\u0000"
| 00008847 | 14 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | []byte | bootSystemUse | ---
**SNIP**
| 00009000 | | volumeDescriptor | | ---
| 00009000 | 02 | volumeDescriptorType | volumeType | supplementary
| 00009001 | 43 44 30 30 31 | string | identifier | "CD001"
| 00009006 | 01 | u8 | version | 1
| 00009007 | .. .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | []byte | data | ---
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 57 .. 69 .. 6E .. 39 .. 38 .. 20 .. 53 .. | | |
| | 45 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. .. .. .. .. .. .. .. 71 E2 04 .. .. 04 E2 | | |
| | 71 25 2F 45 .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. 01 .. .. 01 01 .. .. 01 .. 08 08 .. EE 1B .. | | |
| | .. .. .. 1B EE E5 02 .. .. .. .. .. .. .. .. 02 | | |
| | E9 .. .. .. .. 22 .. F3 02 .. .. .. .. 02 F3 0A | | |
| | 02 .. .. .. .. 02 0A 63 04 17 16 16 .. .. 02 .. | | |
| | .. 01 .. .. 01 01 .. .. 57 .. 69 .. 6E .. 39 .. | | |
| | 38 .. 20 .. 53 .. 45 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 4D .. 69 .. 63 .. 72 .. | | |
| | 6F .. 73 .. 6F .. 66 .. 74 .. 20 .. 43 .. 6F .. | | |
| | 72 .. 70 .. 6F .. 72 .. 61 .. 74 .. 69 .. 6F .. | | |
| | 6E .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 4D .. 69 .. 63 .. 72 .. | | |
| | 6F .. 73 .. 6F .. 66 .. 74 .. 20 .. 43 .. 6F .. | | |
| | 72 .. 70 .. 6F .. 72 .. 61 .. 74 .. 69 .. 6F .. | | |
| | 6E .. 2C .. 20 .. 4F .. 6E .. 65 .. 20 .. 4D .. | | |
| | 69 .. 63 .. 72 .. 6F .. 73 .. 6F .. 66 .. 74 .. | | |
| | 20 .. 57 .. 61 .. 79 .. 2C .. 20 .. 52 .. 65 .. | | |
| | 64 .. 6D .. 6F .. 6E .. 64 .. 20 .. 57 .. 41 .. | | |
| | 20 .. 39 .. 38 .. 30 .. 35 .. 32 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 43 .. 44 .. 49 .. 4D .. | | |
| | 41 .. 47 .. 45 .. 20 .. 32 .. 2E .. 33 .. 39 .. | | |
| | 20 .. 28 .. 31 .. 32 .. 2F .. 30 .. 34 .. 2F .. | | |
| | 39 .. 37 .. 20 .. 54 .. 4D .. 29 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. 20 .. | | |
| | 20 .. 20 .. 20 .. 31 39 39 39 30 34 32 33 32 32 | | |
| | 32 32 30 30 30 30 04 30 30 30 30 30 30 30 30 30 | | |
| | 30 30 30 30 30 30 30 .. 30 30 30 30 30 30 30 30 | | |
| | 30 30 30 30 30 30 30 30 .. 30 30 30 30 30 30 30 | | |
| | 30 30 30 30 30 30 30 30 30 .. 01 .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. | | |
| | .. .. .. .. .. .. .. .. .. | | |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment