A modified, and maybe final, proposal for an S1G header for RadioTap

Richard Sharpe <[email protected]> Sun, 14 Apr 2019 08:57:27 -0700
Newsgroups org.netbsd.radiotap
Message-ID <CACyXjPx40--VvxKhxbM1tekOcoXtpt-Cu7_KCPTk_+khfkQkHw@mail.gmail.com>
--000000000000b10df305867f9ae3
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi folks,

Here is an updated proposal for this header.

It has undergone some modifications.

I include the patch to the radiotap git repo as well as a small C
program for generating such headers.

I have moved to using TLVs and have integrated Johannes' code for
handling Radiotap RLVs into Wireshark 2.6.2 and used my test program
to test the code.

The test code only generates three frames so far, but it could be
modified to provide broarder coverage.

I suggest that people making Radiotap proposals in the future should
also include code for generating such headers as it is pretty easy to
do so and makes it easier for people writing parsers.

We want to move forward with this and I have code now that dissects it
in Wireshark. Of course, that code is easy to change as well.

Here are the changes for the Channel field. Add three seemingly unused valu=
es:

| 0x0002 | S1G 700MHz spectrum channel |
| 0x0004 | S1G 800MHz spectrum channel |
| 0x0008 | S1G 900MHz spectrum channel |

Here is the new S1G field. It uses TLV Type value 32.

Note, we have also explicitly decided to place the Null Data Packet
(NDP) info into the S1G header. This reduces the amount of change
needed in dissectors but it does mean that the zero_length_ppdu
infrastructure that is already in Wireshark for example.

TLV Type Number
: 32

Structure
: u16 known, u16 data1, u16 data2, u8 ndp_type, u8[5] ndp_data;

Required Alignment
: 4

Unit(s)
: none

The presence of this field indicates the frame was capture using an S1G phy=
.

This field contains data to allow correct handling by programs like
Wireshark etc.

Is NDP indicates that this is an NDP frame, however, the content might
not be known.

## known

| **`0x0001`** | S1G PPDU Format known |
| **`0x0002`** | Response indication known |
| **`0x0004`** | Guard interval known |
| **`0x0008`** | NSS known |
| **`0x0010`** | Bandwidth known |
| **`0x0020`** | MCS known |
| **`0x0040`** | Color known |
| **`0x0080`** | Is NDP, which means no packet data follows this header! |
| **`0x0100`** | NDP content known |
| **`0xFE00`** | Reserved |

## data1

| **`0x0003`** | S1G PPDU Format: 0=3DS1G_1M, 1=3DS1G_SHORT, 2=3DS1G_LONG |
| **`0x000C`** | Response indication: 0=3DNO_RESPONSE, 1=3DNDP_RESPONSE,
2=3DNORMAL_RESPONSE, 3=3DLONG_RESPPNSE |
| **`0x0010`** | Reserved |
| **`0x0020`** | Guard interval: 0=3DLong GI, 1=3DShort GI |
| **`0x00C0`** | Number spatial streams: 0=3D1 Spatial stream, 1=3D2, ..
3=3D4 Spatial streams |
| **`0x0700`** | Bandwidth: 0=3D1MHz, 1=3D2MHz, 2=3D4MHz, 3=3D8MHz, 4=3D16M=
Hz,
5-15 reserved |
| **`0x0800`** | Reserved |
| **`0xF000`** | MCS (MCS rate index, 0-10, 11-15 reserved) |

## data2

| **`0x0007`** | Color: 0-7 |
| **`0xFFF8`** | Reserved |

## ndp_type

This value is only defined if ndp_known is true.

| **ndp_type value** | **Meaning** |
| 0x00 | NDP Control frame |
| 0x01 | NDP Management Frame |
| 0x02-0xFF | Reserved |

## ndp_data

This value is only defined if ndp_known is true. The bytes are as
defined in IEEE802.11ah, Section 9.9, except that ndp_data[4] is
defined as:

| **`0x3F`** | used and unused bits depending on the BW field and type |
| **`0xC0`** | Bandwidth: 0 =3D 1Mhz, 1 =3D 2MHz, 2-3 Reserved |

--=20
Regards,
Richard Sharpe
(=E4=BD=95=E4=BB=A5=E8=A7=A3=E6=86=82=EF=BC=9F=E5=94=AF=E6=9C=89=E6=9D=9C=
=E5=BA=B7=E3=80=82--=E6=9B=B9=E6=93=8D)(=E4=BC=A0=E8=AF=B4=E6=9D=9C=E5=BA=
=B7=E6=98=AF=E9=85=92=E7=9A=84=E5=8F=91=E6=98=8E=E8=80=85)

--000000000000b10df305867f9ae3
Content-Type: text/plain; charset="US-ASCII"; name="pkt-gen.c"
Content-Disposition: attachment; filename="pkt-gen.c"
Content-Transfer-Encoding: base64
Content-ID: <f_juh3jifj0>
X-Attachment-Id: f_juh3jifj0

LyoKICogQSBnZW5lcmljIHBhY2tldCBnZW5lcmF0b3IgYXBwbGljYXRpb24uCiAqCiAqIENvcHly
aWdodCBSaWNoYXJkIFNoYXJwZSwgMjAxOS4KICoKICogWW91IGFyZSB3ZWxjb21lIHRvIHVzZSwg
bW9kaWZ5LCBvdGhlcndpc2UsIHRoaXMgY29kZS4KICoKICogWW91IHdpbGwgbmVlZCBsaWJwY2Fw
IGluc3RhbGxlZC4KICoKICogQ3JlYXRlIGEgTWFrZWZpbGUgd2l0aCB0aGlzOgogKiAKICogYWxs
OgogKgljYyAtZyAtbyBwa3QtZ2VuIHBrdC1nZW4uYyAtSSAuIC1scGNhcAogKgogKi8KCiNpbmNs
dWRlIDxlcnJuby5oPgojaW5jbHVkZSA8cGNhcC9wY2FwLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4K
I2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IHMxZ19yYWRpb3RhcF9oZHIgewoJdWludDE2X3Qg
dHlwZTsKCXVpbnQxNl90IGxlbjsKCXVpbnQxNl90IGtub3duOwoJdWludDE2X3QgZGF0YTE7Cgl1
aW50MTZfdCBkYXRhMjsKCXVpbnQ4X3QgbmRwX3R5cGU7Cgl1aW50OF90IG5kcF9kYXRhWzVdOwp9
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKc3RydWN0IHJhZGlvdGFwX2hkciB7Cgl1aW50OF90
IHZlcnM7Cgl1aW50OF90IHBhZDsKCXVpbnQxNl90IGxlbjsKCXVpbnQzMl90IHByZXNlbmNlX2Zs
YWdzOwoJdWludDMyX3QgTUFDX3RpbWVzdGFtcFsyXTsKCXVpbnQ4X3QgZmxhZ3M7Cgl1aW50OF90
IGRhdGFfcmF0ZTsKCXVpbnQxNl90IHBhZDI7CglzdHJ1Y3QgczFnX3JhZGlvdGFwX2hkciBzMWdf
aGRyOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKc3RydWN0IGNvbXBsZXRlX3BrdCB7Cglz
dHJ1Y3QgcmFkaW90YXBfaGRyIHJhZGlvdGFwOwoJdWludDhfdCBwa3RfZGF0YVsyNl07Cn0gX19h
dHRyaWJ1dGVfXygocGFja2VkKSk7Cgp1aW50OF90IHBrdF9kYXRhWzI2XSA9IHsgMHgxYywgMHgw
YiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhlYiwgMHg0YiwKCQkJIDB4MDIsIDB4OGIsIDB4
MTIsIDB4NTIsIDB4YTcsIDB4NmIsIDB4MDAsIDB4NjIsCgkJCSAweDljLCAweDZiLCAweDY0LCAw
eDRlLCAweDM1LCAweGFlLCAweDA1LCAweDAyLAoJCQkgMHgwMCwgMHgwMiB9OwoKaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewoJaW50IGVyciA9IC0xOwoJcGNhcF90ICpwZCA9IE5V
TEw7Cgl2b2lkICpjdHggPSBOVUxMOwoJc3RydWN0IHBjYXBfcGt0aGRyIGhkcjsKCXN0cnVjdCB0
aW1ldmFsIHRzOwoJcGNhcF9kdW1wZXJfdCAqZHVtcGVyID0gTlVMTDsKCXN0cnVjdCBjb21wbGV0
ZV9wa3QgcGt0OwoKCWlmIChhcmdjIDwgMikgewoJCXByaW50ZigiVXNhZ2U6ICVzIDxwY2FwLWZp
bGUtbmFtZT5cbiIsIGFyZ3ZbMF0pOwoJCXJldHVybiAxOwoJfQoKCXBkID0gcGNhcF9vcGVuX2Rl
YWQoRExUX0lFRUU4MDJfMTFfUkFESU8sIDY1NTM1KTsKCWlmIChwZCA9PSBOVUxMKSB7CgkJZnBy
aW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBwY2FwIGRldmljZTogJXNcbiIsCgkJCXN0cmVy
cm9yKGVycm5vKSk7CgkJcmV0dXJuIC0xOwoJfQoKCWR1bXBlciA9IHBjYXBfZHVtcF9vcGVuKHBk
LCBhcmd2WzFdKTsKICAgICAgICBpZiAoZHVtcGVyID09IE5VTEwpIHsKCQlmcHJpbnRmKHN0ZGVy
ciwgIlVuYWJsZSB0byBjcmVhdGUgZHVtcCBmaWxlICVzOiAlc1xuIiwKCQkJYXJndlsxXSwgcGNh
cF9nZXRlcnIocGQpKTsKCQlnb3RvIGNsb3NlX3BkOwoJfQoKCS8qCgkgKiBOb3cgY3JlYXRlIHRo
ZSBjb21sZXRlIHBhY2tldC4KCSAqLwoJcGt0LnJhZGlvdGFwLnZlcnMgPSAwOwoJcGt0LnJhZGlv
dGFwLnBhZCA9IDA7Cglwa3QucmFkaW90YXAubGVuID0gc2l6ZW9mKHN0cnVjdCByYWRpb3RhcF9o
ZHIpOwoJcGt0LnJhZGlvdGFwLnByZXNlbmNlX2ZsYWdzID0gMHgxMDAwMDAwNzsKCXBrdC5yYWRp
b3RhcC5NQUNfdGltZXN0YW1wWzBdID0gMHgxNzg2MDUwMDsKCXBrdC5yYWRpb3RhcC5NQUNfdGlt
ZXN0YW1wWzFdID0gMHgyMmFjOWIxYTsKCXBrdC5yYWRpb3RhcC5mbGFncyA9IDA7Cglwa3QucmFk
aW90YXAuZGF0YV9yYXRlID0gMHgwYzsKCXBrdC5yYWRpb3RhcC5wYWQyID0gMHhmZmZmOwoJcGt0
LnJhZGlvdGFwLnMxZ19oZHIudHlwZSA9IDMyOwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIubGVuID0g
MTI7Cglwa3QucmFkaW90YXAuczFnX2hkci5rbm93biA9IDB4MDAwNTsgLyogUzFHIFBQRFUgZm9y
bWFuIGFuZCBHVSBrbm93biAqLwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIuZGF0YTEgPSAweDAwMjA7
Cglwa3QucmFkaW90YXAuczFnX2hkci5kYXRhMiA9IDB4MDsKCXBrdC5yYWRpb3RhcC5zMWdfaGRy
Lm5kcF90eXBlID0gMDsKCXBrdC5yYWRpb3RhcC5zMWdfaGRyLm5kcF9kYXRhWzBdID0gMDsKCXBr
dC5yYWRpb3RhcC5zMWdfaGRyLm5kcF9kYXRhWzFdID0gMDsKCXBrdC5yYWRpb3RhcC5zMWdfaGRy
Lm5kcF9kYXRhWzJdID0gMDsKCXBrdC5yYWRpb3RhcC5zMWdfaGRyLm5kcF9kYXRhWzNdID0gMDsK
CXBrdC5yYWRpb3RhcC5zMWdfaGRyLm5kcF9kYXRhWzRdID0gMDsKCW1lbWNweShwa3QucGt0X2Rh
dGEsIHBrdF9kYXRhLCBzaXplb2YocGt0LnBrdF9kYXRhKSk7CgoJZ2V0dGltZW9mZGF5KCZ0cywg
TlVMTCk7CgloZHIudHMgPSB0czsKCWhkci5jYXBsZW4gPSBzaXplb2Yoc3RydWN0IGNvbXBsZXRl
X3BrdCk7CgloZHIubGVuID0gc2l6ZW9mKHN0cnVjdCBjb21wbGV0ZV9wa3QpOwoKCXBjYXBfZHVt
cCgodV9jaGFyICopZHVtcGVyLCAmaGRyLCAodV9jaGFyICopJnBrdCk7CgoJLyogRHVtcCBhbm90
aGVyIHdpdGggZGlmZmVyZW50IHZhbHVlcyAqLwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIua25vd24g
PSAweDAwMzU7Cglwa3QucmFkaW90YXAuczFnX2hkci5kYXRhMSA9IDB4QjQyMTsKCglwY2FwX2R1
bXAoKHVfY2hhciAqKWR1bXBlciwgJmhkciwgKHVfY2hhciAqKSZwa3QpOwoKCXBrdC5yYWRpb3Rh
cC5zMWdfaGRyLmtub3duID0gMHgwMTgwOwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIuZGF0YTEgPSAw
OwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIubmRwX3R5cGUgPSAwOwoJcGt0LnJhZGlvdGFwLnMxZ19o
ZHIubmRwX2RhdGFbMF0gPSAweGUyOwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIubmRwX2RhdGFbMV0g
PSAweGQ5OwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIubmRwX2RhdGFbMl0gPSAweDAzOwoJcGt0LnJh
ZGlvdGFwLnMxZ19oZHIubmRwX2RhdGFbM10gPSAweDAwOwoJcGt0LnJhZGlvdGFwLnMxZ19oZHIu
bmRwX2RhdGFbNF0gPSAweDgwOwoKCWhkci5jYXBsZW4gPSBzaXplb2Yoc3RydWN0IHJhZGlvdGFw
X2hkcik7CgloZHIubGVuID0gc2l6ZW9mKHN0cnVjdCByYWRpb3RhcF9oZHIpOwoKCXBjYXBfZHVt
cCgodV9jaGFyICopZHVtcGVyLCAmaGRyLCAodV9jaGFyICopJnBrdCk7CgpjbG9zZV9kdW1wZXI6
CglwY2FwX2R1bXBfY2xvc2UoZHVtcGVyKTsKY2xvc2VfcGQ6CglwY2FwX2Nsb3NlKHBkKTsKCXJl
dHVybiBlcnI7Cn0K
--000000000000b10df305867f9ae3
Content-Type: application/octet-stream;
	name="0001-Add-an-S1G-field-as-well-as-add-some-Channel-values.patch"
Content-Disposition: attachment;
	filename="0001-Add-an-S1G-field-as-well-as-add-some-Channel-values.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_juh3x7bj1>
X-Attachment-Id: f_juh3x7bj1

RnJvbSA2MTVmNDViNzg4MDRmYzM2OWZkZjRkNjNhYjRiNmY1MGFhMTkxMGE0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIFNoYXJwZSA8cnNoYXJwZUBsb2NhbGhvc3QubG9j
YWxkb21haW4+CkRhdGU6IE1vbiwgNCBNYXIgMjAxOSAxODozMTo0MCAtMDgwMApTdWJqZWN0OiBb
UEFUQ0hdIEFkZCBhbiBTMUcgZmllbGQgYXMgd2VsbCBhcyBhZGQgc29tZSBDaGFubmVsIHZhbHVl
cy4KCkFmdGVyIGRpc2N1c3Npb24gd2l0aCBKb2hhbm5lcywgdGhpcyBpcyB3aGF0IHdlIGhhdmUu
CgpUaGUgYXV0aG9yIGlzIEFhcm9uIExlZS4gVHJhbnNjcmliZWQgYnkgUmljaGFyZCBTaGFycGUu
ClNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgU2hhcnBlIDxyZWFscmljaGFyZHNoYXJwZUBnbWFpbC5j
b20+Ci0tLQogZmllbGRzL0NoYW5uZWwubWQgICB8ICAzICsrCiBmaWVsZHMvUzFHLm1kICAgICAg
IHwgNjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBmaWVs
ZHMvc3VnZ2VzdGVkLm1kIHwgIDMgKysKIDMgZmlsZXMgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZpZWxkcy9TMUcubWQKCmRpZmYgLS1naXQgYS9maWVsZHMv
Q2hhbm5lbC5tZCBiL2ZpZWxkcy9DaGFubmVsLm1kCmluZGV4IDc4NGM1YzQuLjU3NDc4NjIgMTAw
NjQ0Ci0tLSBhL2ZpZWxkcy9DaGFubmVsLm1kCisrKyBiL2ZpZWxkcy9DaGFubmVsLm1kCkBAIC0y
MSw2ICsyMSw5IEBAIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBmbGFncyBhcmUgZGVmaW5lZDoK
IAogfCAqKk1hc2sqKiB8ICoqTWVhbmluZyoqIHwKIHwgMHgwMDEwIHwgVHVyYm8gQ2hhbm5lbCB8
Cit8IDB4MDAwMiB8IFMxRyA3MDBNSHogc3BlY3RydW0gY2hhbm5lbCB8Cit8IDB4MDAwNCB8IFMx
RyA4MDBNSHogc3BlY3RydW0gY2hhbm5lbCB8Cit8IDB4MDAwOCB8IFMxRyA5MDBNSHogc3BlY3Ry
dW0gY2hhbm5lbCB8CiB8IDB4MDAyMCB8IENDSyBjaGFubmVsIHwKIHwgMHgwMDQwIHwgT0ZETSBj
aGFubmVsIHwKIHwgMHgwMDgwIHwgMiBHSHogc3BlY3RydW0gY2hhbm5lbCB8CmRpZmYgLS1naXQg
YS9maWVsZHMvUzFHLm1kIGIvZmllbGRzL1MxRy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42YmM1N2IzCi0tLSAvZGV2L251bGwKKysrIGIvZmllbGRzL1MxRy5tZApAQCAt
MCwwICsxLDY4IEBACistLS0KK3RpdGxlOiBTMUcKK2NhdGVnb3JpZXM6IFtzdWdnZXN0ZWRdCist
LS0KK1RMViBUeXBlIE51bWJlcgorOiAzMgorCitTdHJ1Y3R1cmUKKzogdTE2IGtub3duLCB1MTYg
ZGF0YTEsIHUxNiBkYXRhMiwgdTggbmRwX3R5cGUsIHU4WzVdIG5kcF9kYXRhOworCitSZXF1aXJl
ZCBBbGlnbm1lbnQKKzogNAorCitVbml0KHMpCis6IG5vbmUKKworVGhlIHByZXNlbmNlIG9mIHRo
aXMgZmllbGQgaW5kaWNhdGVzIHRoZSBmcmFtZSB3YXMgY2FwdHVyZSB1c2luZyBhbiBTMUcgcGh5
LgorCitUaGlzIGZpZWxkIGNvbnRhaW5zIGRhdGEgdG8gYWxsb3cgY29ycmVjdCBoYW5kbGluZyBi
eSBwcm9ncmFtcyBsaWtlCitXaXJlc2hhcmsgZXRjLgorCitJcyBORFAgaW5kaWNhdGVzIHRoYXQg
dGhpcyBpcyBhbiBORFAgZnJhbWUsIGhvd2V2ZXIsIHRoZSBjb250ZW50IG1pZ2h0IG5vdCBiZSBr
bm93bi4KKworIyMga25vd24KKworfCAqKmAweDAwMDFgKiogfCBTMUcgUFBEVSBGb3JtYXQga25v
d24gfAorfCAqKmAweDAwMDJgKiogfCBSZXNwb25zZSBpbmRpY2F0aW9uIGtub3duIHwKK3wgKipg
MHgwMDA0YCoqIHwgR3VhcmQgaW50ZXJ2YWwga25vd24gfAorfCAqKmAweDAwMDhgKiogfCBOU1Mg
a25vd24gfCAKK3wgKipgMHgwMDEwYCoqIHwgQmFuZHdpZHRoIGtub3duIHwKK3wgKipgMHgwMDIw
YCoqIHwgTUNTIGtub3duIHwKK3wgKipgMHgwMDQwYCoqIHwgQ29sb3Iga25vd24gfAorfCAqKmAw
eDAwODBgKiogfCBJcyBORFAsIHdoaWNoIG1lYW5zIG5vIHBhY2tldCBkYXRhIGZvbGxvd3MgdGhp
cyBoZWFkZXIhIHwKK3wgKipgMHgwMTAwYCoqIHwgTkRQIGNvbnRlbnQga25vd24gfAorfCAqKmAw
eEZFMDBgKiogfCBSZXNlcnZlZCB8CisKKyMjIGRhdGExCisKK3wgKipgMHgwMDAzYCoqIHwgUzFH
IFBQRFUgRm9ybWF0OiAwPVMxR18xTSwgMT1TMUdfU0hPUlQsIDI9UzFHX0xPTkcgfAorfCAqKmAw
eDAwMENgKiogfCBSZXNwb25zZSBpbmRpY2F0aW9uOiAwPU5PX1JFU1BPTlNFLCAxPU5EUF9SRVNQ
T05TRSwgMj1OT1JNQUxfUkVTUE9OU0UsIDM9TE9OR19SRVNQUE5TRSB8Cit8ICoqYDB4MDAxMGAq
KiB8IFJlc2VydmVkIHwKK3wgKipgMHgwMDIwYCoqIHwgR3VhcmQgaW50ZXJ2YWw6IDA9TG9uZyBH
SSwgMT1TaG9ydCBHSSB8Cit8ICoqYDB4MDBDMGAqKiB8IE51bWJlciBzcGF0aWFsIHN0cmVhbXM6
IDA9MSBTcGF0aWFsIHN0cmVhbSwgMT0yLCAuLiAzPTQgU3BhdGlhbCBzdHJlYW1zIHwKK3wgKipg
MHgwNzAwYCoqIHwgQmFuZHdpZHRoOiAwPTFNSHosIDE9Mk1IeiwgMj00TUh6LCAzPThNSHosIDQ9
MTZNSHosIDUtMTUgcmVzZXJ2ZWQgfAorfCAqKmAweDA4MDBgKiogfCBSZXNlcnZlZCB8Cit8ICoq
YDB4RjAwMGAqKiB8IE1DUyAoTUNTIHJhdGUgaW5kZXgsIDAtMTAsIDExLTE1IHJlc2VydmVkKSB8
CisKKyMjIGRhdGEyCisKK3wgKipgMHgwMDA3YCoqIHwgQ29sb3I6IDAtNyB8Cit8ICoqYDB4RkZG
OGAqKiB8IFJlc2VydmVkIHwKKworIyMgbmRwX3R5cGUKKworVGhpcyB2YWx1ZSBpcyBvbmx5IGRl
ZmluZWQgaWYgbmRwX2tub3duIGlzIHRydWUuCisKK3wgKipuZHBfdHlwZSB2YWx1ZSoqIHwgKipN
ZWFuaW5nKiogfAorfCAweDAwIHwgTkRQIENvbnRyb2wgZnJhbWUgfAorfCAweDAxIHwgTkRQIE1h
bmFnZW1lbnQgRnJhbWUgfAorfCAweDAyLTB4RkYgfCBSZXNlcnZlZCB8CisKKyMjIG5kcF9kYXRh
CisKK1RoaXMgdmFsdWUgaXMgb25seSBkZWZpbmVkIGlmIG5kcF9rbm93biBpcyB0cnVlLiBUaGUg
Ynl0ZXMgYXJlIGFzIGRlZmluZWQgaW4gSUVFRTgwMi4xMWFoLCBTZWN0aW9uIDkuOSwgZXhjZXB0
IHRoYXQgbmRwX2RhdGFbNF0gaXMgZGVmaW5lZCBhczoKKworfCAqKmAweDNGYCoqIHwgdXNlZCBh
bmQgdW51c2VkIGJpdHMgZGVwZW5kaW5nIG9uIHRoZSBCVyBmaWVsZCBhbmQgdHlwZSB8Cit8ICoq
YDB4QzBgKiogfCBCYW5kd2lkdGg6IDAgPSAxTWh6LCAxID0gMk1IeiwgMi0zIFJlc2VydmVkIHwK
KwpkaWZmIC0tZ2l0IGEvZmllbGRzL3N1Z2dlc3RlZC5tZCBiL2ZpZWxkcy9zdWdnZXN0ZWQubWQK
aW5kZXggMzI1NzdkOS4uM2I2ZTcyMCAxMDA2NDQKLS0tIGEvZmllbGRzL3N1Z2dlc3RlZC5tZAor
KysgYi9maWVsZHMvc3VnZ2VzdGVkLm1kCkBAIC0xOCwzICsxOCw2IEBAIFRoaXMgdGFibGUgbGlz
dHMgdGhlIGZpZWxkcyBzb21lIE9TZXMgYXNzaWduZWQgYnkgYml0IG51bWJlcjoKIHwgMTYgfCBb
UlRTIHJldHJpZXNdKC9maWVsZHMvUlRTIHJldHJpZXMpLCBbUlNTSV0oL2ZpZWxkcy9SU1NJKSB8
CiB8IDE3IHwgW2RhdGEgcmV0cmllc10oL2ZpZWxkcy9kYXRhIHJldHJpZXMpIHwKIHwgMTggfCBb
WENoYW5uZWxdKC9maWVsZHMvWENoYW5uZWwpIHwKKworfCAqKlRMViB0eXBlIG51bWJlciB8ICAq
KmZpZWxkKiogfAorfCAzMiB8IFtTMUddKC9maWVsZHMvUzFHKSB8Ci0tIAoyLjE5LjEKCg==
--000000000000b10df305867f9ae3--