TWF0ZXJpYWxpZW4KPT09PT09PT09PT0KCiAgICAgTWF0ZXJpYWxpZW4gaW4gTW9yZ2VuZ3JhdWVuIGtvZW5uZW4gdWViZXIgZGllIFByb3BlcnR5IFBfTUFURVJJQUwgamVkZW0gCiAgICAgT2JqZWt0IGltIFNwaWVsIHp1Z2VvcmRuZXQgd2VyZGVuLiBVZWJlciBkaWUgTWF0ZXJpYWxpZW5kYXRlbmJhbmsgCiAgICAgc3RlaGVuIGRhZnVlciBqZWRlIE1lbmdlIE1hdGVyaWFsaWVuIHp1ciBWZXJmdWVndW5nLiBXZW5uIG1vZWdsaWNoLCAKICAgICBzb2xsdGVuIGRpZXNlIGF1Y2ggYmVudXR6dCB3ZXJkZW4sIGVzIHdlcmRlbiBEZWZhdWx0bWF0ZXJpYWxpZW4gCiAgICAgZ2VzZXR6dCwgZGllc2UgZW50c3ByZWNoZW4gYWJlciBzZWx0ZW4gZXVyZXIgUmVhbGl0YWV0LgoKICAgICBEaWUgTWF0ZXJpYWxpZW5kYXRlbmJhbmsgL3NlY3VyZS9tYXRlcmlhbGRiLmMgaGFlbHQgc2FlbXRsaWNoZSAKICAgICBJbmZvcm1hdGlvbmVuIHVlYmVyIGRpZSB2ZXJ3ZW5kYmFyZW4gTWF0ZXJpYWxpZW4sIGRpZSB1bnRlciAKICAgICAvc3lzL3RoaW5nL21hdGVyaWFsLmggYXVmZ2VmdWVocnQgc2luZC4gRXMgZW1wZmllaGx0IHNpY2ggU0VIUiwgVmVyd2Vpc2UKICAgICBhdWYgZGllIE1hdERCIG51ciBpbiBGb3JtIHZvbiBNQVRFUklBTERCIHp1IGZvcm11bGllcmVuLgogICAgIFNpZSB2ZXJ3YWx0ZXQgYXVjaCBkaWUgRWlnZW5zY2hhZnRlbiBlaW56ZWxuZXIgTWF0ZXJpYWxpZW4uIEVzIGdpYnQgCiAgICAgZGl2ZXJzZSBNYXRlcmlhbGllbmdydXBwZW4gd2llICJlbnRmbGFtbWJhciIsICJNZXRhbGwiLCAiYmlvbG9naXNjaGVzIAogICAgIE1hdGVyaWFsIiwgZGVuZW4gZGllIE1hdGVyaWFsaWVuIGVudHNwcmVjaGVuZCB6dWdlb3JkbmV0IHNpbmQuIERpZXNlIAogICAgIEluZm9ybWF0aW9uZW4ga29lbm5lbiBtaXQgZW50c3ByZWNoZW5kZW4gTWV0aG9kZW4gYWJnZXJ1ZmVuL2F1c2dld2VydGV0IAogICAgIHdlcmRlbi4KICAgICBEYXJ1ZWJlciBoaW5hdXMgc2luZCBNYXRlcmlhbGllbiBiZWkgZGVyIEVya2VubnVuZyBtaXQgYW5kZXJlbiAKICAgICBNYXRlcmlhbGllbiB2ZXJ3ZWNoc2VsYmFyLiBXaWUgZGFzIGdlbmF1IGZ1bmt0aW9uaWVydCwgaXN0IGluICJtYW4gCiAgICAgbWF0ZXJpYWxlcmtlbm51bmciIGF1c2dlZnVlaHJ0LgoKICAgICBQX01BVEVSSUFMOgogICAgICAgRGllIFByb3BlcnR5IFBfTUFURVJJQUwgaXN0IGdydW5kc2FldHpsaWNoIGVpbiBNYXBwaW5nLCBpbiBkZW0genUgCiAgICAgICBqZWRlbSBNYXRlcmlhbCBkZXIgQW50ZWlsIGFuIGRlbSBPYmpla3Qgc3RlaGVuIHNvbGx0ZSwgWi5CLiBrYW5uIAogICAgICAgZWluIFNwZWVyIHp1IDgwJSBhdXMgSG9seiB1bmQgenUgMjAlIGF1cyBNZXRhbGwgKFNwZWVyc3BpdHplKSAKICAgICAgIGJlc3RlaGVuOgoKCVNldFByb3AoUF9NQVRFUklBTCwgKFtNQVRfTUlTQ19NRVRBTDoyMCxNQVRfTUlTQ19XT09EOjgwXSkpCgogICAgICAgKFp1ciBWZXJlaW5mYWNodW5nIGlzdCBlcyBlcmxhdWJ0LCBiZWkgU2V0UHJvcCBlaW4gZWluemVsbmVzIE1hdGVyaWFsIAogICAgICAgIG9kZXIgZWluIEFycmF5IGF1cyBNYXRlcmlhbGllbiBhbnp1Z2ViZW4sIGJlaWRlcyB3aXJkIGF1dG9tYXRpc2NoIAogICAgICAgIHVtZ2V3YW5kZWx0IGluIGVpbiBNYXBwaW5nIG1pdCBnbGVpY2hlbiBBbnRlaWxlbiBhbGxlciBNYXRlcmlhbGllbi4pCgogICAgIERlZmF1bHRzIGb8ciBQX01BVEVSSUFMOgoJV2FmZmVuIGdlbmVyZWxsOgkgICAoW01BVF9NSVNDX01FVEFMOjEwMF0pCglTY2h3ZXJ0ZXI6CQkgICAoW01BVF9NSVNDX01FVEFMOjEwMF0pCiAgICAJTWVzc2VyOgkJCSAgIChbTUFUX01JU0NfTUVUQUw6ODAsIE1BVF9NSVNDX1dPT0Q6MjBdKQoJQWV4dGU6CQkJICAgKFtNQVRfTUlTQ19NRVRBTDo1MCwgTUFUX01JU0NfV09PRDo1MF0pCglTcGVlcmU6CQkJICAgKFtNQVRfTUlTQ19NRVRBTDoyMCwgTUFUX01JU0NfV09PRDo4MF0pCglLZXVsZW46CQkJICAgKFtNQVRfTUlTQ19XT09EOjEwMF0pCglSdWVzdHVuZ2VuIGdlbmVyZWxsOgkgICAoW01BVF9MRUFUSEVSOjEwMF0pCglLb2VycGVycnVlc3R1bmdlbiwgSGVsbWUsCglSaW5nZSwgQW11bGV0dGUsIFNjaGlsZGU6ICAoW01BVF9NSVNDX01FVEFMOjEwMF0pCglVbWhhZW5nZSwgSG9zZW46CSAgIChbTUFUX0NMT1RIOjEwMF0pCglIYW5kc2NodWhlLCBTY2h1aGU6CSAgIChbTUFUX0xFQVRIRVI6MTAwXSkKCWFuZGVyZSBEaW5nZToJCSAgIChbTUFUX01JU0M6MTAwXSkKCiAgICAgIFVlYmVyc2ljaHQgdWViZXIgZGllIE1ldGhvZGVuIGFuIE9iamVrdGVuICgvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uKToKCWludCBRdWVyeU1hdGVyaWFsKHN0cmluZyBtYXQpOgoJLSBnaWJ0ICUgZGVzIE1hdGVyaWFsYW50ZWlscyB2b24gbWF0IGFtIE9iamVrdCB6dXJ1ZWNrCglpbnQgUXVlcnlNYXRlcmlhbEdyb3VwKHN0cmluZyBncnApOgoJLSBnaWJ0ICUgZGVzIE1hdGVyaWFsZ3J1cHBlbmFudGVpbHMgdm9uIGdycCBhbSBPYmpla3QgenVydWVjawoJc3RyaW5nIE1hdGVyaWFsTGlzdChpbnQgY2FzdXMsIG1peGVkIGlkaW5mKToKCS0gZ2lidCBTdHJpbmcgbWl0IFp1c2FtbWVuc2V0enVuZyBkZXMgT2JqZWt0ZXMgenVydWVjawoKICAgICAgVWViZXJzaWNodCB1ZWJlciBkaWUgTWV0aG9kZW4gYW0gTWFzdGVyIChNQVRFUklBTERCKToKCXN0cmluZyAqR2V0TWF0TWVtYmVyc2hpcChzdHJpbmcgbWF0KToKCS0gYWxsZSBHcnVwcGVuLCBpbiBkZW5lbiBkYXMgTWF0ZXJpYWwgbWF0IGlzdAoJc3RyaW5nICpHZXRHcm91cE1lbWJlcnMoc3RyaW5nIGdycCk6CgktIGFsbGUgTWF0ZXJpYWxpZW4sIGRpZSBpbiBkZXIgR3J1cHBlIGdycCBzaW5kCglzdHJpbmcgTWF0ZXJpYWxOYW1lKHN0cmluZyBtYXQsIGludCBjYXN1cywgbWl4ZWQgaWRpbmYpOgoJLSBlcmdpYnQgZGllIHNwaWVsZXJsZXNiYXJlIEFuZ2FiZSBlaW5lcyBNYXRlcmlhbHMgbWF0CglzdHJpbmcgR3JvdXBOYW1lKHN0cmluZyBncnApOgoJLSBlcmdpYnQgc3BpZWxlcmxlc2JhcmUgQW5nYWJlIGRlciBHcnVwcGUgZ3JwCglzdHJpbmcgQ29udk1hdGVyaWFsTGlzdChtaXhlZCBtYXRzLCBpbnQgY2FzdXMsIG1peGVkIGlkaW5mKToKICAJLSB3aXJkIHZvbiBNYXRlcmlhbExpc3QoKSBtaXQgZGVuIE1hdGVyaWFsaWVuIGRlcyBPYmpla3RlcyBnZXJ1ZmVuCgl2b2lkIER1bXAoKToKICAJLSBzY2hyZWlidCBNYXRlcmlhbGllbiB1bmQgR3J1cHBlbiBpbiAvcC9kYWVtb24vc2F2ZS9NQVRFUklBTFMKCXN0cmluZyAqQWxsTWF0ZXJpYWxzKCk6CgktIExpc3RlIGFsbGVyIGFrdHVlbGxlbiBNYXRlcmlhbGllbgoJc3RyaW5nICpBbGxHcm91cHMoKToKCS0gTGlzdGUgYWxsZXIgYWt0dWVsbGVuIEdydXBwZW4KCiAgICAgIEZhbGxzIGV1Y2ggZWluIE1hdGVyaWFsIGZlaGx0OgoJLSBmYWxscyBlcyBrZWluIGdlbmF1IHBhc3NlbmRlcyBNYXRlcmlhbCBnaWJ0LCBzb2xsdGUgbWFuIGRhcyBhbSAKCSAgZWhlc3RlbiBwYXNzZW5kZSBNQVRfTUlTQy1NYXRlcmlhbCB2ZXJ3ZW5kZW4uCgktIGZhbGxzIGVzIHNpY2ggbG9obmVuIHd1ZXJkZSwgZGFzIGJpc2hlciBub2NoIG5pY2h0IGRlZmluaWVydGUgCgkgIE1hdGVyaWFsIGVpbnp1YmF1ZW4gKHdlbm4gZXMgaGFldWZpZyBnZW51ZyB2ZXJ3ZW5kZXQgd2lyZCksIGJpdHRlIAoJICBNYWlsIGFuIGVpbmVuIEVNICgtPiBtYW4gQWRkTWF0ZXJpYWwoKSApCgktIHZlcnNjaGllZGVuZSBFaWdlbnNjaGFmdGVuIGxhc3NlbiBzaWNoIGtvbWJpbmllcmVuLiBaLkIuIGJlc3RlaHQgCgkgIGVpbiAodW5iZWthbm50ZXMpIGV4cGxvc2l2ZXMgR2FzIHp1IDEwMCUgYXVzIEdhcyB1bmQgenUgMTAwJSBhdXMgCgkgIGV4cGxvc2l2ZW0gTWF0ZXJpYWwuIEluc29mZXJuIGthbm4gbWFuIGVzIG1pdAogICAgICAgICAgU2V0UHJvcChQX01BVEVSSUFMLCAoW01BVF9NSVNDX0dBUzoxMDAsIE1BVF9NSVNDX0VYUExPU0lWRToxMDBdKSkKICAgICAgICAgIHp1c2FtbWVuc2V0emVuLgoKU0lFSEUgQVVDSDoKICAgICBLb256ZXB0ZToJICBtYXRlcmlhbGVya2VubnVuZwogICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKICAgICBNZXRob2RlbjogICAgUXVlcnlNYXRlcmlhbCgpLCBRdWVyeU1hdGVyaWFsR3JvdXAoKSwgTWF0ZXJpYWxMaXN0KCksCiAgICAgTGlzdGVuOgkgIEFsbE1hdGVyaWFscygpLCBBbGxHcm91cHMoKSwgRHVtcCgpCgkJICBtYXRlcmlhbGxpc3RlLCBtYXRlcmlhbGdydXBwZW4KICAgICBNYXN0ZXI6CSAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpLCBNYXRlcmlhbEdyb3VwKCksCgkJICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCgkJICBHZXRHcm91cE1lbWJlcnMoKSwgR2V0TWF0TWVtYmVyc2hpcCgpCiAgICAgU29uc3RpZ2VzOgkgIFBfTUFURVJJQUxfS05PV0xFREdFCgo3LiBNYWkgMjAwNCBHbG9pbnNvbgo=