ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGltaXRzIGIvaW5jbHVkZS9saW1pdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlYmMyZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGltaXRzCkBAIC0wLDAgKzEsNjEzIEBACisvLyAtKi0gQysrIC0qLQorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGxpbWl0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyDKysrKysrKysrKysrKysrKysrKylRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBfTElCQ1BQX0xJTUlUUworI2RlZmluZSBfTElCQ1BQX0xJTUlUUworCisvKgorICAgIGxpbWl0cyBzeW5vcHNpcworCituYW1lc3BhY2Ugc3RkCit7CisKK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBudW1lcmljX2xpbWl0cworeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIFQgbWluKCkgdGhyb3coKTsKKyAgICBzdGF0aWMgVCBtYXgoKSB0aHJvdygpOworICAgIHN0YXRpYyBUIGxvd2VzdCgpIHRocm93KCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIGRpZ2l0czEwID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZGlnaXRzMTAgPSAwOworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBpbnQgIHJhZGl4ID0gMDsKKyAgICBzdGF0aWMgVCBlcHNpbG9uKCkgdGhyb3coKTsKKyAgICBzdGF0aWMgVCByb3VuZF9lcnJvcigpIHRocm93KCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQgPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudDEwID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZXhwb25lbnQgPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gMDsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisgICAgc3RhdGljIFQgaW5maW5pdHkoKSB0aHJvdygpOworICAgIHN0YXRpYyBUIHF1aWV0X05hTigpIHRocm93KCk7CisgICAgc3RhdGljIFQgc2lnbmFsaW5nX05hTigpIHRocm93KCk7CisgICAgc3RhdGljIFQgZGVub3JtX21pbigpIHRocm93KCk7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworfTsKKworZW51bSBmbG9hdF9yb3VuZF9zdHlsZQoreworICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgICAgICAgPSAtMSwKKyAgICByb3VuZF90b3dhcmRfemVybyAgICAgICAgID0gIDAsCisgICAgcm91bmRfdG9fbmVhcmVzdCAgICAgICAgICA9ICAxLAorICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSAgICAgPSAgMiwKKyAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gIDMKK307CisKK2VudW0gZmxvYXRfZGVub3JtX3N0eWxlCit7CisgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKKyAgICBkZW5vcm1fYWJzZW50ID0gMCwKKyAgICBkZW5vcm1fcHJlc2VudCA9IDEKK307CisKK3RlbXBsYXRlPD4gY2xhc3MgbnVtZXJpY19saW1pdHM8Y3YgYm9vbD47CisKK3RlbXBsYXRlPD4gY2xhc3MgbnVtZXJpY19saW1pdHM8Y3YgY2hhcj47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IHNpZ25lZCBjaGFyPjsKK3RlbXBsYXRlPD4gY2xhc3MgbnVtZXJpY19saW1pdHM8Y3YgdW5zaWduZWQgY2hhcj47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IHdjaGFyX3Q+OwordGVtcGxhdGU8PiBjbGFzcyBudW1lcmljX2xpbWl0czxjdiBjaGFyMTZfdD47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IGNoYXIzMl90PjsKKwordGVtcGxhdGU8PiBjbGFzcyBudW1lcmljX2xpbWl0czxjdiBzaG9ydD47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IGludD47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IGxvbmc+OwordGVtcGxhdGU8PiBjbGFzcyBudW1lcmljX2xpbWl0czxjdiBsb25nIGxvbmc+OwordGVtcGxhdGU8PiBjbGFzcyBudW1lcmljX2xpbWl0czxjdiB1bnNpZ25lZCBzaG9ydD47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IHVuc2lnbmVkIGludD47Cit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IHVuc2lnbmVkIGxvbmc+OwordGVtcGxhdGU8PiBjbGFzcyBudW1lcmljX2xpbWl0czxjdiB1bnNpZ25lZCBsb25nIGxvbmc+OworCit0ZW1wbGF0ZTw+IGNsYXNzIG51bWVyaWNfbGltaXRzPGN2IGZsb2F0PjsKK3RlbXBsYXRlPD4gY2xhc3MgbnVtZXJpY19saW1pdHM8Y3YgZG91YmxlPjsKK3RlbXBsYXRlPD4gY2xhc3MgbnVtZXJpY19saW1pdHM8Y3YgbG9uZyBkb3VibGU+OworCit9ICAvLyBzdGQKKworKi8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8X19jb25maWc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURAorCitlbnVtIGZsb2F0X3JvdW5kX3N0eWxlCit7CisgICAgcm91bmRfaW5kZXRlcm1pbmF0ZSAgICAgICA9IC0xLAorICAgIHJvdW5kX3Rvd2FyZF96ZXJvICAgICAgICAgPSAgMCwKKyAgICByb3VuZF90b19uZWFyZXN0ICAgICAgICAgID0gIDEsCisgICAgcm91bmRfdG93YXJkX2luZmluaXR5ICAgICA9ICAyLAorICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAgMworfTsKKworZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKK3sKKyAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAorICAgIGRlbm9ybV9hYnNlbnQgPSAwLAorICAgIGRlbm9ybV9wcmVzZW50ID0gMQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCA9IGlzX2FyaXRobWV0aWM8X1RwPjo6dmFsdWU+CitjbGFzcyBfX2xpYmNwcF9udW1lcmljX2xpbWl0cworeworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgX1RwIHR5cGU7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgbWluKCkgdGhyb3coKSB7cmV0dXJuIHR5cGUoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gdHlwZSgpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGxvd2VzdCgpIHRocm93KCkge3JldHVybiB0eXBlKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgZGlnaXRzID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gMDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICByYWRpeCA9IDA7CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBlcHNpbG9uKCkgdGhyb3coKSB7cmV0dXJuIHR5cGUoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiB0eXBlKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50ID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2V4cG9uZW50ID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgaW5maW5pdHkoKSB0aHJvdygpIHtyZXR1cm4gdHlwZSgpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIHF1aWV0X05hTigpIHRocm93KCkge3JldHVybiB0eXBlKCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkge3JldHVybiB0eXBlKCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgZGVub3JtX21pbigpIHRocm93KCkge3JldHVybiB0eXBlKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBkaWdpdHMsIGJvb2wgaXNfc2lnbmVkPgorc3RydWN0IF9fbGliY3BwX2NvbXB1dGVfbWluCit7CisgICAgc3RhdGljIGNvbnN0IF9UcCB2YWx1ZSA9IF9UcChfVHAoMSkgPDwgZGlnaXRzKTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBkaWdpdHM+CitzdHJ1Y3QgX19saWJjcHBfY29tcHV0ZV9taW48X1RwLCBkaWdpdHMsIGZhbHNlPgoreworICAgIHN0YXRpYyBjb25zdCBfVHAgdmFsdWUgPSBfVHAoMCk7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorY2xhc3MgX19saWJjcHBfbnVtZXJpY19saW1pdHM8X1RwLCB0cnVlPgoreworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgX1RwIHR5cGU7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0eXBlKC0xKSA8IHR5cGUoMCk7CisgICAgc3RhdGljIGNvbnN0IGludCAgZGlnaXRzID0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YodHlwZSkgKiBfX0NIQVJfQklUX18gLSBpc19zaWduZWQpOworICAgIHN0YXRpYyBjb25zdCBpbnQgIGRpZ2l0czEwID0gZGlnaXRzICogMyAvIDEwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9kaWdpdHMxMCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHR5cGUgX19taW4gPSBfX2xpYmNwcF9jb21wdXRlX21pbjx0eXBlLCBkaWdpdHMsIGlzX3NpZ25lZD46OnZhbHVlOworICAgIHN0YXRpYyBjb25zdCB0eXBlIF9fbWF4ID0gaXNfc2lnbmVkID8gdHlwZSh0eXBlKH4wKSBeIF9fbWluKSA6IHR5cGUofjApOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgbWluKCkgdGhyb3coKSB7cmV0dXJuIF9fbWluO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIG1heCgpIHRocm93KCkge3JldHVybiBfX21heDt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBsb3dlc3QoKSB0aHJvdygpIHtyZXR1cm4gbWluKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBpbnQgIHJhZGl4ID0gMjsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGVwc2lsb24oKSB0aHJvdygpIHtyZXR1cm4gdHlwZSgwKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiB0eXBlKDApO30KKworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50MTAgPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIHR5cGUoMCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgcXVpZXRfTmFOKCkgdGhyb3coKSB7cmV0dXJuIHR5cGUoMCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkge3JldHVybiB0eXBlKDApO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gdHlwZSgwKTt9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworCisjaWYgX19pMzg2X18gfHwgX194ODZfNjRfXworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKKyNlbmRpZgorICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworfTsKKwordGVtcGxhdGUgPD4KK2NsYXNzIF9fbGliY3BwX251bWVyaWNfbGltaXRzPGJvb2wsIHRydWU+Cit7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBib29sIHR5cGU7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSAxOworICAgIHN0YXRpYyBjb25zdCBpbnQgIGRpZ2l0czEwID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZGlnaXRzMTAgPSAwOworICAgIHN0YXRpYyBjb25zdCB0eXBlIF9fbWluID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IHR5cGUgX19tYXggPSB0cnVlOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgbWluKCkgdGhyb3coKSB7cmV0dXJuIF9fbWluO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIG1heCgpIHRocm93KCkge3JldHVybiBfX21heDt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBsb3dlc3QoKSB0aHJvdygpIHtyZXR1cm4gbWluKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBpbnQgIHJhZGl4ID0gMjsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGVwc2lsb24oKSB0aHJvdygpIHtyZXR1cm4gdHlwZSgwKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiB0eXBlKDApO30KKworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50MTAgPSAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIHR5cGUoMCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgcXVpZXRfTmFOKCkgdGhyb3coKSB7cmV0dXJuIHR5cGUoMCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkge3JldHVybiB0eXBlKDApO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gdHlwZSgwKTt9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87Cit9OworCit0ZW1wbGF0ZSA8PgorY2xhc3MgX19saWJjcHBfbnVtZXJpY19saW1pdHM8ZmxvYXQsIHRydWU+Cit7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBmbG9hdCB0eXBlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX0ZMVF9NQU5UX0RJR19fOworICAgIHN0YXRpYyBjb25zdCBpbnQgIGRpZ2l0czEwID0gX19GTFRfRElHX187CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gMisoZGlnaXRzICogMzAxMDMpLzEwMDAwMDsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIG1pbigpIHRocm93KCkge3JldHVybiBfX0ZMVF9NSU5fXzt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19GTFRfTUFYX187fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgbG93ZXN0KCkgdGhyb3coKSB7cmV0dXJuIC1tYXgoKTt9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICByYWRpeCA9IF9fRkxUX1JBRElYX187CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBlcHNpbG9uKCkgdGhyb3coKSB7cmV0dXJuIF9fRkxUX0VQU0lMT05fXzt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiAwLjVGO30KKworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudCA9IF9fRkxUX01JTl9FWFBfXzsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQxMCA9IF9fRkxUX01JTl8xMF9FWFBfXzsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZXhwb25lbnQgPSBfX0ZMVF9NQVhfRVhQX187CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2V4cG9uZW50MTAgPSBfX0ZMVF9NQVhfMTBfRVhQX187CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fcHJlc2VudDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIF9fYnVpbHRpbl9odWdlX3ZhbGYoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBxdWlldF9OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19idWlsdGluX25hbmYoIiIpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19idWlsdGluX25hbnNmKCIiKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBkZW5vcm1fbWluKCkgdGhyb3coKSB7cmV0dXJuIF9fRkxUX0RFTk9STV9NSU5fXzt9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b19uZWFyZXN0OworfTsKKwordGVtcGxhdGUgPD4KK2NsYXNzIF9fbGliY3BwX251bWVyaWNfbGltaXRzPGRvdWJsZSwgdHJ1ZT4KK3sKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIGRvdWJsZSB0eXBlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX0RCTF9NQU5UX0RJR19fOworICAgIHN0YXRpYyBjb25zdCBpbnQgIGRpZ2l0czEwID0gX19EQkxfRElHX187CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gMisoZGlnaXRzICogMzAxMDMpLzEwMDAwMDsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIG1pbigpIHRocm93KCkge3JldHVybiBfX0RCTF9NSU5fXzt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19EQkxfTUFYX187fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgbG93ZXN0KCkgdGhyb3coKSB7cmV0dXJuIC1tYXgoKTt9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICByYWRpeCA9IF9fRkxUX1JBRElYX187CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBlcHNpbG9uKCkgdGhyb3coKSB7cmV0dXJuIF9fREJMX0VQU0lMT05fXzt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiAwLjU7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50ID0gX19EQkxfTUlOX0VYUF9fOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudDEwID0gX19EQkxfTUlOXzEwX0VYUF9fOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IF9fREJMX01BWF9FWFBfXzsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZXhwb25lbnQxMCA9IF9fREJMX01BWF8xMF9FWFBfXzsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9wcmVzZW50OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgaW5maW5pdHkoKSB0aHJvdygpIHtyZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgcXVpZXRfTmFOKCkgdGhyb3coKSB7cmV0dXJuIF9fYnVpbHRpbl9uYW4oIiIpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19idWlsdGluX25hbnMoIiIpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gX19EQkxfREVOT1JNX01JTl9fO30KKworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7Cit9OworCit0ZW1wbGF0ZSA8PgorY2xhc3MgX19saWJjcHBfbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGUsIHRydWU+Cit7Citwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBsb25nIGRvdWJsZSB0eXBlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX0xEQkxfTUFOVF9ESUdfXzsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IF9fTERCTF9ESUdfXzsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZGlnaXRzMTAgPSAyKyhkaWdpdHMgKiAzMDEwMykvMTAwMDAwOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgbWluKCkgdGhyb3coKSB7cmV0dXJuIF9fTERCTF9NSU5fXzt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19MREJMX01BWF9fO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGxvd2VzdCgpIHRocm93KCkge3JldHVybiAtbWF4KCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSBfX0ZMVF9SQURJWF9fOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgZXBzaWxvbigpIHRocm93KCkge3JldHVybiBfX0xEQkxfRVBTSUxPTl9fO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7cmV0dXJuIDAuNTt9CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQgPSBfX0xEQkxfTUlOX0VYUF9fOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1pbl9leHBvbmVudDEwID0gX19MREJMX01JTl8xMF9FWFBfXzsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBtYXhfZXhwb25lbnQgPSBfX0xEQkxfTUFYX0VYUF9fOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gX19MREJMX01BWF8xMF9FWFBfXzsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9wcmVzZW50OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgaW5maW5pdHkoKSB0aHJvdygpIHtyZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsbCgpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIHF1aWV0X05hTigpIHRocm93KCkge3JldHVybiBfX2J1aWx0aW5fbmFubCgiIik7fQorICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkge3JldHVybiBfX2J1aWx0aW5fbmFuc2woIiIpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gX19MREJMX0RFTk9STV9NSU5fXzt9CisKKyNpZiAoZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9fcHBjNjRfXykpCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisjZWxzZQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CisjZW5kaWYKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitjbGFzcyBudW1lcmljX2xpbWl0cworICAgIDogcHJpdmF0ZSBfX2xpYmNwcF9udW1lcmljX2xpbWl0czx0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT4KK3sKKyAgICB0eXBlZGVmIF9fbGliY3BwX251bWVyaWNfbGltaXRzPHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPiBfX2Jhc2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Jhc2U6OnR5cGUgdHlwZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IF9fYmFzZTo6aXNfc3BlY2lhbGl6ZWQ7CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtaW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptaW4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptYXgoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBsb3dlc3QoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpsb3dlc3QoKTt9CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX2Jhc2U6OmRpZ2l0czsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IF9fYmFzZTo6ZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gX19iYXNlOjptYXhfZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19iYXNlOjppc19zaWduZWQ7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IF9fYmFzZTo6aXNfaW50ZWdlcjsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IF9fYmFzZTo6aXNfZXhhY3Q7CisgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSBfX2Jhc2U6OnJhZGl4OworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgZXBzaWxvbigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OmVwc2lsb24oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OnJvdW5kX2Vycm9yKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50ID0gX19iYXNlOjptaW5fZXhwb25lbnQ7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50MTAgPSBfX2Jhc2U6Om1pbl9leHBvbmVudDEwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IF9fYmFzZTo6bWF4X2V4cG9uZW50OworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gX19iYXNlOjptYXhfZXhwb25lbnQxMDsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IF9fYmFzZTo6aGFzX2luZmluaXR5OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBfX2Jhc2U6Omhhc19xdWlldF9OYU47CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBfX2Jhc2U6Omhhc19zaWduYWxpbmdfTmFOOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IF9fYmFzZTo6aGFzX2Rlbm9ybTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBfX2Jhc2U6Omhhc19kZW5vcm1fbG9zczsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6aW5maW5pdHkoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBxdWlldF9OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpxdWlldF9OYU4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6c2lnbmFsaW5nX05hTigpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpkZW5vcm1fbWluKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gX19iYXNlOjppc19pZWM1NTk7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IF9fYmFzZTo6aXNfYm91bmRlZDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBfX2Jhc2U6OmlzX21vZHVsbzsKKworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19iYXNlOjp0cmFwczsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBfX2Jhc2U6OnRpbnluZXNzX2JlZm9yZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBfX2Jhc2U6OnJvdW5kX3N0eWxlOworfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK2NsYXNzIG51bWVyaWNfbGltaXRzPGNvbnN0IF9UcD4KKyAgICA6IHByaXZhdGUgbnVtZXJpY19saW1pdHM8X1RwPgoreworICAgIHR5cGVkZWYgbnVtZXJpY19saW1pdHM8X1RwPiBfX2Jhc2U7CisgICAgdHlwZWRlZiBfVHAgdHlwZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IF9fYmFzZTo6aXNfc3BlY2lhbGl6ZWQ7CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtaW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptaW4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptYXgoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBsb3dlc3QoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpsb3dlc3QoKTt9CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX2Jhc2U6OmRpZ2l0czsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IF9fYmFzZTo6ZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gX19iYXNlOjptYXhfZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19iYXNlOjppc19zaWduZWQ7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IF9fYmFzZTo6aXNfaW50ZWdlcjsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IF9fYmFzZTo6aXNfZXhhY3Q7CisgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSBfX2Jhc2U6OnJhZGl4OworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgZXBzaWxvbigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OmVwc2lsb24oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OnJvdW5kX2Vycm9yKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50ID0gX19iYXNlOjptaW5fZXhwb25lbnQ7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50MTAgPSBfX2Jhc2U6Om1pbl9leHBvbmVudDEwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IF9fYmFzZTo6bWF4X2V4cG9uZW50OworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gX19iYXNlOjptYXhfZXhwb25lbnQxMDsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IF9fYmFzZTo6aGFzX2luZmluaXR5OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBfX2Jhc2U6Omhhc19xdWlldF9OYU47CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBfX2Jhc2U6Omhhc19zaWduYWxpbmdfTmFOOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IF9fYmFzZTo6aGFzX2Rlbm9ybTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBfX2Jhc2U6Omhhc19kZW5vcm1fbG9zczsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6aW5maW5pdHkoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBxdWlldF9OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpxdWlldF9OYU4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6c2lnbmFsaW5nX05hTigpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpkZW5vcm1fbWluKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gX19iYXNlOjppc19pZWM1NTk7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IF9fYmFzZTo6aXNfYm91bmRlZDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBfX2Jhc2U6OmlzX21vZHVsbzsKKworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19iYXNlOjp0cmFwczsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBfX2Jhc2U6OnRpbnluZXNzX2JlZm9yZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBfX2Jhc2U6OnJvdW5kX3N0eWxlOworfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK2NsYXNzIG51bWVyaWNfbGltaXRzPHZvbGF0aWxlIF9UcD4KKyAgICA6IHByaXZhdGUgbnVtZXJpY19saW1pdHM8X1RwPgoreworICAgIHR5cGVkZWYgbnVtZXJpY19saW1pdHM8X1RwPiBfX2Jhc2U7CisgICAgdHlwZWRlZiBfVHAgdHlwZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IF9fYmFzZTo6aXNfc3BlY2lhbGl6ZWQ7CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtaW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptaW4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptYXgoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBsb3dlc3QoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpsb3dlc3QoKTt9CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX2Jhc2U6OmRpZ2l0czsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IF9fYmFzZTo6ZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gX19iYXNlOjptYXhfZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19iYXNlOjppc19zaWduZWQ7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IF9fYmFzZTo6aXNfaW50ZWdlcjsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IF9fYmFzZTo6aXNfZXhhY3Q7CisgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSBfX2Jhc2U6OnJhZGl4OworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgZXBzaWxvbigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OmVwc2lsb24oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OnJvdW5kX2Vycm9yKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50ID0gX19iYXNlOjptaW5fZXhwb25lbnQ7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50MTAgPSBfX2Jhc2U6Om1pbl9leHBvbmVudDEwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IF9fYmFzZTo6bWF4X2V4cG9uZW50OworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gX19iYXNlOjptYXhfZXhwb25lbnQxMDsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IF9fYmFzZTo6aGFzX2luZmluaXR5OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBfX2Jhc2U6Omhhc19xdWlldF9OYU47CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBfX2Jhc2U6Omhhc19zaWduYWxpbmdfTmFOOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IF9fYmFzZTo6aGFzX2Rlbm9ybTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBfX2Jhc2U6Omhhc19kZW5vcm1fbG9zczsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6aW5maW5pdHkoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBxdWlldF9OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpxdWlldF9OYU4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6c2lnbmFsaW5nX05hTigpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpkZW5vcm1fbWluKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gX19iYXNlOjppc19pZWM1NTk7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IF9fYmFzZTo6aXNfYm91bmRlZDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBfX2Jhc2U6OmlzX21vZHVsbzsKKworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19iYXNlOjp0cmFwczsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBfX2Jhc2U6OnRpbnluZXNzX2JlZm9yZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBfX2Jhc2U6OnJvdW5kX3N0eWxlOworfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK2NsYXNzIG51bWVyaWNfbGltaXRzPGNvbnN0IHZvbGF0aWxlIF9UcD4KKyAgICA6IHByaXZhdGUgbnVtZXJpY19saW1pdHM8X1RwPgoreworICAgIHR5cGVkZWYgbnVtZXJpY19saW1pdHM8X1RwPiBfX2Jhc2U7CisgICAgdHlwZWRlZiBfVHAgdHlwZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IF9fYmFzZTo6aXNfc3BlY2lhbGl6ZWQ7CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtaW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptaW4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBtYXgoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjptYXgoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBsb3dlc3QoKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpsb3dlc3QoKTt9CisKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMgPSBfX2Jhc2U6OmRpZ2l0czsKKyAgICBzdGF0aWMgY29uc3QgaW50ICBkaWdpdHMxMCA9IF9fYmFzZTo6ZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWF4X2RpZ2l0czEwID0gX19iYXNlOjptYXhfZGlnaXRzMTA7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gX19iYXNlOjppc19zaWduZWQ7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IF9fYmFzZTo6aXNfaW50ZWdlcjsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IF9fYmFzZTo6aXNfZXhhY3Q7CisgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSBfX2Jhc2U6OnJhZGl4OworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RhdGljIHR5cGUgZXBzaWxvbigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OmVwc2lsb24oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSByb3VuZF9lcnJvcigpIHRocm93KCkge3JldHVybiBfX2Jhc2U6OnJvdW5kX2Vycm9yKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50ID0gX19iYXNlOjptaW5fZXhwb25lbnQ7CisgICAgc3RhdGljIGNvbnN0IGludCAgbWluX2V4cG9uZW50MTAgPSBfX2Jhc2U6Om1pbl9leHBvbmVudDEwOworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IF9fYmFzZTo6bWF4X2V4cG9uZW50OworICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gX19iYXNlOjptYXhfZXhwb25lbnQxMDsKKworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IF9fYmFzZTo6aGFzX2luZmluaXR5OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBfX2Jhc2U6Omhhc19xdWlldF9OYU47CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBfX2Jhc2U6Omhhc19zaWduYWxpbmdfTmFOOworICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IF9fYmFzZTo6aGFzX2Rlbm9ybTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBfX2Jhc2U6Omhhc19kZW5vcm1fbG9zczsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGluZmluaXR5KCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6aW5maW5pdHkoKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBxdWlldF9OYU4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpxdWlldF9OYU4oKTt9CisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGF0aWMgdHlwZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7cmV0dXJuIF9fYmFzZTo6c2lnbmFsaW5nX05hTigpO30KKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0YXRpYyB0eXBlIGRlbm9ybV9taW4oKSB0aHJvdygpIHtyZXR1cm4gX19iYXNlOjpkZW5vcm1fbWluKCk7fQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gX19iYXNlOjppc19pZWM1NTk7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IF9fYmFzZTo6aXNfYm91bmRlZDsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBfX2Jhc2U6OmlzX21vZHVsbzsKKworICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gX19iYXNlOjp0cmFwczsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBfX2Jhc2U6OnRpbnluZXNzX2JlZm9yZTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBfX2Jhc2U6OnJvdW5kX3N0eWxlOworfTsKKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NURAorCisjZW5kaWYgIC8vIF9MSUJDUFBfTElNSVRTCg==