LyoqCiAqIEBmaWxlIG5ldGFwaS5oCiAqIEBicmllZiBQdWJsaWMgQVBJcyBvZiBTYW5lY2hpcHMsIGxpbnV4IG5ldHdvcmsgZXh0ZXJuYWwgaW50ZXJmYWNlCiAqCiAqIENvcHlyaWdodCAoQykgMjAxNyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4KICogQGF1dGhvciBMaW54dSBHZWJpbgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCiNpZm5kZWYgX19ORVRBUElfSF9fCiNkZWZpbmUgX19ORVRBUElfSF9fCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgaGVhZGVyIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaWZuZGVmIERPWFlHRU5fU0hPVUxEX1NLSVBfVEhJUwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm8gZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioKICogQGJyaWVmIE5W1rW1xLOktsijrM6qwcu92sqh1bu/1bzkyrnTw9XiuPa66qOsyPTKudPDTlZfTUFYX0tFWV9MRU7T0L/JxNy74dTss8nVu9S9vecKICovCiNkZWZpbmUJTlZfTkFNRV9MRU4gICAzMAoKI2RlZmluZSBSSjQ1X0FMTF9PVVQJMHgwMAojZGVmaW5lIFJKNDVfTEFOX0lOCQkweDAxCiNkZWZpbmUgUko0NV9XQU5fSU4JCTB4MDIKI2RlZmluZSBSSjQ1X0FMTF9JTgkJMHgwMwoKI2RlZmluZSBVU0JfTEFOX09VVCAgICAgMHgwMAojZGVmaW5lIFVTQl9MQU5fSU4JCTB4MDEKCgoKLyoqCiAqIEBicmllZiC5qWF0z+C52NOm08O9+LPMtffTw834wue907/ayrG4s9a1o6zWuMq+UERQILyku+61xLeixvDOu9bDo6y9+Lb4uanN+MLnxNqyv7340NCyu82s1+nN+LrNwrfTycXk1sMKICogQHBhcmFtIFBEUF9MT0NBTCCx7cq+ysexvrXY06bTw7eixvC1xFBEULyku+6jrMjnssrQxaGiVm9MVEW1yAogKiBAcGFyYW0gUERQX0VYVCCx7cq+ysfTybfHsb66y8Tat6LG8LXEQVTD/MHuwfezzKOsyOe087Dlt6LG8LXEQVTD/MHuo6zO0sPHusvE2r321/fNuLSro6y0y8qx0OjSqrbUzfi/2r340NDWscGso7sKICogQHBhcmFtIFBEUF9OT1JNQUwgse3KvsrHsb66y7XEYXRzZXJ2ZXK3osbwtcRQRFC8pLvuo6zTw9PaTkFU16q7u7XEzeLN+L/aCiAqIEBwYXJhbSBQRFBfUFBQILHtyr7Kx7G+usu1xFBQUM/gudi1xFBEULyku+6jrLOjvPvT2sSjv+m1xFBQULmmxNzQ6MfzCiAqLwojZGVmaW5lIFBEUF9MT0NBTCAgICAgMAojZGVmaW5lIFBEUF9FWFQgICAgICAgMQojZGVmaW5lIFBEUF9OT1JNQUwgICAgMgojZGVmaW5lIFBEUF9QUFAgICAgICAgMwoKI2RlZmluZSAgIE5PTkVfQVVUSCAgICAgICAgICAgMAojZGVmaW5lICAgUEFQX0FVVEggICAgICAgICAgICAxCiNkZWZpbmUgICBDSEFQX0FVVEggICAgICAgICAgIDIKI2RlZmluZSAgIFBBUF9DSEFQX0FVVEggICAgICAgMwojZGVmaW5lICAgUFBQX05PTkVfQVVUSCAgICAgICA0CiNkZWZpbmUgICBQUFBfQ0hBUF9BVVRIICAgICAgIDUKI2RlZmluZSAgIFBQUF9QQVBfQVVUSCAgICAgICAgUEFQX0FVVEgKCi8qKgogKiBAYnJpZWYgSVBWNLXY1rezpLbIyc/P3gogKi8KI2RlZmluZSBJUFY0QURETEVOX01BWCAgICAgICAgIDE2CgovKioKICogQGJyaWVmIElQVja12Na3s6S2yMnPz94KICovCiNkZWZpbmUgSVBWNkFERExFTl9NQVggICAgICAgICA0NgoKLyoqCiAqIEBicmllZiBNQUO12Na3s6S2yMnPz94KICovCiNkZWZpbmUgTUFYX01BQ0FERFJfTEVOIAkJMTQKCi8qKgogKiBAYnJpZWYgTUFDtdjWt7OktsgKICovCiNkZWZpbmUgTUFDX0FERFJfTEVOIDE4CgovKioKICogQGJyaWVmINb3u/rD+7OktsgKICovCiNkZWZpbmUgSE9TVE5BTUVfTEVOIDE1MAoKLyoqCiAqIEBicmllZiDN+Na3s6S2yAogKi8KI2RlZmluZSBTSVRFX0xFTiA0MDAKCgovKioKICogQGJyaWVmIFBQUETKudPDtcS66rao0uUKICogQHBhcmFtIE5VTV9QUFBEX0FVVEgg0ru49nBwcL34s8zWp7PWtcTTw7unyv3BvwogKiBAcGFyYW0gVVNFUl9NQVgg08O7p8P7u/LV38z01b1pZLXEs6S2yMnPz94KICogQHBhcmFtIFBXX01BWCDD3MLrtcSzpLbIyc/P3gogKiBAcGFyYW0gQ0hBTExFTkdFX01BWCDM9NW9u9jTpsnPz94KICovCiNkZWZpbmUgTlVNX1BQUERfQVVUSAkJMQojZGVmaW5lIFVTRVJfTUFYCQkJNTAKI2RlZmluZSBQV19NQVgJCQkJNTAKI2RlZmluZSBDSEFMTEVOR0VfTUFYCQk1MAoKCi8qKgoqIEBicmllZiC2qNLlUERQvKS77sDg0M0KKiBAcGFyYW0gVjRWNl9JTlZBTElEILP1yrzWtaOssru9+NDQyM66zrLZ1/cKKiBAcGFyYW0gVjRfVkFMSUQgttRWNL340NCy2df3o6yw/MCovKS77rrNyKW77goqIEBwYXJhbSBWNl9WQUxJRCC21FY2vfjQ0LLZ1/ejrLD8wKi8pLvuus3IpbvuCiogQHBhcmFtIFY0Nl9WQUxJRCC21FY0us1WNr340NCy2df3o6yw/MCovKS77rrNyKW77goqLwplbnVtIGlwdjR2Nl9mbGFnIHsKCVY0VjZfSU5WQUxJRCA9IDB4MDAsCglWNF9WQUxJRCwKCVY2X1ZBTElELAoJVjQ2X1ZBTElELAp9OwoKLyoqCiogQGJyaWVmILao0uXN+L/a17TMrAoqIEBwYXJhbSBERVZfU1RBVEVfSURMRSDN+MLnyeixuLSm09q/1c/Q17TMrAoqIEBwYXJhbSBERVZfU1RBVEVfQ09OTkVDVCDN+MLnyeixuLSm09q78cihtdjWt9e0zKwKKiBAcGFyYW0gREVWX1NUQVRFX1dPUktJTkcgzfjC58nosbi78cihtdjWt83qs8mjrLSm09q5pNf317TMrAoqIEBwYXJhbSBERVZfU1RBVEVfREVBRCDN+MLnyeixuLSm09rN+MLnway907bPv6rXtMysCiovCmVudW0gZW1EZXZfU3RhdGUgewoJREVWX1NUQVRFX0lETEUsCglERVZfU1RBVEVfQ09OTkVDVCwKCURFVl9TVEFURV9XT1JLSU5HLAoJREVWX1NUQVRFX0RFQUQsCn07CgovKioKKiBicmllZiAgtqjS5cv509C1xMTazeLN+L/aoaK8tsGqtcjN+MLnyeixuElEuurWtQoqIEBwYXJhbSBQU19ORVRfREVWIFBTIM34wufJ6LG4serKtqOstbHUy9DQ1NpBULrLyrGjrMbkttTTprXEzfjC58nosbjOqlVTQqGiRERSTkVUtcjQ6cTis/a1xM34wufJ6LG4CiogQHBhcmFtIFBTX0VYVF9ERVYxINPrUFO8tsGqtcTN+MLnyeixuKOss6O8+9Payv2+3b+o0M7MrKOs0ruw486qVVNCzu/A7c2otcCjrNKyv8nE3MrHubLP7UREUrXIzai1wKOstau5ss/tRERSzai1wM7eyMiy5bDOysK8/snPsagKKiBAcGFyYW0gUFNfRVhUX0RFVjIgxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUFNfRVhUX0RFVjMgxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUFNfRVhUX0RFVjQgxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUFNfRVhUX0RFVjUgxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUFNfRVhUX0RFVjYgxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUFNfRVhUX0RFVjcgxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUFNfRVhUX0RFVjggxL/HsNans9YxLTi1xENJRLnYwaoKKiBAcGFyYW0gUko0NV9XQU5fREVWIFJKNDXN4s34v9rJ6LG4serKtqOsz+C21NPaUko0NV9MQU5fREVWo6zTxc/Iyrax8KOs0vLOqs3izfi/2tans9bE2s3izfjX1Lavx9C7uwoqIEBwYXJhbSBSSjQ1X0xBTl9ERVYgUko0NcTazfi/2snosbix6sq2o6y99tPD09pSSjQ1xNrN4s34v9rNrMqxtObU2rOhvrAKKiBAcGFyYW0gU1dfV0FOX0RFViBSZWFsdGVrIHN3aXRjaCDN4s34v9rJ6LG4serKtqOs1qez1sjIsuWwzgoqIEBwYXJhbSBTV19MQU5fREVWIFJlYWx0ZWsgc3dpdGNoIM3izfi/2snosbix6sq2o6zWp7PWyMiy5bDOCiogQHBhcmFtIFdJRklfV0FOX0RFViBzdGF0aW9uzeLN+L/ayeixuLHqyrYKKiBAcGFyYW0gV0lGSV9MQU5fREVWIHN0YXRpb27E2s34v9rJ6LG4serKtgoqIEBwYXJhbSBVU0JfTEFOX0RFViBVU0LE2s34v9rJ6LG4serKtgoqIEBwYXJhbSBOT19ERVYgyLHKoc3izfi/2s6qv9XKsbryserKtgoqLwplbnVtIGRldl9JRCB7CglQU19ORVRfREVWLAoJUFNfRVhUX0RFVjEsCglQU19FWFRfREVWMiwKCVBTX0VYVF9ERVYzLAoJUFNfRVhUX0RFVjQsCglQU19FWFRfREVWNSwKCVBTX0VYVF9ERVY2LAoJUFNfRVhUX0RFVjcsCglQU19FWFRfREVWOCwKCVJKNDVfV0FOX0RFViwKCVJKNDVfTEFOX0RFViwKCVNXX1dBTl9ERVYsCglTV19MQU5fREVWLAoJV0lGSV9XQU5fREVWLAoJV0lGSV9MQU5fREVWLAoJVVNCX0xBTl9ERVYsCglOT19ERVYsCn07CgovKioKKiBAYnJpZWYgzeLN+L/awarN+MqnsNy1xNSt0vJJRLrq1rUKKiBAcGFyYW0gVElNRV9PVVQgway907OsyrEKKi8KZW51bSBkaWFsZmFpbF9yZWFzb25fSUQgewoJVElNRV9PVVQgPSAwLAp9OwoKLyoqCiAqIEBicmllZiDN+L/atcRpcDQ2tci12Na30MXPogogKiBAcGFyYW0gaXA0NmZsYWcgaXB2NC9pcHY2ILHq1r7OuwogKiBAcGFyYW0gaXAgaXB2NLXY1rcKICogQHBhcmFtIGdhdGV3YXkgzfi52LXY1rcKICogQHBhcmFtIG5ldG1hc2sg0drC6wogKiBAcGFyYW0gcHJpX2RucyDK19GhZG5ztdjWtwogKiBAcGFyYW0gc2VjX2RucyC0ztGhZG5ztdjWtwogKiBAcGFyYW0gIGlwNiBpcHY2ILXY1rcKICogQHBhcmFtIGdhdGV3YXk2IGlwdjYgzfi52LXY1rcKICogQHBhcmFtICBwcmlfZG5zNiBpcHY2IMrX0aFkbnO12Na3CiAqIEBwYXJhbSAgc2VjX2RuczYgaXB2NiC0ztGhZG5ztdjWtwogKiBAbm90ZSBpcDQ2ZmxhZyC1xMih1rWyzr+8VjQ2X1ZBTElEtci66ta1CiAqLwpzdHJ1Y3QgbmV0ZGV2X2FjdF9pbmZvIHsKCXVuc2lnbmVkIGNoYXIgIGlwNDZmbGFnOwoJY2hhciBpcFtJUFY0QURETEVOX01BWF07CgljaGFyIGdhdGV3YXlbSVBWNEFERExFTl9NQVhdOwoJY2hhciBuZXRtYXNrW0lQVjRBRERMRU5fTUFYXTsKCWNoYXIgcHJpX2Ruc1tJUFY0QURETEVOX01BWF07CgljaGFyIHNlY19kbnNbSVBWNEFERExFTl9NQVhdOwoJY2hhciBpcDZbSVBWNkFERExFTl9NQVhdOwoJY2hhciBnYXRld2F5NltJUFY2QURETEVOX01BWF07CgljaGFyIHByaV9kbnM2W0lQVjZBRERMRU5fTUFYXTsKCWNoYXIgc2VjX2RuczZbSVBWNkFERExFTl9NQVhdOwp9OwoKLyoqCiAqIEBicmllZiC94bm5zOXLtcP3OlBEULyku+7Qxc+io6zXqNPD09pQU83izfi/2qOsxuTW0GNpZNPD09rKtrHwsrvNrLXEUFPN4s34v9oKICogQHBhcmFtIGNfaWQgUERQzqjSu7HqyrYKICogQHBhcmFtIHBkcF90eXBlIHBkcCC8pLvuwODQzQogKiBAcGFyYW0gYWN0X2luZm8gzfi/2rXY1re1yNDFz6IKICogQG5vdGUgcGRwIHR5cGUgtcTIoda1ss68+1BEUF9MT0NBTLXIuurWtQogKi8Kc3RydWN0IHBkcF9hY3RpdmVfaW5mbyB7CglpbnQgY19pZDsKCXVuc2lnbmVkIGNoYXIgcGRwX3R5cGU7CglzdHJ1Y3QgbmV0ZGV2X2FjdF9pbmZvIGFjdF9pbmZvOwp9OwoKLyoqCiAqIEBicmllZiBtYWO12Na3us221NOm1ve7+sP70MXPogogKiBAcGFyYW0gbWFjIG1hY7XY1rcKICogQHBhcmFtIGhvc3RuYW1lIG1hY7XY1re21NOmtcTW97v6w/sKICovCnN0cnVjdCBtYWNfaG9zdG5hbWVfaW5mbyB7CgljaGFyIG1hY1tNQUNfQUREUl9MRU5dOwoJY2hhciBob3N0bmFtZVtIT1NUTkFNRV9MRU5dOwp9OwoKLyoqCiAqIEBicmllZiC+ssysbWFjIGlwtdjWt9DFz6IKICogQHBhcmFtIG1hYyBtYWMgtdjWtwogKiBAcGFyYW0gaXAgIG1hY7XY1rew87aotcS+ssysaXC12Na3CiAqLwpzdHJ1Y3Qgc3RhdGljX21hY2lwX2luZm8gewoJY2hhciBtYWNbMzJdOwoJY2hhciBpcFszMl07Cn07CgovKioKICogQGJyaWVmILzSs6TEo8q9sNfD+7WlzfjVvtDFz6IKICogQHBhcmFtIG5hbWUgzfjVvsP7s8YKICogQHBhcmFtIHNpdGUgzfjVvs341rcKICovCnN0cnVjdCB3aGl0ZV9zaXRlX2luZm8gewoJY2hhciBuYW1lW0hPU1ROQU1FX0xFTl07CgljaGFyIHNpdGVbU0lURV9MRU5dOwp9OwoKLyoqCiAqIEBicmllZiDIscqhzeLN+L/a0MXPogogKiBAcGFyYW0gcDQ2ZmxhZyBpcHY0L2lwdjax6ta+zrsKICogQHBhcmFtIGRldl9pZCAgyeixuGlkusUKICovCnN0cnVjdCBkZWZhdWx0X2Rldl9pbmZvIHsKCXVuc2lnbmVkIGNoYXIgIGlwNDZmbGFnOwoJdW5zaWduZWQgY2hhciAgZGV2X2lkOwp9OwoKLyoqCiAqIEBicmllZiDB98G/v9jWxtDFz6IKICogQHBhcmFtIGNfaWQgUERQzqjSu7HqyrajrHVjyv2+3b+oxKPKvdDo0qq0q8jro6x1ZmnEo8q9srvQ6NKqCiAqIEBwYXJhbSB0Y19kb3dubGluayAgz8LQ0MH3wb+/2NbG1rWjrLWlzrs6scjM2AogKiBAcGFyYW0gdGNfdXBsaW5rICDPwtDQwffBv7/Y1sbWtaOstaXOuzqxyMzYCiAqIEBub3RlIHRjX2Rvd25saW5rL3RjX3VwbGluayAwILHtyr6yu9Do0qrB97/Yo6zS8mxpbnV4serXvMP8we7Kx7bU19a92rSmwO2jrMv50tTX7tbVxeTWw9a1u+HV+7P9OAogKi8Kc3RydWN0IHRjX2NvbnRyb2xfaW5mbyB7CglpbnQgY19pZDsKCXVuc2lnbmVkIGludCB0Y19kb3dubGluazsKCXVuc2lnbmVkIGludCB0Y191cGxpbms7Cn07CgovKioKICogQGJyaWVmIMGqzfjKp7DcyrG1xM/gudjF5NbDz+694bm5zOUKICogQHBhcmFtIGlwNDZmbGFnIGlwdjQvaXB2NiCx6ta+zrsKICogQHBhcmFtIGRldl9pZCDJ6LG4aWQKICogQHBhcmFtIGRpYWxmYWlsX3JlYXNvbiDBqs34yqew3NSt0vIKICogQG5vdGUgZGlhbGZhaWxfcmVhc29uyKHWtbLOvPtUSU1FX09VVLXIuurWtQogKi8Kc3RydWN0IGRpYWxmYWlsX2Rldl9pbmZvIHsKCXVuc2lnbmVkIGNoYXIgIGlwNDZmbGFnOwoJdW5zaWduZWQgY2hhciAgZGV2X2lkOwoJdW5zaWduZWQgY2hhciAgZGlhbGZhaWxfcmVhc29uOwp9OwoKCi8qKgogKiBAYnJpZWYgUERQyKW8pLvu0MXPoqOs16jTw9PaUFPN4s34v9oKICogQHBhcmFtIGNfaWQgUERQIM6o0rux6sq2CiAqIEBwYXJhbSBpcDQ2ZmxhZyAgaXB2NC9pcHY2ILHq1r4KICogQG5vdGUgY19pZCDTw9Payrax8LK7zay1xFBTzeLN+L/aCiAqLwpzdHJ1Y3QgcGRwX2RlYWN0aXZlX2luZm8gewoJaW50IGNfaWQ7Cgl1bnNpZ25lZCBjaGFyIGlwNDZmbGFnOwp9OwoKI2lmIDAKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHJlc3VsdDsKCWludCBjaWQ7CgljaGFyIHY2X2FkZHJbNDZdOwp9IFY2QUREUl9JTkZPUk07CiNlbmRpZgoKLyoqCiAqIEBicmllZiBQUFBEt6LLzVBEULyku+7P+8+i0MXPogogKiBAcGFyYW0gYXV0aF90eXBlIMjP1qS3vcq9MLT6se1QQVCjrDG0+rHtQ0hBUAogKiBAcGFyYW0gdXNlcl9sZW4gINPDu6fD+yCzpLbICiAqIEBwYXJhbSB1c2VyICDTw7unw/ujrNTaQ0hBULe9yr3PwrjD1rXWw86qzPTVvWlkusUKICogQHBhcmFtIHB3X2xlbiDD3MLrs6S2yAogKiBAcGFyYW0gcHcgw9zC66Os1rvTw9PaUEFQt73KvQogKiBAcGFyYW0gY2hnX2xlbiDM9NW9s6S2yAogKiBAcGFyYW0gY2hhbGxlbmdlIMz01b1pZKOs08PT2kNIQVC3vcq9CiAqLwp0eXBlZGVmIHN0cnVjdCBwcHBkX2F1dGggewoJaW50IAlhdXRoX3R5cGU7CglpbnQgCXVzZXJfbGVuOwoJY2hhciAJdXNlcltVU0VSX01BWF07CglpbnQgCXB3X2xlbjsKCWNoYXIgCXB3W1BXX01BWF07CglpbnQgCWNoZ19sZW47CgljaGFyIAljaGFsbGVuZ2VbQ0hBTExFTkdFX01BWF07Cn0gcHBwZF9hdXRoOwoKdHlwZWRlZiB1bmlvbgp7CiAgICB1X2ludDhfdCBlOFs4XTsKICAgIHVfaW50MTZfdCBlMTZbNF07CiAgICB1X2ludDMyX3QgZTMyWzJdOwp9IG5ldGFwaV9ldWk2NF90OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCi8qKgogKiBAYnJpZWYguPm+3c34wufJ6LG4w/u78cihttTTprXEyeixuElELLC01dXTxc/IvLbT605W1tC1xMnosbjD+7340NDGpcXkCiAqIEBwYXJhbSBkZXZfbmFtZSDN+MLnyeixuMP7CiAqIEByZXR1cm4gyqew3Le1u9gtMQogKi8KaW50IGdldERldklkX2J5bmFtZShjaGFyICpkZXZfbmFtZSk7CgoKLyoqCiAqIEBicmllZiAgUFPN+MLnyeixuLyku+6907/aCiAqIEBwYXJhbSBhY3RpbmZvIHBkcCC8pLvu0MXPogogKiBAcGFyYW0gc3JjX2lkICC199PDtMu907/atcS9+LPMaWQKICogQHJldHVybiCzybmmILe1u9ggMCwgyqew3CC3tbvYIC0xCiAqIEBub3RlIGF0z+C52NOm08O9+LPMtffTw6OsyOdhdHNlcnZlcqGicGNzZXJ2ZXKholZvTFRFoaKyytDFtcjTptPDvfizzAogKi8KaW50IHBkcF9hY3RfcHJvYyhzdHJ1Y3QgcGRwX2FjdGl2ZV9pbmZvICphY3RpbmZvLCBpbnQgc3JjX2lkKTsKCgovKioKICogQGJyaWVmIFBQUM34wufJ6LG4vKS77r3Tv9oKICogQHBhcmFtIHR0eW5hbWUgIHR0eSDJ6LG4w/sKICogQHJldHVybiCzybmmILe1u9ggMCwgyqew3CC3tbvYIC0xCiAqLwppbnQgcHBwX2FjdF9wcm9jKGNoYXIgKnR0eW5hbWUpOwoKLyoqCiAqIEBicmllZiBQU834wufJ6LG4yKW77r3Tv9oKICogQHBhcmFtIGNfaWQgIFBEULyku+5jX2lkCiAqIEBwYXJhbSBpcDQ2ZmxhZyAgaXA0L2lwdjax6ta+CiAqIEBwYXJhbSBzcmNfaWQgILX308O0y73Tv9q1xL34s8xpZAogKiBAcmV0dXJuILPJuaYgt7W72CAwLCDKp7DcILe1u9ggLTEKICogQG5vdGUgYXTP4LnY06bTw734s8y199PDo6zI52F0c2VydmVyoaJwY3NlcnZlcqGiVm9MVEWhorLK0MW1yNOm08O9+LPMCiAqLwppbnQgcGRwX2RlYWN0X3Byb2MoaW50IGNfaWQsIHVuc2lnbmVkIGNoYXIgaXA0NmZsYWcsIGludCBzcmNfaWQpOwoKCi8qKgogKiBAYnJpZWYgyMiy5bDOyeixuLLlyOssvdO/2sTasr+87LLiyse38dDo0qq9+NDQsqa6xaOsyOfQ6NKqo6zWtNDQtdjWt7fWxeShotfpzfi1yMH3s8wKICogQHBhcmFtIG5ldGRldl9pZAkgyeixuGlkusUKICogQHBhcmFtIHNyY19pZCAgtffTw7TLvdO/2rXEvfizzGlkCiAqIEByZXR1cm4gs8m5piC3tbvYIDAsIMqnsNwgt7W72CAtMQogKiBAbm90ZSDJ6LG41ve/2LX308O0y73Tv9rKsaOsse3D97jDzfjC58nosbjO78DtzajCt9LRzaijrL/J0tS9+NDQSVDK/b7dsPy1xMrVt6LBy6O7CiAqINb3v9i9+LPM0OjSqrGj1qTIyLLlsM7Kwrz+sru74dbYuLS199PDuMO907/ao6y38dTyzfjC58Tasr+74ca1t7G9+NDQ1ti4tLXE1tjF5NbDSVC12Na3tcTB97PMCiAqLwppbnQgbmV0ZGV2X3BsdWdpbl9wcm9jKHVuc2lnbmVkIGNoYXIgbmV0ZGV2X2lkLCBpbnQgc3JjX2lkKTsKCi8qKgoqIEBicmllZiDIyLLlsM7J6LG4sM6z9iy907/axNqyv7340NBpZmNvbmZpZyBkb3duo6yyosmxtfTP4NOmtcS12Na3t9bF5L34s8wKKiBAcGFyYW0gbmV0ZGV2X2lkCcnosbhpZLrFCiogQHBhcmFtIHNyY19pZCAgtffTw7TLvdO/2rXEvfizzGlkCiogQHJldHVybiCzybmmILe1u9ggMCwgyqew3CC3tbvYIC0xCiogQG5vdGUgyeixuNb3v9i199PDtMu907/ayrGjrLHtw/e4w834wufJ6LG4zu/A7c2owrfS0bbPo6yyu9Kq1Nm9+NDQSVDK/b7dsPzK1beiCiovCmludCBuZXRkZXZfcGx1Z291dF9wcm9jKHVuc2lnbmVkIGNoYXIgbmV0ZGV2X2lkLCBpbnQgc3JjX2lkKTsKCgovKioKKiBAYnJpZWYgd2VidWm3osvNtcTBrL3Tx+vH8yy907/axNqyv7340NBpZmNvbmZpZyB1cKOssqLG9Lavz+DTprXEtdjWt7fWxeS9+LPMCiogQHBhcmFtIG5ldGRldl9pZAnJ6LG4aWS6xQoqIEBwYXJhbSBzcmNfaWQgILX308O0y73Tv9q1xL34s8xpZAoqIEByZXR1cm4gs8m5piC3tbvYIDAsIMqnsNwgt7W72CAtMQoqIEBub3RlIMnosbjW97/YxKO/6bX308O0y73Tv9rHsKOs0OjSqrzssuK1scewyeixuM7vwO3NqMK30tHNqKOst/HU8rK706a4w7X308O0y73Tv9oKKi8KaW50IG5ldGRldl9jb25uZWN0X2ludGVybmV0KHVuc2lnbmVkIGNoYXIgbmV0ZGV2X2lkLCBpbnQgc3JjX2lkKTsKCgovKioKKiBAYnJpZWYgd2VidWm3osvNtcS2z7+qway908frx/MsvdO/2sTasr+9+NDQaWZjb25maWcgZG93bqOssqLJsbX0z+DTprXEtdjWt7fWxeS9+LPMCiogQHBhcmFtIG5ldGRldl9pZAnJ6LG4aWS6xQoqIEBwYXJhbSBzcmNfaWQgILX308O0y73Tv9q1xL34s8xpZAoqIEByZXR1cm4gs8m5piC3tbvYIDAsIMqnsNwgt7W72CAtMQoqIEBub3RlIMnosbjW97/YxKO/6bX308O0y73Tv9oKKi8KaW50IG5ldGRldl9kaXNjb25uZWN0X2ludGVybmV0KHVuc2lnbmVkIGNoYXIgbmV0ZGV2X2lkLCBpbnQgc3JjX2lkKTsKCgovKioKKiBAYnJpZWYgwffBv7/Y1sYKKiBAcGFyYW0gdGNpbmZvCcH3wb+/2NbG0MXPoqOs0OjSqsH3wb+84L/YtcTJz8/C0NDBvwoqIEBwYXJhbSBzcmNfaWQJINS0vfizzGlkusUKKiBAcmV0dXJuILLZ1/ezybmmt7W72DGjrMqnsNy3tbvYMAoqIEBub3RlILj40OjSqsH3wb+/2NbGtcTTptPDtffTw6OsyOfJz9DQ0OjSqsH3v9ijrMfrtcjE3MnPzeLN+Lrz1Nm199PDo6y38dTyzt63qLvxyKHN4s34v9q9+NDQwfe/2AoqICAgICAgICAgICDV/bOjudi7+tbY0MK/qrv6o6zWrsewyejWw7XEwfe/2NLAyLvT0NCnCiovCmludCB0Y19jb250cm9sKHN0cnVjdCB0Y19jb250cm9sX2luZm8gKnRjaW5mbywgaW50IHNyY19pZCk7CgoKLyoqCiogQGJyaWVmICDIyLLlsM7J6LG4suXI6yy907/axNqyv7zssuLKx7fx0OjSqr340NDX1Lavsqa6xaOsyOfQ6NKqo6zWtNDQtdjWt7fWxeShotfpzfi1yMH3s8wKKiBAcGFyYW0gbmV0ZGV2X25hbWUgIM34wufJ6LG4w/sKKiBAcGFyYW0gc3JjX2lkICDUtL34s8wgaWQgusUKKiBAcmV0dXJuILLZ1/ezybmmt7W72DGjrMqnsNy3tbvYMAoqIEBub3RlIMnosbjW97/YtffTw7TLvdO/2sqxo6yx7cP3uMPN+MLnyeixuM7vwO3NqMK30tHNqKOsv8nS1L340NBJUMr9vt2w/LXEytW3osHLCiovCmludCBuZXRkZXZfcGx1Z2luX3Byb2NfYnluYW1lKGNoYXIgKm5ldGRldl9uYW1lLCBpbnQgc3JjX2lkKTsKCgovKioKKiBAYnJpZWYgyMiy5bDOyeixuLDOs/YsvdO/2sTasr+9+NDQaWZjb25maWcgZG93bqOssqLJsbX0z+DTprXEtdjWt7fWxeS9+LPMCiogQHBhcmFtIG5ldGRldl9uYW1lICDN+MLnyeixuMP7CiogQHBhcmFtIHNyY19pZCAg1LS9+LPMIGlkILrFCiogQHJldHVybiAgstnX97PJuaa3tbvYMaOsyqew3Le1u9gwCiogQG5vdGUgyeixuNb3v9i199PDtMu907/ayrGjrLHtw/e4w834wufJ6LG4zu/A7c2owrfS0bbPo6yyu9Kq1Nm9+NDQSVDK/b7dsPzK1beiCiovCmludCBuZXRkZXZfcGx1Z291dF9wcm9jX2J5bmFtZShjaGFyICpuZXRkZXZfbmFtZSwgaW50IHNyY19pZCk7CgoKLyoqCiogQGJyaWVmICC71ri0s/azp8no1sPKscm+s/2zzNDy1MvQ0NbQyfqzybXEzsS8/goqIEBwYXJhbSDO3goqIEByZXR1cm4gzt4KKi8Kdm9pZCB0Y3BpcF9yZXNldF9jb25maWd1cmUoKTsKCi8qKgoqIEBicmllZiAgyejWw3N3aXRjaMnosbhldGgwLjIwMM34v9q21NOmtcRwb3J0M86qd2Fuv9q7ucrHbGFuv9oKKiBAcGFyYW0gbW9kZToxID0+IHdhbr/ao6wwID0+IGxhbr/aCiogQHJldHVybiDO3goqLwp2b2lkIHNldF9ldGh3YW5fcG9ydF9tb2RlKGludCBtb2RlKTsKCmludCBuZXRhcGlfZXRoZXJfdG9fZXVpNjQoY29uc3QgY2hhciAqZGV2X25hbWUsIG5ldGFwaV9ldWk2NF90ICpwX2V1aTY0KTsKCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2VuZGlmLyogX19ORVRBUElfXyAqLwo=