diff --git a/serialport/src/main/java/android/serialport/manager/UartProtocolManager.java b/serialport/src/main/java/android/serialport/manager/UartProtocolManager.java new file mode 100644 index 0000000..7b172e4 --- /dev/null +++ b/serialport/src/main/java/android/serialport/manager/UartProtocolManager.java @@ -0,0 +1,117 @@ +cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQubWFuYWdlcjsKCmltcG9ydCBhbmRyb2lkLmNvbnRl +bnQuQ29udGV4dDsKaW1wb3J0IGFuZHJvaWQuc2VyaWFscG9ydC5tb2RlbC5QcmludGVyUmVxdWVz +dE1vZGVsOwppbXBvcnQgYW5kcm9pZC5zZXJpYWxwb3J0Lm1vZGVsLlByaW50ZXJSZXNwb25zZU1v +ZGVsOwppbXBvcnQgYW5kcm9pZC5zZXJpYWxwb3J0LnV0aWxzLkxvZ2dlcjsKaW1wb3J0IGFuZHJv +aWQudXRpbC5Mb2c7CgpwdWJsaWMgY2xhc3MgVWFydFByb3RvY29sTWFuYWdlciB7CiAgICBwcml2 +YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICBwcml2YXRlIHN0YXRpYyBVYXJ0UHJvdG9j +b2xNYW5hZ2VyIG1VYXJ0UHJvdG9jb2xNYW5hZ2VyOwoKICAgIC8vR2V0dGVyL1NldHRlciBWYXJp +YWJsZXMKICAgIHByaXZhdGUgZmluYWwgUHJpbnRlclJlcXVlc3RNb2RlbCBtUHJpbnRlclJlcXVl +c3RNb2RlbDsKCiAgICAvL1RvdGFsIGJ5dGVzCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBU +T1RBTF9CWVRFUyA9IDY0OwoKICAgIC8vVGFzayBJZHMKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg +aW50IFVBUlRfUFJJTlRfUkVRVUVTVF9QUk9DRVNTID0gMTAxOwogICAgcHVibGljIHN0YXRpYyBm +aW5hbCBpbnQgVUFSVF9TVEFSVF9QUk9DRVNTID0gMTAyOwogICAgcHVibGljIHN0YXRpYyBmaW5h +bCBpbnQgVUFSVF9IRUFSVF9CRUFUX1BST0NFU1MgPSAxMDM7CiAgICBwdWJsaWMgc3RhdGljIGZp +bmFsIGludCBVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUyA9IDEwNDsKICAgIHB1YmxpYyBzdGF0aWMg +ZmluYWwgaW50IFVBUlRfR09fUFJJTlRfUFJPQ0VTUyA9IDEwNTsKICAgIHB1YmxpYyBzdGF0aWMg +ZmluYWwgaW50IFVBUlRfRU5EX09GX1BSSU5UX1BST0NFU1MgPSAxMDY7CiAgICBwdWJsaWMgc3Rh +dGljIGZpbmFsIGludCBVQVJUX1BSSU5URVJfQ09PTElOR19QUk9DRVNTID0gMTA3OwogICAgcHVi +bGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9QUklOVF9NT1JFX1BST0NFU1MgPSAxMDg7CiAgICBw +dWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0FTS19GV19WRVJTSU9OX1BST0NFU1MgPSAxMDk7 +CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX1BSSU5UX1JFU1RBUlRfUFJPQ0VTUyA9 +IDIyMjsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZXX1VQR1JBREVfUkVRVUVT +VF9QUk9DRVNTID0gMjAxOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GV19HT19V +UEdSQURFX1BST0NFU1MgPSAyMDI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZX +X0dPX1VQR1JBREVfQUNLX1BST0NFU1MgPSAyMDM7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGlu +dCBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX1BST0NFU1MgPSAyMDQ7CiAgICBwdWJsaWMgc3RhdGlj +IGZpbmFsIGludCBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX0FDS19QUk9DRVNTID0gMjA1OwoKICAg +IC8vUHJpbnQgU1MgQ29tbWFuZAogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9TTUFS +VF9TSEVFVF9QUklOVF9QUk9DRVNTID0gMzAxOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQg +VUFSVF9TTUFSVF9TSEVFVF9FTkRfT0ZfUFJPQ0VTUyA9IDMwMjsKCiAgICAvL0ZhY3RvcnkgTW9k +ZQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9SRVFVRVNUX0NNRF9QUk9DRVNT +ID0gMzAxOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9SRVFVRVNUX0FDS19Q +Uk9DRVNTID0gMzAyOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9CVVJOX0lO +X0NNRF9QUk9DRVNTID0gMzAzOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9C +VVJOX0lOX0FDS19QUk9DRVNTID0gMzA0OwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFS +VF9GTV9DQU1FUkFfVEVTVF9DTURfUFJPQ0VTUyA9IDMwNTsKICAgIHB1YmxpYyBzdGF0aWMgZmlu +YWwgaW50IFVBUlRfRk1fQ0FNRVJBX1RFU1RfQUNLX1BST0NFU1MgPSAzMDY7CiAgICBwdWJsaWMg +c3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX0ZRQ19DTURfUFJPQ0VTUyA9IDMwNzsKICAgIHB1Ymxp +YyBzdGF0aWMgZmluYWwgaW50IFVBUlRfRk1fRlFDX0FDS19QUk9DRVNTID0gMzA4OwogICAgcHVi +bGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9GTV9TSElQUElOR19DTURfUFJPQ0VTUyA9IDMwOTsK +ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVBUlRfRk1fU0hJUFBJTkdfQUNLX1BST0NFU1Mg +PSAzMTA7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX1ZFUl9BU0tfQ01EX1BS +T0NFU1MgPSAzMTE7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX1ZFUl9BU0tf +QUNLX1BST0NFU1MgPSAzMTI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVQVJUX0ZNX1JF +U0VUX0NNRF9QUk9DRVNTID0gMzEzOwogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUFSVF9G +TV9SRVNFVF9BQ0tfUFJPQ0VTUyA9IDMxNDsKCgogICAgLy9EZWZhdWx0IGJ5dGUKICAgIHB1Ymxp +YyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfQllURSA9IDB4MDA7CiAgICBwdWJsaWMgc3RhdGlj +IGZpbmFsIGludCBTVEFSVF9DT0RFX09ORSA9IDB4MUI7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFs +IGludCBTVEFSVF9DT0RFX1RXTyA9IDB4MkE7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBT +VEFSVF9DT0RFX1RIUkVFID0gMHg0MzsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVJU +X0NPREVfRk9VUiA9IDB4NDE7CgoKCiAgICBwcml2YXRlIFVhcnRQcm90b2NvbE1hbmFnZXIoQ29u +dGV4dCBjb250ZXh0LCBCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICB0aGlzLm1Db250ZXh0ID0g +Y29udGV4dDsKICAgICAgICBtUHJpbnRlclJlcXVlc3RNb2RlbCA9IG5ldyBQcmludGVyUmVxdWVz +dE1vZGVsKCkuc2V0UHJvY2Vzc1Rhc2tJRChidWlsZGVyLmdldE1vZGVsKCkuZ2V0UHJvY2Vzc1Rh +c2tJRCgpKS5zZXRQYXlsb2FkKGJ1aWxkZXIuZ2V0TW9kZWwoKS5nZXRQYXlsb2FkKCkpLnNldE51 +bWJlck9mQ29waWVzKGJ1aWxkZXIuZ2V0TW9kZWwoKS5nZXROdW1iZXJPZkNvcGllcygpKS5zZXRG +aWxlTmFtZTEoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lMSgpKS5zZXRGaWxlTmFtZTMo +YnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lMygpKS5zZXRGaWxlTmFtZTQoYnVpbGRlci5n +ZXRNb2RlbCgpLmdldEZpbGVOYW1lNCgpKS5zZXRGaWxlTmFtZTUoYnVpbGRlci5nZXRNb2RlbCgp +LmdldEZpbGVOYW1lNSgpKS5zZXRGaWxlTmFtZTYoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVO +YW1lNigpKS5zZXRGaWxlTmFtZTcoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lNygpKS5z +ZXRGaWxlTmFtZTgoYnVpbGRlci5nZXRNb2RlbCgpLmdldEZpbGVOYW1lOCgpKTsKICAgIH0KCiAg +ICBwdWJsaWMgc3RhdGljIFVhcnRQcm90b2NvbE1hbmFnZXIgZ2V0SW5zdGFuY2UoQ29udGV4dCBj +b250ZXh0LCBCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgICByZXR1cm4gbmV3IFVhcnRQcm90b2Nv +bE1hbmFnZXIoY29udGV4dCwgYnVpbGRlcik7CiAgICB9CgogICAgcHVibGljIENvbnRleHQgZ2V0 +Q29udGV4dCgpIHsKICAgICAgICByZXR1cm4gbUNvbnRleHQ7CiAgICB9CgoKICAgIHB1YmxpYyBz +dGF0aWMgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250 +ZXh0OwogICAgICAgIHByaXZhdGUgUHJpbnRlclJlcXVlc3RNb2RlbCBtb2RlbDsKCiAgICAgICAg +cHVibGljIEJ1aWxkZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgICAgIHRoaXMubUNvbnRl +eHQgPSBjb250ZXh0OwogICAgICAgICAgICBtb2RlbCA9IG5ldyBQcmludGVyUmVxdWVzdE1vZGVs +KCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRQcmludGVyUmVxdWVzdE1v +ZGVsKFByaW50ZXJSZXF1ZXN0TW9kZWwgbW9kZWwpIHsKICAgICAgICAgICAgdGhpcy5tb2RlbCA9 +IG1vZGVsOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHB1Ymxp +YyBQcmludGVyUmVxdWVzdE1vZGVsIGdldE1vZGVsKCkgewogICAgICAgICAgICByZXR1cm4gbW9k +ZWw7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgVWFydFByb3RvY29sTWFuYWdlciBidWlsZCgp +IHsKICAgICAgICAgICAgcmV0dXJuIFVhcnRQcm90b2NvbE1hbmFnZXIuZ2V0SW5zdGFuY2UobUNv +bnRleHQsIHRoaXMpOwogICAgICAgIH0KCiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgU3RhcnQg +Q29kZSBhbmQgQ3VzdG9tZXIgQ29kZQogICAgICoKICAgICAqIEByZXR1cm4gYnl0ZSBhcnJheQog +ICAgICovCiAgICBwdWJsaWMgYnl0ZVtdIGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKCkgewogICAg +ICAgIHJldHVybiBuZXcgYnl0ZVtdeyhieXRlKSAweDFCLCAoYnl0ZSkgMHgyQSwgKGJ5dGUpIDB4 +NDMsIChieXRlKSAweDQxfTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEhlYXJ0QmVhdFBy +b3RvY29sKCkgewogICAgICAgIC8vMHgxQgkweDJBCTB4NDMJMHg0MQkweDAwCTB4MDEJMHgwNAkw +eDU1CiAgICAgICAgYnl0ZVtdIHF1ZXJ5RGF0YSA9IG5ldyBieXRlW1RPVEFMX0JZVEVTXTsKICAg +ICAgICBxdWVyeURhdGFbMF0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzBdOwogICAgICAg +IHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgcXVl +cnlEYXRhWzJdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsyXTsKICAgICAgICBxdWVyeURh +dGFbM10gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzNdOwogICAgICAgIHF1ZXJ5RGF0YVs0 +XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVs1XSA9IChieXRlKSAweDAxOwogICAg +ICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweDA0OwogICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChi +eXRlKSAweDU1OwogICAgICAgIHF1ZXJ5RGF0YVs4XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1 +ZXJ5RGF0YVs5XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVsxMF0gPSAoYnl0ZSkg +MHgwMDsKICAgICAgICBxdWVyeURhdGFbMTFdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlE +YXRhWzEyXSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVsxM10gPSAoYnl0ZSkgMHgw +MDsKICAgICAgICBxdWVyeURhdGFbMTRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRh +WzE1XSA9IChieXRlKSAweDAwOwoKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAg +IHB1YmxpYyBieXRlW10gZ2V0U3RhcnRVcFByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVy +eURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0 +U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBnZXRTdGFy +dEFuZEN1c3RvbWVyQ29kZSgpWzFdOwogICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5k +Q3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgcXVlcnlEYXRhWzNdID0gZ2V0U3RhcnRBbmRDdXN0 +b21lckNvZGUoKVszXTsKICAgICAgICBxdWVyeURhdGFbNF0gPSAoYnl0ZSkgMHgwMTsKICAgICAg +ICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNl0gPSAoYnl0 +ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwMDsKICAgICAgICByZXR1 +cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gc2VuZFByaW50UmVxdWVzdFBy +b3RvY29sKCkgewogICAgICAgIExvZ2dlci5kKCJOby5vZiBDb3A6ICIgKyBtUHJpbnRlclJlcXVl +c3RNb2RlbC5nZXROdW1iZXJPZkNvcGllcygpKTsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0g +bmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5k +Q3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0 +b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVy +Q29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2Rl +KClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlE +YXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7 +CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzhd +ID0gKGJ5dGUpIG1QcmludGVyUmVxdWVzdE1vZGVsLmdldE51bWJlck9mQ29waWVzKCk7CiAgICAg +ICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIHNlbmRJbWFnZUlu +Zm9Qcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxf +QllURVNdOwogICAgICAgIGlmIChtUHJpbnRlclJlcXVlc3RNb2RlbCAhPSBudWxsKSB7CiAgICAgICAgICAgIGJ5dGVbXSBhcnJheSA9IG1QcmludGVyUmVxdWVzdE1vZGVsLmdldEZpbGVOYW1lMSgpLmdldEJ5dGVzKCk7CiAgICAgICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgICAgIHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgICAgIHF1ZXJ5RGF0YVs0XSA9IChieXRlKSAweDAwOwogICAgICAgICAgICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDAxOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1hdGgubWluKGFycmF5Lmxlbmd0aCwgOCk7IGkrKykgeyBxdWVyeURhdGFbOCArIGldID0gYXJyYXlbaV07IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEdvUHJpbnRBQ0tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEVuZE9mUHJpbnRBQ0tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDM7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEZXVXBncmFkZVJlcXVlc3RQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDM7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGdldEZXR29VcGdyYWRlQUNLUHJvdG9jb2woKSB7CiAgICAgICAgYnl0ZVtdIHF1ZXJ5RGF0YSA9IG5ldyBieXRlW1RPVEFMX0JZVEVTXTsKICAgICAgICBxdWVyeURhdGFbMF0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzBdOwogICAgICAgIHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgcXVlcnlEYXRhWzJdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsyXTsKICAgICAgICBxdWVyeURhdGFbM10gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzNdOwogICAgICAgIHF1ZXJ5RGF0YVs0XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVs1XSA9IChieXRlKSAweDAxOwogICAgICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweDAzOwogICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDAyOwogICAgICAgIHJldHVybiBxdWVyeURhdGE7CiAgICB9CgogICAgcHVibGljIGJ5dGVbXSBnZXRGV0VuZE9mVXBncmFkZUFDS1Byb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzFdOwogICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgcXVlcnlEYXRhWzNdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVszXTsKICAgICAgICBxdWVyeURhdGFbNF0gPSAoYnl0ZSkgMHgwMDsKICAgICAgICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNl0gPSAoYnl0ZSkgMHgwMzsKICAgICAgICBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwMzsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gZ2V0UHJpbnRlckNvb2xpbmdBQ0tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVswXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMF07CiAgICAgICAgcXVlcnlEYXRhWzFdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsxXTsKICAgICAgICBxdWVyeURhdGFbMl0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzJdOwogICAgICAgIHF1ZXJ5RGF0YVszXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbM107CiAgICAgICAgcXVlcnlEYXRhWzRdID0gKGJ5dGUpIDB4MDA7CiAgICAgICAgcXVlcnlEYXRhWzVdID0gKGJ5dGUpIDB4MDE7CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4MDI7CiAgICAgICAgcXVlcnlEYXRhWzddID0gKGJ5dGUpIDB4MEY7CiAgICAgICAgcmV0dXJuIHF1ZXJ5RGF0YTsKICAgIH0KCiAgICBwdWJsaWMgYnl0ZVtdIGFza0Z3VmVyc2lvblByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzFdOwogICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgcXVlcnlEYXRhWzNdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVszXTsKICAgICAgICBxdWVyeURhdGFbNF0gPSAoYnl0ZSkgMHgwMDsKICAgICAgICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNl0gPSAoYnl0ZSkgMHgwMzsKICAgICAgICBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHhGRjsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gc2VuZFByaW50U21hcnRTaGVldFByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzBdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVswXTsKICAgICAgICBxdWVyeURhdGFbMV0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzFdOwogICAgICAgIHF1ZXJ5RGF0YVsyXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMl07CiAgICAgICAgcXVlcnlEYXRhWzNdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVszXTsKICAgICAgICBxdWVyeURhdGFbNF0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNV0gPSAoYnl0ZSkgMHgwMTsKICAgICAgICBxdWVyeURhdGFbNl0gPSAoYnl0ZSkgMHgwMjsKICAgICAgICBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHhBQTsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gZ2V0RmFjdG9yeU1vZGVSZXF1ZXN0UHJvdG9jb2woKSB7CiAgICAgICAgYnl0ZVtdIHF1ZXJ5RGF0YSA9IG5ldyBieXRlW1RPVEFMX0JZVEVTXTsKICAgICAgICBxdWVyeURhdGFbMF0gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzBdOwogICAgICAgIHF1ZXJ5RGF0YVsxXSA9IGdldFN0YXJ0QW5kQ3VzdG9tZXJDb2RlKClbMV07CiAgICAgICAgcXVlcnlEYXRhWzJdID0gZ2V0U3RhcnRBbmRDdXN0b21lckNvZGUoKVsyXTsKICAgICAgICBxdWVyeURhdGFbM10gPSBnZXRTdGFydEFuZEN1c3RvbWVyQ29kZSgpWzNdOwogICAgICAgIHF1ZXJ5RGF0YVs0XSA9IChieXRlKSAweDAwOwogICAgICAgIHF1ZXJ5RGF0YVs1XSA9IChieXRlKSAweDAxOwogICAgICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweEYwOwogICAgICAgIHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDAwOwogICAgICAgIHJldHVybiBxdWVyeURhdGE7CiAgICB9CgogICAgcHVibGljIGJ5dGVbXSBnZXRGYWN0b3J5TW9kZUJ1cm5JblByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4RjA7IHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDAxOwogICAgICAgIHJldHVybiBxdWVyeURhdGE7CiAgICB9CgogICAgcHVibGljIGJ5dGVbXSBnZXRGYWN0b3J5TW9kZUNhbWVyYVRlc3RQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweEYwOyBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwMjsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gZ2V0RmFjdG9yeU1vZGVGUUNQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweEYwOyBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwMzsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gZ2V0RmFjdG9yeU1vZGVTaGlwcGluZ1Byb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4RjA7IHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweDA0OwogICAgICAgIHJldHVybiBxdWVyeURhdGE7CiAgICB9CgogICAgcHVibGljIGJ5dGVbXSBnZXRGYWN0b3J5TW9kZVZlcnNpb25Bc2tQcm90b2NvbCgpIHsKICAgICAgICBieXRlW10gcXVlcnlEYXRhID0gbmV3IGJ5dGVbVE9UQUxfQllURVNdOwogICAgICAgIHF1ZXJ5RGF0YVs2XSA9IChieXRlKSAweEYwOyBxdWVyeURhdGFbN10gPSAoYnl0ZSkgMHgwNTsKICAgICAgICByZXR1cm4gcXVlcnlEYXRhOwogICAgfQoKICAgIHB1YmxpYyBieXRlW10gZ2V0RmFjdG9yeU1vZGVSZXNldFByb3RvY29sKCkgewogICAgICAgIGJ5dGVbXSBxdWVyeURhdGEgPSBuZXcgYnl0ZVtUT1RBTF9CWVRFU107CiAgICAgICAgcXVlcnlEYXRhWzZdID0gKGJ5dGUpIDB4RjA7IHF1ZXJ5RGF0YVs3XSA9IChieXRlKSAweEZGOwogICAgICAgIHJldHVybiBxdWVyeURhdGE7CiAgICB9CgogICAgcHVibGljIFByaW50ZXJSZXNwb25zZU1vZGVsIGZpbmRQcmludGVyUmVzcG9uc2UoKSB7CiAgICAgICAgUHJpbnRlclJlc3BvbnNlTW9kZWwgcmVzcG9uc2VNb2RlbCA9IG51bGw7CiAgICAgICAgaWYgKG1QcmludGVyUmVxdWVzdE1vZGVsICE9IG51bGwpIHsKICAgICAgICAgICAgaW50IHRhc2tJZCA9IG1QcmludGVyUmVxdWVzdE1vZGVsLmdldFByb2Nlc3NUYXNrSUQoKTsKICAgICAgICAgICAgYnl0ZVtdIHBheWxvYWQgPSBtUHJpbnRlclJlcXVlc3RNb2RlbC5nZXRQYXlsb2FkKCk7CiAgICAgICAgICAgIGlmIChwYXlsb2FkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmICh0YXNrSWQgPT0gVUFSVF9IRUFSVF9CRUFUX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IFByaW50SW1hZ2VQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLmRvSGVhcnRCZWF0UHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfUFJJTlRfUkVRVUVTVF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBQcmludEltYWdlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5kb1ByaW50UmVxdWVzdEFDS1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gUHJpbnRJbWFnZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9Hb1ByaW50QUNLUGV0UHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfR09fUFJJTlRfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gUHJpbnRJbWFnZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9FbmRPZlByaW50UHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfRU5EX09GX1BSSU5UX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IFByaW50SW1hZ2VQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLmRvRW5kT2ZQcmludFByb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZXX1VQR1JBREVfUkVRVUVTVF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGV1VwZGF0ZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9GV1VwZ3JhZGVSZXF1ZXN0QUNLUGV0UHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfRldfR09fVVBHUkFERV9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGV1VwZGF0ZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9GV0dvVXBncmFkZVByb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IEZXVXB +kYXRlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5kb0ZXRW5kT2ZVcGdyYWRlUHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfUFJJTlRFUl9DT09MSU5HX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IFByaW50SW1hZ2VQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLmRvUHJpbnRlcklzQ29vbGluZ1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0FTS19GV19WRVJTSU9OX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IFByaW50SW1hZ2VQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLmRvRldWZXJzaW9uUHJvY2VzcyhwYXlsb2FkKTsgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGFza0lkID09IFVBUlRfU01BUlRfU0hFRVRfUFJJTlRfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gUHJpbnRJbWFnZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9QcmludFNtYXJ0U2hlZXRQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9TTUFSVF9TSEVFVF9FTkRfT0ZfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gUHJpbnRJbWFnZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkuZG9FbmRPZlNtYXJ0U2hlZXRQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9SRVFVRVNUX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VGTVJlcXVlc3RBQ0tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9CVVJOX0lOX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VCdXJuSW5BY2tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9GUUNfQ01EX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IEZhY3RvcnlNb2RlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5wYXJzZUZRQ0Fja1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZNX1NISVBQSU5HX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VTaGlwcGluZ0Fja1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZNX1ZFUl9BU0tfQ01EX1BST0NFU1MpIHsgcmVzcG9uc2VNb2RlbCA9IEZhY3RvcnlNb2RlUHJvY2Vzc01hbmFnZXIuZ2V0SW5zdGFuY2UoZ2V0Q29udGV4dCgpKS5wYXJzZVZlcnNpb25Bc2tBY2tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXNrSWQgPT0gVUFSVF9GTV9SRVNFVF9DTURfUFJPQ0VTUykgeyByZXNwb25zZU1vZGVsID0gRmFjdG9yeU1vZGVQcm9jZXNzTWFuYWdlci5nZXRJbnN0YW5jZShnZXRDb250ZXh0KCkpLnBhcnNlVmVyc2lvbkFza0Fja1Byb2Nlc3MocGF5bG9hZCk7IH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhc2tJZCA9PSBVQVJUX0ZNX0NBTUVSQV9URVNUX0NNRF9QUk9DRVNTKSB7IHJlc3BvbnNlTW9kZWwgPSBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyLmdldEluc3RhbmNlKGdldENvbnRleHQoKSkucGFyc2VDYW1lcmFBY2tQcm9jZXNzKHBheWxvYWQpOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlTW9kZWw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGFza0lkTmFtZShpbnQgaWQpIHsKICAgICAgICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgICAgIGNhc2UgVUFSVF9QUklOVF9SRVFVRVNUX1BST0NFU1M6IHJldHVybiAiVUFSVF9QUklOVF9SRVFVRVNUX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfU1RBUlRfUFJPQ0VTUzogcmV0dXJuICJVQVJUX1NUQVJUX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfSEVBUlRfQkVBVF9QUk9DRVNTOiByZXR1cm4gIlVBUlRfSEVBUlRfQkVBVF9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUzogcmV0dXJuICJVQVJUX0lNQUdFX0lORk9fUFJPQ0VTUyI7CiAgICAgICAgICAgIGNhc2UgVUFSVF9HT19QUklOVF9QUk9DRVNTOiByZXR1cm4gIlVBUlRfR09fUFJJTlRfUFJPQ0VTUyI7CiAgICAgICAgICAgIGNhc2UgVUFSVF9FTkRfT0ZfUFJJTlRfUFJPQ0VTUzogcmV0dXJuICJVQVJUX0VORF9PRl9QUklOVF9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX1BSSU5URVJfQ09PTElOR19QUk9DRVNTOiByZXR1cm4gIlVBUlRfUFJJTlRFUl9DT09MSU5HX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfUFJJTlRfTU9SRV9QUk9DRVNTOiByZXR1cm4gIlVBUlRfUFJJTlRfTU9SRV9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0FTS19GV19WRVJTSU9OX1BST0NFU1M6IHJldHVybiAiVUFSVF9BU0tfRldfVkVSU0lPTl9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX1VQR1JBREVfUkVRVUVTVF9QUk9DRVNTOiByZXR1cm4gIlVBUlRfRldfVVBHUkFERV9SRVFVRVNUX1BST0NFU1MiOwogICAgICAgICAgICBjYXNlIFVBUlRfRldfR09fVVBHUkFERV9QUk9DRVNTOiByZXR1cm4gIlVBUlRfRldfR09fVVBHUkFERV9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX0dPX1VQR1JBREVfQUNLX1BST0NFU1M6IHJldHVybiAiVUFSVF9GV19HT19VUEdSQURFX0FDS19QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX1BST0NFU1M6IHJldHVybiAiVUFSVF9GV19FTkRfT0ZfVVBHUkFERV9QUk9DRVNTIjsKICAgICAgICAgICAgY2FzZSBVQVJUX0ZXX0VORF9PRl9VUEdSQURFX0FDS19QUk9DRVNTOiByZXR1cm4gIlVBUlRfRldfRU5EX09GX1VQR1JBREVfQUNLX1BST0NFU1MiOwogICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gIlVOS05PV04iOwogICAgICAgIH0KICAgIH0KfQo= \ No newline at end of file