LyoqCgogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCiAqIHVuZGVyIHRoZSBMaWNlbnNlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIERlc2NyaXB0aW9uOiBBIFVuaWNvZGUgVG9rZW5pemVyCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICBJbmNsdWRlIGRlcGVuZGVuY2llcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovLyBtdXN0IGJlIGZpcnN0IGluY2x1ZGUgZmlsZSB0byBzdXJwcmVzcyBzaWxseSBjb21waWxlciB3YXJuaW5ncwojaW5jbHVkZSAidWltYS9wcmFnbWFzLmhwcCIKI2luY2x1ZGUgInVpbWEvYXNzZXJ0bXNnLmgiCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgoKI2luY2x1ZGUgInVpbWEvc3NfdG9rZW5pemVyLmhwcCIKCiNpbmNsdWRlICJ1aW1hL2xhbmd1YWdlLmhwcCIKI2luY2x1ZGUgInVpbWEvcmVzbWdyLmhwcCIKI2luY2x1ZGUgInVpbWEvZXJyX2lkcy5oIgojaW5jbHVkZSAidWltYS9tc2cuaCIKCm5hbWVzcGFjZSB1aW1hIHsKCiAgc3RhdGljIFR5Q2hhcm1hcCBnc19jYXVpQ2hhck1hcFdhcmQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYXJhY3RlciBtYXAgZm9yIHVuaWNvZGUgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSB0YWJsZSBpcyBtYWRlIHVwIGluICJ3YXJkIiB0YWJsZXMuIEEgIndhcmQiIGlzIHRoZSBmaXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBieXRlIGluIGEgdW5pY29kZSBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENoYXJhY3RlcnMgd2l0aCB3YXJkIDAgYXJlIHRoZSBzYW1lIGFzIGluIGNvZGVwYWdlIDgxOSAoSVNSSTg4NTktMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXQVJEIDAgKHN0YXJ0IDB4MDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IC8qIDB4MDEsIDB4MDIgcmVxdWlyZWQgZm9yIG1hc2tpbmcsIGxlYXZlIHBhcnQgb2YgdG9rZW4hICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9VU0MsIENIX1VTQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIDAwLTA3ICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX0JMSywgQ0hfTldMLCBDSF9TUEMsIENIX1NQQywgQ0hfQkxLLCBDSF9TUEMsIENIX1NQQywgLyogMDgtMEYgJyAgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAvKiAxMC0xNyAnICAgICAgICAnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIDE4LTFGICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9CTEssIENIX1NORCwgQ0hfU1BDLCBDSF9TUEMsIENIX0NVUiwgQ0hfU1BDLCBDSF9TUEMsIENIX0FQUywgLyogMjAtMjcgJyAhIiMkJSYnJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfTlNQLCBDSF9DV1MsIENIX1BSRCwgQ0hfQ1dTLCAvKiAyOC0yRiAnKCkqKywtLi8nICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTlVNLCBDSF9OVU0sIENIX05VTSwgQ0hfTlVNLCBDSF9OVU0sIENIX05VTSwgQ0hfTlVNLCBDSF9OVU0sIC8qIDMwLTM3ICcwMTIzNDU2NycgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9OVU0sIENIX05VTSwgQ0hfQ1dTLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NORCwgLyogMzgtM0YgJzg5Ojs8PT4/JyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0NXUywgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCAvKiA0MC00NyAnQEFCQ0RFRkcnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIC8qIDQ4LTRGICdISUpLTE1OTycgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgLyogNTAtNTcgJ1BRUlNUVVZXJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1NQQywgQ0hfQ1dTLCBDSF9TUEMsIENIX1NQQywgQ0hfVVNDLCAvKiA1OC01RiAnWFlaW1xdXl8nICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfQVBTLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIC8qIDYwLTY3ICdgYWJjZGVmZycgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgLyogNjgtNkYgJ2hpamtsbW5vJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiA3MC03NyAncHFyc3R1dncnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIDc4LTdGICd4eXogICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogODAtODcgJyAgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAvKiA4OC04RiAnICAgICAgICAnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIDkwLTk3ICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogOTgtOUYgJyAgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0JMSywgQ0hfU05ELCBDSF9TUEMsIENIX0NVUiwgQ0hfQ1VSLCBDSF9DVVIsIENIX1NQQywgQ0hfU1BDLCAvKiBBMC1BNyAnICAgICAgICAnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIEE4LUFGICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9DVVIsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogQjAtQjcgJ7AgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU05ELCAvKiBCOC1CRiAnICAgICAgICAnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIC8qIEMwLUM3ICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgLyogQzgtQ0YgJyAgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfU1BDLCAvKiBEMC1ENyAnICAgICAgICAnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIEQ4LURGICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgLyogRTAtRTcgJyAgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiBFOC1FRiAnICAgICAgICAnICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9TUEMsIC8qIEYwLUY3ICcgICAgICAgICcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiAgLyogRjgtRkYgJyAgICAgICAgJyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdBUkQgMSAoc3RhcnQgMHgwMTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIDAwLTA3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogMDgtMEYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiAxMC0xNyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIDE4LTFGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogMjAtMjcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiAyOC0yRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIDMwLTM3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogMzgtM0YgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiA0MC00NyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIDQ4LTRGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogNTAtNTcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiA1OC01RiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIDYwLTY3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogNjgtNkYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiA3MC03NyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsICBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9MV1IsIC8qIDc4LTdGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfVVBSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX1VQUiwgLyogODAtODcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCAgQ0hfTFdSLCBDSF9MV1IsIENIX1VQUiwgQ0hfVVBSLCAvKiA4OC04RiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9VUFIsIC8qIDkwLTk3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIENIX1VQUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgLyogOTgtOUYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX0xXUiwgQ0hfVVBSLCAvKiBBMC1BNyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9VUFIsIC8qIEE4LUFGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgLyogQjAtQjcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiBCOC1CRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICBDSF9VUFIsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIC8qIEMwLUM3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX1VQUiwgIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgLyogQzgtQ0YgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCAgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCAvKiBEMC1ENyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsICBDSF9MV1IsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIEQ4LURGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogRTAtRTcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiBFOC1FRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX1VQUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9VUFIsIC8qIEYwLUY3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiAgLyogRjgtRkYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXQVJEIDIgIChzdGFydCAweDAyMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogMDAtMDcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAvKiAwOC0wRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIC8qIDEwLTE3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgLyogMTgtMUYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1VQUiwgQ0hfTFdSLCAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAvKiAyMC0yNyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIDI4LTJGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogMzAtMzcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAvKiAzOC0zRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIDQwLTQ3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogNDgtNEYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiA1MC01NyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIC8qIDU4LTVGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgLyogNjAtNjcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiA2OC02RiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIC8qIDcwLTc3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgLyogNzgtN0YgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiA4MC04NyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIC8qIDg4LThGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgLyogOTAtOTcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiA5OC05RiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIC8qIEEwLUE3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIENIX0xXUiwgQ0hfTFdSLCBDSF9TUEMsIENIX1NQQywgLyogQTgtQUYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAvKiBCMC1CNyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICBDSF9BUFMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIC8qIEI4LUJGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogQzAtQzcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAvKiBDOC1DRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9DV1MsIC8qIEQwLUQ3ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogRDgtREYgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAvKiBFMC1FNyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICBDSF9TUEMsIENIX1NQQywgQ0hfQVBTLCBDSF9TUEMsIC8qIEU4LUVGICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgLyogRjAtRjcgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDICAvKiBGOC1GRiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdBUkQgMyAoc3RhcnQgMHgwMzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDAwLTA3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAwOC0wZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gMTAtMTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDE4LTFmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAyMC0yNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gMjgtMmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDMwLTM3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAzOC0zZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gNDAtNDcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDQ4LTRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyA1MC01NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gNTgtNWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDYwLTY3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyA2OC02ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gNzAtNzcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TTkQsIENIX1NQQywgIC8vIDc4LTdmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfVVBSLCBDSF9TUEMsICAvLyA4MC04NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1NQQywgQ0hfVVBSLCBDSF9TUEMsIENIX1VQUiwgQ0hfVVBSLCAgLy8gODgtOGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgIC8vIDkwLTk3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsICAvLyA5OC05ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9TUEMsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCAgLy8gYTAtYTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIGE4LWFmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyBiMC1iNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gYjgtYmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIGMwLWM3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9TUEMsICAvLyBjOC1jZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gZDAtZDcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIGQ4LWRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyBlMC1lNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgLy8gZTgtZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIGYwLWY3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMgICAvLyBmOC1mZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV0FSRCA0ICgweDA0MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCAgLy8gMDAtMDcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgIC8vIDA4LTBmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsICAvLyAxMC0xNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCAgLy8gMTgtMWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgIC8vIDIwLTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsICAvLyAyOC0yZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gMzAtMzcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIDM4LTNmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyA0MC00NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gNDgtNGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIDUwLTU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyA1OC01ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgLy8gNjAtNjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIC8vIDY4LTZmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyA3MC03NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgLy8gNzgtN2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfQ1VSLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDgwLTg3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyA4OC04ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgLy8gOTAtOTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIC8vIDk4LTlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyBhMC1hNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgLy8gYTgtYWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIC8vIGIwLWI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyBiOC1iZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9TUEMsIENIX1NQQywgQ0hfVVBSLCAgLy8gYzAtYzcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX1NQQywgQ0hfU1BDLCBDSF9VUFIsIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIGM4LWNmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyBkMC1kNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCAgLy8gZDgtZGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgIC8vIGUwLWU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9MV1IsIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsICAvLyBlOC1lZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfTFdSLCBDSF9VUFIsIENIX0xXUiwgQ0hfVVBSLCBDSF9MV1IsIENIX1NQQywgQ0hfU1BDLCAgLy8gZjAtZjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQyAgIC8vIGY4LWZmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXQVJEIDUgKDB4MDUwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAwMC0wNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gMDgtMGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDEwLTE3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAxOC0xZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gMjAtMjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDI4LTJmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsICAvLyAzMC0zNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCAgLy8gMzgtM2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgIC8vIDQwLTQ3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsICAvLyA0OC00ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfVVBSLCBDSF9VUFIsIENIX1VQUiwgQ0hfU1BDLCAgLy8gNTAtNTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TTkQsIENIX1NQQywgIC8vIDU4LTVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyA2MC02NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gNjgtNmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIDcwLTc3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyA3OC03ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gODAtODcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1BSRCwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDg4LThmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyA5MC05NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gOTgtOWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIGEwLWE3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyBhOC1hZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gYjAtYjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIGI4LWJmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyBjMC1jNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gYzgtY2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIGQwLWQ3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyBkOC1kZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gZTAtZTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIGU4LWVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyBmMC1mNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDICAgLy8gZjgtZmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdBUkQgNiAoMHgwNjApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDAwLTA3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAwOC0wZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gMTAtMTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NORCwgIC8vIDE4LTFmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyAyMC0yNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gMjgtMmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIDMwLTM3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyAzOC0zZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gNDAtNDcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgIC8vIDQ4LTRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyA1MC01NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCAgLy8gNTgtNWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9OVU0sIENIX05VTSwgQ0hfTlVNLCBDSF9OVU0sIENIX05VTSwgQ0hfTlVNLCBDSF9OVU0sIENIX05VTSwgIC8vIDYwLTY3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTlVNLCBDSF9OVU0sIENIX1NQQywgQ0hfU1BDLCBDSF9OVU0sIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMsICAvLyA2OC02ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gNzAtNzcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIDc4LTdmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyA4MC04NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gODgtOGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIDkwLTk3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyA5OC05ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gYTAtYTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIGE4LWFmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyBiMC1iNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gYjgtYmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgIC8vIGMwLWM3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyBjOC1jZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfUFJELCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCAgLy8gZDAtZDcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX0xXUiwgIC8vIGQ4LWRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsICAvLyBlMC1lNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIX0xXUiwgQ0hfU1BDLCBDSF9TUEMsIENIX1NQQywgQ0hfU1BDLCBDSF9MV1IsIENIX1NQQywgQ0hfU1BDLCAgLy8gZTgtZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSF9OVU0sIENIX05VTSwgQ0hfTlVNLCBDSF9OVU0sIENIX05VTSwgQ0hfTlVNLCBDSF9OVU0sIENIX05VTSwgIC8vIGYwLWY3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hfTlVNLCBDSF9OVU0sIENIX0xXUiwgQ0hfTFdSLCBDSF9MV1IsIENIX1NQQywgQ0hfU1BDLCBDSF9TUEMgICAvLyBmOC1mZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKCgoKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgQSBQIEkgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vbGludCAtc2F2ZSAtZTkwOSA6IEltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBlbnVtL3BvaW50ZXIgdG8gYm9vbAoKICBUb2tlbml6ZXI6OlRva2VuaXplcih2b2lkKSA6CiAgICAgIGl2X2JVc2VBbHRlcm5hdGVUZXJyaXRvcmllcyh0cnVlKSwKICAgICAgaXZfcGF1aUNoYXJNYXBXYXJkKE5VTEwpIHsKICAgIGFzc2VydChzaXplb2YoVHlDaGFybWFwKSA9PSAoKE1BWFdBUkQrMSkqIDI1NiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKTsKICAgIGFzc2VydChzaXplb2YoZ3NfY2F1aUNoYXJNYXBXYXJkKSA9PSBzaXplb2YoKml2X3BhdWlDaGFyTWFwV2FyZCkpOwogICAgYXNzZXJ0KHNpemVvZihnc19jYXVpQ2hhck1hcFdhcmQpID09IHNpemVvZihUeUNoYXJtYXApKTsKICAgIC8vIHdlIGRvbid0IHdvbid0IG1vZGlmeSB0aGUgZ2xvYmFsIHN0YXRpYyBtYXAgYnV0IHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIGEKICAgIC8vIHdyaXRhYmxlIGNvcHkgdW50aWwgdGhlcmUgaXMgdGhlIG5lZWQgdG8gZG8gc28gKHNldENoYXJDbGFzcygpIGlzIGNhbGxlZCkKICAgIGl2X3BhdWlDaGFyTWFwV2FyZCA9ICZnc19jYXVpQ2hhck1hcFdhcmQ7CiAgfQoKICBUb2tlbml6ZXI6On5Ub2tlbml6ZXIodm9pZCkgewogICAgcmVzZXRDaGFyQ2xhc3NlcygpOwogICAgaXZfcGF1aUNoYXJNYXBXYXJkID0gTlVMTDsKICB9CgogIHZvaWQgVG9rZW5pemVyOjpyZXNldENoYXJDbGFzc2VzKHZvaWQpIHsKICAgIGlmIChpdl9wYXVpQ2hhck1hcFdhcmQgIT0gJmdzX2NhdWlDaGFyTWFwV2FyZCkgewogICAgICBmcmVlKGl2X3BhdWlDaGFyTWFwV2FyZCk7CiAgICAgIGl2X3BhdWlDaGFyTWFwV2FyZCA9ICZnc19jYXVpQ2hhck1hcFdhcmQ7CiAgICB9CiAgfQoKICB2b2lkIFRva2VuaXplcjo6c2V0Q2hhckNsYXNzKFdPUkQxNiB1aVVuaWNvZGVDb2RlUG9pbnQsIEVuQ2hhckNsYXNzIGVuQ2hhckNsYXNzKQogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgewogICAgYXNzZXJ0KEVYSVNUUyhpdl9wYXVpQ2hhck1hcFdhcmQpKTsKICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHJhcmVseSwgc28gaXQgaXMgb3B0aW1pemVkIGZvciBjbGFyaXR5IHJhdGhlciB0aGFuIHNwZWVkCiAgICBzaXplX3QgdWlXYXJkID0gdWlVbmljb2RlQ29kZVBvaW50LzI1NjsgIC8vZGV0ZXJtaW5lIHRoZSB3YXJkIGZvciB0aGUgY29kZXBvaW50CiAgICBpZiAodWlXYXJkID4gKHNpemVvZihUeUNoYXJtYXApLzI1NikpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpdl9wYXVpQ2hhck1hcFdhcmQgPT0gJmdzX2NhdWlDaGFyTWFwV2FyZCkgewogICAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdyaXRhYmxlIGNvcHkKICAgICAgaXZfcGF1aUNoYXJNYXBXYXJkID0gKFR5Q2hhcm1hcCopbWFsbG9jKHNpemVvZihUeUNoYXJtYXApKTsKICAgICAgaWYgKGl2X3BhdWlDaGFyTWFwV2FyZCA9PSBOVUxMKSB7CiAgICAgICAgVUlNQV9FWENfVEhST1dfTkVXKEV4Y091dE9mTWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBVSU1BX0VSUl9VU0VSX0FOTk9UQVRPUl9PVVRfT0ZfTUVNT1JZLAogICAgICAgICAgICAgICAgICAgICAgICAgICBVSU1BX01TR19JRF9FWENfT1VUX09GX01FTU9SWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdWltYTo6RXJyb3JNZXNzYWdlKFVJTUFfTVNHX0lEX0VYQ09OX1RPS19BTExPQ0FUSU5HX0NIQVJUQUJMRSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbWE6OkVycm9ySW5mbzo6dW5yZWNvdmVyYWJsZSk7CiAgICAgIH0KICAgICAgLy8gY29weSB2YWx1ZXMgZnJvbSBkZWZhdWx0IG1hcAogICAgICBtZW1jcHkoKml2X3BhdWlDaGFyTWFwV2FyZCwgZ3NfY2F1aUNoYXJNYXBXYXJkLCBzaXplb2YoVHlDaGFybWFwKSk7CiAgICB9CgogICAgc2l6ZV90IHVpV2FyZE9mZnNldCA9IHVpVW5pY29kZUNvZGVQb2ludCUyNTY7CiAgICAoKml2X3BhdWlDaGFyTWFwV2FyZClbdWlXYXJkXVt1aVdhcmRPZmZzZXRdID0gKHVuc2lnbmVkIHNob3J0KWVuQ2hhckNsYXNzOwogIH0KCiAgc3RhdGljIGNvbnN0IEVuQ2hhckNsYXNzIGdzX2FlbkljdUNoYXJDYXQyVG9rQ2hhckNsYXNzIFtVX0NIQVJfQ0FURUdPUllfQ09VTlQrMV0gPSB7CiAgICAgICAgLyoqIE5vbi1jYXRlZ29yeSBmb3IgdW5hc3NpZ25lZCBhbmQgbm9uLWNoYXJhY3RlciBjb2RlIHBvaW50cy4KICAgICAgICAgICAgICAgVV9VTkFTU0lHTkVEICAgICAgICAgICAgICA9IDAsICovIENIX1NQQywKICAgICAgICAvKiogTHUgVV9VUFBFUkNBU0VfTEVUVEVSICAgICAgICA9IDEsICovIENIX1VQUiwKICAgICAgICAvKiogTGwgVV9MT1dFUkNBU0VfTEVUVEVSICAgICAgICA9IDIsICovIENIX0xXUiwKICAgICAgICAvKiogTHQgVV9USVRMRUNBU0VfTEVUVEVSICAgICAgICA9IDMsICovIENIX1VQUiwKICAgICAgICAvKiogTG0gVV9NT0RJRklFUl9MRVRURVIgICAgICAgICA9IDQsICovIENIX1VTQywKICAgICAgICAvKiogTG8gVV9PVEhFUl9MRVRURVIgICAgICAgICAgICA9IDUsICovIENIX1VTQywKICAgICAgICAvKiogTW4gVV9OT05fU1BBQ0lOR19NQVJLICAgICAgICA9IDYsICovIENIX1VTQywKICAgICAgICAvKiogTWUgVV9FTkNMT1NJTkdfTUFSSyAgICAgICAgICA9IDcsICovIENIX1VTQywKICAgICAgICAvKiogTWMgVV9DT01CSU5JTkdfU1BBQ0lOR19NQVJLICA9IDgsICovIENIX1VTQywKICAgICAgICAvKiogTmQgVV9ERUNJTUFMX0RJR0lUX05VTUJFUiAgICA9IDksICovIENIX05VTSwKICAgICAgICAvKiogTmwgVV9MRVRURVJfTlVNQkVSICAgICAgICAgICA9IDEwLCovIENIX05VTSwKICAgICAgICAvKiogTm8gVV9PVEhFUl9OVU1CRVIgICAgICAgICAgICA9IDExLCovIENIX05VTSwKICAgICAgICAvKiogWnMgVV9TUEFDRV9TRVBBUkFUT1IgICAgICAgICA9IDEyLCovIENIX0JMSywKICAgICAgICAvKiogWmwgVV9MSU5FX1NFUEFSQVRPUiAgICAgICAgICA9IDEzLCovIENIX05XTCwKICAgICAgICAvKiogWnAgVV9QQVJBR1JBUEhfU0VQQVJBVE9SICAgICA9IDE0LCovIENIX05QQSwKICAgICAgICAvKiogQ2MgVV9DT05UUk9MX0NIQVIgICAgICAgICAgICA9IDE1LCovIENIX1NQQywKICAgICAgICAvKiogQ2YgVV9GT1JNQVRfQ0hBUiAgICAgICAgICAgICA9IDE2LCovIENIX1NQQywKICAgICAgICAvKiogQ28gVV9QUklWQVRFX1VTRV9DSEFSICAgICAgICA9IDE3LCovIENIX1VTQywKICAgICAgICAvKiogQ3MgVV9TVVJST0dBVEUgICAgICAgICAgICAgICA9IDE4LCovIENIX1VTQywKICAgICAgICAvKiogUGQgVV9EQVNIX1BVTkNUVUFUSU9OICAgICAgICA9IDE5LCovIENIX0NXUywKICAgICAgICAvKiogUHMgVV9TVEFSVF9QVU5DVFVBVElPTiAgICAgICA9IDIwLCovIENIX1NQQywKICAgICAgICAvKiogUGUgVV9FTkRfUFVOQ1RVQVRJT04gICAgICAgICA9IDIxLCovIENIX1NQQywKICAgICAgICAvKiogUGMgVV9DT05ORUNUT1JfUFVOQ1RVQVRJT04gICA9IDIyLCovIENIX0NXUywKICAgICAgICAvKiogUG8gVV9PVEhFUl9QVU5DVFVBVElPTiAgICAgICA9IDIzLCovIENIX1NQQywKICAgICAgICAvKiogU20gVV9NQVRIX1NZTUJPTCAgICAgICAgICAgICA9IDI0LCovIENIX1NQQywKICAgICAgICAvKiogU2MgVV9DVVJSRU5DWV9TWU1CT0wgICAgICAgICA9IDI1LCovIENIX0NVUiwKICAgICAgICAvKiogU2sgVV9NT0RJRklFUl9TWU1CT0wgICAgICAgICA9IDI2LCovIENIX1VTQywKICAgICAgICAvKiogU28gVV9PVEhFUl9TWU1CT0wgICAgICAgICAgICA9IDI3LCovIENIX1NQQywKICAgICAgICAvKiogUGkgVV9JTklUSUFMX1BVTkNUVUFUSU9OICAgICA9IDI4LCovIENIX1NQQywKICAgICAgICAvKiogUGYgVV9GSU5BTF9QVU5DVFVBVElPTiAgICAgICA9IDI5LCovIENIX1NQQywKICAgICAgICAvKiogQ24gVV9HRU5FUkFMX09USEVSX1RZUEVTICAgICA9IDMwLCovIENIX1NQQwogICAgICAgIC8qKiBPbmUgaGlnaGVyIHRoYW4gdGhlIGxhc3QgZW51bSBVQ2hhckNhdGVnb3J5IGNvbnN0YW50LgogICAgICAgICAgICBVX0NIQVJfQ0FURUdPUllfQ09VTlQgKi8KICAgICAgfTsKCgovLyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBpbiB0aGlzIGZpbGUKICBpbmxpbmUgRW5DaGFyQ2xhc3MKICBUb2tlbml6ZXI6OmdldENoYXJDbGFzc0lubCggVUNoYXIgYyApIHsKICAgIC8vIGlzb2xhdGUgZmlyc3QgYnl0ZSB3aGljaCBkZXNpZ25hdGVzIHdhcmQKICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGMxID0gYyA+PiA4OwoKICAgIC8vIG1hcHBpbmcgdGFibGVzIG9ubHkgZGVmaW5lZCBmb3IgdGhlIGZpcnN0IFdBUkRTCiAgICBpZiAoYzEgPD0gTUFYV0FSRCkgewogICAgICAvLyBpc29sYXRlIHNlY29uZCBieXRlCiAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBjICYgMHhGRjsKCiAgICAgIC8vIHVzZSBib3RoIGJ5dGUgcGFydHMgZm9yIGxvb2t1cCBpbiB3YXJkIHRhYmxlCiAgICAgIHJldHVybihFbkNoYXJDbGFzcykgKCppdl9wYXVpQ2hhck1hcFdhcmQpW2MxXVtjMl07CiAgICB9CgogICAgYXNzZXJ0KHVfY2hhclR5cGUoYykgPj0gMCk7CiAgICBhc3NlcnQodV9jaGFyVHlwZShjKSA8IFVfQ0hBUl9DQVRFR09SWV9DT1VOVCk7CiAgICAvLyBmb3IgYWxsIG90aGVyIGNoYXJhY3RlcnMgZ2V0IHVuaWNvZGUgY2hhcmFjdGVyIHR5cGUgZnJvbSBJQ1UKICAgIC8vIGFuZCBtYXAgdGhlIHVuaWNvZGUgY2hhcmFjdGVyIHR5cGUgdG8gb3VyIGNoYXJhY3RlciBjbGFzcyB1c2luZyB0YWJsZQogICAgcmV0dXJuICggZ3NfYWVuSWN1Q2hhckNhdDJUb2tDaGFyQ2xhc3NbKFVDaGFyQ2F0ZWdvcnkpdV9jaGFyVHlwZShjKV0gKTsKCiAgfQoKICAvKiBjbGFzcyBmdW5jdGlvbiB1c2VkIGluIGFubm90YXRvcl90b2ssY3BwICovCiAgRW5DaGFyQ2xhc3MgVG9rZW5pemVyOjpnZXRDaGFyQ2xhc3MoIFVDaGFyIGMgKSB7CiAgICByZXR1cm4gZ2V0Q2hhckNsYXNzSW5sKGMpOwogIH0KCgoKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgQSBQIEkgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgaW5saW5lIGludCBUb2tlbml6ZXI6OnRva2VuRW50cnkoCiAgICBjb25zdCBVQ2hhciAqcFRva2VuLCBzaXplX3QgdWxMb2NhdGlvbiwgIHNpemVfdCB1bExlbmd0aCwKICAgIFRva2VuUHJvcGVydGllcyAmcmNsVG9rZW5Qcm9wZXJ0aWVzLAogICAgYm9vbCAmYk5ld1BhcmEsIGJvb2wgJmJOZXdTZW50LCBzaXplX3QgJiBydWxOZXdsaW5lcykgewoKICAgIC8vIHNlbmQgdG9rZW4gdG8gVUlNQQogICAgdG9rZW5DYWxsYmFjayggdWxMb2NhdGlvbiwgdWxMZW5ndGgsIHJjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50ICk7CgogICAgLy8gYWN0aW9ucyBhZnRlciB0aGUgdG9rZW4gd2FzIHNlbnQgdG8gVUlNQToKCiAgICAvLyByZXNldCB0b2tlbiBjbGFzcyBmb3IgbmV4dCB0b2tlbgogICAgcmNsVG9rZW5Qcm9wZXJ0aWVzLnJlc2V0KCk7CiAgICAvLyByZXNldCBuZXcgcGFyYWdyYXBoIC8gbmV3IHNlbnRlbmNlIGZsYWdzCiAgICBiTmV3UGFyYSA9IGJOZXdTZW50ID0gZmFsc2U7CiAgICAvLyByZXNldCBjb3VudCBmb3IgbmV3bGluZXMgKGV2ZW4gaWYgdGhlcmUgd2FzIG9ubHkgb25lKQogICAgcnVsTmV3bGluZXMgPSAwOwoKICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgVG9rZW5pemVyOjpwcm9jZXNzKGNvbnN0IFVDaGFyICp0ZXh0X3N0YXJ0LCBjb25zdCBVQ2hhciAqdGV4dF9lbmQpIHsKICAgIGFzc2VydChFWElTVFModGV4dF9zdGFydCkpOwogICAgYXNzZXJ0KEVYSVNUUyh0ZXh0X2VuZCkpOwogICAgYXNzZXJ0KEVYSVNUUyhpdl9wYXVpQ2hhck1hcFdhcmQpKTsKCiAgICAvLz8gVVN0cmluZyBzdHIoKFVuaUNoYXIgKikgdGV4dF9zdGFydCwgKHNpemVfdCkgKHRleHRfZW5kIC0gdGV4dF9zdGFydCkgKyAxKTsKICAgIC8vPyBjb3V0IDw8ICI+Pj4gJyIgPDwgc3RyLnBydl9hc1NpbmdsZUJ5dGVTdHJpbmcoQ0NTSUQoODE5KSkgPDwgIicgPDw8IiA8PCBlbmRsOwoKICAgIGNvbnN0IFVDaGFyICpwVGV4dCA9IHRleHRfc3RhcnQ7ICAgLy8gY3VyZW50IHBvaW50ZXIgaW4gdGV4dAogICAgY29uc3QgVUNoYXIgKnBXb3JkU3RhcnQgPSBOVUxMOyAgICAvLyBzdGFydCBvZiBjdXJyZW50IHdvcmQgb3IgTlVMTAogICAgLy8gaWYgbm90IGluIGEgd29yZAogICAgYm9vbCBiTmV3U2VudCA9IGZhbHNlOyAgICAgICAgICAgICAvLyBuZXh0IFdvcmQgaXMgaW4gbmV3IHNlbnRlbmNlCiAgICBib29sIGJOZXdQYXJhID0gZmFsc2U7ICAgICAgICAgICAgIC8vIG5leHQgV29yZCBpcyBpbiBuZXcgcGFyYWdyYXBoCiAgICBzaXplX3QgdWlOZXdsaW5lcyA9IDA7ICAgICAgICAgICAgIC8vIG51bWJlciBvZiBzdWJzZXF1ZW50IG5ld2xpbmVzCiAgICAvLyAobW9yZSB0aGFuIDIgaW5kaWNhdGUgbmV3IHBhcmFncmFwaCkKICAgIFRva2VuUHJvcGVydGllcyBjbFRva2VuUHJvcGVydGllczsgLy8gY2xhc3Mgb2YgY3VycmVudCB3b3JkIChlLmcuIGFsbCB1cHBlcikKCiAgICAvL2NsVG9rZW5Qcm9wZXJ0aWVzLnJlc2V0KCkKCiAgICB3aGlsZSAoIHBUZXh0IDw9IHRleHRfZW5kICkgewogICAgICBFbkNoYXJDbGFzcyAgICAgICAgICAgICBjaGFyQ2xhc3MgPSBnZXRDaGFyQ2xhc3NJbmwoICpwVGV4dCApOwogICAgICBjb25zdCBVQ2hhciAgICAgICAgICAgICBjaFRleHROZXh0ID0gKHBUZXh0IDwgdGV4dF9lbmQpID8gKihwVGV4dCArIDEpIDogMDsKCiAgICAgIC8vIERlZmF1bHQgY2FzZTogY3VycmVudCBjaGFyYWN0ZXIgaXMgdXBwZXIgb3IgbG93ZXIgY2FzZSBjaGFyYWN0ZXIgb3IgZGlnaXQ6CiAgICAgIGlmICggY2hhckNsYXNzICYgKENIX0xXUiB8IENIX1VQUiB8IENIX05VTSB8IENIX0NVUiB8IENIX1VTQyApICApIHsKICAgICAgICBpZiAoIHBXb3JkU3RhcnQgPT0gTlVMTCApIHsKICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiBhIG5ldyB3b3JkCiAgICAgICAgICBwV29yZFN0YXJ0ID0gcFRleHQ7CiAgICAgICAgfQogICAgICAgIC8vIHRva2VuIGNsYXNzIGNsYXNzaWZpY2F0aW9uIChtb3N0IGZyZXF1ZW50IGNoZWNrZWQgZmlyc3QpCiAgICAgICAgaWYgKCBjaGFyQ2xhc3MgJiBDSF9MV1IgKQogICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0TG93ZXIoKTsKICAgICAgICBlbHNlIGlmICggY2hhckNsYXNzICYgQ0hfVVBSICkgewogICAgICAgICAgaWYgKCBwV29yZFN0YXJ0ID09IHBUZXh0ICkKICAgICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0TGVhZGluZ1VwcGVyKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFRyYWlsaW5nVXBwZXIoKTsKICAgICAgICB9IGVsc2UgaWYgKCBjaGFyQ2xhc3MgJiBDSF9OVU0gKQogICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0TnVtZXJpYygpOwogICAgICAgIGVsc2UgaWYgKCBjaGFyQ2xhc3MgJiBDSF9VU0MgKQogICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0U3BlY2lhbCgpOwogICAgICAgIGVsc2UgaWYgKCBjaGFyQ2xhc3MgJiBDSF9DVVIgKSB7CiAgICAgICAgICBpZiAoIHBXb3JkU3RhcnQgPT0gcFRleHQgKSB7CiAgICAgICAgICAgIC8vIGFjY2VwdCBjdXJyZW5jeSBvbmx5IGFzIGEgZmlyc3QgY2hhcmFjdGVyLCBpZiBhIGRpZ2l0CiAgICAgICAgICAgIC8vIGlzIGZvbGxvd2luZwogICAgICAgICAgICBpZiAoIGdldENoYXJDbGFzc0lubCggY2hUZXh0TmV4dCkgIT0gQ0hfTlVNICkgewogICAgICAgICAgICAgIHBXb3JkU3RhcnQgPSBOVUxMOyAgICAvLyByZXNldCB3b3JkIHBvaW50ZXIgKCJub3QgaW4gYSB3b3JkIikKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjbFRva2VuUHJvcGVydGllcy5zZXRTcGVjaWFsKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFNwZWNpYWwoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gbW92ZSB0byBuZXh0IGNoYXJhY3RlcgogICAgICAgIHBUZXh0Kys7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIHN3aXRjaCAoIGNoYXJDbGFzcyApIHsKICAgICAgY2FzZSBDSF9CTEs6ICAgIC8vIGJsYW5rCiAgICAgICAgLy8gdW5jb25kaXRpb25hbGx5IHRlcm1pbmF0ZXMgdGhlIGN1cnJlbnQgd29yZCBhcyBhIHRva2VuCiAgICAgICAgLy8gYW5kIHN0YXJ0cyBhIG5ldyB3b3JkCiAgICAgICAgaWYgKCBwV29yZFN0YXJ0ICkgewogICAgICAgICAgLy8gZW5kIG9mIGN1cnJlbnQgd29yZAogICAgICAgICAgdG9rZW5FbnRyeSggcFdvcmRTdGFydCwgcFdvcmRTdGFydC10ZXh0X3N0YXJ0LCBwVGV4dC1wV29yZFN0YXJ0LCBjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50LCB1aU5ld2xpbmVzICApOwogICAgICAgICAgcFdvcmRTdGFydCA9IE5VTEw7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIX1NQQzogICAgLy8gc3BlY2lhbCBjaGFyYWN0ZXIKICAgICAgICAvLyB1bmNvbmRpdGlvbmFsbHkgdGVybWluYXRlcyB0aGUgY3VycmVudCB3b3JkIGFzIGEgdG9rZW4KICAgICAgICAvLyBhbmQgc3RhcnRzIGEgbmV3IHdvcmQKICAgICAgICBpZiAoIHBXb3JkU3RhcnQgKSB7CiAgICAgICAgICAvLyBlbmQgb2YgY3VycmVudCB3b3JkCiAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0LXBXb3JkU3RhcnQsIGNsVG9rZW5Qcm9wZXJ0aWVzLCBiTmV3UGFyYSwgYk5ld1NlbnQsIHVpTmV3bGluZXMgICk7CiAgICAgICAgfQogICAgICAgIC8vIHRoZSBzdGFydCBvZiBhIG5ldyAid29yZCIgY29udGFpbmluZyB0aGUgc3BlY2lhbCBjaGFyKHMpCiAgICAgICAgcFdvcmRTdGFydCA9IHBUZXh0OwogICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFNwZWNpYWwoKTsKICAgICAgICAvLyBjaGVjayBpZiB0aGUgbmV4dCBjaGFyIGlzIGVuZCBvZiBhIHNwZWNpYWwgY2hhcihzIHNlcXVlbmNlKQogICAgICAgIGlmIChwV29yZFN0YXJ0ICYmICEoZ2V0Q2hhckNsYXNzSW5sKCBjaFRleHROZXh0ICkgJiAoQ0hfU1BDKSkpIHsKICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgc3BlY2lhbCBjaGFyKHMgc2VxdWVuY2UpCiAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0KzEtcFdvcmRTdGFydCwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyAgKTsKICAgICAgICAgIHBXb3JkU3RhcnQgPSBOVUxMOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSF9TTkQ6ICAgIC8vIHNlbnRlbmNlIGVuZCAoIj8iIG9yICIhIikKICAgICAgICAvLyB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50IHNlbnRlbmNlCiAgICAgICAgaWYgKCBwV29yZFN0YXJ0ICkgewogICAgICAgICAgaWYgKCEoZ2V0Q2hhckNsYXNzSW5sKCAqKHBUZXh0LTEpICkgJiAoQ0hfU05EKSkpIHsKICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSB0b2tlbiBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBvZiA/IGUuZy4gImFiYz8iCiAgICAgICAgICAgIHRva2VuRW50cnkoIHBXb3JkU3RhcnQsIHBXb3JkU3RhcnQtdGV4dF9zdGFydCwgcFRleHQtcFdvcmRTdGFydCwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyAgKTsKICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIGEgbmV3ICJ3b3JkIiBjb250YWluaW5nIHRoZSAnJycKICAgICAgICAgICAgcFdvcmRTdGFydCA9IHBUZXh0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB0aGUgc3RhcnQgb2YgYSBuZXcgIndvcmQiIGNvbnRhaW5pbmcgdGhlICcnJwogICAgICAgICAgcFdvcmRTdGFydCA9IHBUZXh0OwogICAgICAgIH0KICAgICAgICBjbFRva2VuUHJvcGVydGllcy5zZXRTcGVjaWFsKCk7CiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIG5leHQgY2hhciBpcyBlbmQgb2YgYSA/IG9yID8/PyBzZXF1ZW5jZQogICAgICAgIGlmIChwV29yZFN0YXJ0ICYmICEoZ2V0Q2hhckNsYXNzSW5sKCBjaFRleHROZXh0ICkgJiAoQ0hfU05EKSkpIHsKICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgPyBvciA/Pz8gdG9rZW4KICAgICAgICAgIHRva2VuRW50cnkoIHBXb3JkU3RhcnQsIHBXb3JkU3RhcnQtdGV4dF9zdGFydCwgcFRleHQrMS1wV29yZFN0YXJ0LCBjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50LCB1aU5ld2xpbmVzICApOwogICAgICAgICAgLy8gc3RhcnQgYSBuZXcgc2VudGVuY2UKICAgICAgICAgIGJOZXdTZW50ID0gdHJ1ZTsKICAgICAgICAgIHBXb3JkU3RhcnQgPSBOVUxMOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSF9OV0w6ICAgLy8gbmV3bGluZQogICAgICAgIGlmICggcFdvcmRTdGFydCApIHsKICAgICAgICAgIC8vIGVuZCBvZiBjdXJyZW50IHdvcmQKICAgICAgICAgIHRva2VuRW50cnkoIHBXb3JkU3RhcnQsIHBXb3JkU3RhcnQtdGV4dF9zdGFydCwgcFRleHQtcFdvcmRTdGFydCwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyApOwogICAgICAgICAgcFdvcmRTdGFydCA9IE5VTEw7CiAgICAgICAgfQogICAgICAgIC8vIGNvdW50IG9jY3VyaW5nIG5ld2xpbmVzLCBpZiBhIG5ldyB3b3JkIHN0YXJ0cyBhbmQgdGhlcmUgd2VyZSBtb3JlCiAgICAgICAgLy8gdGhhbiBvbmUgbmV3bGluZXMsIHRoaXMgaXMgdGhlIGJlZ2luIG9mIGEgbmV3IHBhcmFncmFwaAogICAgICAgICsrdWlOZXdsaW5lczsKICAgICAgICAvLyBpZiB0aGVyZSB3ZXJlIHNvbWUgbmV3bGluZXMgYmVmb3JlCiAgICAgICAgLy8gc3RhcnQgYSBuZXcgcGFyYWdyYXBoCiAgICAgICAgaWYgKCB1aU5ld2xpbmVzID4gMSApIHsKICAgICAgICAgIC8vIG5ldyBwYXJhZ3JhcGggKGFuZCBuZXcgc2VudGVuY2UpCiAgICAgICAgICBiTmV3UGFyYSA9IHRydWU7CiAgICAgICAgICBiTmV3U2VudCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIX05QQTogICAvLyBuZXdwYXJhCiAgICAgICAgaWYgKCBwV29yZFN0YXJ0ICkgewogICAgICAgICAgLy8gZW5kIG9mIGN1cnJlbnQgd29yZAogICAgICAgICAgdG9rZW5FbnRyeSggcFdvcmRTdGFydCwgcFdvcmRTdGFydC10ZXh0X3N0YXJ0LCBwVGV4dC1wV29yZFN0YXJ0LCBjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50LCB1aU5ld2xpbmVzICk7CiAgICAgICAgICBwV29yZFN0YXJ0ID0gTlVMTDsKICAgICAgICB9CiAgICAgICAgLy8gbmV3IHBhcmFncmFwaCAoYW5kIG5ldyBzZW50ZW5jZSkKICAgICAgICBiTmV3UGFyYSA9IHRydWU7CiAgICAgICAgYk5ld1NlbnQgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIX1BSRDogICAgLy8gcGVyaW9kCiAgICAgICAgLy8gaWYgbm90IGluIGEgd29yZCwgaWdub3JlIGEgbGVhZGluZyBwb2ludAogICAgICAgIGlmICggcFdvcmRTdGFydCApIHsKICAgICAgICAgIGlmICggcFRleHQgPT0gdGV4dF9lbmQgKSB7CiAgICAgICAgICAgIC8vIHBlcmlvZCBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQ6CiAgICAgICAgICAgIC8vIFNpbmNlIG5vIGNoYXJhY3RlcnMgYXJlIGZvbGxvd2luZywgdGhpcyBjYW4gb25seSBiZSB0aGUKICAgICAgICAgICAgLy8gZW5kIG9mIHRoZSBzZW50ZW5jZS4KICAgICAgICAgICAgLy8gZW5kIG9mIGN1cnJlbnQgd29yZAogICAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0LXBXb3JkU3RhcnQsIGNsVG9rZW5Qcm9wZXJ0aWVzLCBiTmV3UGFyYSwgYk5ld1NlbnQsIHVpTmV3bGluZXMgKTsKICAgICAgICAgICAgLy8gbm93IGVtbWl0IHRoZSBmaW5hbCBwZXJpb2QgdG9rZW4gaXRzZWxmCiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiBhIG5ldyAid29yZCIgY29udGFpbmluZyB0aGUgLiBvciAuLgogICAgICAgICAgICBwV29yZFN0YXJ0ID0gcFRleHQ7CiAgICAgICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFNwZWNpYWwoKTsKICAgICAgICAgICAgdG9rZW5FbnRyeSggcFdvcmRTdGFydCwgcFdvcmRTdGFydC10ZXh0X3N0YXJ0LCAxLCBjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50LCB1aU5ld2xpbmVzICk7CiAgICAgICAgICAgIC8vIHNldHRpbmcgYk5ld1NlbnQgdG8gdHJ1ZSBoZXJlIGlzIG5vdCByZWFsbHkgbmVjY2Vzc2FyeS4KICAgICAgICAgICAgLy8gc2luY2Ugd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHRleHQuIEhvd2V2ZXIsIHRvIGhhdmUKICAgICAgICAgICAgLy8gdGhlIHNhbWUgY29kZSBmb3IgYWxsICJzZW50ZW5jZSBlbmQiIGNvbmRpdGlvbnMsIHRoaXMgaXMKICAgICAgICAgICAgLy8gbGVmdCBoZXJlLgogICAgICAgICAgICBiTmV3U2VudCA9IHRydWU7CiAgICAgICAgICAgIHBXb3JkU3RhcnQgPSBOVUxMOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcGVyaW9kIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0IC0gYWN0aW9uIGRlcGVuZHMgb24gbGVhZGluZyBhbmQgZm9sbG93aW5nIGNoYXJhY3RlcgogICAgICAgICAgICAvLyBub3RlOiBzaW5jZSBwV29yZFN0YXJ0IGlzIG5vdCBOVUxMIGhlcmUsIHBUZXh0IHBvaW50cyBub3QKICAgICAgICAgICAgLy8gdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LgogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSB3b3JkIGlmIGJldHdlZW4gbnVtYmVycyBvZiBhbHBoYSBjaGFyYWN0ZXJzIChsaWtlIGNvbmRpdGlvbmFsIHdoaXRlc3BhY2VzKQogICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB0b2tlbnMgbGlrZSAiOS4xNjQuMjIwLjEyIgogICAgICAgICAgICBpZiAoIChnZXRDaGFyQ2xhc3NJbmwoICoocFRleHQtMSkpICYgKENIX1VQUiB8IENIX0xXUiB8IENIX05VTSApKSAmJgogICAgICAgICAgICAgICAgIChnZXRDaGFyQ2xhc3NJbmwoIGNoVGV4dE5leHQpICYgKENIX1VQUiB8IENIX0xXUiB8IENIX05VTSApKSkgewogICAgICAgICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFNwZWNpYWwoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVsV29yZExlbiA9IHBUZXh0LXBXb3JkU3RhcnQ7CiAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgIGNoVGV4dE5leHROZXh0ID0gKHBUZXh0IDwgKHRleHRfZW5kIC0gMSkpID8gKihwVGV4dCArIDIpIDogMDsKCiAgICAgICAgICAgIGlmICggICAodWxXb3JkTGVuID09MSAmJiBjbFRva2VuUHJvcGVydGllcy5oYXNVcHBlcigpKQogICAgICAgICAgICAgICAgICAgLy8gT1IgYmVnaW5uaW5nIG9mIG5leHQgdG9rZW4gaXMgbG93ZXI6IG11c3QgYmUgYWJyZXYKICAgICAgICAgICAgICAgICAgIHx8IChnZXRDaGFyQ2xhc3NJbmwoIGNoVGV4dE5leHROZXh0KSAmIChDSF9MV1IpKQogICAgICAgICAgICAgICAgICAgLy8gT1IgZm91bmQgaW4gYWJicmV2aWF0aW9uIGxpc3QKICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0FicmV2aWF0aW9uKCBwV29yZFN0YXJ0LCB1bFdvcmRMZW4gKSApIHsKICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0U3BlY2lhbCgpOwogICAgICAgICAgICAgIC8vIGlzIGFuIGFiYnJldmlhdGlvbiwgaWdub3JlIHRoaXMgd29yZCwgZG8gbm90IGVuZCB0aGUgc2VudGVuY2UKICAgICAgICAgICAgICAvLyBwYXNzIHRva2VuIFdJVEggcGVyaW9kLgogICAgICAgICAgICAgIHRva2VuRW50cnkoIHBXb3JkU3RhcnQsIHBXb3JkU3RhcnQtdGV4dF9zdGFydCwgdWxXb3JkTGVuKzEsIGNsVG9rZW5Qcm9wZXJ0aWVzLCBiTmV3UGFyYSwgYk5ld1NlbnQsIHVpTmV3bGluZXMgKTsKICAgICAgICAgICAgICBwV29yZFN0YXJ0ID0gTlVMTDsKICAgICAgICAgICAgfSBlbHNlIGlmICghKGdldENoYXJDbGFzc0lubCggKihwVGV4dC0xKSApICYgKENIX1BSRCkpKSB7CiAgICAgICAgICAgICAgLy8gbXVzdCBiZSB0aGUgZW5kIG9mIGEgc2VudGVuY2UKICAgICAgICAgICAgICAvLyBlbmQgb2YgY3VycmVudCB3b3JkICh3aXRob3V0IHBlcmlvZCkKICAgICAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHVsV29yZExlbiwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyApOwogICAgICAgICAgICAgIHBXb3JkU3RhcnQgPSBwVGV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB0aGUgc3RhcnQgb2YgYSBuZXcgIndvcmQiIGNvbnRhaW5pbmcgdGhlIC4uLgogICAgICAgICAgcFdvcmRTdGFydCA9IHBUZXh0OwogICAgICAgIH0KICAgICAgICBpZiAocFdvcmRTdGFydCkgewogICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0U3BlY2lhbCgpOwogICAgICAgIH0KICAgICAgICAvLyBjaGVjayBpZiB0aGUgbmV4dCBjaGFyIGlzIGVuZCBvZiBhIC4gb3IgLi4uIHNlcXVlbmNlCiAgICAgICAgLy8gTm90ZTogd2UgYWxsb3cgZm9yICIuMTIiIG9yICIuTmV0IiBvciAuLjEyIHRvIGJlIG9uZSB0b2tlbgogICAgICAgIGlmIChwV29yZFN0YXJ0ICYmICEoZ2V0Q2hhckNsYXNzSW5sKCBjaFRleHROZXh0ICkgJiAoQ0hfUFJEIHwgQ0hfTlVNIHwgQ0hfTFdSIHwgQ0hfVVBSKSkpIHsKICAgICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFNwZWNpYWwoKTsKICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgLiBvciAuLi4gdG9rZW4KICAgICAgICAgIHRva2VuRW50cnkoIHBXb3JkU3RhcnQsIHBXb3JkU3RhcnQtdGV4dF9zdGFydCwgcFRleHQrMS1wV29yZFN0YXJ0LCBjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50LCB1aU5ld2xpbmVzICApOwogICAgICAgICAgaWYgKGdldENoYXJDbGFzc0lubCggY2hUZXh0TmV4dCApICYgKENIX0JMSyB8IENIX05XTCkpIHsKICAgICAgICAgICAgYk5ld1NlbnQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcFdvcmRTdGFydCA9IE5VTEw7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIX05TUDogICAgLy8gbnVtYmVyIHNlcGVyYXRvciBvciAnLCcKICAgICAgICBpZiAoIHBXb3JkU3RhcnQgKSB7CiAgICAgICAgICAvLyBwYXJ0IG9mIGEgbnVtYmVyIGlmIGJldHdlZW4gZGlnaXRzCiAgICAgICAgICBpZiAoIGdldENoYXJDbGFzc0lubCggKihwVGV4dC0xKSkgPT0gQ0hfTlVNICYmIGdldENoYXJDbGFzc0lubChjaFRleHROZXh0KSA9PSBDSF9OVU0gICkgewogICAgICAgICAgICBjbFRva2VuUHJvcGVydGllcy5zZXRTcGVjaWFsKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIGlmICghKGdldENoYXJDbGFzc0lubCggKihwVGV4dC0xKSApICYgKENIX05TUCkpKSB7CiAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQgb2YgLCBlLmcuICJhYmMsIgogICAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0LXBXb3JkU3RhcnQsIGNsVG9rZW5Qcm9wZXJ0aWVzLCBiTmV3UGFyYSwgYk5ld1NlbnQsIHVpTmV3bGluZXMgICk7CiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiBhIG5ldyAid29yZCIgY29udGFpbmluZyB0aGUgJycnCiAgICAgICAgICAgIHBXb3JkU3RhcnQgPSBwVGV4dDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIGEgbmV3ICJ3b3JkIiBjb250YWluaW5nIHRoZSAnJycKICAgICAgICAgIHBXb3JkU3RhcnQgPSBwVGV4dDsKICAgICAgICB9CiAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0U3BlY2lhbCgpOwogICAgICAgIC8vIGNoZWNrIGlmIHRoZSBuZXh0IGNoYXIgaXMgZW5kIG9mIGEgLCBvciAsLCwgc2VxdWVuY2UKICAgICAgICBpZiAocFdvcmRTdGFydCAmJiAhKGdldENoYXJDbGFzc0lubCggY2hUZXh0TmV4dCApICYgKENIX05TUCkpKSB7CiAgICAgICAgICAvLyBjcmVhdGUgdGhlICwgb3IgLCwsIHRva2VuCiAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0KzEtcFdvcmRTdGFydCwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyAgKTsKICAgICAgICAgIHBXb3JkU3RhcnQgPSBOVUxMOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSF9DV1M6ICAgIC8vIGNvbmRpdGlvbmFsIHdoaXRlc3BhY2UKICAgICAgICBpZiAoIHBXb3JkU3RhcnQgKSB7CiAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSB3b3JkIGlmIGJldHdlZW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciBmb2xsb3dzCiAgICAgICAgICBpZiAoIChnZXRDaGFyQ2xhc3NJbmwoICoocFRleHQtMSkpICYgKENIX1VQUiB8IENIX0xXUiB8IENIX05VTSApKSAmJgogICAgICAgICAgICAgICAoZ2V0Q2hhckNsYXNzSW5sKCBjaFRleHROZXh0KSAmIChDSF9VUFIgfCBDSF9MV1IgfCBDSF9OVU0gKSkpIHsKICAgICAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0U3BlY2lhbCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0gZWxzZSBpZiAoIShnZXRDaGFyQ2xhc3NJbmwoICoocFRleHQtMSkgKSAmIChDSF9DV1MpKSkgewogICAgICAgICAgICAvLyBjcmVhdGUgdGhlIHRva2VuIGltbWVkaWF0ZWx5IHRvIHRoZSBsZWZ0IG9mICwgZS5nLiAiYWJjLCIKICAgICAgICAgICAgdG9rZW5FbnRyeSggcFdvcmRTdGFydCwgcFdvcmRTdGFydC10ZXh0X3N0YXJ0LCBwVGV4dC1wV29yZFN0YXJ0LCBjbFRva2VuUHJvcGVydGllcywgYk5ld1BhcmEsIGJOZXdTZW50LCB1aU5ld2xpbmVzICApOwogICAgICAgICAgICAvLyB0aGUgc3RhcnQgb2YgYSBuZXcgIndvcmQiIGNvbnRhaW5pbmcgdGhlICcnJwogICAgICAgICAgICBwV29yZFN0YXJ0ID0gcFRleHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiBhIG5ldyAid29yZCIgY29udGFpbmluZyB0aGUgJycnCiAgICAgICAgICBwV29yZFN0YXJ0ID0gcFRleHQ7CiAgICAgICAgfQogICAgICAgIGNsVG9rZW5Qcm9wZXJ0aWVzLnNldFNwZWNpYWwoKTsKICAgICAgICAvLyBjaGVjayBpZiB0aGUgbmV4dCBjaGFyIGlzIGVuZCBvZiBhIC0gb3IgLS0tIHNlcXVlbmNlCiAgICAgICAgaWYgKHBXb3JkU3RhcnQgJiYgIShnZXRDaGFyQ2xhc3NJbmwoIGNoVGV4dE5leHQgKSAmIChDSF9DV1MpKSkgewogICAgICAgICAgLy8gY3JlYXRlIHRoZSAtIG9yIC0tLSB0b2tlbgogICAgICAgICAgdG9rZW5FbnRyeSggcFdvcmRTdGFydCwgcFdvcmRTdGFydC10ZXh0X3N0YXJ0LCBwVGV4dCsxLXBXb3JkU3RhcnQsIGNsVG9rZW5Qcm9wZXJ0aWVzLCBiTmV3UGFyYSwgYk5ld1NlbnQsIHVpTmV3bGluZXMgICk7CiAgICAgICAgICBwV29yZFN0YXJ0ID0gTlVMTDsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ0hfQVBTOiAgIC8vIGFwb3N0cm9waCBpcyBwYXJ0IG9mIHRoZSB3b3JkIHdpdGhpbiB3b3JkcyAobCdvcmVhbCwgVG9tJ3MsIGRvbid0KQogICAgICAgIGlmICggcFdvcmRTdGFydCApIHsKICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHdvcmQgaWYgYmV0d2VlbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIGZvbGxvd3MKICAgICAgICAgIGlmICggKGdldENoYXJDbGFzc0lubCggKihwVGV4dC0xKSkgJiAoQ0hfVVBSIHwgQ0hfTFdSIHwgQ0hfTlVNICkpICYmCiAgICAgICAgICAgICAgIChnZXRDaGFyQ2xhc3NJbmwoIGNoVGV4dE5leHQpICYgKENIX1VQUiB8IENIX0xXUiB8IENIX05VTSApKSkgewogICAgICAgICAgICBjbFRva2VuUHJvcGVydGllcy5zZXRTcGVjaWFsKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIGlmICghKGdldENoYXJDbGFzc0lubCggKihwVGV4dC0xKSApICYgKENIX0FQUykpKSB7CiAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQgb2YgLCBlLmcuICJhYmMsIgogICAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0LXBXb3JkU3RhcnQsIGNsVG9rZW5Qcm9wZXJ0aWVzLCBiTmV3UGFyYSwgYk5ld1NlbnQsIHVpTmV3bGluZXMgICk7CiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiBhIG5ldyAid29yZCIgY29udGFpbmluZyB0aGUgJycnCiAgICAgICAgICAgIHBXb3JkU3RhcnQgPSBwVGV4dDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIGEgbmV3ICJ3b3JkIiBjb250YWluaW5nIHRoZSAnJycKICAgICAgICAgIHBXb3JkU3RhcnQgPSBwVGV4dDsKICAgICAgICB9CiAgICAgICAgY2xUb2tlblByb3BlcnRpZXMuc2V0U3BlY2lhbCgpOwogICAgICAgIC8vIGNoZWNrIGlmIHRoZSBuZXh0IGNoYXIgaXMgZW5kIG9mIGEgJyBvciAnJycgc2VxdWVuY2UKICAgICAgICBpZiAocFdvcmRTdGFydCAmJiAhKGdldENoYXJDbGFzc0lubCggY2hUZXh0TmV4dCApICYgKENIX0FQUykpKSB7CiAgICAgICAgICAvLyBjcmVhdGUgdGhlICcgb3IgJycnIHRva2VuCiAgICAgICAgICB0b2tlbkVudHJ5KCBwV29yZFN0YXJ0LCBwV29yZFN0YXJ0LXRleHRfc3RhcnQsIHBUZXh0KzEtcFdvcmRTdGFydCwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyAgKTsKICAgICAgICAgIHBXb3JkU3RhcnQgPSBOVUxMOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSF9MV1I6IC8vIGFsbCB0aGUgZm9sbG93aW5nIGNhc2VzIGFyZSBoYW5kbGVkIGluIHRoZSBmaXJzdCBsb29wCiAgICAgIGNhc2UgQ0hfVVBSOgogICAgICBjYXNlIENIX05VTToKICAgICAgY2FzZSBDSF9VU0M6CiAgICAgIGNhc2UgQ0hfQ1VSOgogICAgICBkZWZhdWx0OgogICAgICAgIGFzc2VydCggZmFsc2UgKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICArK3BUZXh0OwogICAgfQoKICAgIC8vIGlmIGVuZCBvZiB0ZXh0IGFuZCBzdGlsbCBpbiBhIHdvcmQKICAgIC8vIHNlbmQgdGhlIHdvcmQgdG8gVUlNQQogICAgaWYgKCBwV29yZFN0YXJ0ICkgewogICAgICAvLyBlbmQgb2YgY3VycmVudCB3b3JkCiAgICAgIHRva2VuRW50cnkoIHBXb3JkU3RhcnQsIHBXb3JkU3RhcnQtdGV4dF9zdGFydCwgcFRleHQtcFdvcmRTdGFydCwgY2xUb2tlblByb3BlcnRpZXMsIGJOZXdQYXJhLCBiTmV3U2VudCwgdWlOZXdsaW5lcyAgKTsKICAgICAgcFdvcmRTdGFydCA9IE5VTEw7CiAgICB9CiAgfQoKLy9saW50IC1yZXN0b3JlIDogSW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGVudW0vcG9pbnRlciB0byBib29sCgp9IC8vIG5hbWVzcGFjZSB1aW1hCgovKiA8RU9GPiAqLwoK