mage-engine 3.13.1 → 3.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mage.js +70 -13
- package/package.json +1 -1
package/dist/mage.js
CHANGED
|
@@ -56140,7 +56140,7 @@ function applyMiddleware() {
|
|
|
56140
56140
|
|
|
56141
56141
|
var thunk = createThunkMiddleware();
|
|
56142
56142
|
thunk.withExtraArgument = createThunkMiddleware;var name = "mage-engine";
|
|
56143
|
-
var version = "3.13.
|
|
56143
|
+
var version = "3.13.2";
|
|
56144
56144
|
var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
|
|
56145
56145
|
var main = "dist/mage.js";
|
|
56146
56146
|
var author = {
|
|
@@ -57505,7 +57505,7 @@ function isNodeJS() {
|
|
|
57505
57505
|
return createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg);
|
|
57506
57506
|
}
|
|
57507
57507
|
return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);
|
|
57508
|
-
}var WorkerFactory = createBase64WorkerFactory$2('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBURVJNSU5BVEVfRVZFTlQgPSAnVEVSTUlOQVRFX0VWRU5UJzsKICAgIHZhciBESVNQQVRDSF9FVkVOVCA9ICdESVNQQVRDSF9FVkVOVCc7CiAgICB2YXIgTE9BRF9FVkVOVCA9ICdMT0FEX0VWRU5UJzsKICAgIHZhciBSRUFEWV9FVkVOVCA9ICdSRUFEWV9FVkVOVCc7CiAgICB2YXIgVVBEQVRFX0JPRFlfRVZFTlQgPSAnVVBEQVRFX0JPRFlfRVZFTlQnOwogICAgdmFyIEFERF9CT1hfRVZFTlQgPSAnQUREX0JPWF9FVkVOVCc7CiAgICB2YXIgQUREX1ZFSElDTEVfRVZFTlQgPSAnQUREX1ZFSElDTEVfRVZFTlQnOwogICAgdmFyIEFERF9NT0RFTF9FVkVOVCA9ICdBRERfTU9ERUxfRVZFTlQnOwogICAgdmFyIEFERF9QTEFZRVJfRVZFTlQgPSAnQUREX1BMQVlFUl9FVkVOVCc7CiAgICB2YXIgQUREX1NQSEVSRV9FVkVOVCA9ICdBRERfU1BIRVJFX0VWRU5UJzsKICAgIHZhciBESVNQT1NFX0VMRU1FTlRfRVZFTlQgPSAnRElTUE9TRV9FTEVNRU5UX0VWRU5UJzsKICAgIHZhciBQSFlTSUNTX1VQREFURV9FVkVOVCA9ICdQSFlTSUNTX1VQREFURV9FVkVOVCc7CiAgICB2YXIgU1BFRURfQ0hBTkdFX0VWRU5UID0gJ1NQRUVEX0NIQU5HRV9FVkVOVCc7CiAgICB2YXIgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQgPSAnQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQnOwogICAgdmFyIENPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQgPSAnQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCc7CiAgICB2YXIgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVCA9ICdTRVRfTElORUFSX1ZFTE9DSVRZX0VWRU5UJzsKICAgIHZhciBBUFBMWV9JTVBVTFNFX0VWRU5UID0gJ0FQUExZX0lNUFVMU0VfRVZFTlQnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7CiAgICAgICAgfSk7CiAgICAgICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOwogICAgICB9CgogICAgICByZXR1cm4ga2V5czsKICAgIH0KCiAgICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHsKICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsKCiAgICAgICAgaWYgKGkgJSAyKSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX1VQREFURV9FVkVOVCwKICAgICAgICAgIGR0OiBkdAogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZFJlYWR5RXZlbnQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBSRUFEWV9FVkVOVAogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZFRlcm1pbmF0ZUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogVEVSTUlOQVRFX0VWRU5UCiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kQm9keVVwZGF0ZSIsIGZ1bmN0aW9uICh1dWlkLCBwb3NpdGlvbiwgcm90YXRpb24sIGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBVUERBVEVfQk9EWV9FVkVOVCwKICAgICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgICBwb3NpdGlvbjogewogICAgICAgICAgICB4OiBwb3NpdGlvbi54KCksCiAgICAgICAgICAgIHk6IHBvc2l0aW9uLnkoKSwKICAgICAgICAgICAgejogcG9zaXRpb24ueigpCiAgICAgICAgICB9LAogICAgICAgICAgcXVhdGVybmlvbjogewogICAgICAgICAgICB4OiByb3RhdGlvbi54KCksCiAgICAgICAgICAgIHk6IHJvdGF0aW9uLnkoKSwKICAgICAgICAgICAgejogcm90YXRpb24ueigpLAogICAgICAgICAgICB3OiByb3RhdGlvbi53KCkKICAgICAgICAgIH0sCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmREaXNwYXRjaEV2ZW50IiwgZnVuY3Rpb24gKHV1aWQsIGV2ZW50TmFtZSwgZXZlbnREYXRhKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBESVNQQVRDSF9FVkVOVCwKICAgICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKICAgICAgICAgIGV2ZW50RGF0YTogZXZlbnREYXRhCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfTsKICAgIHZhciBkaXNwYXRjaGVyJDEgPSBuZXcgRGlzcGF0Y2hlcigpOwoKICAgIHZhciBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSBmdW5jdGlvbiBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoX3JlZikgewogICAgICB2YXIgX3JlZiR4ID0gX3JlZi54LAogICAgICAgICAgeCA9IF9yZWYkeCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkeCwKICAgICAgICAgIF9yZWYkeSA9IF9yZWYueSwKICAgICAgICAgIHkgPSBfcmVmJHkgPT09IHZvaWQgMCA/IDAgOiBfcmVmJHksCiAgICAgICAgICBfcmVmJHogPSBfcmVmLnosCiAgICAgICAgICB6ID0gX3JlZiR6ID09PSB2b2lkIDAgPyAwIDogX3JlZiR6OwogICAgICB2YXIgbWF0cml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTsKICAgICAgdmFyIHcgPSAxIC8gKG1hdHJpeFszXSAqIHggKyBtYXRyaXhbN10gKiB5ICsgbWF0cml4WzExXSAqIHogKyBtYXRyaXhbMTVdKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB4OiAobWF0cml4WzBdICogeCArIG1hdHJpeFs0XSAqIHkgKyBtYXRyaXhbOF0gKiB6ICsgbWF0cml4WzEyXSkgKiB3LAogICAgICAgIHk6IChtYXRyaXhbMV0gKiB4ICsgbWF0cml4WzVdICogeSArIG1hdHJpeFs5XSAqIHogKyBtYXRyaXhbMTNdKSAqIHcsCiAgICAgICAgejogKG1hdHJpeFsyXSAqIHggKyBtYXRyaXhbNl0gKiB5ICsgbWF0cml4WzEwXSAqIHogKyBtYXRyaXhbMTRdKSAqIHcKICAgICAgfTsKICAgIH07CgogICAgdmFyIGNyZWF0ZVJpZ2lkQm9keSA9IGZ1bmN0aW9uIGNyZWF0ZVJpZ2lkQm9keShzaGFwZSwgb3B0aW9ucykgewogICAgICB2YXIgdXVpZCA9IG9wdGlvbnMudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgX29wdGlvbnMkcmVzdGl0dXRpb24gPSBvcHRpb25zLnJlc3RpdHV0aW9uLAogICAgICAgICAgcmVzdGl0dXRpb24gPSBfb3B0aW9ucyRyZXN0aXR1dGlvbiA9PT0gdm9pZCAwID8gLjkgOiBfb3B0aW9ucyRyZXN0aXR1dGlvbiwKICAgICAgICAgIF9vcHRpb25zJGRhbXBpbmcgPSBvcHRpb25zLmRhbXBpbmcsCiAgICAgICAgICBkYW1waW5nID0gX29wdGlvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gewogICAgICAgIGxpbmVhcjogMC4yLAogICAgICAgIGFuZ3VsYXI6IDAuMgogICAgICB9IDogX29wdGlvbnMkZGFtcGluZzsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIHNoYXBlLmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgcmJJbmZvID0gbmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBzaGFwZSwgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIGJvZHkgPSBuZXcgQW1tby5idFJpZ2lkQm9keShyYkluZm8pOwoKICAgICAgaWYgKG1hc3MgPiAwKSB7CiAgICAgICAgYm9keS5zZXRGcmljdGlvbihmcmljdGlvbik7CiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7CiAgICAgICAgYm9keS5zZXREYW1waW5nKGRhbXBpbmcubGluZWFyLCBkYW1waW5nLmFuZ3VsYXIpOwogICAgICAgIGJvZHkuc2V0QWN0aXZhdGlvblN0YXRlKERJU0FCTEVfREVBQ1RJVkFUSU9OKTsKICAgICAgfSAvLyBzdG9yaW5nIHV1aWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UKCgogICAgICBib2R5LnV1aWQgPSB1dWlkOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgIHJldHVybiBib2R5OwogICAgfTsKICAgIHZhciBhZGRNZXNoID0gZnVuY3Rpb24gYWRkTWVzaChvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgdmVydGljZXMgPSBvcHRpb25zLnZlcnRpY2VzLAogICAgICAgICAgbWF0cmljZXMgPSBvcHRpb25zLm1hdHJpY2VzLAogICAgICAgICAgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcywKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBfb3B0aW9ucyRtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgbWFzcyA9IF9vcHRpb25zJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRtYXNzLAogICAgICAgICAgX29wdGlvbnMkZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfb3B0aW9ucyRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9vcHRpb25zJGZyaWN0aW9uOwogICAgICB2YXIgc2NhbGUgPSBERUZBVUxUX1NDQUxFOwogICAgICB2YXIgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldOwogICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDsKICAgICAgICB2YXIgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7CgogICAgICAgIGlmIChpbmRleCkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykgewogICAgICAgICAgICB2YXIgYWkgPSBpbmRleFtqXSAqIDM7CiAgICAgICAgICAgIHZhciBiaSA9IGluZGV4W2ogKyAxXSAqIDM7CiAgICAgICAgICAgIHZhciBjaSA9IGluZGV4W2ogKyAyXSAqIDM7CiAgICAgICAgICAgIHZhciB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1thaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1thaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYWkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYmldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2JpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2NpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2NpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tjaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgY29tcG9uZW50cy5sZW5ndGg7IF9qICs9IDkpIHsKICAgICAgICAgICAgdmFyIF92YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDBdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAzXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgNF0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDVdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgNl0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDddLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA4XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgYnRhLnNldFZhbHVlKF92YS54LCBfdmEueSwgX3ZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUoX3ZiLngsIF92Yi55LCBfdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZShfdmMueCwgX3ZjLnksIF92Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTsKICAgICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpOwogICAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7CiAgICAgIHZhciBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTsKICAgICAgQW1tby5kZXN0cm95KGJ0YSk7CiAgICAgIEFtbW8uZGVzdHJveShidGIpOwogICAgICBBbW1vLmRlc3Ryb3koYnRjKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuTUVTSCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZEJveCA9IGZ1bmN0aW9uIGFkZEJveChkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuQk9YLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkU3BoZXJlID0gZnVuY3Rpb24gYWRkU3BoZXJlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICByYWRpdXMgPSBkYXRhLnJhZGl1cywKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzMiA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzMiA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MyLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24yID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24yID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb24yOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlNQSEVSRSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIHNldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gc2V0TGluZWFyVmVsb2NpdHkoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIF9kYXRhJHZlbG9jaXR5ID0gZGF0YS52ZWxvY2l0eSwKICAgICAgICAgIHZlbG9jaXR5ID0gX2RhdGEkdmVsb2NpdHkgPT09IHZvaWQgMCA/IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIDogX2RhdGEkdmVsb2NpdHk7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7CiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTsKICAgICAgfQogICAgfTsKICAgIHZhciBhcHBseUltcHVzZSA9IGZ1bmN0aW9uIGFwcGx5SW1wdXNlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBfZGF0YSRpbXB1bHNlID0gZGF0YS5pbXB1bHNlLAogICAgICAgICAgaW1wdWxzZSA9IF9kYXRhJGltcHVsc2UgPT09IHZvaWQgMCA/IERFRkFVTFRfSU1QVUxTRSA6IF9kYXRhJGltcHVsc2U7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQyID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDIuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopOwogICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTsKICAgICAgICBBbW1vLmRlc3Ryb3koaW1wdWxzZVZlY3Rvcik7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlUmlnaWRib2R5VXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUmlnaWRib2R5VXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgICAgdmFyIHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgYWRkUGxheWVyID0gZnVuY3Rpb24gYWRkUGxheWVyKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uOwogICAgICB2YXIgY2Fwc3VsZSA9IG5ldyBBbW1vLmJ0Q2Fwc3VsZVNoYXBlKHdpZHRoLCBoZWlnaHQpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjYXBzdWxlLCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsgLy8gZGlzYWJsaWluZyByb3RhdGlvbiBmb3IgY29sbGlzaW9ucwoKICAgICAgYm9keS5zZXRBbmd1bGFyRmFjdG9yKDApOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5QTEFZRVIsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBoYW5kbGVQbGF5ZXJVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVQbGF5ZXJVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIGJvZHkgPSBfcmVmLmJvZHksCiAgICAgICAgICB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRzdGF0ZSA9IF9yZWYuc3RhdGUsCiAgICAgICAgICBzdGF0ZSA9IF9yZWYkc3RhdGUgPT09IHZvaWQgMCA/IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIDogX3JlZiRzdGF0ZTsKICAgICAgdmFyIG1vdmVtZW50ID0gc3RhdGUubW92ZW1lbnQsCiAgICAgICAgICBkaXJlY3Rpb24gPSBzdGF0ZS5kaXJlY3Rpb24sCiAgICAgICAgICBjYW1lcmFEaXJlY3Rpb24gPSBzdGF0ZS5jYW1lcmFEaXJlY3Rpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gc3RhdGUucXVhdGVybmlvbiwKICAgICAgICAgIHBvc2l0aW9uID0gc3RhdGUucG9zaXRpb247CiAgICAgIHZhciBNQVhfU1BFRUQgPSAxOwogICAgICB2YXIgd2Fsa1ZlbG9jaXR5ID0gLjE7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIGxpbmVhclZlbG9jaXR5ID0gYm9keS5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgIHZhciBzcGVlZCA9IGxpbmVhclZlbG9jaXR5Lmxlbmd0aCgpOwogICAgICAgIHZhciBmb3J3YXJkRGlyID0gdHJhbnNmb3JtLmdldEJhc2lzKCkuZ2V0Um93KDIpOwogICAgICAgIGZvcndhcmREaXIubm9ybWFsaXplKCk7CiAgICAgICAgdmFyIHdhbGtEaXJlY3Rpb24gPSBuZXcgQW1tby5idFZlY3RvcjMoMC4wLCAwLjAsIDAuMCk7CiAgICAgICAgdmFyIHdhbGtTcGVlZCA9IHdhbGtWZWxvY2l0eSAqIGR0OwoKICAgICAgICBpZiAobW92ZW1lbnQuZm9yd2FyZCkgewogICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRYKHdhbGtEaXJlY3Rpb24ueCgpICsgZm9yd2FyZERpci54KCkpOyAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgKyBmb3J3YXJkRGlyLnkoKSk7CgogICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKHdhbGtEaXJlY3Rpb24ueigpICsgZm9yd2FyZERpci56KCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG1vdmVtZW50LmJhY2t3YXJkcykgewogICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRYKHdhbGtEaXJlY3Rpb24ueCgpIC0gZm9yd2FyZERpci54KCkpOyAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgLSBmb3J3YXJkRGlyLnkoKSk7CgogICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKHdhbGtEaXJlY3Rpb24ueigpIC0gZm9yd2FyZERpci56KCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFtb3ZlbWVudC5mb3J3YXJkICYmICFtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICogMC4yKTsKICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFoobGluZWFyVmVsb2NpdHkueigpICogMC4yKTsKICAgICAgICB9IGVsc2UgaWYgKHNwZWVkIDwgTUFYX1NQRUVEKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSArIGNhbWVyYURpcmVjdGlvbi54ICogd2Fsa1NwZWVkKTsKICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFoobGluZWFyVmVsb2NpdHkueigpICsgY2FtZXJhRGlyZWN0aW9uLnogKiB3YWxrU3BlZWQpOwogICAgICAgIH0KCiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7CiAgICAgICAgYm9keS5nZXRNb3Rpb25TdGF0ZSgpLnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgYm9keS5zZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpOwogICAgICB9CiAgICB9OwoKICAgIHZhciBDbG9jayA9CiAgICAvKiNfX1BVUkVfXyovCiAgICBmdW5jdGlvbiAoKSB7CiAgICAgIGZ1bmN0aW9uIENsb2NrKCkgewogICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDbG9jayk7CgogICAgICAgIHRoaXMudGltZXN0YW1wID0gbnVsbDsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKENsb2NrLCBbewogICAgICAgIGtleTogImdldERlbHRhIiwKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVsdGEoKSB7CiAgICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7CgogICAgICAgICAgaWYgKHRoaXMudGltZXN0YW1wKSB7CiAgICAgICAgICAgIHZhciBkZWx0YSA9IHRpbWUgLSB0aGlzLnRpbWVzdGFtcDsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gZGVsdGE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIENsb2NrOwogICAgfSgpOwoKICAgIHZhciBXb3JsZCA9CiAgICAvKiNfX1BVUkVfXyovCiAgICBmdW5jdGlvbiAoKSB7CiAgICAgIGZ1bmN0aW9uIFdvcmxkKCkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXb3JsZCk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaW5pdCIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgICB2YXIgX29wdGlvbnMkZ3Jhdml0eSA9IG9wdGlvbnMuZ3Jhdml0eSwKICAgICAgICAgICAgICBncmF2aXR5ID0gX29wdGlvbnMkZ3Jhdml0eSA9PT0gdm9pZCAwID8gR1JBVklUWSA6IF9vcHRpb25zJGdyYXZpdHk7CiAgICAgICAgICBfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpOwogICAgICAgICAgX3RoaXMuZGlzcGF0Y2hlciA9IG5ldyBBbW1vLmJ0Q29sbGlzaW9uRGlzcGF0Y2hlcihfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTsKICAgICAgICAgIF90aGlzLmJyb2FkcGhhc2UgPSBuZXcgQW1tby5idERidnRCcm9hZHBoYXNlKCk7CiAgICAgICAgICBfdGhpcy5zb2x2ZXIgPSBuZXcgQW1tby5idFNlcXVlbnRpYWxJbXB1bHNlQ29uc3RyYWludFNvbHZlcigpOwogICAgICAgICAgX3RoaXMuYW1tb1dvcmxkID0gbmV3IEFtbW8uYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQoX3RoaXMuZGlzcGF0Y2hlciwgX3RoaXMuYnJvYWRwaGFzZSwgX3RoaXMuc29sdmVyLCBfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTsKCiAgICAgICAgICBfdGhpcy5hbW1vV29ybGQuc2V0R3Jhdml0eShuZXcgQW1tby5idFZlY3RvcjMoZ3Jhdml0eS54LCBncmF2aXR5LnksIGdyYXZpdHkueikpOwoKICAgICAgICAgIF90aGlzLmluaXRpYWxpc2VkID0gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVFbGVtZW50IiwgZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgIGlmIChfdGhpcy5oYXNFbGVtZW50KHV1aWQpKSB7CiAgICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLmRlbGV0ZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInJlbW92ZURlbGV0ZWRFbGVtZW50cyIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfdGhpcy5lbGVtZW50cykuZmlsdGVyKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkOwogICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICBkZWxldGUgX3RoaXMuZWxlbWVudHNbdXVpZF07CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJoYXNFbGVtZW50IiwgZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfdGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0RWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF07CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaXNJbml0aWFsaXNlZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5pbml0aWFsaXNlZDsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJnZXRBbW1vV29ybGQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuYW1tb1dvcmxkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZFJpZ2lkQm9keSIsIGZ1bmN0aW9uIChib2R5KSB7CiAgICAgICAgICBfdGhpcy5hbW1vV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZEFjdGlvbiIsIGZ1bmN0aW9uIChhY3Rpb24pIHsKICAgICAgICAgIF90aGlzLmFtbW9Xb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzdGVwU2ltdWxhdGlvbiIsIGZ1bmN0aW9uIChkdCkgewogICAgICAgICAgX3RoaXMuYW1tb1dvcmxkLnN0ZXBTaW11bGF0aW9uKGR0KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzaW11bGF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBkdCA9IF90aGlzLmNsb2NrLmdldERlbHRhKCk7CgogICAgICAgICAgX3RoaXMuc3RlcFNpbXVsYXRpb24oZHQpOwoKICAgICAgICAgIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gX3RoaXMuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuQk9YOgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5TUEhFUkU6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLk1FU0g6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVJpZ2lkYm9keVVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOgogICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIF90aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTsKCiAgICAgICAgICBfdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTsKCiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFBoeXNpY3NVcGRhdGUoZHQpOwogICAgICAgICAgX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2ltdWxhdGUuYmluZChfdGhpcykpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgYW1tb0Rpc3BhdGNoZXIgPSBfdGhpcy5hbW1vV29ybGQuZ2V0RGlzcGF0Y2hlcigpOwoKICAgICAgICAgIHZhciBudW1NYW5pZm9sZHMgPSBhbW1vRGlzcGF0Y2hlci5nZXROdW1NYW5pZm9sZHMoKTsKCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU1hbmlmb2xkczsgaSsrKSB7CiAgICAgICAgICAgIHZhciBjb250YWN0TWFuaWZvbGQgPSBhbW1vRGlzcGF0Y2hlci5nZXRNYW5pZm9sZEJ5SW5kZXhJbnRlcm5hbChpKTsKICAgICAgICAgICAgdmFyIHJiMCA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTAoKSwgQW1tby5idFJpZ2lkQm9keSk7CiAgICAgICAgICAgIHZhciByYjEgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkxKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgbnVtQ29udGFjdHMgPSBjb250YWN0TWFuaWZvbGQuZ2V0TnVtQ29udGFjdHMoKTsgLy8gdGhpcyBpdGVyYXRpb24gZG9lc24ndCBoYXZlIHV1aWRzCgogICAgICAgICAgICBpZiAoIXJiMC51dWlkIHx8ICFyYjEudXVpZCkgY29udGludWU7CiAgICAgICAgICAgIHZhciBjb250YWN0cyA9IFtdOwoKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1Db250YWN0czsgaisrKSB7CiAgICAgICAgICAgICAgdmFyIGNvbnRhY3RQb2ludCA9IGNvbnRhY3RNYW5pZm9sZC5nZXRDb250YWN0UG9pbnQoaik7CiAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY29udGFjdFBvaW50LmdldERpc3RhbmNlKCk7CiAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gMC4wKSBjb250aW51ZTsKICAgICAgICAgICAgICB2YXIgdmVsb2NpdHkwID0gcmIwLmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MSA9IHJiMS5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB3b3JsZFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSgpOwogICAgICAgICAgICAgIHZhciB3b3JsZFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQigpOwogICAgICAgICAgICAgIHZhciBsb2NhbFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEEoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MxID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRCKCk7CiAgICAgICAgICAgICAgY29udGFjdHMucHVzaCh7CiAgICAgICAgICAgICAgICBkaXN0YW5jZTogZGlzdGFuY2UsCiAgICAgICAgICAgICAgICBlbGVtZW50czogW3sKICAgICAgICAgICAgICAgICAgdXVpZDogcmIwLnV1aWQsCiAgICAgICAgICAgICAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgICAgICAgICAgICAgeDogdmVsb2NpdHkwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB2ZWxvY2l0eTAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHZlbG9jaXR5MC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiB3b3JsZFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHdvcmxkUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogd29ybGRQb3MwLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBsb2NhbFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IGxvY2FsUG9zMC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogbG9jYWxQb3MwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiBsb2NhbFBvczAueigpCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgdXVpZDogcmIxLnV1aWQsCiAgICAgICAgICAgICAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgICAgICAgICAgICAgeDogdmVsb2NpdHkxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB2ZWxvY2l0eTEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHZlbG9jaXR5MS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiB3b3JsZFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHdvcmxkUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogd29ybGRQb3MxLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBsb2NhbFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IGxvY2FsUG9zMS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogbG9jYWxQb3MxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiBsb2NhbFBvczEueigpCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudChyYjAudXVpZCwgQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCwgewogICAgICAgICAgICAgIGNvbnRhY3RzOiBjb250YWN0cwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHJiMS51dWlkLCBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5ULCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOyAvLyBBbW1vLmRlc3Ryb3kocmIwKTsKICAgICAgICAgICAgLy8gQW1tby5kZXN0cm95KHJiMSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2V0Qm9keSIsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICBfdGhpcy5lbGVtZW50c1tkYXRhLnV1aWRdID0gZGF0YTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJ1cGRhdGVCb2R5U3RhdGUiLCBmdW5jdGlvbiAodXVpZCwgc3RhdGUpIHsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0gX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlLCB7fSwgc3RhdGUpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInRlcm1pbmF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5hbW1vV29ybGQpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLnNvbHZlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuZGlzcGF0Y2hlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7CiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFRlcm1pbmF0ZUV2ZW50KCk7CiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuZWxlbWVudHMgPSB7fTsKICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmJyb2FkcGhhc2UgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5hbW1vV29ybGQgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IG51bGw7CiAgICAgICAgdGhpcy5jbG9jayA9IG5ldyBDbG9jaygpOwogICAgICB9CgogICAgICBfY3JlYXRlQ2xhc3MoV29ybGQsIFt7CiAgICAgICAga2V5OiAiZGlzcG9zZUJvZHkiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlQm9keSh1dWlkKSB7CiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTsKICAgICAgICAgIHRoaXMuYW1tb1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpOwogICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHV1aWQpOwogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIFdvcmxkOwogICAgfSgpOwogICAgdmFyIHdvcmxkID0gbmV3IFdvcmxkKCk7CgogICAgdmFyIERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgPSAwLjI7CiAgICB2YXIgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7CiAgICB2YXIgREVGQVVMVF9NQVNTID0gODAwOwogICAgdmFyIGFkZFZlaGljbGUgPSBmdW5jdGlvbiBhZGRWZWhpY2xlKGRhdGEpIHsKICAgICAgdmFyIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2hlZWxzID0gZGF0YS53aGVlbHMsCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFTUyA6IF9kYXRhJG1hc3MsCiAgICAgICAgICBfZGF0YSR3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICB3aWR0aCA9IF9kYXRhJHdpZHRoID09PSB2b2lkIDAgPyAxLjggOiBfZGF0YSR3aWR0aCwKICAgICAgICAgIF9kYXRhJGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgaGVpZ2h0ID0gX2RhdGEkaGVpZ2h0ID09PSB2b2lkIDAgPyAuNiA6IF9kYXRhJGhlaWdodCwKICAgICAgICAgIF9kYXRhJGxlbmd0aCA9IGRhdGEubGVuZ3RoLAogICAgICAgICAgbGVuZ3RoID0gX2RhdGEkbGVuZ3RoID09PSB2b2lkIDAgPyA0IDogX2RhdGEkbGVuZ3RoLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gREVGQVVMVF9GUklDVElPTiA6IF9kYXRhJGZyaWN0aW9uLAogICAgICAgICAgX2RhdGEkcm9sbEluZmx1ZW5jZSA9IGRhdGEucm9sbEluZmx1ZW5jZSwKICAgICAgICAgIHJvbGxJbmZsdWVuY2UgPSBfZGF0YSRyb2xsSW5mbHVlbmNlID09PSB2b2lkIDAgPyBERUZBVUxUX1JPTExfSU5GTFVFTkNFIDogX2RhdGEkcm9sbEluZmx1ZW5jZSwKICAgICAgICAgIF9kYXRhJHdoZWVsc09wdGlvbnMgPSBkYXRhLndoZWVsc09wdGlvbnMsCiAgICAgICAgICB3aGVlbHNPcHRpb25zID0gX2RhdGEkd2hlZWxzT3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfZGF0YSR3aGVlbHNPcHRpb25zLAogICAgICAgICAgX2RhdGEkc3VzcGVuc2lvbnMgPSBkYXRhLnN1c3BlbnNpb25zLAogICAgICAgICAgc3VzcGVuc2lvbnMgPSBfZGF0YSRzdXNwZW5zaW9ucyA9PT0gdm9pZCAwID8ge30gOiBfZGF0YSRzdXNwZW5zaW9uczsKICAgICAgdmFyIF93aGVlbHNPcHRpb25zJGJhY2sgPSB3aGVlbHNPcHRpb25zLmJhY2ssCiAgICAgICAgICBiYWNrID0gX3doZWVsc09wdGlvbnMkYmFjayA9PT0gdm9pZCAwID8ge30gOiBfd2hlZWxzT3B0aW9ucyRiYWNrLAogICAgICAgICAgX3doZWVsc09wdGlvbnMkZnJvbnQgPSB3aGVlbHNPcHRpb25zLmZyb250LAogICAgICAgICAgZnJvbnQgPSBfd2hlZWxzT3B0aW9ucyRmcm9udCA9PT0gdm9pZCAwID8ge30gOiBfd2hlZWxzT3B0aW9ucyRmcm9udDsKICAgICAgdmFyIF9iYWNrJGF4aXNQb3NpdGlvbiA9IGJhY2suYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uQmFjayA9IF9iYWNrJGF4aXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gLTEgOiBfYmFjayRheGlzUG9zaXRpb24sCiAgICAgICAgICBfYmFjayRyYWRpdXMgPSBiYWNrLnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzQmFjayA9IF9iYWNrJHJhZGl1cyA9PT0gdm9pZCAwID8gLjQgOiBfYmFjayRyYWRpdXMsCiAgICAgICAgICBfYmFjayRoYWxmVHJhY2sgPSBiYWNrLmhhbGZUcmFjaywKICAgICAgICAgIHdoZWVsSGFsZlRyYWNrQmFjayA9IF9iYWNrJGhhbGZUcmFjayA9PT0gdm9pZCAwID8gMSA6IF9iYWNrJGhhbGZUcmFjaywKICAgICAgICAgIF9iYWNrJGF4aXNIZWlnaHQgPSBiYWNrLmF4aXNIZWlnaHQsCiAgICAgICAgICB3aGVlbEF4aXNIZWlnaHRCYWNrID0gX2JhY2skYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfYmFjayRheGlzSGVpZ2h0OwogICAgICB2YXIgX2Zyb250JGF4aXNQb3NpdGlvbiA9IGZyb250LmF4aXNQb3NpdGlvbiwKICAgICAgICAgIGF4aXNQb3NpdGlvbkZyb250ID0gX2Zyb250JGF4aXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gMS43IDogX2Zyb250JGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9mcm9udCRyYWRpdXMgPSBmcm9udC5yYWRpdXMsCiAgICAgICAgICB3aGVlbFJhZGl1c0Zyb250ID0gX2Zyb250JHJhZGl1cyA9PT0gdm9pZCAwID8gLjQgOiBfZnJvbnQkcmFkaXVzLAogICAgICAgICAgX2Zyb250JGhhbGZUcmFjayA9IGZyb250LmhhbGZUcmFjaywKICAgICAgICAgIHdoZWVsSGFsZlRyYWNrRnJvbnQgPSBfZnJvbnQkaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2Zyb250JGhhbGZUcmFjaywKICAgICAgICAgIF9mcm9udCRheGlzSGVpZ2h0ID0gZnJvbnQuYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEZyb250ID0gX2Zyb250JGF4aXNIZWlnaHQgPT09IHZvaWQgMCA/IC4zIDogX2Zyb250JGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfc3VzcGVuc2lvbnMkc3RpZmZuZXMgPSBzdXNwZW5zaW9ucy5zdGlmZm5lc3MsCiAgICAgICAgICBzdGlmZm5lc3MgPSBfc3VzcGVuc2lvbnMkc3RpZmZuZXMgPT09IHZvaWQgMCA/IDIwLjAgOiBfc3VzcGVuc2lvbnMkc3RpZmZuZXMsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkZGFtcGluZyA9IHN1c3BlbnNpb25zLmRhbXBpbmcsCiAgICAgICAgICBkYW1waW5nID0gX3N1c3BlbnNpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IDIuMyA6IF9zdXNwZW5zaW9ucyRkYW1waW5nLAogICAgICAgICAgX3N1c3BlbnNpb25zJGNvbXByZXNzID0gc3VzcGVuc2lvbnMuY29tcHJlc3Npb24sCiAgICAgICAgICBjb21wcmVzc2lvbiA9IF9zdXNwZW5zaW9ucyRjb21wcmVzcyA9PT0gdm9pZCAwID8gNC40IDogX3N1c3BlbnNpb25zJGNvbXByZXNzLAogICAgICAgICAgX3N1c3BlbnNpb25zJHJlc3RMZW5nID0gc3VzcGVuc2lvbnMucmVzdExlbmd0aCwKICAgICAgICAgIHJlc3RMZW5ndGggPSBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPT09IHZvaWQgMCA/IDAuNiA6IF9zdXNwZW5zaW9ucyRyZXN0TGVuZzsgLy8gQ2hhc3NpcwoKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBnZW9tZXRyeS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTsKICAgICAgY2hhc3Npcy5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoY2hhc3Npcyk7IC8vIFJheWNhc3QgVmVoaWNsZQoKICAgICAgdmFyIHR1bmluZyA9IG5ldyBBbW1vLmJ0VmVoaWNsZVR1bmluZygpOwogICAgICB2YXIgcmF5Q2FzdGVyID0gbmV3IEFtbW8uYnREZWZhdWx0VmVoaWNsZVJheWNhc3Rlcih3b3JsZC5nZXRBbW1vV29ybGQoKSk7CiAgICAgIHZhciB2ZWhpY2xlID0gbmV3IEFtbW8uYnRSYXljYXN0VmVoaWNsZSh0dW5pbmcsIGNoYXNzaXMsIHJheUNhc3Rlcik7CiAgICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTsKICAgICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpOwogICAgICB2YXIgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApOwogICAgICB2YXIgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApOwoKICAgICAgdmFyIGFkZFdoZWVsID0gZnVuY3Rpb24gYWRkV2hlZWwoaXNGcm9udCwgcG9zLCByYWRpdXMpIHsKICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChwb3MsIHdoZWVsRGlyZWN0aW9uQ1MwLCB3aGVlbEF4bGVDUywgcmVzdExlbmd0aCwgcmFkaXVzLCB0dW5pbmcsIGlzRnJvbnQpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24oY29tcHJlc3Npb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpOwogICAgICB9OwoKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHR5cGU6IFRZUEVTLlZFSElDTEUsCiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLAogICAgICAgIHdoZWVsczogd2hlZWxzLAogICAgICAgIG9wdGlvbnM6IGRhdGEsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfVkVISUNMRV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVZlaGljbGVVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIHZlaGljbGUgPSBfcmVmLnZlaGljbGUsCiAgICAgICAgICB3aGVlbHMgPSBfcmVmLndoZWVscywKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9WRUhJQ0xFX1NUQVRFIDogX3JlZiRzdGF0ZSwKICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucywKICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgU1BFRURfQ0hBTkdFX0VWRU5ULCB7CiAgICAgICAgc3BlZWQ6IHNwZWVkCiAgICAgIH0pOwogICAgICB2YXIgYnJlYWtpbmdGb3JjZSA9IDA7CiAgICAgIHZhciBlbmdpbmVGb3JjZSA9IDA7CiAgICAgIHZhciBfb3B0aW9ucyRzdGVlcmluZ0NsYW0gPSBvcHRpb25zLnN0ZWVyaW5nQ2xhbXAsCiAgICAgICAgICBzdGVlcmluZ0NsYW1wID0gX29wdGlvbnMkc3RlZXJpbmdDbGFtID09PSB2b2lkIDAgPyBERUZBVUxUX1NURUVSSU5HX0NMQU1QIDogX29wdGlvbnMkc3RlZXJpbmdDbGFtLAogICAgICAgICAgX29wdGlvbnMkc3RlZXJpbmdJbmNyID0gb3B0aW9ucy5zdGVlcmluZ0luY3JlbWVudCwKICAgICAgICAgIHN0ZWVyaW5nSW5jcmVtZW50ID0gX29wdGlvbnMkc3RlZXJpbmdJbmNyID09PSB2b2lkIDAgPyBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCA6IF9vcHRpb25zJHN0ZWVyaW5nSW5jciwKICAgICAgICAgIF9vcHRpb25zJG1heEVuZ2luZUZvciA9IG9wdGlvbnMubWF4RW5naW5lRm9yY2UsCiAgICAgICAgICBtYXhFbmdpbmVGb3JjZSA9IF9vcHRpb25zJG1heEVuZ2luZUZvciA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFIDogX29wdGlvbnMkbWF4RW5naW5lRm9yLAogICAgICAgICAgX29wdGlvbnMkbWF4QnJlYWtpbmdGID0gb3B0aW9ucy5tYXhCcmVha2luZ0ZvcmNlLAogICAgICAgICAgbWF4QnJlYWtpbmdGb3JjZSA9IF9vcHRpb25zJG1heEJyZWFraW5nRiA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgOiBfb3B0aW9ucyRtYXhCcmVha2luZ0Y7CgogICAgICBpZiAoc3RhdGUuYWNjZWxlcmF0aW9uKSB7CiAgICAgICAgaWYgKHNwZWVkIDwgLTEpIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO2Vsc2UgZW5naW5lRm9yY2UgPSBtYXhFbmdpbmVGb3JjZTsKICAgICAgfQoKICAgICAgaWYgKHN0YXRlLmJyYWtpbmcpIHsKICAgICAgICBpZiAoc3BlZWQgPiAxKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gLW1heEVuZ2luZUZvcmNlIC8gMjsKICAgICAgfQoKICAgICAgaWYgKHN0YXRlLmxlZnQpIHsKICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzdGF0ZS5yaWdodCkgewogICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDtlbHNlIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLmFwcGx5RW5naW5lRm9yY2UoZW5naW5lRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7CiAgICAgIHZlaGljbGUuc2V0U3RlZXJpbmdWYWx1ZShzdGF0ZS52ZWhpY2xlU3RlZXJpbmcsIEZST05UX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7CiAgICAgIHZhciB0bSwgcCwgcSwgaTsKICAgICAgdmFyIG4gPSB2ZWhpY2xlLmdldE51bVdoZWVscygpOwoKICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHZlaGljbGUudXBkYXRlV2hlZWxUcmFuc2Zvcm0oaSwgdHJ1ZSk7CiAgICAgICAgdG0gPSB2ZWhpY2xlLmdldFdoZWVsVHJhbnNmb3JtV1MoaSk7CiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpOwogICAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICAgIHZhciB3aGVlbFVVSUQgPSB3aGVlbHNbaV07CiAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHdoZWVsVVVJRCwgcCwgcSwgZHQpOwogICAgICB9CgogICAgICB0bSA9IHZlaGljbGUuZ2V0Q2hhc3Npc1dvcmxkVHJhbnNmb3JtKCk7CiAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7CiAgICAgIHZhciBkaXJlY3Rpb24gPSB2ZWhpY2xlLmdldEZvcndhcmRWZWN0b3IoKTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHV1aWQsIENBUl9ESVJFQ1RJT05fQ0hBTkdFX0VWRU5ULCB7CiAgICAgICAgZGlyZWN0aW9uOiB7CiAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLAogICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSwKICAgICAgICAgIHo6IGRpcmVjdGlvbi56KCkKICAgICAgICB9CiAgICAgIH0pOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZEJvZHlVcGRhdGUodXVpZCwgcCwgcSwgZHQpOwogICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUodXVpZCwgc3RhdGUpOwogICAgfTsKCiAgICB2YXIgaGFuZGxlTG9hZEV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChBbW1vKSB7CiAgICAgICAgc2VsZi5BbW1vID0gQW1tbzsKCiAgICAgICAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKF9yZWYpIHsKICAgICAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhOwoKICAgICAgICAgIHN3aXRjaCAoZGF0YS5ldmVudCkgewogICAgICAgICAgICBjYXNlIEFERF9CT1hfRVZFTlQ6CiAgICAgICAgICAgICAgYWRkQm94KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBBRERfU1BIRVJFX0VWRU5UOgogICAgICAgICAgICAgIGFkZFNwaGVyZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgQUREX1ZFSElDTEVfRVZFTlQ6CiAgICAgICAgICAgICAgYWRkVmVoaWNsZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgQUREX01PREVMX0VWRU5UOgogICAgICAgICAgICAgIGFkZE1lc2goZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIEFERF9QTEFZRVJfRVZFTlQ6CiAgICAgICAgICAgICAgYWRkUGxheWVyKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBTRVRfTElORUFSX1ZFTE9DSVRZX0VWRU5UOgogICAgICAgICAgICAgIHNldExpbmVhclZlbG9jaXR5KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBBUFBMWV9JTVBVTFNFX0VWRU5UOgogICAgICAgICAgICAgIGFwcGx5SW1wdXNlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBVUERBVEVfQk9EWV9FVkVOVDoKICAgICAgICAgICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUoZGF0YS51dWlkLCBkYXRhLnN0YXRlKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgRElTUE9TRV9FTEVNRU5UX0VWRU5UOgogICAgICAgICAgICAgIHdvcmxkLmRpc3Bvc2VCb2R5KGRhdGEudXVpZCk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFRFUk1JTkFURV9FVkVOVDoKICAgICAgICAgICAgICB3b3JsZC50ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB3b3JsZC5pbml0KG9wdGlvbnMpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kUmVhZHlFdmVudCgpOwogICAgICAgIHdvcmxkLnNpbXVsYXRlKCk7CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBsb2FkQW1tbyA9IGZ1bmN0aW9uIGxvYWRBbW1vKG9wdGlvbnMpIHsKICAgICAgdmFyIHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTsKICAgICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRVcmwpOwogICAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpOwogICAgfTsKCiAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZjIpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhOwoKICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgY2FzZSBMT0FEX0VWRU5UOgogICAgICAgICAgbG9hZEFtbW8oZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfTsKCn0oKSk7Cgo=', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9tZXNzYWdlcy5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvYm9kaWVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9wbGF5ZXIuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3dvcmxkLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci92ZWhpY2xlcy5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRFUk1JTkFURV9FVkVOVCA9ICdURVJNSU5BVEVfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IERJU1BBVENIX0VWRU5UID0gJ0RJU1BBVENIX0VWRU5UJztcbmV4cG9ydCBjb25zdCBMT0FEX0VWRU5UID0gJ0xPQURfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IFJFQURZX0VWRU5UID0gJ1JFQURZX0VWRU5UJztcbmV4cG9ydCBjb25zdCBVUERBVEVfQk9EWV9FVkVOVCA9ICdVUERBVEVfQk9EWV9FVkVOVCc7XG5leHBvcnQgY29uc3QgSU5JVF9FVkVOVCA9ICdJTklUX0VWRU5UJztcblxuZXhwb3J0IGNvbnN0IEFERF9CT1hfRVZFTlQgPSAnQUREX0JPWF9FVkVOVCc7XG5leHBvcnQgY29uc3QgQUREX1ZFSElDTEVfRVZFTlQgPSAnQUREX1ZFSElDTEVfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IEFERF9NT0RFTF9FVkVOVCA9ICdBRERfTU9ERUxfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IEFERF9QTEFZRVJfRVZFTlQgPSAnQUREX1BMQVlFUl9FVkVOVCc7XG5leHBvcnQgY29uc3QgQUREX1NQSEVSRV9FVkVOVCA9ICdBRERfU1BIRVJFX0VWRU5UJztcblxuZXhwb3J0IGNvbnN0IERJU1BPU0VfRUxFTUVOVF9FVkVOVCA9ICdESVNQT1NFX0VMRU1FTlRfRVZFTlQnO1xuXG5leHBvcnQgY29uc3QgUEhZU0lDU19VUERBVEVfRVZFTlQgPSAnUEhZU0lDU19VUERBVEVfRVZFTlQnO1xuXG5leHBvcnQgY29uc3QgU1BFRURfQ0hBTkdFX0VWRU5UID0gJ1NQRUVEX0NIQU5HRV9FVkVOVCc7XG5leHBvcnQgY29uc3QgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQgPSAnQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IENPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQgPSAnQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCc7XG5leHBvcnQgY29uc3QgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVCA9ICdTRVRfTElORUFSX1ZFTE9DSVRZX0VWRU5UJztcbmV4cG9ydCBjb25zdCBBUFBMWV9JTVBVTFNFX0VWRU5UID0gJ0FQUExZX0lNUFVMU0VfRVZFTlQnO1xuXG5leHBvcnQgY29uc3QgUEhZU0lDU19FVkVOVFMgPSB7XG4gICAgU1BFRURfQ0hBTkdFX0VWRU5ULFxuICAgIENBUl9ESVJFQ1RJT05fQ0hBTkdFX0VWRU5ULFxuICAgIFNFVF9MSU5FQVJfVkVMT0NJVFlfRVZFTlQsXG4gICAgQVBQTFlfSU1QVUxTRV9FVkVOVCxcbiAgICBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5ULFxuICAgIFRFUk1JTkFURV9FVkVOVCxcbiAgICBESVNQQVRDSF9FVkVOVCxcbiAgICBMT0FEX0VWRU5ULFxuICAgIFJFQURZX0VWRU5ULFxuICAgIFVQREFURV9CT0RZX0VWRU5ULFxuICAgIElOSVRfRVZFTlQsXG4gICAgQUREX0JPWF9FVkVOVCxcbiAgICBBRERfVkVISUNMRV9FVkVOVCxcbiAgICBBRERfTU9ERUxfRVZFTlQsXG4gICAgQUREX1BMQVlFUl9FVkVOVCxcbiAgICBBRERfU1BIRVJFX0VWRU5ULFxuICAgIERJU1BPU0VfRUxFTUVOVF9FVkVOVCxcbiAgICBQSFlTSUNTX1VQREFURV9FVkVOVFxufTsiLCJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwOyIsImltcG9ydCB7XG4gICAgVVBEQVRFX0JPRFlfRVZFTlQsXG4gICAgUkVBRFlfRVZFTlQsXG4gICAgVEVSTUlOQVRFX0VWRU5ULFxuICAgIERJU1BBVENIX0VWRU5ULFxuICAgIFBIWVNJQ1NfVVBEQVRFX0VWRU5UXG59IGZyb20gJy4uLy4uL21lc3NhZ2VzJztcblxuZXhwb3J0IGNsYXNzIERpc3BhdGNoZXIge1xuXG4gICAgc2VuZFBoeXNpY3NVcGRhdGUgPSBkdCA9PiBwb3N0TWVzc2FnZSh7IGV2ZW50OiBQSFlTSUNTX1VQREFURV9FVkVOVCwgZHQgfSlcbiAgICBzZW5kUmVhZHlFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFJFQURZX0VWRU5UIH0pO1xuICAgIHNlbmRUZXJtaW5hdGVFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFRFUk1JTkFURV9FVkVOVCB9KTtcblxuICAgIHNlbmRCb2R5VXBkYXRlID0gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpID0+IHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXZlbnQ6IFVQREFURV9CT0RZX0VWRU5ULFxuICAgICAgICB1dWlkLFxuICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54KCksIHk6IHBvc2l0aW9uLnkoKSwgejogcG9zaXRpb24ueigpIH0sXG4gICAgICAgIHF1YXRlcm5pb246IHsgeDogcm90YXRpb24ueCgpLCB5OiByb3RhdGlvbi55KCksIHo6IHJvdGF0aW9uLnooKSwgdzogcm90YXRpb24udygpIH0sXG4gICAgICAgIGR0XG4gICAgfSk7XG5cbiAgICBzZW5kRGlzcGF0Y2hFdmVudCA9ICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogRElTUEFUQ0hfRVZFTlQsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnREYXRhXG4gICAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGlzcGF0Y2hlcigpOyIsImV4cG9ydCBjb25zdCBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSAoeyB4ID0gMCwgeSA9IDAsIHogPSAwIH0sIG1hdHJpeCA9IFtdKSA9PiB7XG4gICAgY29uc3QgdyA9IDEgLyAoIG1hdHJpeFsgMyBdICogeCArIG1hdHJpeFsgNyBdICogeSArIG1hdHJpeFsgMTEgXSAqIHogKyBtYXRyaXhbIDE1IF0gKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICggbWF0cml4WyAwIF0gKiB4ICsgbWF0cml4WyA0IF0gKiB5ICsgbWF0cml4WyA4IF0gKiB6ICsgbWF0cml4WyAxMiBdICkgKiB3LFxuICAgICAgICB5OiAoIG1hdHJpeFsgMSBdICogeCArIG1hdHJpeFsgNSBdICogeSArIG1hdHJpeFsgOSBdICogeiArIG1hdHJpeFsgMTMgXSApICogdyxcbiAgICAgICAgejogKCBtYXRyaXhbIDIgXSAqIHggKyBtYXRyaXhbIDYgXSAqIHkgKyBtYXRyaXhbIDEwIF0gKiB6ICsgbWF0cml4WyAxNCBdICkgKiB3LFxuICAgIH1cbn07IiwiaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlNYXRyaXg0VG9WZWN0b3IzXG59IGZyb20gJy4vbGliL21hdGgnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFLFxuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfU0NBTEUsXG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFksXG4gICAgREVGQVVMVF9JTVBVTFNFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSaWdpZEJvZHkgPSAoc2hhcGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzLFxuICAgICAgICBmcmljdGlvbixcbiAgICAgICAgcmVzdGl0dXRpb24gPSAuOSxcbiAgICAgICAgZGFtcGluZyA9IHsgbGluZWFyOiAwLjIsIGFuZ3VsYXI6IDAuMiB9XG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcblxuICAgIGNvbnN0IHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7XG4gICAgY29uc3QgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7XG5cbiAgICBcblxuICAgIGlmIChtYXNzID4gMCkge1xuICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTtcbiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7XG4gICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTtcbiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIH1cblxuICAgIC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZVxuICAgIGJvZHkudXVpZCA9IHV1aWQ7XG5cbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7XG5cbiAgICByZXR1cm4gYm9keTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE1lc2ggPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdXVpZCxcbiAgICAgICAgdmVydGljZXMsXG4gICAgICAgIG1hdHJpY2VzLFxuICAgICAgICBpbmRleGVzLFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgbWFzcyA9IDAsXG4gICAgICAgIGZyaWN0aW9uID0gMlxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NhbGUgPSBERUZBVUxUX1NDQUxFO1xuXG4gICAgY29uc3QgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7XG4gICAgY29uc3QgYnRiID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7XG4gICAgY29uc3QgYnRjID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7XG4gICAgY29uc3QgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldO1xuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7XG5cbiAgICAgICAgaWYgKGluZGV4KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4Lmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgICBjb25zdCBhaSA9IGluZGV4W2pdICogMztcbiAgICAgICAgICAgIGNvbnN0IGJpID0gaW5kZXhbaiArIDFdICogMztcbiAgICAgICAgICAgIGNvbnN0IGNpID0gaW5kZXhbaiArIDJdICogMztcblxuICAgICAgICAgICAgY29uc3QgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2FpXSwgeTogY29tcG9uZW50c1thaSArIDFdLCB6OiBjb21wb25lbnRzW2FpICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgIGNvbnN0IHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tiaV0sIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwgejogY29tcG9uZW50c1tiaSArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbY2ldLCB5OiBjb21wb25lbnRzW2NpICsgMV0sIHo6IGNvbXBvbmVudHNbY2kgKyAyXSB9LCBtYXRyaXgpO1xuXG4gICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7XG4gICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7XG4gICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7XG4gICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29tcG9uZW50cy5sZW5ndGg7IGogKz0gOSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tqICsgMF0sIHk6IGNvbXBvbmVudHNbaiArIDFdLCB6OiBjb21wb25lbnRzW2ogKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tqICsgM10sIHk6IGNvbXBvbmVudHNbaiArIDRdLCB6OiBjb21wb25lbnRzW2ogKyA1XSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tqICsgNl0sIHk6IGNvbXBvbmVudHNbaiArIDddLCB6OiBjb21wb25lbnRzW2ogKyA4XSB9LCBtYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopO1xuICAgICAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTtcbiAgICAgICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7XG4gICAgICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbFNjYWxlID0gbmV3IEFtbW8uYnRWZWN0b3IzKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopO1xuICAgIHRyaU1lc2guc2V0U2NhbGluZyhsb2NhbFNjYWxlKTtcbiAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7XG5cbiAgICBjb25zdCBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgY29sbGlzaW9uU2hhcGUucmVzb3VyY2VzID0gW3RyaU1lc2hdO1xuXG4gICAgQW1tby5kZXN0cm95KGJ0YSk7XG4gICAgQW1tby5kZXN0cm95KGJ0Yik7XG4gICAgQW1tby5kZXN0cm95KGJ0Yyk7XG5cbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNvbGxpc2lvblNoYXBlLCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuTUVTSCwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufVxuXG5leHBvcnQgY29uc3QgYWRkQm94ID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHdpZHRoLCBsZW5ndGgsIGhlaWdodCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MgPSAwLCBmcmljdGlvbiA9IDIgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogMC41LCBoZWlnaHQgKiAwLjUsIGxlbmd0aCAqIDAuNSkpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLkJPWCwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNwaGVyZSA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcmFkaXVzLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcyA9IDAsIGZyaWN0aW9uID0gMiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLlNQSEVSRSwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldExpbmVhclZlbG9jaXR5ID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHZlbG9jaXR5ID0gREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgfSA9IGRhdGE7XG4gICAgY29uc3QgeyBib2R5IH0gPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGxpbmVhclZlbG9jaXR5ID0gbmV3IEFtbW8uYnRWZWN0b3IzKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9jaXR5LnopO1xuICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTtcbiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgYXBwbHlJbXB1c2UgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIGltcHVsc2UgPSBERUZBVUxUX0lNUFVMU0UgfSA9IGRhdGE7XG4gICAgY29uc3QgeyBib2R5IH0gPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGltcHVsc2VWZWN0b3IgPSBuZXcgQW1tby5idFZlY3RvcjMoaW1wdWxzZS54LCBpbXB1bHNlLnksIGltcHVsc2Uueik7XG4gICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTtcbiAgICAgICAgQW1tby5kZXN0cm95KGltcHVsc2VWZWN0b3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZVJpZ2lkYm9keVVwZGF0ZSA9ICh7IGJvZHksIHV1aWQsIHN0YXRlID0gREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSwgZHQpID0+IHtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGxldCBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7XG4gICAgICAgIGxldCByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgY3JlYXRlUmlnaWRCb2R5IH0gZnJvbSAnLi9ib2RpZXMnO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuXG5pbXBvcnQge1xuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBhZGRQbGF5ZXIgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgd2lkdGgsIGhlaWdodCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgY2Fwc3VsZSA9IG5ldyBBbW1vLmJ0Q2Fwc3VsZVNoYXBlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICAvLyBkaXNhYmxpaW5nIHJvdGF0aW9uIGZvciBjb2xsaXNpb25zXG4gICAgYm9keS5zZXRBbmd1bGFyRmFjdG9yKDApO1xuXG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5QTEFZRVIsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQbGF5ZXJVcGRhdGUgPSAoeyBib2R5LCB1dWlkLCBzdGF0ZSA9IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0sIGR0KSA9PiB7XG4gICAgY29uc3QgeyBtb3ZlbWVudCwgZGlyZWN0aW9uLCBjYW1lcmFEaXJlY3Rpb24sIHF1YXRlcm5pb24sIHBvc2l0aW9uIH0gPSBzdGF0ZTtcblxuICAgIGNvbnN0IE1BWF9TUEVFRCA9IDE7XG4gICAgY29uc3Qgd2Fsa1ZlbG9jaXR5ID0gLjE7XG5cbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGNvbnN0IGxpbmVhclZlbG9jaXR5ID0gYm9keS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICBjb25zdCBzcGVlZCA9IGxpbmVhclZlbG9jaXR5Lmxlbmd0aCgpO1xuXG4gICAgICAgIGNvbnN0IGZvcndhcmREaXIgPSB0cmFuc2Zvcm0uZ2V0QmFzaXMoKS5nZXRSb3coMik7XG4gICAgICAgIGZvcndhcmREaXIubm9ybWFsaXplKCk7XG4gICAgICAgIGNvbnN0IHdhbGtEaXJlY3Rpb24gPSBuZXcgQW1tby5idFZlY3RvcjMoMC4wLCAwLjAsIDAuMCk7XG5cbiAgICAgICAgY29uc3Qgd2Fsa1NwZWVkID0gd2Fsa1ZlbG9jaXR5ICogZHQ7XG5cbiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCggd2Fsa0RpcmVjdGlvbi54KCkgKyBmb3J3YXJkRGlyLngoKSk7XG4gICAgICAgICAgICAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgKyBmb3J3YXJkRGlyLnkoKSk7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFooIHdhbGtEaXJlY3Rpb24ueigpICsgZm9yd2FyZERpci56KCkpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCggd2Fsa0RpcmVjdGlvbi54KCkgLSBmb3J3YXJkRGlyLngoKSk7XG4gICAgICAgICAgICAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgLSBmb3J3YXJkRGlyLnkoKSk7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFooIHdhbGtEaXJlY3Rpb24ueigpIC0gZm9yd2FyZERpci56KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb3ZlbWVudC5mb3J3YXJkICYmICFtb3ZlbWVudC5iYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICogMC4yKTtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFoobGluZWFyVmVsb2NpdHkueigpICogMC4yKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkge1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpO1xuXG4gICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBib2R5LnNldENlbnRlck9mTWFzc1RyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGxldCBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7XG4gICAgICAgIGxldCByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpO1xuICAgIH1cbn07IiwiaW1wb3J0IHtcbiAgICBHUkFWSVRZLFxuICAgIFRZUEVTXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IGhhbmRsZVJpZ2lkYm9keVVwZGF0ZSB9IGZyb20gJy4vYm9kaWVzJztcbmltcG9ydCB7IGhhbmRsZVZlaGljbGVVcGRhdGUgfSBmcm9tICcuL3ZlaGljbGVzJztcblxuaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBoYW5kbGVQbGF5ZXJVcGRhdGUgfSBmcm9tICcuL3BsYXllcic7XG5pbXBvcnQgeyBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5UIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuXG5jbGFzcyBDbG9jayB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsO1xuICAgIH1cblxuICAgIGdldERlbHRhKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMudGltZXN0YW1wKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRpbWUgLSB0aGlzLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlbHRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXb3JsZCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkID0gbmV3IEFtbW8uYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQodGhpcy5kaXNwYXRjaGVyLCB0aGlzLmJyb2FkcGhhc2UsIHRoaXMuc29sdmVyLCB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5zZXRHcmF2aXR5KG5ldyBBbW1vLmJ0VmVjdG9yMyhncmF2aXR5LngsIGdyYXZpdHkueSwgZ3Jhdml0eS56KSk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0QW1tb1dvcmxkID0gKCkgPT4gdGhpcy5hbW1vV29ybGQ7XG5cbiAgICBhZGRSaWdpZEJvZHkgPSBib2R5ID0+IHtcbiAgICAgICAgdGhpcy5hbW1vV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pO1xuICAgIH1cblxuICAgIHN0ZXBTaW11bGF0aW9uID0gZHQgPT4ge1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVSaWdpZGJvZHlVcGRhdGUoZWxlbWVudCwgZHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5QTEFZRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUGxheWVyVXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuVkVISUNMRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWZWhpY2xlVXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRQaHlzaWNzVXBkYXRlKGR0KTtcblxuICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc2ltdWxhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ29sbGlzaW9ucyA9ICgpID0+IHtcbiAgICAgICAgbGV0IGFtbW9EaXNwYXRjaGVyID0gdGhpcy5hbW1vV29ybGQuZ2V0RGlzcGF0Y2hlcigpO1xuICAgICAgICBsZXQgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykge1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7XG5cbiAgICAgICAgICAgIGxldCByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICAgICAgbGV0IHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpO1xuXG4gICAgICAgICAgICAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHNcbiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGNvbnRhY3RzID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3RQb2ludCA9IGNvbnRhY3RNYW5pZm9sZC5nZXRDb250YWN0UG9pbnQoaik7XG4gICAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gY29udGFjdFBvaW50LmdldERpc3RhbmNlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiggZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpO1xuXG4gICAgICAgICAgICAgICAgY29udGFjdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIwLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkwLngoKSwgeTogdmVsb2NpdHkwLnkoKSwgejogdmVsb2NpdHkwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMC54KCksIHk6IHdvcmxkUG9zMC55KCksIHo6IHdvcmxkUG9zMC56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczAueCgpLCB5OiBsb2NhbFBvczAueSgpLCB6OiBsb2NhbFBvczAueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIxLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkxLngoKSwgeTogdmVsb2NpdHkxLnkoKSwgejogdmVsb2NpdHkxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMS54KCksIHk6IHdvcmxkUG9zMS55KCksIHo6IHdvcmxkUG9zMS56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczEueCgpLCB5OiBsb2NhbFBvczEueSgpLCB6OiBsb2NhbFBvczEueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5ULCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudChyYjEudXVpZCwgQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCwgeyBjb250YWN0cyB9KTtcblxuICAgICAgICAgICAgLy8gQW1tby5kZXN0cm95KHJiMCk7XG4gICAgICAgICAgICAvLyBBbW1vLmRlc3Ryb3kocmIxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEJvZHkgPSBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50c1tkYXRhLnV1aWRdID0gZGF0YTtcbiAgICB9XG5cbiAgICB1cGRhdGVCb2R5U3RhdGUgPSAodXVpZCwgc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUsXG4gICAgICAgICAgICAuLi5zdGF0ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGRpc3Bvc2VCb2R5KHV1aWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5hbW1vV29ybGQucmVtb3ZlUmlnaWRCb2R5KGVsZW1lbnQuYm9keSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh1dWlkKTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmFtbW9Xb3JsZCk7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLnNvbHZlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmRpc3BhdGNoZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRUZXJtaW5hdGVFdmVudCgpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBTUEVFRF9DSEFOR0VfRVZFTlQsXG4gICAgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlRcbn0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuXG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5pbXBvcnQgZGlzcGF0Y2hlciBmcm9tICcuL2xpYi9kaXNwYXRjaGVyJztcblxuY29uc3QgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjtcbmNvbnN0IERFRkFVTFRfRlJJQ1RJT04gPSAxMDAwO1xuY29uc3QgREVGQVVMVF9NQVNTID0gODAwO1xuXG5leHBvcnQgY29uc3QgYWRkVmVoaWNsZSA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIHV1aWQsXG4gICAgICAgIHdoZWVscyxcbiAgICAgICAgbWFzcyA9IERFRkFVTFRfTUFTUyxcbiAgICAgICAgd2lkdGggPSAxLjgsXG4gICAgICAgIGhlaWdodCA9IC42LFxuICAgICAgICBsZW5ndGggPSA0LFxuICAgICAgICBmcmljdGlvbiA9IERFRkFVTFRfRlJJQ1RJT04sXG4gICAgICAgIHJvbGxJbmZsdWVuY2UgPSBERUZBVUxUX1JPTExfSU5GTFVFTkNFLFxuICAgICAgICB3aGVlbHNPcHRpb25zID0ge30sXG4gICAgICAgIHN1c3BlbnNpb25zID0ge31cbiAgICB9ID0gZGF0YTtcblxuICAgIGNvbnN0IHsgYmFjayA9IHt9LCBmcm9udCA9IHt9IH0gPSB3aGVlbHNPcHRpb25zO1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25CYWNrID0gLTEsXG4gICAgICAgIHJhZGl1czogd2hlZWxSYWRpdXNCYWNrID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tCYWNrID0gMSxcbiAgICAgICAgYXhpc0hlaWdodDogd2hlZWxBeGlzSGVpZ2h0QmFjayA9IC4zXG4gICAgfSA9IGJhY2s7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGF4aXNQb3NpdGlvbjogYXhpc1Bvc2l0aW9uRnJvbnQgPSAxLjcsXG4gICAgICAgIHJhZGl1czogd2hlZWxSYWRpdXNGcm9udCA9IC40LFxuICAgICAgICBoYWxmVHJhY2s6IHdoZWVsSGFsZlRyYWNrRnJvbnQgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRGcm9udCA9IC4zXG4gICAgfSA9IGZyb250O1xuXG4gICAgY29uc3QgeyBzdGlmZm5lc3MgPSAyMC4wLCBkYW1waW5nID0gMi4zLCBjb21wcmVzc2lvbiA9IDQuNCwgcmVzdExlbmd0aCA9IDAuNiB9ID0gc3VzcGVuc2lvbnM7XG5cblxuICAgIC8vIENoYXNzaXNcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogLjUsIGhlaWdodCAqIC41LCBsZW5ndGggKiAuNSkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBnZW9tZXRyeS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcbiAgICBjb25zdCBjaGFzc2lzID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkobmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBnZW9tZXRyeSwgbG9jYWxJbmVydGlhKSk7XG4gICAgY2hhc3Npcy5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTtcblxuXG4gICAgLy8gUmF5Y2FzdCBWZWhpY2xlXG4gICAgY29uc3QgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7XG4gICAgY29uc3QgcmF5Q2FzdGVyID0gbmV3IEFtbW8uYnREZWZhdWx0VmVoaWNsZVJheWNhc3Rlcih3b3JsZC5nZXRBbW1vV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLnNldEJvZHkoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZVZlaGljbGVVcGRhdGUgPSAoeyB2ZWhpY2xlLCB3aGVlbHMsIHV1aWQsIHN0YXRlID0gREVGQVVMVF9WRUhJQ0xFX1NUQVRFLCBvcHRpb25zID0ge30gfSwgZHQpID0+IHtcbiAgICBjb25zdCBzcGVlZCA9IHZlaGljbGUuZ2V0Q3VycmVudFNwZWVkS21Ib3VyKCk7XG5cbiAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHV1aWQsIFNQRUVEX0NIQU5HRV9FVkVOVCwgeyBzcGVlZCB9KTtcblxuICAgIGxldCBicmVha2luZ0ZvcmNlID0gMDtcbiAgICBsZXQgZW5naW5lRm9yY2UgPSAwO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBzdGVlcmluZ0NsYW1wID0gREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCxcbiAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikge1xuICAgICAgICBpZiAoc3BlZWQgPCAtMSlcbiAgICAgICAgICAgIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO1xuICAgICAgICBlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5icmFraW5nKSB7XG4gICAgICAgIGlmIChzcGVlZCA+IDEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5sZWZ0KSB7XG4gICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0ZS5yaWdodCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7XG5cbiAgICBsZXQgdG0sIHAsIHEsIGk7XG4gICAgY29uc3QgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpO1xuICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTtcbiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpO1xuICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBjb25zdCB3aGVlbFVVSUQgPSB3aGVlbHNbaV07XG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7XG4gICAgfVxuXG4gICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpO1xuICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpO1xuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQsIHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLFxuICAgICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSxcbiAgICAgICAgICAgIHo6IGRpcmVjdGlvbi56KClcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBwLCBxLCBkdCk7XG4gICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTtcbn0iLCJpbXBvcnQge1xuICAgIFRFUk1JTkFURV9FVkVOVCxcbiAgICBMT0FEX0VWRU5ULFxuICAgIFVQREFURV9CT0RZX0VWRU5ULFxuICAgIEFERF9CT1hfRVZFTlQsXG4gICAgQUREX1ZFSElDTEVfRVZFTlQsXG4gICAgQUREX01PREVMX0VWRU5ULFxuICAgIEFERF9QTEFZRVJfRVZFTlQsXG4gICAgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVCxcbiAgICBBUFBMWV9JTVBVTFNFX0VWRU5ULFxuICAgIERJU1BPU0VfRUxFTUVOVF9FVkVOVCxcbiAgICBBRERfU1BIRVJFX0VWRU5UXG59IGZyb20gJy4uL21lc3NhZ2VzJztcblxuaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSB9IGZyb20gJy4vdmVoaWNsZXMnO1xuaW1wb3J0IHsgYWRkQm94LCBhZGRNZXNoLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSB9IGZyb20gJy4vYm9kaWVzJztcbmltcG9ydCB7IGFkZFBsYXllciB9IGZyb20gJy4vcGxheWVyJztcblxuaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmNvbnN0IGhhbmRsZUxvYWRFdmVudCA9IG9wdGlvbnMgPT4gQW1tbyA9PiB7XG4gICAgc2VsZi5BbW1vID0gQW1tbztcblxuICAgIG9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICAgICAgY2FzZSBBRERfQk9YX0VWRU5UOlxuICAgICAgICAgICAgICAgIGFkZEJveChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQUREX1NQSEVSRV9FVkVOVDpcbiAgICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFERF9WRUhJQ0xFX0VWRU5UOlxuICAgICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFERF9NT0RFTF9FVkVOVDpcbiAgICAgICAgICAgICAgICBhZGRNZXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBRERfUExBWUVSX0VWRU5UOlxuICAgICAgICAgICAgICAgIGFkZFBsYXllcihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVDpcbiAgICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQVBQTFlfSU1QVUxTRV9FVkVOVDpcbiAgICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVVBEQVRFX0JPRFlfRVZFTlQ6XG4gICAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEudXVpZCwgZGF0YS5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERJU1BPU0VfRUxFTUVOVF9FVkVOVDpcbiAgICAgICAgICAgICAgICB3b3JsZC5kaXNwb3NlQm9keShkYXRhLnV1aWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBURVJNSU5BVEVfRVZFTlQ6XG4gICAgICAgICAgICAgICAgd29ybGQudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3b3JsZC5pbml0KG9wdGlvbnMpO1xuICAgIGRpc3BhdGNoZXIuc2VuZFJlYWR5RXZlbnQoKTtcbiAgICB3b3JsZC5zaW11bGF0ZSgpXG59O1xuXG5jb25zdCBsb2FkQW1tbyA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0VXJsID0gb3B0aW9ucy5ob3N0ICsgJy8nICsgKG9wdGlvbnMucGF0aCB8fCBMSUJSQVJZX05BTUUpO1xuICAgIGltcG9ydFNjcmlwdHMoc2NyaXB0VXJsKTtcblxuICAgIEFtbW8oKS50aGVuKGhhbmRsZUxvYWRFdmVudChvcHRpb25zKSk7XG59O1xuXG5vbm1lc3NhZ2UgPSAoeyBkYXRhIH0pID0+IHtcbiAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICBjYXNlIExPQURfRVZFTlQ6XG4gICAgICAgICAgICBsb2FkQW1tbyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJURVJNSU5BVEVfRVZFTlQiLCJESVNQQVRDSF9FVkVOVCIsIkxPQURfRVZFTlQiLCJSRUFEWV9FVkVOVCIsIlVQREFURV9CT0RZX0VWRU5UIiwiQUREX0JPWF9FVkVOVCIsIkFERF9WRUhJQ0xFX0VWRU5UIiwiQUREX01PREVMX0VWRU5UIiwiQUREX1BMQVlFUl9FVkVOVCIsIkFERF9TUEhFUkVfRVZFTlQiLCJESVNQT1NFX0VMRU1FTlRfRVZFTlQiLCJQSFlTSUNTX1VQREFURV9FVkVOVCIsIlNQRUVEX0NIQU5HRV9FVkVOVCIsIkNBUl9ESVJFQ1RJT05fQ0hBTkdFX0VWRU5UIiwiQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCIsIlNFVF9MSU5FQVJfVkVMT0NJVFlfRVZFTlQiLCJBUFBMWV9JTVBVTFNFX0VWRU5UIiwiTElCUkFSWV9OQU1FIiwiVFlQRVMiLCJCT1giLCJTUEhFUkUiLCJWRUhJQ0xFIiwiTUVTSCIsIlBMQVlFUiIsIkRFRkFVTFRfVkVISUNMRV9TVEFURSIsInZlaGljbGVTdGVlcmluZyIsImFjY2VsZXJhdGlvbiIsImJyZWFraW5nIiwicmlnaHQiLCJsZWZ0IiwiREVGQVVMVF9SSUdJREJPRFlfU1RBVEUiLCJ2ZWxvY2l0eSIsIngiLCJ5IiwieiIsIm1vdmVtZW50IiwiZm9yd2FyZCIsImJhY2t3YXJkcyIsImRpcmVjdGlvbiIsIkRFRkFVTFRfU0NBTEUiLCJERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSIsIkRFRkFVTFRfSU1QVUxTRSIsIkRJU0FCTEVfREVBQ1RJVkFUSU9OIiwiR1JBVklUWSIsIkZST05UX0xFRlQiLCJGUk9OVF9SSUdIVCIsIkJBQ0tfTEVGVCIsIkJBQ0tfUklHSFQiLCJERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCIsIkRFRkFVTFRfU1RFRVJJTkdfQ0xBTVAiLCJERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UiLCJERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRSIsIkRpc3BhdGNoZXIiLCJkdCIsInBvc3RNZXNzYWdlIiwiZXZlbnQiLCJ1dWlkIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInF1YXRlcm5pb24iLCJ3IiwiZXZlbnROYW1lIiwiZXZlbnREYXRhIiwiYXBwbHlNYXRyaXg0VG9WZWN0b3IzIiwibWF0cml4IiwiY3JlYXRlUmlnaWRCb2R5Iiwic2hhcGUiLCJvcHRpb25zIiwibWFzcyIsImZyaWN0aW9uIiwicmVzdGl0dXRpb24iLCJkYW1waW5nIiwibGluZWFyIiwiYW5ndWxhciIsInRyYW5zZm9ybSIsIkFtbW8iLCJidFRyYW5zZm9ybSIsInNldElkZW50aXR5Iiwic2V0T3JpZ2luIiwiYnRWZWN0b3IzIiwic2V0Um90YXRpb24iLCJidFF1YXRlcm5pb24iLCJtb3Rpb25TdGF0ZSIsImJ0RGVmYXVsdE1vdGlvblN0YXRlIiwibG9jYWxJbmVydGlhIiwiY2FsY3VsYXRlTG9jYWxJbmVydGlhIiwicmJJbmZvIiwiYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvIiwiYm9keSIsImJ0UmlnaWRCb2R5Iiwic2V0RnJpY3Rpb24iLCJzZXRSZXN0aXR1dGlvbiIsInNldERhbXBpbmciLCJzZXRBY3RpdmF0aW9uU3RhdGUiLCJ3b3JsZCIsImFkZFJpZ2lkQm9keSIsImFkZE1lc2giLCJ2ZXJ0aWNlcyIsIm1hdHJpY2VzIiwiaW5kZXhlcyIsInNjYWxlIiwiYnRhIiwiYnRiIiwiYnRjIiwidHJpTWVzaCIsImJ0VHJpYW5nbGVNZXNoIiwiaSIsImxlbmd0aCIsImNvbXBvbmVudHMiLCJpbmRleCIsIkFycmF5IiwiZnJvbSIsImoiLCJhaSIsImJpIiwiY2kiLCJ2YSIsInZiIiwidmMiLCJzZXRWYWx1ZSIsImFkZFRyaWFuZ2xlIiwibG9jYWxTY2FsZSIsInNldFNjYWxpbmciLCJkZXN0cm95IiwiY29sbGlzaW9uU2hhcGUiLCJidEJ2aFRyaWFuZ2xlTWVzaFNoYXBlIiwicmVzb3VyY2VzIiwic2V0Qm9keSIsInR5cGUiLCJzdGF0ZSIsImFkZEJveCIsImRhdGEiLCJ3aWR0aCIsImhlaWdodCIsImdlb21ldHJ5IiwiYnRCb3hTaGFwZSIsImFkZFNwaGVyZSIsInJhZGl1cyIsImJ0U3BoZXJlU2hhcGUiLCJzZXRMaW5lYXJWZWxvY2l0eSIsImdldEVsZW1lbnQiLCJnZXRNb3Rpb25TdGF0ZSIsImxpbmVhclZlbG9jaXR5IiwiYXBwbHlJbXB1c2UiLCJpbXB1bHNlIiwiaW1wdWxzZVZlY3RvciIsImFwcGx5Q2VudHJhbEltcHVsc2UiLCJoYW5kbGVSaWdpZGJvZHlVcGRhdGUiLCJnZXRXb3JsZFRyYW5zZm9ybSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRXb3JsZFRyYW5zZm9ybSIsInNldENlbnRlck9mTWFzc1RyYW5zZm9ybSIsIkNsb2NrIiwidGltZXN0YW1wIiwidGltZSIsIkRhdGUiLCJub3ciLCJkZWx0YSIsIldvcmxkIiwiZ3Jhdml0eSIsImNvbGxpc2lvbkNvbmZpZ3VyYXRpb24iLCJidERlZmF1bHRDb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnRDb2xsaXNpb25EaXNwYXRjaGVyIiwiYnJvYWRwaGFzZSIsImJ0RGJ2dEJyb2FkcGhhc2UiLCJzb2x2ZXIiLCJidFNlcXVlbnRpYWxJbXB1bHNlQ29uc3RyYWludFNvbHZlciIsImFtbW9Xb3JsZCIsImJ0RGlzY3JldGVEeW5hbWljc1dvcmxkIiwic2V0R3Jhdml0eSIsImluaXRpYWxpc2VkIiwiaGFzRWxlbWVudCIsImVsZW1lbnRzIiwiZGVsZXRlZCIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJmb3JFYWNoIiwiaW5jbHVkZXMiLCJhY3Rpb24iLCJhZGRBY3Rpb24iLCJzdGVwU2ltdWxhdGlvbiIsImNsb2NrIiwiZ2V0RGVsdGEiLCJlbGVtZW50IiwiaGFuZGxlVmVoaWNsZVVwZGF0ZSIsImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCJzZW5kUGh5c2ljc1VwZGF0ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZUlkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2ltdWxhdGUiLCJiaW5kIiwiYW1tb0Rpc3BhdGNoZXIiLCJnZXREaXNwYXRjaGVyIiwibnVtTWFuaWZvbGRzIiwiZ2V0TnVtTWFuaWZvbGRzIiwiY29udGFjdE1hbmlmb2xkIiwiZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwiLCJyYjAiLCJjYXN0T2JqZWN0IiwiZ2V0Qm9keTAiLCJyYjEiLCJnZXRCb2R5MSIsIm51bUNvbnRhY3RzIiwiZ2V0TnVtQ29udGFjdHMiLCJjb250YWN0cyIsImNvbnRhY3RQb2ludCIsImdldENvbnRhY3RQb2ludCIsImRpc3RhbmNlIiwiZ2V0RGlzdGFuY2UiLCJ2ZWxvY2l0eTAiLCJ2ZWxvY2l0eTEiLCJ3b3JsZFBvczAiLCJnZXRfbV9wb3NpdGlvbldvcmxkT25BIiwid29ybGRQb3MxIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQiIsImxvY2FsUG9zMCIsImdldF9tX2xvY2FsUG9pbnRBIiwibG9jYWxQb3MxIiwiZ2V0X21fbG9jYWxQb2ludEIiLCJwdXNoIiwid29ybGRQb3MiLCJsb2NhbFBvcyIsInNlbmREaXNwYXRjaEV2ZW50IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJzZW5kVGVybWluYXRlRXZlbnQiLCJ1bmRlZmluZWQiLCJyZW1vdmVSaWdpZEJvZHkiLCJyZW1vdmVFbGVtZW50IiwiREVGQVVMVF9ST0xMX0lORkxVRU5DRSIsIkRFRkFVTFRfRlJJQ1RJT04iLCJERUZBVUxUX01BU1MiLCJhZGRWZWhpY2xlIiwid2hlZWxzIiwicm9sbEluZmx1ZW5jZSIsIndoZWVsc09wdGlvbnMiLCJzdXNwZW5zaW9ucyIsImJhY2siLCJmcm9udCIsImF4aXNQb3NpdGlvbiIsImF4aXNQb3NpdGlvbkJhY2siLCJ3aGVlbFJhZGl1c0JhY2siLCJoYWxmVHJhY2siLCJ3aGVlbEhhbGZUcmFja0JhY2siLCJheGlzSGVpZ2h0Iiwid2hlZWxBeGlzSGVpZ2h0QmFjayIsImF4aXNQb3NpdGlvbkZyb250Iiwid2hlZWxSYWRpdXNGcm9udCIsIndoZWVsSGFsZlRyYWNrRnJvbnQiLCJ3aGVlbEF4aXNIZWlnaHRGcm9udCIsInN0aWZmbmVzcyIsImNvbXByZXNzaW9uIiwicmVzdExlbmd0aCIsImNoYXNzaXMiLCJ0dW5pbmciLCJidFZlaGljbGVUdW5pbmciLCJyYXlDYXN0ZXIiLCJidERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyIiwiZ2V0QW1tb1dvcmxkIiwidmVoaWNsZSIsImJ0UmF5Y2FzdFZlaGljbGUiLCJzZXRDb29yZGluYXRlU3lzdGVtIiwid2hlZWxEaXJlY3Rpb25DUzAiLCJ3aGVlbEF4bGVDUyIsImFkZFdoZWVsIiwiaXNGcm9udCIsInBvcyIsIndoZWVsSW5mbyIsInNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3MiLCJzZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbiIsInNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbiIsInNldF9tX2ZyaWN0aW9uU2xpcCIsInNldF9tX3JvbGxJbmZsdWVuY2UiLCJnZXRDdXJyZW50U3BlZWRLbUhvdXIiLCJicmVha2luZ0ZvcmNlIiwiZW5naW5lRm9yY2UiLCJzdGVlcmluZ0NsYW1wIiwic3RlZXJpbmdJbmNyZW1lbnQiLCJtYXhFbmdpbmVGb3JjZSIsIm1heEJyZWFraW5nRm9yY2UiLCJicmFraW5nIiwiYXBwbHlFbmdpbmVGb3JjZSIsInNldEJyYWtlIiwic2V0U3RlZXJpbmdWYWx1ZSIsInRtIiwicCIsInEiLCJuIiwiZ2V0TnVtV2hlZWxzIiwidXBkYXRlV2hlZWxUcmFuc2Zvcm0iLCJnZXRXaGVlbFRyYW5zZm9ybVdTIiwid2hlZWxVVUlEIiwiZ2V0Q2hhc3Npc1dvcmxkVHJhbnNmb3JtIiwiZ2V0Rm9yd2FyZFZlY3RvciIsInVwZGF0ZUJvZHlTdGF0ZSIsImhhbmRsZUxvYWRFdmVudCIsInNlbGYiLCJvbm1lc3NhZ2UiLCJkaXNwb3NlQm9keSIsInRlcm1pbmF0ZSIsImluaXQiLCJzZW5kUmVhZHlFdmVudCIsImxvYWRBbW1vIiwic2NyaXB0VXJsIiwiaG9zdCIsInBhdGgiLCJpbXBvcnRTY3JpcHRzIiwidGhlbiJdLCJtYXBwaW5ncyI6Ijs7O0lBQU8sSUFBTUEsZUFBZSxHQUFHLGlCQUF4QjtJQUNBLElBQU1DLGNBQWMsR0FBRyxnQkFBdkI7SUFDQSxJQUFNQyxVQUFVLEdBQUcsWUFBbkI7SUFDQSxJQUFNQyxXQUFXLEdBQUcsYUFBcEI7SUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxtQkFBMUI7SUFHQSxJQUFNQyxhQUFhLEdBQUcsZUFBdEI7SUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxtQkFBMUI7SUFDQSxJQUFNQyxlQUFlLEdBQUcsaUJBQXhCO0lBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsa0JBQXpCO0lBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsa0JBQXpCO0lBRUEsSUFBTUMscUJBQXFCLEdBQUcsdUJBQTlCO0lBRUEsSUFBTUMsb0JBQW9CLEdBQUcsc0JBQTdCO0lBRUEsSUFBTUMsa0JBQWtCLEdBQUcsb0JBQTNCO0lBQ0EsSUFBTUMsMEJBQTBCLEdBQUcsNEJBQW5DO0lBQ0EsSUFBTUMseUJBQXlCLEdBQUcsMkJBQWxDO0lBQ0EsSUFBTUMseUJBQXlCLEdBQUcsMkJBQWxDO0lBQ0EsSUFBTUMsbUJBQW1CLEdBQUcscUJBQTVCOztJQ3JCQSxJQUFNQyxZQUFZLEdBQUcsU0FBckI7SUFFQSxJQUFNQyxLQUFLLEdBQUc7SUFDakJDLEVBQUFBLEdBQUcsRUFBRSxLQURZO0lBRWpCQyxFQUFBQSxNQUFNLEVBQUUsUUFGUztJQUdqQkMsRUFBQUEsT0FB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', false);
|
|
57508
|
+
}var WorkerFactory = createBase64WorkerFactory$2('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBURVJNSU5BVEVfRVZFTlQgPSAnVEVSTUlOQVRFX0VWRU5UJzsKICAgIHZhciBESVNQQVRDSF9FVkVOVCA9ICdESVNQQVRDSF9FVkVOVCc7CiAgICB2YXIgTE9BRF9FVkVOVCA9ICdMT0FEX0VWRU5UJzsKICAgIHZhciBSRUFEWV9FVkVOVCA9ICdSRUFEWV9FVkVOVCc7CiAgICB2YXIgVVBEQVRFX0JPRFlfRVZFTlQgPSAnVVBEQVRFX0JPRFlfRVZFTlQnOwogICAgdmFyIEFERF9CT1hfRVZFTlQgPSAnQUREX0JPWF9FVkVOVCc7CiAgICB2YXIgQUREX1ZFSElDTEVfRVZFTlQgPSAnQUREX1ZFSElDTEVfRVZFTlQnOwogICAgdmFyIEFERF9NT0RFTF9FVkVOVCA9ICdBRERfTU9ERUxfRVZFTlQnOwogICAgdmFyIEFERF9QTEFZRVJfRVZFTlQgPSAnQUREX1BMQVlFUl9FVkVOVCc7CiAgICB2YXIgQUREX1NQSEVSRV9FVkVOVCA9ICdBRERfU1BIRVJFX0VWRU5UJzsKICAgIHZhciBESVNQT1NFX0VMRU1FTlRfRVZFTlQgPSAnRElTUE9TRV9FTEVNRU5UX0VWRU5UJzsKICAgIHZhciBQSFlTSUNTX1VQREFURV9FVkVOVCA9ICdQSFlTSUNTX1VQREFURV9FVkVOVCc7CiAgICB2YXIgU1BFRURfQ0hBTkdFX0VWRU5UID0gJ1NQRUVEX0NIQU5HRV9FVkVOVCc7CiAgICB2YXIgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQgPSAnQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQnOwogICAgdmFyIENPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQgPSAnQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCc7CiAgICB2YXIgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVCA9ICdTRVRfTElORUFSX1ZFTE9DSVRZX0VWRU5UJzsKICAgIHZhciBTRVRfUE9TSVRJT05fRVZFTlQgPSAnU0VUX1BPU0lUSU9OX0VWRU5UJzsKICAgIHZhciBTRVRfQ0FSX1BPU0lUSU9OX0VWRU5UID0gJ1NFVF9DQVJfUE9TSVRJT05fRVZFTlQnOwogICAgdmFyIEFQUExZX0lNUFVMU0VfRVZFTlQgPSAnQVBQTFlfSU1QVUxTRV9FVkVOVCc7CgogICAgdmFyIExJQlJBUllfTkFNRSA9ICdhbW1vLmpzJzsKICAgIHZhciBUWVBFUyA9IHsKICAgICAgQk9YOiAnQk9YJywKICAgICAgU1BIRVJFOiAnU1BIRVJFJywKICAgICAgVkVISUNMRTogJ1ZFSElDTEUnLAogICAgICBNRVNIOiAnTUVTSCcsCiAgICAgIFBMQVlFUjogJ1BMQVlFUicKICAgIH07CiAgICB2YXIgREVGQVVMVF9WRUhJQ0xFX1NUQVRFID0gewogICAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsCiAgICAgIGFjY2VsZXJhdGlvbjogZmFsc2UsCiAgICAgIGJyZWFraW5nOiBmYWxzZSwKICAgICAgcmlnaHQ6IGZhbHNlLAogICAgICBsZWZ0OiBmYWxzZQogICAgfTsKICAgIHZhciBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA9IHsKICAgICAgdmVsb2NpdHk6IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9LAogICAgICBtb3ZlbWVudDogewogICAgICAgIGZvcndhcmQ6IGZhbHNlLAogICAgICAgIGJhY2t3YXJkczogZmFsc2UsCiAgICAgICAgbGVmdDogZmFsc2UsCiAgICAgICAgcmlnaHQ6IGZhbHNlCiAgICAgIH0sCiAgICAgIGRpcmVjdGlvbjogewogICAgICAgIHg6IDAsCiAgICAgICAgeTogMCwKICAgICAgICB6OiAwCiAgICAgIH0KICAgIH07CiAgICB2YXIgREVGQVVMVF9TQ0FMRSA9IHsKICAgICAgeDogMSwKICAgICAgeTogMSwKICAgICAgejogMQogICAgfTsKICAgIHZhciBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSA9IHsKICAgICAgeDogMCwKICAgICAgeTogMCwKICAgICAgejogMAogICAgfTsKICAgIHZhciBERUZBVUxUX0lNUFVMU0UgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRElTQUJMRV9ERUFDVElWQVRJT04gPSA0OwogICAgdmFyIEdSQVZJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IC0xMCwKICAgICAgejogMAogICAgfTsKICAgIHZhciBGUk9OVF9MRUZUID0gMDsKICAgIHZhciBGUk9OVF9SSUdIVCA9IDE7CiAgICB2YXIgQkFDS19MRUZUID0gMjsKICAgIHZhciBCQUNLX1JJR0hUID0gMzsKICAgIHZhciBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCA9IC4wNDsKICAgIHZhciBERUZBVUxUX1NURUVSSU5HX0NMQU1QID0gLjU7CiAgICB2YXIgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFID0gMjAwMDsKICAgIHZhciBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRSA9IDEwMDsKCiAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7CiAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOwogICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsKICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgewogICAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsKICAgICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOwogICAgICByZXR1cm4gQ29uc3RydWN0b3I7CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgewogICAgICBpZiAoa2V5IGluIG9iaikgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgewogICAgICAgICAgdmFsdWU6IHZhbHVlLAogICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIHdyaXRhYmxlOiB0cnVlCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTsKICAgICAgfQoKICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICBmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsKICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOwoKICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsKICAgICAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsKICAgICAgICB9KTsKICAgICAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBrZXlzOwogICAgfQoKICAgIGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkgewogICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OwoKICAgICAgICBpZiAoaSAlIDIpIHsKICAgICAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICB2YXIgRGlzcGF0Y2hlciA9IGZ1bmN0aW9uIERpc3BhdGNoZXIoKSB7CiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEaXNwYXRjaGVyKTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZFBoeXNpY3NVcGRhdGUiLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfVVBEQVRFX0VWRU5ULAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kUmVhZHlFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFJFQURZX0VWRU5UCiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kVGVybWluYXRlRXZlbnQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBURVJNSU5BVEVfRVZFTlQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRCb2R5VXBkYXRlIiwgZnVuY3Rpb24gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFVQREFURV9CT0RZX0VWRU5ULAogICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgIHBvc2l0aW9uOiB7CiAgICAgICAgICAgIHg6IHBvc2l0aW9uLngoKSwKICAgICAgICAgICAgeTogcG9zaXRpb24ueSgpLAogICAgICAgICAgICB6OiBwb3NpdGlvbi56KCkKICAgICAgICAgIH0sCiAgICAgICAgICBxdWF0ZXJuaW9uOiB7CiAgICAgICAgICAgIHg6IHJvdGF0aW9uLngoKSwKICAgICAgICAgICAgeTogcm90YXRpb24ueSgpLAogICAgICAgICAgICB6OiByb3RhdGlvbi56KCksCiAgICAgICAgICAgIHc6IHJvdGF0aW9uLncoKQogICAgICAgICAgfSwKICAgICAgICAgIGR0OiBkdAogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZERpc3BhdGNoRXZlbnQiLCBmdW5jdGlvbiAodXVpZCwgZXZlbnROYW1lLCBldmVudERhdGEpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IERJU1BBVENIX0VWRU5ULAogICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAogICAgICAgICAgZXZlbnREYXRhOiBldmVudERhdGEKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGRpc3BhdGNoZXIkMSA9IG5ldyBEaXNwYXRjaGVyKCk7CgogICAgdmFyIGFwcGx5TWF0cml4NFRvVmVjdG9yMyA9IGZ1bmN0aW9uIGFwcGx5TWF0cml4NFRvVmVjdG9yMyhfcmVmKSB7CiAgICAgIHZhciBfcmVmJHggPSBfcmVmLngsCiAgICAgICAgICB4ID0gX3JlZiR4ID09PSB2b2lkIDAgPyAwIDogX3JlZiR4LAogICAgICAgICAgX3JlZiR5ID0gX3JlZi55LAogICAgICAgICAgeSA9IF9yZWYkeSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkeSwKICAgICAgICAgIF9yZWYkeiA9IF9yZWYueiwKICAgICAgICAgIHogPSBfcmVmJHogPT09IHZvaWQgMCA/IDAgOiBfcmVmJHo7CiAgICAgIHZhciBtYXRyaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICB2YXIgdyA9IDEgLyAobWF0cml4WzNdICogeCArIG1hdHJpeFs3XSAqIHkgKyBtYXRyaXhbMTFdICogeiArIG1hdHJpeFsxNV0pOwogICAgICByZXR1cm4gewogICAgICAgIHg6IChtYXRyaXhbMF0gKiB4ICsgbWF0cml4WzRdICogeSArIG1hdHJpeFs4XSAqIHogKyBtYXRyaXhbMTJdKSAqIHcsCiAgICAgICAgeTogKG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbNV0gKiB5ICsgbWF0cml4WzldICogeiArIG1hdHJpeFsxM10pICogdywKICAgICAgICB6OiAobWF0cml4WzJdICogeCArIG1hdHJpeFs2XSAqIHkgKyBtYXRyaXhbMTBdICogeiArIG1hdHJpeFsxNF0pICogdwogICAgICB9OwogICAgfTsKCiAgICB2YXIgY3JlYXRlUmlnaWRCb2R5ID0gZnVuY3Rpb24gY3JlYXRlUmlnaWRCb2R5KHNoYXBlLCBvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IG9wdGlvbnMucXVhdGVybmlvbiwKICAgICAgICAgIG1hc3MgPSBvcHRpb25zLm1hc3MsCiAgICAgICAgICBmcmljdGlvbiA9IG9wdGlvbnMuZnJpY3Rpb24sCiAgICAgICAgICBfb3B0aW9ucyRyZXN0aXR1dGlvbiA9IG9wdGlvbnMucmVzdGl0dXRpb24sCiAgICAgICAgICByZXN0aXR1dGlvbiA9IF9vcHRpb25zJHJlc3RpdHV0aW9uID09PSB2b2lkIDAgPyAuOSA6IF9vcHRpb25zJHJlc3RpdHV0aW9uLAogICAgICAgICAgX29wdGlvbnMkZGFtcGluZyA9IG9wdGlvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfb3B0aW9ucyRkYW1waW5nID09PSB2b2lkIDAgPyB7CiAgICAgICAgbGluZWFyOiAwLjIsCiAgICAgICAgYW5ndWxhcjogMC4yCiAgICAgIH0gOiBfb3B0aW9ucyRkYW1waW5nOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTsKICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTsKICAgICAgc2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciByYkluZm8gPSBuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIHNoYXBlLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7CgogICAgICBpZiAobWFzcyA+IDApIHsKICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTsKICAgICAgICBib2R5LnNldFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKTsKICAgICAgICBib2R5LnNldERhbXBpbmcoZGFtcGluZy5saW5lYXIsIGRhbXBpbmcuYW5ndWxhcik7CiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB9IC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZQoKCiAgICAgIGJvZHkudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgcmV0dXJuIGJvZHk7CiAgICB9OwogICAgdmFyIGFkZE1lc2ggPSBmdW5jdGlvbiBhZGRNZXNoKG9wdGlvbnMpIHsKICAgICAgdmFyIHV1aWQgPSBvcHRpb25zLnV1aWQsCiAgICAgICAgICB2ZXJ0aWNlcyA9IG9wdGlvbnMudmVydGljZXMsCiAgICAgICAgICBtYXRyaWNlcyA9IG9wdGlvbnMubWF0cmljZXMsCiAgICAgICAgICBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzLAogICAgICAgICAgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IG9wdGlvbnMucXVhdGVybmlvbiwKICAgICAgICAgIF9vcHRpb25zJG1hc3MgPSBvcHRpb25zLm1hc3MsCiAgICAgICAgICBtYXNzID0gX29wdGlvbnMkbWFzcyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJG1hc3MsCiAgICAgICAgICBfb3B0aW9ucyRmcmljdGlvbiA9IG9wdGlvbnMuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9vcHRpb25zJGZyaWN0aW9uID09PSB2b2lkIDAgPyAyIDogX29wdGlvbnMkZnJpY3Rpb247CiAgICAgIHZhciBzY2FsZSA9IERFRkFVTFRfU0NBTEU7CiAgICAgIHZhciBidGEgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgYnRjID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciB0cmlNZXNoID0gbmV3IEFtbW8uYnRUcmlhbmdsZU1lc2godHJ1ZSwgZmFsc2UpOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjb21wb25lbnRzID0gdmVydGljZXNbaV07CiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tpXSA/IGluZGV4ZXNbaV0gOiBudWxsOwogICAgICAgIHZhciBtYXRyaXggPSBBcnJheS5mcm9tKG1hdHJpY2VzW2ldKTsKCiAgICAgICAgaWYgKGluZGV4KSB7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZGV4Lmxlbmd0aDsgaiArPSAzKSB7CiAgICAgICAgICAgIHZhciBhaSA9IGluZGV4W2pdICogMzsKICAgICAgICAgICAgdmFyIGJpID0gaW5kZXhbaiArIDFdICogMzsKICAgICAgICAgICAgdmFyIGNpID0gaW5kZXhbaiArIDJdICogMzsKICAgICAgICAgICAgdmFyIHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2FpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2FpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1thaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIHZhciB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tiaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tiaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYmkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbY2ldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbY2kgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2NpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZSh2Yy54LCB2Yy55LCB2Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBjb21wb25lbnRzLmxlbmd0aDsgX2ogKz0gOSkgewogICAgICAgICAgICB2YXIgX3ZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgMF0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgdmFyIF92YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDNdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyA0XSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgNV0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyA2XSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgN10sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDhdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICBidGEuc2V0VmFsdWUoX3ZhLngsIF92YS55LCBfdmEueik7CiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZShfdmIueCwgX3ZiLnksIF92Yi56KTsKICAgICAgICAgICAgYnRjLnNldFZhbHVlKF92Yy54LCBfdmMueSwgX3ZjLnopOwogICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBsb2NhbFNjYWxlID0gbmV3IEFtbW8uYnRWZWN0b3IzKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopOwogICAgICB0cmlNZXNoLnNldFNjYWxpbmcobG9jYWxTY2FsZSk7CiAgICAgIEFtbW8uZGVzdHJveShsb2NhbFNjYWxlKTsKICAgICAgdmFyIGNvbGxpc2lvblNoYXBlID0gbmV3IEFtbW8uYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSh0cmlNZXNoLCB0cnVlLCB0cnVlKTsKICAgICAgY29sbGlzaW9uU2hhcGUucmVzb3VyY2VzID0gW3RyaU1lc2hdOwogICAgICBBbW1vLmRlc3Ryb3koYnRhKTsKICAgICAgQW1tby5kZXN0cm95KGJ0Yik7CiAgICAgIEFtbW8uZGVzdHJveShidGMpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjb2xsaXNpb25TaGFwZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5NRVNILAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkQm94ID0gZnVuY3Rpb24gYWRkQm94KGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICBsZW5ndGggPSBkYXRhLmxlbmd0aCwKICAgICAgICAgIGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb247CiAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogMC41LCBoZWlnaHQgKiAwLjUsIGxlbmd0aCAqIDAuNSkpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5CT1gsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBhZGRTcGhlcmUgPSBmdW5jdGlvbiBhZGRTcGhlcmUoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHJhZGl1cyA9IGRhdGEucmFkaXVzLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIF9kYXRhJG1hc3MyID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MyID09PSB2b2lkIDAgPyAwIDogX2RhdGEkbWFzczIsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbjIgPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbjIgPT09IHZvaWQgMCA/IDIgOiBfZGF0YSRmcmljdGlvbjI7CiAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuU1BIRVJFLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0TGluZWFyVmVsb2NpdHkgPSBmdW5jdGlvbiBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgX2RhdGEkdmVsb2NpdHkgPSBkYXRhLnZlbG9jaXR5LAogICAgICAgICAgdmVsb2NpdHkgPSBfZGF0YSR2ZWxvY2l0eSA9PT0gdm9pZCAwID8gREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgOiBfZGF0YSR2ZWxvY2l0eTsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyh2ZWxvY2l0eS54LCB2ZWxvY2l0eS55LCB2ZWxvY2l0eS56KTsKICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTsKICAgICAgICBBbW1vLmRlc3Ryb3kobGluZWFyVmVsb2NpdHkpOwogICAgICB9CiAgICB9OwogICAgdmFyIHNldFBvc2l0aW9uID0gZnVuY3Rpb24gc2V0UG9zaXRpb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudDIgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50Mi5ib2R5OwoKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICB9OwogICAgdmFyIGFwcGx5SW1wdXNlID0gZnVuY3Rpb24gYXBwbHlJbXB1c2UoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIF9kYXRhJGltcHVsc2UgPSBkYXRhLmltcHVsc2UsCiAgICAgICAgICBpbXB1bHNlID0gX2RhdGEkaW1wdWxzZSA9PT0gdm9pZCAwID8gREVGQVVMVF9JTVBVTFNFIDogX2RhdGEkaW1wdWxzZTsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudDMgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50My5ib2R5OwoKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIGltcHVsc2VWZWN0b3IgPSBuZXcgQW1tby5idFZlY3RvcjMoaW1wdWxzZS54LCBpbXB1bHNlLnksIGltcHVsc2Uueik7CiAgICAgICAgYm9keS5hcHBseUNlbnRyYWxJbXB1bHNlKGltcHVsc2VWZWN0b3IpOwogICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTsKICAgICAgfQogICAgfTsKICAgIHZhciBoYW5kbGVSaWdpZGJvZHlVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVSaWdpZGJvZHlVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIGJvZHkgPSBfcmVmLmJvZHksCiAgICAgICAgICB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRzdGF0ZSA9IF9yZWYuc3RhdGU7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwoKICAgIHZhciBhZGRQbGF5ZXIgPSBmdW5jdGlvbiBhZGRQbGF5ZXIoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb247CiAgICAgIHZhciBjYXBzdWxlID0gbmV3IEFtbW8uYnRDYXBzdWxlU2hhcGUod2lkdGgsIGhlaWdodCk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNhcHN1bGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOyAvLyBkaXNhYmxpaW5nIHJvdGF0aW9uIGZvciBjb2xsaXNpb25zCgogICAgICBib2R5LnNldEFuZ3VsYXJGYWN0b3IoMCk7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlBMQVlFUiwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGhhbmRsZVBsYXllclVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVBsYXllclVwZGF0ZShfcmVmLCBkdCkgewogICAgICB2YXIgYm9keSA9IF9yZWYuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgOiBfcmVmJHN0YXRlOwogICAgICB2YXIgbW92ZW1lbnQgPSBzdGF0ZS5tb3ZlbWVudCwKICAgICAgICAgIGRpcmVjdGlvbiA9IHN0YXRlLmRpcmVjdGlvbiwKICAgICAgICAgIGNhbWVyYURpcmVjdGlvbiA9IHN0YXRlLmNhbWVyYURpcmVjdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBzdGF0ZS5xdWF0ZXJuaW9uLAogICAgICAgICAgcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgdmFyIE1BWF9TUEVFRCA9IDE7CiAgICAgIHZhciB3YWxrVmVsb2NpdHkgPSAuMTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBib2R5LmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgdmFyIHNwZWVkID0gbGluZWFyVmVsb2NpdHkubGVuZ3RoKCk7CiAgICAgICAgdmFyIGZvcndhcmREaXIgPSB0cmFuc2Zvcm0uZ2V0QmFzaXMoKS5nZXRSb3coMik7CiAgICAgICAgZm9yd2FyZERpci5ub3JtYWxpemUoKTsKICAgICAgICB2YXIgd2Fsa0RpcmVjdGlvbiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLjAsIDAuMCwgMC4wKTsKICAgICAgICB2YXIgd2Fsa1NwZWVkID0gd2Fsa1ZlbG9jaXR5ICogZHQ7CgogICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7CiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgod2Fsa0RpcmVjdGlvbi54KCkgKyBmb3J3YXJkRGlyLngoKSk7IC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSArIGZvcndhcmREaXIueSgpKTsKCiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFood2Fsa0RpcmVjdGlvbi56KCkgKyBmb3J3YXJkRGlyLnooKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgod2Fsa0RpcmVjdGlvbi54KCkgLSBmb3J3YXJkRGlyLngoKSk7IC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSAtIGZvcndhcmREaXIueSgpKTsKCiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFood2Fsa0RpcmVjdGlvbi56KCkgLSBmb3J3YXJkRGlyLnooKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIW1vdmVtZW50LmZvcndhcmQgJiYgIW1vdmVtZW50LmJhY2t3YXJkcykgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKiAwLjIpOwogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKiAwLjIpOwogICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHsKICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpOwogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7CiAgICAgICAgfQoKICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTsKICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBib2R5LnNldENlbnRlck9mTWFzc1RyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgICAgdmFyIHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIENsb2NrID0KICAgIC8qI19fUFVSRV9fKi8KICAgIGZ1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gQ2xvY2soKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsb2NrKTsKCiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsOwogICAgICB9CgogICAgICBfY3JlYXRlQ2xhc3MoQ2xvY2ssIFt7CiAgICAgICAga2V5OiAiZ2V0RGVsdGEiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWx0YSgpIHsKICAgICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTsKCiAgICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHsKICAgICAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wOwogICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7CiAgICAgICAgICAgIHJldHVybiBkZWx0YTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gQ2xvY2s7CiAgICB9KCk7CgogICAgdmFyIFdvcmxkID0KICAgIC8qI19fUFVSRV9fKi8KICAgIGZ1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gV29ybGQoKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmxkKTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJpbml0IiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICAgIHZhciBfb3B0aW9ucyRncmF2aXR5ID0gb3B0aW9ucy5ncmF2aXR5LAogICAgICAgICAgICAgIGdyYXZpdHkgPSBfb3B0aW9ucyRncmF2aXR5ID09PSB2b2lkIDAgPyBHUkFWSVRZIDogX29wdGlvbnMkZ3Jhdml0eTsKICAgICAgICAgIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSBuZXcgQW1tby5idERlZmF1bHRDb2xsaXNpb25Db25maWd1cmF0aW9uKCk7CiAgICAgICAgICBfdGhpcy5kaXNwYXRjaGVyID0gbmV3IEFtbW8uYnRDb2xsaXNpb25EaXNwYXRjaGVyKF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgX3RoaXMuYnJvYWRwaGFzZSA9IG5ldyBBbW1vLmJ0RGJ2dEJyb2FkcGhhc2UoKTsKICAgICAgICAgIF90aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7CiAgICAgICAgICBfdGhpcy5hbW1vV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZChfdGhpcy5kaXNwYXRjaGVyLCBfdGhpcy5icm9hZHBoYXNlLCBfdGhpcy5zb2x2ZXIsIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwoKICAgICAgICAgIF90aGlzLmFtbW9Xb3JsZC5zZXRHcmF2aXR5KG5ldyBBbW1vLmJ0VmVjdG9yMyhncmF2aXR5LngsIGdyYXZpdHkueSwgZ3Jhdml0eS56KSk7CgogICAgICAgICAgX3RoaXMuaW5pdGlhbGlzZWQgPSB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInJlbW92ZUVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgaWYgKF90aGlzLmhhc0VsZW1lbnQodXVpZCkpIHsKICAgICAgICAgICAgX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5maWx0ZXIoZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdLmRlbGV0ZWQ7CiAgICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIGRlbGV0ZSBfdGhpcy5lbGVtZW50c1t1dWlkXTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImhhc0VsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5pbmNsdWRlcyh1dWlkKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJnZXRFbGVtZW50IiwgZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5lbGVtZW50c1t1dWlkXTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJpc0luaXRpYWxpc2VkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmluaXRpYWxpc2VkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEFtbW9Xb3JsZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5hbW1vV29ybGQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiYWRkUmlnaWRCb2R5IiwgZnVuY3Rpb24gKGJvZHkpIHsKICAgICAgICAgIF90aGlzLmFtbW9Xb3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiYWRkQWN0aW9uIiwgZnVuY3Rpb24gKGFjdGlvbikgewogICAgICAgICAgX3RoaXMuYW1tb1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInN0ZXBTaW11bGF0aW9uIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgICBfdGhpcy5hbW1vV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNpbXVsYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGR0ID0gX3RoaXMuY2xvY2suZ2V0RGVsdGEoKTsKCiAgICAgICAgICBfdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7CgogICAgICAgICAgT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRToKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDoKICAgICAgICAgICAgICAgICAgaGFuZGxlUmlnaWRib2R5VXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5QTEFZRVI6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVBsYXllclVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuVkVISUNMRToKICAgICAgICAgICAgICAgICAgaGFuZGxlVmVoaWNsZVVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgX3RoaXMuY2FsY3VsYXRlQ29sbGlzaW9ucygpOwoKICAgICAgICAgIF90aGlzLnJlbW92ZURlbGV0ZWRFbGVtZW50cygpOwoKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kUGh5c2ljc1VwZGF0ZShkdCk7CiAgICAgICAgICBfdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5zaW11bGF0ZS5iaW5kKF90aGlzKSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiY2FsY3VsYXRlQ29sbGlzaW9ucyIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBhbW1vRGlzcGF0Y2hlciA9IF90aGlzLmFtbW9Xb3JsZC5nZXREaXNwYXRjaGVyKCk7CgogICAgICAgICAgdmFyIG51bU1hbmlmb2xkcyA9IGFtbW9EaXNwYXRjaGVyLmdldE51bU1hbmlmb2xkcygpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTWFuaWZvbGRzOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNvbnRhY3RNYW5pZm9sZCA9IGFtbW9EaXNwYXRjaGVyLmdldE1hbmlmb2xkQnlJbmRleEludGVybmFsKGkpOwogICAgICAgICAgICB2YXIgcmIwID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MCgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7CiAgICAgICAgICAgIHZhciBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpOyAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHMKCiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGNvbnRhY3RzID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbnRhY3RzOyBqKyspIHsKICAgICAgICAgICAgICB2YXIgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTsKICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTsKICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTAgPSByYjAuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgdmVsb2NpdHkxID0gcmIxLmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgICAgICAgdmFyIHdvcmxkUG9zMCA9IGNvbnRhY3RQb2ludC5nZXRfbV9wb3NpdGlvbldvcmxkT25BKCk7CiAgICAgICAgICAgICAgdmFyIHdvcmxkUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9wb3NpdGlvbldvcmxkT25CKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMCA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QSgpOwogICAgICAgICAgICAgIHZhciBsb2NhbFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEIoKTsKICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHsKICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSwKICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBbewogICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCwKICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsKICAgICAgICAgICAgICAgICAgICB4OiB2ZWxvY2l0eTAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHZlbG9jaXR5MC55KCksCiAgICAgICAgICAgICAgICAgICAgejogdmVsb2NpdHkwLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB3b3JsZFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IHdvcmxkUG9zMC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogd29ybGRQb3MwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB3b3JsZFBvczAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbG9jYWxQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiBsb2NhbFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IGxvY2FsUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCwKICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsKICAgICAgICAgICAgICAgICAgICB4OiB2ZWxvY2l0eTEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHZlbG9jaXR5MS55KCksCiAgICAgICAgICAgICAgICAgICAgejogdmVsb2NpdHkxLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB3b3JsZFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IHdvcmxkUG9zMS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogd29ybGRQb3MxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB3b3JsZFBvczEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbG9jYWxQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiBsb2NhbFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IGxvY2FsUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5ULCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIENPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQsIHsKICAgICAgICAgICAgICBjb250YWN0czogY29udGFjdHMKICAgICAgICAgICAgfSk7IC8vIEFtbW8uZGVzdHJveShyYjApOwogICAgICAgICAgICAvLyBBbW1vLmRlc3Ryb3kocmIxKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZXRCb2R5IiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW2RhdGEudXVpZF0gPSBkYXRhOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInVwZGF0ZUJvZHlTdGF0ZSIsIGZ1bmN0aW9uICh1dWlkLCBzdGF0ZSkgewogICAgICAgICAgX3RoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUgPSBfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUsIHt9LCBzdGF0ZSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidGVybWluYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmFtbW9Xb3JsZCk7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuc29sdmVyKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5kaXNwYXRjaGVyKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTsKICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF90aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkKTsKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kVGVybWluYXRlRXZlbnQoKTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9OwogICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnNvbHZlciA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmFtbW9Xb3JsZCA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gbnVsbDsKICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JsZCwgW3sKICAgICAgICBrZXk6ICJkaXNwb3NlQm9keSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3Bvc2VCb2R5KHV1aWQpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpOwogICAgICAgICAgdGhpcy5hbW1vV29ybGQucmVtb3ZlUmlnaWRCb2R5KGVsZW1lbnQuYm9keSk7CiAgICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ybGQ7CiAgICB9KCk7CiAgICB2YXIgd29ybGQgPSBuZXcgV29ybGQoKTsKCiAgICB2YXIgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjsKICAgIHZhciBERUZBVUxUX0ZSSUNUSU9OID0gMTAwMDsKICAgIHZhciBERUZBVUxUX01BU1MgPSA4MDA7CiAgICB2YXIgYWRkVmVoaWNsZSA9IGZ1bmN0aW9uIGFkZFZlaGljbGUoZGF0YSkgewogICAgICB2YXIgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aGVlbHMgPSBkYXRhLndoZWVscywKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVNTIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIHdpZHRoID0gX2RhdGEkd2lkdGggPT09IHZvaWQgMCA/IDEuOCA6IF9kYXRhJHdpZHRoLAogICAgICAgICAgX2RhdGEkaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBoZWlnaHQgPSBfZGF0YSRoZWlnaHQgPT09IHZvaWQgMCA/IC42IDogX2RhdGEkaGVpZ2h0LAogICAgICAgICAgX2RhdGEkbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBsZW5ndGggPSBfZGF0YSRsZW5ndGggPT09IHZvaWQgMCA/IDQgOiBfZGF0YSRsZW5ndGgsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyBERUZBVUxUX0ZSSUNUSU9OIDogX2RhdGEkZnJpY3Rpb24sCiAgICAgICAgICBfZGF0YSRyb2xsSW5mbHVlbmNlID0gZGF0YS5yb2xsSW5mbHVlbmNlLAogICAgICAgICAgcm9sbEluZmx1ZW5jZSA9IF9kYXRhJHJvbGxJbmZsdWVuY2UgPT09IHZvaWQgMCA/IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgOiBfZGF0YSRyb2xsSW5mbHVlbmNlLAogICAgICAgICAgX2RhdGEkd2hlZWxzT3B0aW9ucyA9IGRhdGEud2hlZWxzT3B0aW9ucywKICAgICAgICAgIHdoZWVsc09wdGlvbnMgPSBfZGF0YSR3aGVlbHNPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHdoZWVsc09wdGlvbnMsCiAgICAgICAgICBfZGF0YSRzdXNwZW5zaW9ucyA9IGRhdGEuc3VzcGVuc2lvbnMsCiAgICAgICAgICBzdXNwZW5zaW9ucyA9IF9kYXRhJHN1c3BlbnNpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHN1c3BlbnNpb25zOwogICAgICB2YXIgX3doZWVsc09wdGlvbnMkYmFjayA9IHdoZWVsc09wdGlvbnMuYmFjaywKICAgICAgICAgIGJhY2sgPSBfd2hlZWxzT3B0aW9ucyRiYWNrID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGJhY2ssCiAgICAgICAgICBfd2hlZWxzT3B0aW9ucyRmcm9udCA9IHdoZWVsc09wdGlvbnMuZnJvbnQsCiAgICAgICAgICBmcm9udCA9IF93aGVlbHNPcHRpb25zJGZyb250ID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGZyb250OwogICAgICB2YXIgX2JhY2skYXhpc1Bvc2l0aW9uID0gYmFjay5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25CYWNrID0gX2JhY2skYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAtMSA6IF9iYWNrJGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9iYWNrJHJhZGl1cyA9IGJhY2sucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNCYWNrID0gX2JhY2skcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9iYWNrJHJhZGl1cywKICAgICAgICAgIF9iYWNrJGhhbGZUcmFjayA9IGJhY2suaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tCYWNrID0gX2JhY2skaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2JhY2skaGFsZlRyYWNrLAogICAgICAgICAgX2JhY2skYXhpc0hlaWdodCA9IGJhY2suYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEJhY2sgPSBfYmFjayRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9iYWNrJGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfZnJvbnQkYXhpc1Bvc2l0aW9uID0gZnJvbnQuYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uRnJvbnQgPSBfZnJvbnQkYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAxLjcgOiBfZnJvbnQkYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2Zyb250JHJhZGl1cyA9IGZyb250LnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzRnJvbnQgPSBfZnJvbnQkcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9mcm9udCRyYWRpdXMsCiAgICAgICAgICBfZnJvbnQkaGFsZlRyYWNrID0gZnJvbnQuaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tGcm9udCA9IF9mcm9udCRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfZnJvbnQkaGFsZlRyYWNrLAogICAgICAgICAgX2Zyb250JGF4aXNIZWlnaHQgPSBmcm9udC5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0RnJvbnQgPSBfZnJvbnQkYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfZnJvbnQkYXhpc0hlaWdodDsKICAgICAgdmFyIF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9IHN1c3BlbnNpb25zLnN0aWZmbmVzcywKICAgICAgICAgIHN0aWZmbmVzcyA9IF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9PT0gdm9pZCAwID8gMjAuMCA6IF9zdXNwZW5zaW9ucyRzdGlmZm5lcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRkYW1waW5nID0gc3VzcGVuc2lvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfc3VzcGVuc2lvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gMi4zIDogX3N1c3BlbnNpb25zJGRhbXBpbmcsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPSBzdXNwZW5zaW9ucy5jb21wcmVzc2lvbiwKICAgICAgICAgIGNvbXByZXNzaW9uID0gX3N1c3BlbnNpb25zJGNvbXByZXNzID09PSB2b2lkIDAgPyA0LjQgOiBfc3VzcGVuc2lvbnMkY29tcHJlc3MsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPSBzdXNwZW5zaW9ucy5yZXN0TGVuZ3RoLAogICAgICAgICAgcmVzdExlbmd0aCA9IF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9PT0gdm9pZCAwID8gMC42IDogX3N1c3BlbnNpb25zJHJlc3RMZW5nOyAvLyBDaGFzc2lzCgogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIC41LCBoZWlnaHQgKiAuNSwgbGVuZ3RoICogLjUpKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgY2hhc3NpcyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgZ2VvbWV0cnksIGxvY2FsSW5lcnRpYSkpOwogICAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTsgLy8gUmF5Y2FzdCBWZWhpY2xlCgogICAgICB2YXIgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7CiAgICAgIHZhciByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldEFtbW9Xb3JsZCgpKTsKICAgICAgdmFyIHZlaGljbGUgPSBuZXcgQW1tby5idFJheWNhc3RWZWhpY2xlKHR1bmluZywgY2hhc3NpcywgcmF5Q2FzdGVyKTsKICAgICAgdmVoaWNsZS5zZXRDb29yZGluYXRlU3lzdGVtKDAsIDEsIDIpOwogICAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7CiAgICAgIHZhciB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7CiAgICAgIHZhciB3aGVlbEF4bGVDUyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygtMSwgMCwgMCk7CgogICAgICB2YXIgYWRkV2hlZWwgPSBmdW5jdGlvbiBhZGRXaGVlbChpc0Zyb250LCBwb3MsIHJhZGl1cykgewogICAgICAgIHZhciB3aGVlbEluZm8gPSB2ZWhpY2xlLmFkZFdoZWVsKHBvcywgd2hlZWxEaXJlY3Rpb25DUzAsIHdoZWVsQXhsZUNTLCByZXN0TGVuZ3RoLCByYWRpdXMsIHR1bmluZywgaXNGcm9udCk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ1JlbGF4YXRpb24oZGFtcGluZyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbihjb21wcmVzc2lvbik7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3JvbGxJbmZsdWVuY2Uocm9sbEluZmx1ZW5jZSk7CiAgICAgIH07CgogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7CiAgICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMygtd2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7CiAgICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tCYWNrLCB3aGVlbEF4aXNIZWlnaHRCYWNrLCBheGlzUG9zaXRpb25CYWNrKSwgd2hlZWxSYWRpdXNCYWNrKTsKICAgICAgdmVoaWNsZS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdHlwZTogVFlQRVMuVkVISUNMRSwKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHZlaGljbGU6IHZlaGljbGUsCiAgICAgICAgd2hlZWxzOiB3aGVlbHMsCiAgICAgICAgb3B0aW9uczogZGF0YSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9WRUhJQ0xFX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUG9zaXRpb24gPSBmdW5jdGlvbiBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIGhhbmRsZVZlaGljbGVVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVWZWhpY2xlVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciB2ZWhpY2xlID0gX3JlZi52ZWhpY2xlLAogICAgICAgICAgd2hlZWxzID0gX3JlZi53aGVlbHMsCiAgICAgICAgICB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRzdGF0ZSA9IF9yZWYuc3RhdGUsCiAgICAgICAgICBzdGF0ZSA9IF9yZWYkc3RhdGUgPT09IHZvaWQgMCA/IERFRkFVTFRfVkVISUNMRV9TVEFURSA6IF9yZWYkc3RhdGUsCiAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsCiAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9uczsKICAgICAgdmFyIHNwZWVkID0gdmVoaWNsZS5nZXRDdXJyZW50U3BlZWRLbUhvdXIoKTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHV1aWQsIFNQRUVEX0NIQU5HRV9FVkVOVCwgewogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9KTsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBDQVJfRElSRUNUSU9OX0NIQU5HRV9FVkVOVCwgewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0KTsKICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTsKICAgIH07CgogICAgdmFyIGhhbmRsZUxvYWRFdmVudCA9IGZ1bmN0aW9uIGhhbmRsZUxvYWRFdmVudChvcHRpb25zKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoQW1tbykgewogICAgICAgIHNlbGYuQW1tbyA9IEFtbW87CgogICAgICAgIG9ubWVzc2FnZSA9IGZ1bmN0aW9uIG9ubWVzc2FnZShfcmVmKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTsKCiAgICAgICAgICBzd2l0Y2ggKGRhdGEuZXZlbnQpIHsKICAgICAgICAgICAgY2FzZSBBRERfQk9YX0VWRU5UOgogICAgICAgICAgICAgIGFkZEJveChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgQUREX1NQSEVSRV9FVkVOVDoKICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIEFERF9WRUhJQ0xFX0VWRU5UOgogICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIEFERF9NT0RFTF9FVkVOVDoKICAgICAgICAgICAgICBhZGRNZXNoKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBBRERfUExBWUVSX0VWRU5UOgogICAgICAgICAgICAgIGFkZFBsYXllcihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVDoKICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgU0VUX1BPU0lUSU9OX0VWRU5UOgogICAgICAgICAgICAgIHNldFBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBTRVRfQ0FSX1BPU0lUSU9OX0VWRU5UOgogICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgQVBQTFlfSU1QVUxTRV9FVkVOVDoKICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgVVBEQVRFX0JPRFlfRVZFTlQ6CiAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEudXVpZCwgZGF0YS5zdGF0ZSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERJU1BPU0VfRUxFTUVOVF9FVkVOVDoKICAgICAgICAgICAgICB3b3JsZC5kaXNwb3NlQm9keShkYXRhLnV1aWQpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBURVJNSU5BVEVfRVZFTlQ6CiAgICAgICAgICAgICAgd29ybGQudGVybWluYXRlKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgd29ybGQuaW5pdChvcHRpb25zKTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFJlYWR5RXZlbnQoKTsKICAgICAgICB3b3JsZC5zaW11bGF0ZSgpOwogICAgICB9OwogICAgfTsKCiAgICB2YXIgbG9hZEFtbW8gPSBmdW5jdGlvbiBsb2FkQW1tbyhvcHRpb25zKSB7CiAgICAgIHZhciBzY3JpcHRVcmwgPSBvcHRpb25zLmhvc3QgKyAnLycgKyAob3B0aW9ucy5wYXRoIHx8IExJQlJBUllfTkFNRSk7CiAgICAgIGltcG9ydFNjcmlwdHMoc2NyaXB0VXJsKTsKICAgICAgQW1tbygpLnRoZW4oaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpKTsKICAgIH07CgogICAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKF9yZWYyKSB7CiAgICAgIHZhciBkYXRhID0gX3JlZjIuZGF0YTsKCiAgICAgIHN3aXRjaCAoZGF0YS5ldmVudCkgewogICAgICAgIGNhc2UgTE9BRF9FVkVOVDoKICAgICAgICAgIGxvYWRBbW1vKGRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH07Cgp9KCkpOwoK', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9tZXNzYWdlcy5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvYm9kaWVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9wbGF5ZXIuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3dvcmxkLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci92ZWhpY2xlcy5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRFUk1JTkFURV9FVkVOVCA9ICdURVJNSU5BVEVfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IERJU1BBVENIX0VWRU5UID0gJ0RJU1BBVENIX0VWRU5UJztcbmV4cG9ydCBjb25zdCBMT0FEX0VWRU5UID0gJ0xPQURfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IFJFQURZX0VWRU5UID0gJ1JFQURZX0VWRU5UJztcbmV4cG9ydCBjb25zdCBVUERBVEVfQk9EWV9FVkVOVCA9ICdVUERBVEVfQk9EWV9FVkVOVCc7XG5leHBvcnQgY29uc3QgSU5JVF9FVkVOVCA9ICdJTklUX0VWRU5UJztcblxuZXhwb3J0IGNvbnN0IEFERF9CT1hfRVZFTlQgPSAnQUREX0JPWF9FVkVOVCc7XG5leHBvcnQgY29uc3QgQUREX1ZFSElDTEVfRVZFTlQgPSAnQUREX1ZFSElDTEVfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IEFERF9NT0RFTF9FVkVOVCA9ICdBRERfTU9ERUxfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IEFERF9QTEFZRVJfRVZFTlQgPSAnQUREX1BMQVlFUl9FVkVOVCc7XG5leHBvcnQgY29uc3QgQUREX1NQSEVSRV9FVkVOVCA9ICdBRERfU1BIRVJFX0VWRU5UJztcblxuZXhwb3J0IGNvbnN0IERJU1BPU0VfRUxFTUVOVF9FVkVOVCA9ICdESVNQT1NFX0VMRU1FTlRfRVZFTlQnO1xuXG5leHBvcnQgY29uc3QgUEhZU0lDU19VUERBVEVfRVZFTlQgPSAnUEhZU0lDU19VUERBVEVfRVZFTlQnO1xuXG5leHBvcnQgY29uc3QgU1BFRURfQ0hBTkdFX0VWRU5UID0gJ1NQRUVEX0NIQU5HRV9FVkVOVCc7XG5leHBvcnQgY29uc3QgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQgPSAnQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQnO1xuZXhwb3J0IGNvbnN0IENPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQgPSAnQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCc7XG5leHBvcnQgY29uc3QgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVCA9ICdTRVRfTElORUFSX1ZFTE9DSVRZX0VWRU5UJztcbmV4cG9ydCBjb25zdCBTRVRfUE9TSVRJT05fRVZFTlQgPSAnU0VUX1BPU0lUSU9OX0VWRU5UJztcbmV4cG9ydCBjb25zdCBTRVRfQ0FSX1BPU0lUSU9OX0VWRU5UID0gJ1NFVF9DQVJfUE9TSVRJT05fRVZFTlQnO1xuZXhwb3J0IGNvbnN0IEFQUExZX0lNUFVMU0VfRVZFTlQgPSAnQVBQTFlfSU1QVUxTRV9FVkVOVCc7XG5cbmV4cG9ydCBjb25zdCBQSFlTSUNTX0VWRU5UUyA9IHtcbiAgICBTUEVFRF9DSEFOR0VfRVZFTlQsXG4gICAgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlQsXG4gICAgU0VUX0xJTkVBUl9WRUxPQ0lUWV9FVkVOVCxcbiAgICBTRVRfUE9TSVRJT05fRVZFTlQsXG4gICAgU0VUX0NBUl9QT1NJVElPTl9FVkVOVCxcbiAgICBBUFBMWV9JTVBVTFNFX0VWRU5ULFxuICAgIENPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQsXG4gICAgVEVSTUlOQVRFX0VWRU5ULFxuICAgIERJU1BBVENIX0VWRU5ULFxuICAgIExPQURfRVZFTlQsXG4gICAgUkVBRFlfRVZFTlQsXG4gICAgVVBEQVRFX0JPRFlfRVZFTlQsXG4gICAgSU5JVF9FVkVOVCxcbiAgICBBRERfQk9YX0VWRU5ULFxuICAgIEFERF9WRUhJQ0xFX0VWRU5ULFxuICAgIEFERF9NT0RFTF9FVkVOVCxcbiAgICBBRERfUExBWUVSX0VWRU5ULFxuICAgIEFERF9TUEhFUkVfRVZFTlQsXG4gICAgRElTUE9TRV9FTEVNRU5UX0VWRU5ULFxuICAgIFBIWVNJQ1NfVVBEQVRFX0VWRU5UXG59OyIsImV4cG9ydCBjb25zdCBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7XG5cbmV4cG9ydCBjb25zdCBUWVBFUyA9IHtcbiAgICBCT1g6ICdCT1gnLFxuICAgIFNQSEVSRTogJ1NQSEVSRScsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIE1FU0g6ICdNRVNIJyxcbiAgICBQTEFZRVI6ICdQTEFZRVInXG59O1xuXG5leHBvcnQgY29uc3QgQ09MTElERVJfVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBWRUhJQ0xFOiAnVkVISUNMRScsXG4gICAgUExBWUVSOiAnUExBWUVSJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9WRUhJQ0xFX1NUQVRFID0ge1xuICAgIHZlaGljbGVTdGVlcmluZzogMCxcbiAgICBhY2NlbGVyYXRpb246IGZhbHNlLFxuICAgIGJyZWFraW5nOiBmYWxzZSxcbiAgICByaWdodDogZmFsc2UsXG4gICAgbGVmdDogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA9IHtcbiAgICB2ZWxvY2l0eTogeyB4OiAwLCB5OiAwLCB6OiAwIH0sXG4gICAgbW92ZW1lbnQ6IHtcbiAgICAgICAgZm9yd2FyZDogZmFsc2UsXG4gICAgICAgIGJhY2t3YXJkczogZmFsc2UsXG4gICAgICAgIGxlZnQ6IGZhbHNlLFxuICAgICAgICByaWdodDogZmFsc2VcbiAgICB9LFxuICAgIGRpcmVjdGlvbjoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB6OiAwXG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0NBTEUgPSB7IHg6IDEsIHk6IDEsIHo6IDEgfTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1FVQVRFUk5JT04gPSB7IHg6IDAsIHk6IDAsIHo6IDAsIHc6IDEgfTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BPU0lUSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7IHg6IDAsIHk6IDAsIHo6IDAgfTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lNUFVMU0UgPSB7IHg6IDAsIHk6IDAsIHo6IDAgfTtcblxuZXhwb3J0IGNvbnN0IERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDtcbmV4cG9ydCBjb25zdCBHUkFWSVRZID0geyB4OiAwLCB5OiAtMTAsIHo6IDAgfTtcblxuZXhwb3J0IGNvbnN0IEZST05UX0xFRlQgPSAwO1xuZXhwb3J0IGNvbnN0IEZST05UX1JJR0hUID0gMTtcbmV4cG9ydCBjb25zdCBCQUNLX0xFRlQgPSAyO1xuZXhwb3J0IGNvbnN0IEJBQ0tfUklHSFQgPSAzO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7IiwiaW1wb3J0IHtcbiAgICBVUERBVEVfQk9EWV9FVkVOVCxcbiAgICBSRUFEWV9FVkVOVCxcbiAgICBURVJNSU5BVEVfRVZFTlQsXG4gICAgRElTUEFUQ0hfRVZFTlQsXG4gICAgUEhZU0lDU19VUERBVEVfRVZFTlRcbn0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xuXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hlciB7XG5cbiAgICBzZW5kUGh5c2ljc1VwZGF0ZSA9IGR0ID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfVVBEQVRFX0VWRU5ULCBkdCB9KVxuICAgIHNlbmRSZWFkeUV2ZW50ID0gKCkgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogUkVBRFlfRVZFTlQgfSk7XG4gICAgc2VuZFRlcm1pbmF0ZUV2ZW50ID0gKCkgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogVEVSTUlOQVRFX0VWRU5UIH0pO1xuXG4gICAgc2VuZEJvZHlVcGRhdGUgPSAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogVVBEQVRFX0JPRFlfRVZFTlQsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngoKSwgeTogcG9zaXRpb24ueSgpLCB6OiBwb3NpdGlvbi56KCkgfSxcbiAgICAgICAgcXVhdGVybmlvbjogeyB4OiByb3RhdGlvbi54KCksIHk6IHJvdGF0aW9uLnkoKSwgejogcm90YXRpb24ueigpLCB3OiByb3RhdGlvbi53KCkgfSxcbiAgICAgICAgZHRcbiAgICB9KTtcblxuICAgIHNlbmREaXNwYXRjaEV2ZW50ID0gKHV1aWQsIGV2ZW50TmFtZSwgZXZlbnREYXRhKSA9PiBwb3N0TWVzc2FnZSh7XG4gICAgICAgIGV2ZW50OiBESVNQQVRDSF9FVkVOVCxcbiAgICAgICAgdXVpZCxcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudERhdGFcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEaXNwYXRjaGVyKCk7IiwiZXhwb3J0IGNvbnN0IGFwcGx5TWF0cml4NFRvVmVjdG9yMyA9ICh7IHggPSAwLCB5ID0gMCwgeiA9IDAgfSwgbWF0cml4ID0gW10pID0+IHtcbiAgICBjb25zdCB3ID0gMSAvICggbWF0cml4WyAzIF0gKiB4ICsgbWF0cml4WyA3IF0gKiB5ICsgbWF0cml4WyAxMSBdICogeiArIG1hdHJpeFsgMTUgXSApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogKCBtYXRyaXhbIDAgXSAqIHggKyBtYXRyaXhbIDQgXSAqIHkgKyBtYXRyaXhbIDggXSAqIHogKyBtYXRyaXhbIDEyIF0gKSAqIHcsXG4gICAgICAgIHk6ICggbWF0cml4WyAxIF0gKiB4ICsgbWF0cml4WyA1IF0gKiB5ICsgbWF0cml4WyA5IF0gKiB6ICsgbWF0cml4WyAxMyBdICkgKiB3LFxuICAgICAgICB6OiAoIG1hdHJpeFsgMiBdICogeCArIG1hdHJpeFsgNiBdICogeSArIG1hdHJpeFsgMTAgXSAqIHogKyBtYXRyaXhbIDE0IF0gKSAqIHcsXG4gICAgfVxufTsiLCJpbXBvcnQgZGlzcGF0Y2hlciBmcm9tICcuL2xpYi9kaXNwYXRjaGVyJztcbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcblxuaW1wb3J0IHtcbiAgICBhcHBseU1hdHJpeDRUb1ZlY3RvcjNcbn0gZnJvbSAnLi9saWIvbWF0aCc7XG5cbmltcG9ydCB7XG4gICAgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUsXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9TQ0FMRSxcbiAgICBESVNBQkxFX0RFQUNUSVZBVElPTixcbiAgICBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSxcbiAgICBERUZBVUxUX0lNUFVMU0Vcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJpZ2lkQm9keSA9IChzaGFwZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdXVpZCxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIG1hc3MsXG4gICAgICAgIGZyaWN0aW9uLFxuICAgICAgICByZXN0aXR1dGlvbiA9IC45LFxuICAgICAgICBkYW1waW5nID0geyBsaW5lYXI6IDAuMiwgYW5ndWxhcjogMC4yIH1cbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIHNoYXBlLmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuXG4gICAgY29uc3QgcmJJbmZvID0gbmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBzaGFwZSwgbG9jYWxJbmVydGlhKTtcbiAgICBjb25zdCBib2R5ID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkocmJJbmZvKTtcblxuICAgIFxuXG4gICAgaWYgKG1hc3MgPiAwKSB7XG4gICAgICAgIGJvZHkuc2V0RnJpY3Rpb24oZnJpY3Rpb24pO1xuICAgICAgICBib2R5LnNldFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKTtcbiAgICAgICAgYm9keS5zZXREYW1waW5nKGRhbXBpbmcubGluZWFyLCBkYW1waW5nLmFuZ3VsYXIpO1xuICAgICAgICBib2R5LnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgfVxuXG4gICAgLy8gc3RvcmluZyB1dWlkIGZvciBmdXR1cmUgcmVmZXJlbmNlXG4gICAgYm9keS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcblxuICAgIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgY29uc3QgYWRkTWVzaCA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICB1dWlkLFxuICAgICAgICB2ZXJ0aWNlcyxcbiAgICAgICAgbWF0cmljZXMsXG4gICAgICAgIGluZGV4ZXMsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzID0gMCxcbiAgICAgICAgZnJpY3Rpb24gPSAyXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBzY2FsZSA9IERFRkFVTFRfU0NBTEU7XG5cbiAgICBjb25zdCBidGEgPSBuZXcgQW1tby5idFZlY3RvcjMoKTtcbiAgICBjb25zdCBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTtcbiAgICBjb25zdCBidGMgPSBuZXcgQW1tby5idFZlY3RvcjMoKTtcbiAgICBjb25zdCB0cmlNZXNoID0gbmV3IEFtbW8uYnRUcmlhbmdsZU1lc2godHJ1ZSwgZmFsc2UpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdmVydGljZXNbaV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhlc1tpXSA/IGluZGV4ZXNbaV0gOiBudWxsO1xuICAgICAgICBjb25zdCBtYXRyaXggPSBBcnJheS5mcm9tKG1hdHJpY2VzW2ldKTtcblxuICAgICAgICBpZiAoaW5kZXgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kZXgubGVuZ3RoOyBqICs9IDMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFpID0gaW5kZXhbal0gKiAzO1xuICAgICAgICAgICAgY29uc3QgYmkgPSBpbmRleFtqICsgMV0gKiAzO1xuICAgICAgICAgICAgY29uc3QgY2kgPSBpbmRleFtqICsgMl0gKiAzO1xuXG4gICAgICAgICAgICBjb25zdCB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbYWldLCB5OiBjb21wb25lbnRzW2FpICsgMV0sIHo6IGNvbXBvbmVudHNbYWkgKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2JpXSwgeTogY29tcG9uZW50c1tiaSArIDFdLCB6OiBjb21wb25lbnRzW2JpICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgIGNvbnN0IHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tjaV0sIHk6IGNvbXBvbmVudHNbY2kgKyAxXSwgejogY29tcG9uZW50c1tjaSArIDJdIH0sIG1hdHJpeCk7XG5cbiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTtcbiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTtcbiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZSh2Yy54LCB2Yy55LCB2Yy56KTtcbiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb21wb25lbnRzLmxlbmd0aDsgaiArPSA5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2ogKyAwXSwgeTogY29tcG9uZW50c1tqICsgMV0sIHo6IGNvbXBvbmVudHNbaiArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2ogKyAzXSwgeTogY29tcG9uZW50c1tqICsgNF0sIHo6IGNvbXBvbmVudHNbaiArIDVdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2ogKyA2XSwgeTogY29tcG9uZW50c1tqICsgN10sIHo6IGNvbXBvbmVudHNbaiArIDhdIH0sIG1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7XG4gICAgICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopO1xuICAgICAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZSh2Yy54LCB2Yy55LCB2Yy56KTtcbiAgICAgICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvY2FsU2NhbGUgPSBuZXcgQW1tby5idFZlY3RvcjMoc2NhbGUueCwgc2NhbGUueSwgc2NhbGUueik7XG4gICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpO1xuICAgIEFtbW8uZGVzdHJveShsb2NhbFNjYWxlKTtcblxuICAgIGNvbnN0IGNvbGxpc2lvblNoYXBlID0gbmV3IEFtbW8uYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSh0cmlNZXNoLCB0cnVlLCB0cnVlKTtcbiAgICBjb2xsaXNpb25TaGFwZS5yZXNvdXJjZXMgPSBbdHJpTWVzaF07XG5cbiAgICBBbW1vLmRlc3Ryb3koYnRhKTtcbiAgICBBbW1vLmRlc3Ryb3koYnRiKTtcbiAgICBBbW1vLmRlc3Ryb3koYnRjKTtcblxuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5NRVNILCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBhZGRCb3ggPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgd2lkdGgsIGxlbmd0aCwgaGVpZ2h0LCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcyA9IDAsIGZyaWN0aW9uID0gMiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAwLjUsIGhlaWdodCAqIDAuNSwgbGVuZ3RoICogMC41KSk7XG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuQk9YLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3BoZXJlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCByYWRpdXMsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzID0gMCwgZnJpY3Rpb24gPSAyIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7XG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuU1BIRVJFLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0TGluZWFyVmVsb2NpdHkgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgdmVsb2NpdHkgPSBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSB9ID0gZGF0YTtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7XG4gICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kobGluZWFyVmVsb2NpdHkpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgeyBib2R5IH0gPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xufVxuXG5leHBvcnQgY29uc3QgYXBwbHlJbXB1c2UgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIGltcHVsc2UgPSBERUZBVUxUX0lNUFVMU0UgfSA9IGRhdGE7XG4gICAgY29uc3QgeyBib2R5IH0gPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IGltcHVsc2VWZWN0b3IgPSBuZXcgQW1tby5idFZlY3RvcjMoaW1wdWxzZS54LCBpbXB1bHNlLnksIGltcHVsc2Uueik7XG4gICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTtcbiAgICAgICAgQW1tby5kZXN0cm95KGltcHVsc2VWZWN0b3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZVJpZ2lkYm9keVVwZGF0ZSA9ICh7IGJvZHksIHV1aWQsIHN0YXRlID0gREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSwgZHQpID0+IHtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGxldCBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7XG4gICAgICAgIGxldCByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgY3JlYXRlUmlnaWRCb2R5IH0gZnJvbSAnLi9ib2RpZXMnO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuXG5pbXBvcnQge1xuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBhZGRQbGF5ZXIgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgd2lkdGgsIGhlaWdodCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgY2Fwc3VsZSA9IG5ldyBBbW1vLmJ0Q2Fwc3VsZVNoYXBlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICAvLyBkaXNhYmxpaW5nIHJvdGF0aW9uIGZvciBjb2xsaXNpb25zXG4gICAgYm9keS5zZXRBbmd1bGFyRmFjdG9yKDApO1xuXG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5QTEFZRVIsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQbGF5ZXJVcGRhdGUgPSAoeyBib2R5LCB1dWlkLCBzdGF0ZSA9IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0sIGR0KSA9PiB7XG4gICAgY29uc3QgeyBtb3ZlbWVudCwgZGlyZWN0aW9uLCBjYW1lcmFEaXJlY3Rpb24sIHF1YXRlcm5pb24sIHBvc2l0aW9uIH0gPSBzdGF0ZTtcblxuICAgIGNvbnN0IE1BWF9TUEVFRCA9IDE7XG4gICAgY29uc3Qgd2Fsa1ZlbG9jaXR5ID0gLjE7XG5cbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGNvbnN0IGxpbmVhclZlbG9jaXR5ID0gYm9keS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICBjb25zdCBzcGVlZCA9IGxpbmVhclZlbG9jaXR5Lmxlbmd0aCgpO1xuXG4gICAgICAgIGNvbnN0IGZvcndhcmREaXIgPSB0cmFuc2Zvcm0uZ2V0QmFzaXMoKS5nZXRSb3coMik7XG4gICAgICAgIGZvcndhcmREaXIubm9ybWFsaXplKCk7XG4gICAgICAgIGNvbnN0IHdhbGtEaXJlY3Rpb24gPSBuZXcgQW1tby5idFZlY3RvcjMoMC4wLCAwLjAsIDAuMCk7XG5cbiAgICAgICAgY29uc3Qgd2Fsa1NwZWVkID0gd2Fsa1ZlbG9jaXR5ICogZHQ7XG5cbiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCggd2Fsa0RpcmVjdGlvbi54KCkgKyBmb3J3YXJkRGlyLngoKSk7XG4gICAgICAgICAgICAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgKyBmb3J3YXJkRGlyLnkoKSk7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFooIHdhbGtEaXJlY3Rpb24ueigpICsgZm9yd2FyZERpci56KCkpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCggd2Fsa0RpcmVjdGlvbi54KCkgLSBmb3J3YXJkRGlyLngoKSk7XG4gICAgICAgICAgICAvL3dhbGtEaXJlY3Rpb24uc2V0WSggd2Fsa0RpcmVjdGlvbi55KCkgLSBmb3J3YXJkRGlyLnkoKSk7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFooIHdhbGtEaXJlY3Rpb24ueigpIC0gZm9yd2FyZERpci56KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb3ZlbWVudC5mb3J3YXJkICYmICFtb3ZlbWVudC5iYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICogMC4yKTtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFoobGluZWFyVmVsb2NpdHkueigpICogMC4yKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkge1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpO1xuXG4gICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBib2R5LnNldENlbnRlck9mTWFzc1RyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuXG4gICAgICAgIGxldCBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7XG4gICAgICAgIGxldCByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpO1xuICAgIH1cbn07IiwiaW1wb3J0IHtcbiAgICBHUkFWSVRZLFxuICAgIFRZUEVTXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IGhhbmRsZVJpZ2lkYm9keVVwZGF0ZSB9IGZyb20gJy4vYm9kaWVzJztcbmltcG9ydCB7IGhhbmRsZVZlaGljbGVVcGRhdGUgfSBmcm9tICcuL3ZlaGljbGVzJztcblxuaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBoYW5kbGVQbGF5ZXJVcGRhdGUgfSBmcm9tICcuL3BsYXllcic7XG5pbXBvcnQgeyBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5UIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuXG5jbGFzcyBDbG9jayB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsO1xuICAgIH1cblxuICAgIGdldERlbHRhKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMudGltZXN0YW1wKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRpbWUgLSB0aGlzLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlbHRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXb3JsZCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkID0gbmV3IEFtbW8uYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQodGhpcy5kaXNwYXRjaGVyLCB0aGlzLmJyb2FkcGhhc2UsIHRoaXMuc29sdmVyLCB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5zZXRHcmF2aXR5KG5ldyBBbW1vLmJ0VmVjdG9yMyhncmF2aXR5LngsIGdyYXZpdHkueSwgZ3Jhdml0eS56KSk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0QW1tb1dvcmxkID0gKCkgPT4gdGhpcy5hbW1vV29ybGQ7XG5cbiAgICBhZGRSaWdpZEJvZHkgPSBib2R5ID0+IHtcbiAgICAgICAgdGhpcy5hbW1vV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuYW1tb1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pO1xuICAgIH1cblxuICAgIHN0ZXBTaW11bGF0aW9uID0gZHQgPT4ge1xuICAgICAgICB0aGlzLmFtbW9Xb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVSaWdpZGJvZHlVcGRhdGUoZWxlbWVudCwgZHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5QTEFZRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUGxheWVyVXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuVkVISUNMRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWZWhpY2xlVXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRQaHlzaWNzVXBkYXRlKGR0KTtcblxuICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc2ltdWxhdGUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ29sbGlzaW9ucyA9ICgpID0+IHtcbiAgICAgICAgbGV0IGFtbW9EaXNwYXRjaGVyID0gdGhpcy5hbW1vV29ybGQuZ2V0RGlzcGF0Y2hlcigpO1xuICAgICAgICBsZXQgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykge1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7XG5cbiAgICAgICAgICAgIGxldCByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICAgICAgbGV0IHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpO1xuXG4gICAgICAgICAgICAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHNcbiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGNvbnRhY3RzID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3RQb2ludCA9IGNvbnRhY3RNYW5pZm9sZC5nZXRDb250YWN0UG9pbnQoaik7XG4gICAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gY29udGFjdFBvaW50LmdldERpc3RhbmNlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiggZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpO1xuXG4gICAgICAgICAgICAgICAgY29udGFjdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIwLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkwLngoKSwgeTogdmVsb2NpdHkwLnkoKSwgejogdmVsb2NpdHkwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMC54KCksIHk6IHdvcmxkUG9zMC55KCksIHo6IHdvcmxkUG9zMC56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczAueCgpLCB5OiBsb2NhbFBvczAueSgpLCB6OiBsb2NhbFBvczAueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIxLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkxLngoKSwgeTogdmVsb2NpdHkxLnkoKSwgejogdmVsb2NpdHkxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMS54KCksIHk6IHdvcmxkUG9zMS55KCksIHo6IHdvcmxkUG9zMS56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczEueCgpLCB5OiBsb2NhbFBvczEueSgpLCB6OiBsb2NhbFBvczEueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBDT0xMSVNJT05fREVURUNUSU9OX0VWRU5ULCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudChyYjEudXVpZCwgQ09MTElTSU9OX0RFVEVDVElPTl9FVkVOVCwgeyBjb250YWN0cyB9KTtcblxuICAgICAgICAgICAgLy8gQW1tby5kZXN0cm95KHJiMCk7XG4gICAgICAgICAgICAvLyBBbW1vLmRlc3Ryb3kocmIxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEJvZHkgPSBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50c1tkYXRhLnV1aWRdID0gZGF0YTtcbiAgICB9XG5cbiAgICB1cGRhdGVCb2R5U3RhdGUgPSAodXVpZCwgc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUsXG4gICAgICAgICAgICAuLi5zdGF0ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGRpc3Bvc2VCb2R5KHV1aWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5hbW1vV29ybGQucmVtb3ZlUmlnaWRCb2R5KGVsZW1lbnQuYm9keSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh1dWlkKTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmFtbW9Xb3JsZCk7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLnNvbHZlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmRpc3BhdGNoZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRUZXJtaW5hdGVFdmVudCgpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBTUEVFRF9DSEFOR0VfRVZFTlQsXG4gICAgQ0FSX0RJUkVDVElPTl9DSEFOR0VfRVZFTlRcbn0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuXG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5pbXBvcnQgZGlzcGF0Y2hlciBmcm9tICcuL2xpYi9kaXNwYXRjaGVyJztcblxuY29uc3QgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjtcbmNvbnN0IERFRkFVTFRfRlJJQ1RJT04gPSAxMDAwO1xuY29uc3QgREVGQVVMVF9NQVNTID0gODAwO1xuXG5leHBvcnQgY29uc3QgYWRkVmVoaWNsZSA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIHV1aWQsXG4gICAgICAgIHdoZWVscyxcbiAgICAgICAgbWFzcyA9IERFRkFVTFRfTUFTUyxcbiAgICAgICAgd2lkdGggPSAxLjgsXG4gICAgICAgIGhlaWdodCA9IC42LFxuICAgICAgICBsZW5ndGggPSA0LFxuICAgICAgICBmcmljdGlvbiA9IERFRkFVTFRfRlJJQ1RJT04sXG4gICAgICAgIHJvbGxJbmZsdWVuY2UgPSBERUZBVUxUX1JPTExfSU5GTFVFTkNFLFxuICAgICAgICB3aGVlbHNPcHRpb25zID0ge30sXG4gICAgICAgIHN1c3BlbnNpb25zID0ge31cbiAgICB9ID0gZGF0YTtcblxuICAgIGNvbnN0IHsgYmFjayA9IHt9LCBmcm9udCA9IHt9IH0gPSB3aGVlbHNPcHRpb25zO1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25CYWNrID0gLTEsXG4gICAgICAgIHJhZGl1czogd2hlZWxSYWRpdXNCYWNrID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tCYWNrID0gMSxcbiAgICAgICAgYXhpc0hlaWdodDogd2hlZWxBeGlzSGVpZ2h0QmFjayA9IC4zXG4gICAgfSA9IGJhY2s7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGF4aXNQb3NpdGlvbjogYXhpc1Bvc2l0aW9uRnJvbnQgPSAxLjcsXG4gICAgICAgIHJhZGl1czogd2hlZWxSYWRpdXNGcm9udCA9IC40LFxuICAgICAgICBoYWxmVHJhY2s6IHdoZWVsSGFsZlRyYWNrRnJvbnQgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRGcm9udCA9IC4zXG4gICAgfSA9IGZyb250O1xuXG4gICAgY29uc3QgeyBzdGlmZm5lc3MgPSAyMC4wLCBkYW1waW5nID0gMi4zLCBjb21wcmVzc2lvbiA9IDQuNCwgcmVzdExlbmd0aCA9IDAuNiB9ID0gc3VzcGVuc2lvbnM7XG5cblxuICAgIC8vIENoYXNzaXNcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogLjUsIGhlaWdodCAqIC41LCBsZW5ndGggKiAuNSkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBnZW9tZXRyeS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcbiAgICBjb25zdCBjaGFzc2lzID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkobmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBnZW9tZXRyeSwgbG9jYWxJbmVydGlhKSk7XG4gICAgY2hhc3Npcy5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTtcblxuXG4gICAgLy8gUmF5Y2FzdCBWZWhpY2xlXG4gICAgY29uc3QgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7XG4gICAgY29uc3QgcmF5Q2FzdGVyID0gbmV3IEFtbW8uYnREZWZhdWx0VmVoaWNsZVJheWNhc3Rlcih3b3JsZC5nZXRBbW1vV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLnNldEJvZHkoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVWZWhpY2xlVXBkYXRlID0gKHsgdmVoaWNsZSwgd2hlZWxzLCB1dWlkLCBzdGF0ZSA9IERFRkFVTFRfVkVISUNMRV9TVEFURSwgb3B0aW9ucyA9IHt9IH0sIGR0KSA9PiB7XG4gICAgY29uc3Qgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpO1xuXG4gICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBTUEVFRF9DSEFOR0VfRVZFTlQsIHsgc3BlZWQgfSk7XG5cbiAgICBsZXQgYnJlYWtpbmdGb3JjZSA9IDA7XG4gICAgbGV0IGVuZ2luZUZvcmNlID0gMDtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgc3RlZXJpbmdDbGFtcCA9IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgICAgIHN0ZWVyaW5nSW5jcmVtZW50ID0gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQsXG4gICAgICAgIG1heEVuZ2luZUZvcmNlID0gREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgICAgICBtYXhCcmVha2luZ0ZvcmNlID0gREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0VcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGlmIChzdGF0ZS5hY2NlbGVyYXRpb24pIHtcbiAgICAgICAgaWYgKHNwZWVkIDwgLTEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IG1heEVuZ2luZUZvcmNlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuYnJha2luZykge1xuICAgICAgICBpZiAoc3BlZWQgPiAxKVxuICAgICAgICAgICAgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7XG4gICAgICAgIGVsc2UgZW5naW5lRm9yY2UgPSAtbWF4RW5naW5lRm9yY2UgLyAyO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubGVmdCkge1xuICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgc3RlZXJpbmdDbGFtcClcbiAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcClcbiAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudClcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTtcbiAgICB2ZWhpY2xlLmFwcGx5RW5naW5lRm9yY2UoZW5naW5lRm9yY2UsIEJBQ0tfUklHSFQpO1xuXG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfUklHSFQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpO1xuXG4gICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfTEVGVCk7XG4gICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpO1xuXG4gICAgbGV0IHRtLCBwLCBxLCBpO1xuICAgIGNvbnN0IG4gPSB2ZWhpY2xlLmdldE51bVdoZWVscygpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgdmVoaWNsZS51cGRhdGVXaGVlbFRyYW5zZm9ybShpLCB0cnVlKTtcbiAgICAgICAgdG0gPSB2ZWhpY2xlLmdldFdoZWVsVHJhbnNmb3JtV1MoaSk7XG4gICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICAgICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgY29uc3Qgd2hlZWxVVUlEID0gd2hlZWxzW2ldO1xuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHdoZWVsVVVJRCwgcCwgcSwgZHQpO1xuICAgIH1cblxuICAgIHRtID0gdmVoaWNsZS5nZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0oKTtcbiAgICBwID0gdG0uZ2V0T3JpZ2luKCk7XG4gICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSB2ZWhpY2xlLmdldEZvcndhcmRWZWN0b3IoKTtcbiAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHV1aWQsIENBUl9ESVJFQ1RJT05fQ0hBTkdFX0VWRU5ULCB7XG4gICAgICAgIGRpcmVjdGlvbjoge1xuICAgICAgICAgICAgeDogZGlyZWN0aW9uLngoKSxcbiAgICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksXG4gICAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgcCwgcSwgZHQpO1xuICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZSh1dWlkLCBzdGF0ZSk7XG59IiwiaW1wb3J0IHtcbiAgICBURVJNSU5BVEVfRVZFTlQsXG4gICAgTE9BRF9FVkVOVCxcbiAgICBVUERBVEVfQk9EWV9FVkVOVCxcbiAgICBBRERfQk9YX0VWRU5ULFxuICAgIEFERF9WRUhJQ0xFX0VWRU5ULFxuICAgIEFERF9NT0RFTF9FVkVOVCxcbiAgICBBRERfUExBWUVSX0VWRU5ULFxuICAgIFNFVF9MSU5FQVJfVkVMT0NJVFlfRVZFTlQsXG4gICAgU0VUX1BPU0lUSU9OX0VWRU5ULFxuICAgIEFQUExZX0lNUFVMU0VfRVZFTlQsXG4gICAgRElTUE9TRV9FTEVNRU5UX0VWRU5ULFxuICAgIEFERF9TUEhFUkVfRVZFTlQsXG4gICAgU0VUX0NBUl9QT1NJVElPTl9FVkVOVFxufSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmltcG9ydCB7XG4gICAgTElCUkFSWV9OQU1FXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IGFkZFZlaGljbGUsIHNldFZlaGljbGVQb3NpdGlvbiB9IGZyb20gJy4vdmVoaWNsZXMnO1xuaW1wb3J0IHsgYWRkQm94LCBhZGRNZXNoLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2JvZGllcyc7XG5pbXBvcnQgeyBhZGRQbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuXG5jb25zdCBoYW5kbGVMb2FkRXZlbnQgPSBvcHRpb25zID0+IEFtbW8gPT4ge1xuICAgIHNlbGYuQW1tbyA9IEFtbW87XG5cbiAgICBvbm1lc3NhZ2UgPSAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgICAgIGNhc2UgQUREX0JPWF9FVkVOVDpcbiAgICAgICAgICAgICAgICBhZGRCb3goZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFERF9TUEhFUkVfRVZFTlQ6XG4gICAgICAgICAgICAgICAgYWRkU3BoZXJlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBRERfVkVISUNMRV9FVkVOVDpcbiAgICAgICAgICAgICAgICBhZGRWZWhpY2xlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBRERfTU9ERUxfRVZFTlQ6XG4gICAgICAgICAgICAgICAgYWRkTWVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQUREX1BMQVlFUl9FVkVOVDpcbiAgICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNFVF9MSU5FQVJfVkVMT0NJVFlfRVZFTlQ6XG4gICAgICAgICAgICAgICAgc2V0TGluZWFyVmVsb2NpdHkoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNFVF9QT1NJVElPTl9FVkVOVDpcbiAgICAgICAgICAgICAgICBzZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU0VUX0NBUl9QT1NJVElPTl9FVkVOVDpcbiAgICAgICAgICAgICAgICBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFQUExZX0lNUFVMU0VfRVZFTlQ6XG4gICAgICAgICAgICAgICAgYXBwbHlJbXB1c2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFVQREFURV9CT0RZX0VWRU5UOlxuICAgICAgICAgICAgICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZShkYXRhLnV1aWQsIGRhdGEuc3RhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBESVNQT1NFX0VMRU1FTlRfRVZFTlQ6XG4gICAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YS51dWlkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVEVSTUlOQVRFX0VWRU5UOlxuICAgICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd29ybGQuaW5pdChvcHRpb25zKTtcbiAgICBkaXNwYXRjaGVyLnNlbmRSZWFkeUV2ZW50KCk7XG4gICAgd29ybGQuc2ltdWxhdGUoKVxufTtcblxuY29uc3QgbG9hZEFtbW8gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTtcbiAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7XG5cbiAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpO1xufTtcblxub25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgY2FzZSBMT0FEX0VWRU5UOlxuICAgICAgICAgICAgbG9hZEFtbW8oZGF0YSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn0iXSwibmFtZXMiOlsiVEVSTUlOQVRFX0VWRU5UIiwiRElTUEFUQ0hfRVZFTlQiLCJMT0FEX0VWRU5UIiwiUkVBRFlfRVZFTlQiLCJVUERBVEVfQk9EWV9FVkVOVCIsIkFERF9CT1hfRVZFTlQiLCJBRERfVkVISUNMRV9FVkVOVCIsIkFERF9NT0RFTF9FVkVOVCIsIkFERF9QTEFZRVJfRVZFTlQiLCJBRERfU1BIRVJFX0VWRU5UIiwiRElTUE9TRV9FTEVNRU5UX0VWRU5UIiwiUEhZU0lDU19VUERBVEVfRVZFTlQiLCJTUEVFRF9DSEFOR0VfRVZFTlQiLCJDQVJfRElSRUNUSU9OX0NIQU5HRV9FVkVOVCIsIkNPTExJU0lPTl9ERVRFQ1RJT05fRVZFTlQiLCJTRVRfTElORUFSX1ZFTE9DSVRZX0VWRU5UIiwiU0VUX1BPU0lUSU9OX0VWRU5UIiwiU0VUX0NBUl9QT1NJVElPTl9FVkVOVCIsIkFQUExZX0lNUFVMU0VfRVZFTlQiLCJMSUJSQVJZX05BTUUiLCJUWVBFUyIsIkJPWCIsIlNQSEVSRSIsIlZFSElDTEUiLCJNRVNIIiwiUExBWUVSIiwiREVGQVVMVF9WRUhJQ0xFX1NUQVRFIiwidmVoaWNsZVN0ZWVyaW5nIiwiYWNjZWxlcmF0aW9uIiwiYnJlYWtpbmciLCJyaWdodCIsImxlZnQiLCJERUZBVUxUX1JJR0lEQk9EWV9TVEFURSIsInZlbG9jaXR5IiwieCIsInkiLCJ6IiwibW92ZW1lbnQiLCJmb3J3YXJkIiwiYmFja3dhcmRzIiwiZGlyZWN0aW9uIiwiREVGQVVMVF9TQ0FMRSIsIkRFRkFVTFRfTElORUFSX1ZFTE9DSVRZIiwiREVGQVVMVF9JTVBVTFNFIiwiRElTQUJMRV9ERUFDVElWQVRJT04iLCJHUkFWSVRZIiwiRlJPTlRfTEVGVCIsIkZST05UX1JJR0hUIiwiQkFDS19MRUZUIiwiQkFDS19SSUdIVCIsIkRFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIiwiREVGQVVMVF9TVEVFUklOR19DTEFNUCIsIkRFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSIsIkRFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIiwiRGlzcGF0Y2hlciIsImR0IiwicG9zdE1lc3NhZ2UiLCJldmVudCIsInV1aWQiLCJwb3NpdGlvbiIsInJvdGF0aW9uIiwicXVhdGVybmlvbiIsInciLCJldmVudE5hbWUiLCJldmVudERhdGEiLCJhcHBseU1hdHJpeDRUb1ZlY3RvcjMiLCJtYXRyaXgiLCJjcmVhdGVSaWdpZEJvZHkiLCJzaGFwZSIsIm9wdGlvbnMiLCJtYXNzIiwiZnJpY3Rpb24iLCJyZXN0aXR1dGlvbiIsImRhbXBpbmciLCJsaW5lYXIiLCJhbmd1bGFyIiwidHJhbnNmb3JtIiwiQW1tbyIsImJ0VHJhbnNmb3JtIiwic2V0SWRlbnRpdHkiLCJzZXRPcmlnaW4iLCJidFZlY3RvcjMiLCJzZXRSb3RhdGlvbiIsImJ0UXVhdGVybmlvbiIsIm1vdGlvblN0YXRlIiwiYnREZWZhdWx0TW90aW9uU3RhdGUiLCJsb2NhbEluZXJ0aWEiLCJjYWxjdWxhdGVMb2NhbEluZXJ0aWEiLCJyYkluZm8iLCJidFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8iLCJib2R5IiwiYnRSaWdpZEJvZHkiLCJzZXRGcmljdGlvbiIsInNldFJlc3RpdHV0aW9uIiwic2V0RGFtcGluZyIsInNldEFjdGl2YXRpb25TdGF0ZSIsIndvcmxkIiwiYWRkUmlnaWRCb2R5IiwiYWRkTWVzaCIsInZlcnRpY2VzIiwibWF0cmljZXMiLCJpbmRleGVzIiwic2NhbGUiLCJidGEiLCJidGIiLCJidGMiLCJ0cmlNZXNoIiwiYnRUcmlhbmdsZU1lc2giLCJpIiwibGVuZ3RoIiwiY29tcG9uZW50cyIsImluZGV4IiwiQXJyYXkiLCJmcm9tIiwiaiIsImFpIiwiYmkiLCJjaSIsInZhIiwidmIiLCJ2YyIsInNldFZhbHVlIiwiYWRkVHJpYW5nbGUiLCJsb2NhbFNjYWxlIiwic2V0U2NhbGluZyIsImRlc3Ryb3kiLCJjb2xsaXNpb25TaGFwZSIsImJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUiLCJyZXNvdXJjZXMiLCJzZXRCb2R5IiwidHlwZSIsInN0YXRlIiwiYWRkQm94IiwiZGF0YSIsIndpZHRoIiwiaGVpZ2h0IiwiZ2VvbWV0cnkiLCJidEJveFNoYXBlIiwiYWRkU3BoZXJlIiwicmFkaXVzIiwiYnRTcGhlcmVTaGFwZSIsInNldExpbmVhclZlbG9jaXR5IiwiZ2V0RWxlbWVudCIsImdldE1vdGlvblN0YXRlIiwibGluZWFyVmVsb2NpdHkiLCJzZXRQb3NpdGlvbiIsImdldFdvcmxkVHJhbnNmb3JtIiwic2V0V29ybGRUcmFuc2Zvcm0iLCJhcHBseUltcHVzZSIsImltcHVsc2UiLCJpbXB1bHNlVmVjdG9yIiwiYXBwbHlDZW50cmFsSW1wdWxzZSIsImhhbmRsZVJpZ2lkYm9keVVwZGF0ZSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0iLCJDbG9jayIsInRpbWVzdGFtcCIsInRpbWUiLCJEYXRlIiwibm93IiwiZGVsdGEiLCJXb3JsZCIsImdyYXZpdHkiLCJjb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0Q29sbGlzaW9uRGlzcGF0Y2hlciIsImJyb2FkcGhhc2UiLCJidERidnRCcm9hZHBoYXNlIiwic29sdmVyIiwiYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIiLCJhbW1vV29ybGQiLCJidERpc2NyZXRlRHluYW1pY3NXb3JsZCIsInNldEdyYXZpdHkiLCJpbml0aWFsaXNlZCIsImhhc0VsZW1lbnQiLCJlbGVtZW50cyIsImRlbGV0ZWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwiYWN0aW9uIiwiYWRkQWN0aW9uIiwic3RlcFNpbXVsYXRpb24iLCJjbG9jayIsImdldERlbHRhIiwiZWxlbWVudCIsImhhbmRsZVZlaGljbGVVcGRhdGUiLCJjYWxjdWxhdGVDb2xsaXNpb25zIiwicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwic2VuZFBoeXNpY3NVcGRhdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNpbXVsYXRlIiwiYmluZCIsImFtbW9EaXNwYXRjaGVyIiwiZ2V0RGlzcGF0Y2hlciIsIm51bU1hbmlmb2xkcyIsImdldE51bU1hbmlmb2xkcyIsImNvbnRhY3RNYW5pZm9sZCIsImdldE1hbmlmb2xkQnlJbmRleEludGVybmFsIiwicmIwIiwiY2FzdE9iamVjdCIsImdldEJvZHkwIiwicmIxIiwiZ2V0Qm9keTEiLCJudW1Db250YWN0cyIsImdldE51bUNvbnRhY3RzIiwiY29udGFjdHMiLCJjb250YWN0UG9pbnQiLCJnZXRDb250YWN0UG9pbnQiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlIiwidmVsb2NpdHkwIiwidmVsb2NpdHkxIiwid29ybGRQb3MwIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSIsIndvcmxkUG9zMSIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkIiLCJsb2NhbFBvczAiLCJnZXRfbV9sb2NhbFBvaW50QSIsImxvY2FsUG9zMSIsImdldF9tX2xvY2FsUG9pbnRCIiwicHVzaCIsIndvcmxkUG9zIiwibG9jYWxQb3MiLCJzZW5kRGlzcGF0Y2hFdmVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwic2VuZFRlcm1pbmF0ZUV2ZW50IiwidW5kZWZpbmVkIiwicmVtb3ZlUmlnaWRCb2R5IiwicmVtb3ZlRWxlbWVudCIsIkRFRkFVTFRfUk9MTF9JTkZMVUVOQ0UiLCJERUZBVUxUX0ZSSUNUSU9OIiwiREVGQVVMVF9NQVNTIiwiYWRkVmVoaWNsZSIsIndoZWVscyIsInJvbGxJbmZsdWVuY2UiLCJ3aGVlbHNPcHRpb25zIiwic3VzcGVuc2lvbnMiLCJiYWNrIiwiZnJvbnQiLCJheGlzUG9zaXRpb24iLCJheGlzUG9zaXRpb25CYWNrIiwid2hlZWxSYWRpdXNCYWNrIiwiaGFsZlRyYWNrIiwid2hlZWxIYWxmVHJhY2tCYWNrIiwiYXhpc0hlaWdodCIsIndoZWVsQXhpc0hlaWdodEJhY2siLCJheGlzUG9zaXRpb25Gcm9udCIsIndoZWVsUmFkaXVzRnJvbnQiLCJ3aGVlbEhhbGZUcmFja0Zyb250Iiwid2hlZWxBeGlzSGVpZ2h0RnJvbnQiLCJzdGlmZm5lc3MiLCJjb21wcmVzc2lvbiIsInJlc3RMZW5ndGgiLCJjaGFzc2lzIiwidHVuaW5nIiwiYnRWZWhpY2xlVHVuaW5nIiwicmF5Q2FzdGVyIiwiYnREZWZhdWx0VmVoaWNsZVJheWNhc3RlciIsImdldEFtbW9Xb3JsZCIsInZlaGljbGUiLCJidFJheWNhc3RWZWhpY2xlIiwic2V0Q29vcmRpbmF0ZVN5c3RlbSIsIndoZWVsRGlyZWN0aW9uQ1MwIiwid2hlZWxBeGxlQ1MiLCJhZGRXaGVlbCIsImlzRnJvbnQiLCJwb3MiLCJ3aGVlbEluZm8iLCJzZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzIiwic2V0X21fd2hlZWxzRGFtcGluZ1JlbGF4YXRpb24iLCJzZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24iLCJzZXRfbV9mcmljdGlvblNsaXAiLCJzZXRfbV9yb2xsSW5mbHVlbmNlIiwic2V0VmVoaWNsZVBvc2l0aW9uIiwiZ2V0UmlnaWRCb2R5IiwiZ2V0Q3VycmVudFNwZWVkS21Ib3VyIiwiYnJlYWtpbmdGb3JjZSIsImVuZ2luZUZvcmNlIiwic3RlZXJpbmdDbGFtcCIsInN0ZWVyaW5nSW5jcmVtZW50IiwibWF4RW5naW5lRm9yY2UiLCJtYXhCcmVha2luZ0ZvcmNlIiwiYnJha2luZyIsImFwcGx5RW5naW5lRm9yY2UiLCJzZXRCcmFrZSIsInNldFN0ZWVyaW5nVmFsdWUiLCJ0bSIsInAiLCJxIiwibiIsImdldE51bVdoZWVscyIsInVwZGF0ZVdoZWVsVHJhbnNmb3JtIiwiZ2V0V2hlZWxUcmFuc2Zvcm1XUyIsIndoZWVsVVVJRCIsImdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSIsImdldEZvcndhcmRWZWN0b3IiLCJ1cGRhdGVCb2R5U3RhdGUiLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLGVBQWUsR0FBRyxpQkFBeEI7SUFDQSxJQUFNQyxjQUFjLEdBQUcsZ0JBQXZCO0lBQ0EsSUFBTUMsVUFBVSxHQUFHLFlBQW5CO0lBQ0EsSUFBTUMsV0FBVyxHQUFHLGFBQXBCO0lBQ0EsSUFBTUMsaUJBQWlCLEdBQUcsbUJBQTFC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', false);
|
|
57509
57509
|
/* eslint-enable */var TERMINATE_EVENT = 'TERMINATE_EVENT';
|
|
57510
57510
|
var DISPATCH_EVENT = 'DISPATCH_EVENT';
|
|
57511
57511
|
var LOAD_EVENT = 'LOAD_EVENT';
|
|
@@ -57523,11 +57523,15 @@ var SPEED_CHANGE_EVENT = 'SPEED_CHANGE_EVENT';
|
|
|
57523
57523
|
var CAR_DIRECTION_CHANGE_EVENT = 'CAR_DIRECTION_CHANGE_EVENT';
|
|
57524
57524
|
var COLLISION_DETECTION_EVENT = 'COLLISION_DETECTION_EVENT';
|
|
57525
57525
|
var SET_LINEAR_VELOCITY_EVENT = 'SET_LINEAR_VELOCITY_EVENT';
|
|
57526
|
+
var SET_POSITION_EVENT = 'SET_POSITION_EVENT';
|
|
57527
|
+
var SET_CAR_POSITION_EVENT = 'SET_CAR_POSITION_EVENT';
|
|
57526
57528
|
var APPLY_IMPULSE_EVENT = 'APPLY_IMPULSE_EVENT';
|
|
57527
57529
|
var PHYSICS_EVENTS = {
|
|
57528
57530
|
SPEED_CHANGE_EVENT: SPEED_CHANGE_EVENT,
|
|
57529
57531
|
CAR_DIRECTION_CHANGE_EVENT: CAR_DIRECTION_CHANGE_EVENT,
|
|
57530
57532
|
SET_LINEAR_VELOCITY_EVENT: SET_LINEAR_VELOCITY_EVENT,
|
|
57533
|
+
SET_POSITION_EVENT: SET_POSITION_EVENT,
|
|
57534
|
+
SET_CAR_POSITION_EVENT: SET_CAR_POSITION_EVENT,
|
|
57531
57535
|
APPLY_IMPULSE_EVENT: APPLY_IMPULSE_EVENT,
|
|
57532
57536
|
COLLISION_DETECTION_EVENT: COLLISION_DETECTION_EVENT,
|
|
57533
57537
|
TERMINATE_EVENT: TERMINATE_EVENT,
|
|
@@ -57977,7 +57981,15 @@ function (_EventDispatcher) {
|
|
|
57977
57981
|
var element = Universe$1.getByUUID(uuid);
|
|
57978
57982
|
|
|
57979
57983
|
if (element) {
|
|
57980
|
-
element.
|
|
57984
|
+
if (element.getPhysicsOptions('applyPhysicsUpdate')) {
|
|
57985
|
+
element.handlePhysicsUpdate(position, quaternion);
|
|
57986
|
+
} else {
|
|
57987
|
+
element.dispatchEvent({
|
|
57988
|
+
type: Element.EVENTS.PHYSICS_UPDATE,
|
|
57989
|
+
position: position,
|
|
57990
|
+
quaternion: quaternion
|
|
57991
|
+
});
|
|
57992
|
+
}
|
|
57981
57993
|
}
|
|
57982
57994
|
});
|
|
57983
57995
|
|
|
@@ -58007,6 +58019,30 @@ function (_EventDispatcher) {
|
|
|
58007
58019
|
}
|
|
58008
58020
|
});
|
|
58009
58021
|
|
|
58022
|
+
_defineProperty(_assertThisInitialized(_this), "setPosition", function (element, position) {
|
|
58023
|
+
if (Config$1.physics().enabled) {
|
|
58024
|
+
var uuid = element.uuid();
|
|
58025
|
+
|
|
58026
|
+
_this.worker.postMessage({
|
|
58027
|
+
event: SET_POSITION_EVENT,
|
|
58028
|
+
uuid: uuid,
|
|
58029
|
+
position: position
|
|
58030
|
+
});
|
|
58031
|
+
}
|
|
58032
|
+
});
|
|
58033
|
+
|
|
58034
|
+
_defineProperty(_assertThisInitialized(_this), "setCarPosition", function (car, position) {
|
|
58035
|
+
if (Config$1.physics().enabled) {
|
|
58036
|
+
var uuid = car.uuid();
|
|
58037
|
+
|
|
58038
|
+
_this.worker.postMessage({
|
|
58039
|
+
event: SET_CAR_POSITION_EVENT,
|
|
58040
|
+
uuid: uuid,
|
|
58041
|
+
position: position
|
|
58042
|
+
});
|
|
58043
|
+
}
|
|
58044
|
+
});
|
|
58045
|
+
|
|
58010
58046
|
_defineProperty(_assertThisInitialized(_this), "applyImpulse", function (element, impulse) {
|
|
58011
58047
|
if (Config$1.physics().enabled) {
|
|
58012
58048
|
var uuid = element.uuid();
|
|
@@ -58048,8 +58084,9 @@ function (_EventDispatcher) {
|
|
|
58048
58084
|
}
|
|
58049
58085
|
}, {
|
|
58050
58086
|
key: "storeElement",
|
|
58051
|
-
value: function storeElement(element) {
|
|
58087
|
+
value: function storeElement(element, options) {
|
|
58052
58088
|
if (!this.hasElement(element)) {
|
|
58089
|
+
element.setPhysicsOptions(options);
|
|
58053
58090
|
var uuid = element.uuid();
|
|
58054
58091
|
this.elements.push(uuid);
|
|
58055
58092
|
} else {
|
|
@@ -58123,7 +58160,7 @@ function (_EventDispatcher) {
|
|
|
58123
58160
|
|
|
58124
58161
|
var description = _objectSpread2({}, mapColliderTypeToDescription$1(colliderType)(element), {}, options);
|
|
58125
58162
|
|
|
58126
|
-
this.storeElement(element);
|
|
58163
|
+
this.storeElement(element, options);
|
|
58127
58164
|
this.worker.postMessage(_objectSpread2({
|
|
58128
58165
|
event: mapColliderTypeToAddEvent$1(description.collider)
|
|
58129
58166
|
}, description, {
|
|
@@ -58137,7 +58174,7 @@ function (_EventDispatcher) {
|
|
|
58137
58174
|
if (Config$1.physics().enabled) {
|
|
58138
58175
|
var uuid = element.uuid();
|
|
58139
58176
|
var description = getBoxDescriptionForElement$1(element);
|
|
58140
|
-
this.storeElement(element);
|
|
58177
|
+
this.storeElement(element, options);
|
|
58141
58178
|
this.worker.postMessage(_objectSpread2({
|
|
58142
58179
|
event: ADD_VEHICLE_EVENT,
|
|
58143
58180
|
uuid: uuid
|
|
@@ -58157,7 +58194,7 @@ function (_EventDispatcher) {
|
|
|
58157
58194
|
matrices.push(matrixArray);
|
|
58158
58195
|
indexes.push(indexArray);
|
|
58159
58196
|
});
|
|
58160
|
-
this.storeElement(model);
|
|
58197
|
+
this.storeElement(model, options);
|
|
58161
58198
|
this.worker.postMessage(_objectSpread2({
|
|
58162
58199
|
event: ADD_MODEL_EVENT,
|
|
58163
58200
|
uuid: uuid,
|
|
@@ -58257,7 +58294,10 @@ function (_BaseScript) {
|
|
|
58257
58294
|
}]);
|
|
58258
58295
|
|
|
58259
58296
|
return BaseCar;
|
|
58260
|
-
}(BaseScript);var
|
|
58297
|
+
}(BaseScript);var BUILTIN = {
|
|
58298
|
+
BASECAR: 'BaseCar'
|
|
58299
|
+
};
|
|
58300
|
+
var Scripts =
|
|
58261
58301
|
/*#__PURE__*/
|
|
58262
58302
|
function () {
|
|
58263
58303
|
function Scripts() {
|
|
@@ -58291,9 +58331,7 @@ function () {
|
|
|
58291
58331
|
});
|
|
58292
58332
|
});
|
|
58293
58333
|
|
|
58294
|
-
this.map = {
|
|
58295
|
-
'BaseCar': BaseCar
|
|
58296
|
-
};
|
|
58334
|
+
this.map = _defineProperty({}, BUILTIN.BASECAR, BaseCar);
|
|
58297
58335
|
}
|
|
58298
58336
|
|
|
58299
58337
|
_createClass(Scripts, [{
|
|
@@ -60125,7 +60163,7 @@ function (_EventDispatcher) {
|
|
|
60125
60163
|
key: "getQuaternion",
|
|
60126
60164
|
value: function getQuaternion() {
|
|
60127
60165
|
if (this.hasBody()) {
|
|
60128
|
-
return this.getBody().quaternion;
|
|
60166
|
+
return this.getBody().quaternion.clone();
|
|
60129
60167
|
}
|
|
60130
60168
|
}
|
|
60131
60169
|
}, {
|
|
@@ -60618,6 +60656,7 @@ function (_Entity) {
|
|
|
60618
60656
|
_this.options = _objectSpread2({}, _options, {
|
|
60619
60657
|
name: _name
|
|
60620
60658
|
});
|
|
60659
|
+
_this.physicsOptions = {};
|
|
60621
60660
|
|
|
60622
60661
|
_this.setBody({
|
|
60623
60662
|
geometry: geometry,
|
|
@@ -60758,6 +60797,16 @@ function (_Entity) {
|
|
|
60758
60797
|
|
|
60759
60798
|
return [];
|
|
60760
60799
|
}
|
|
60800
|
+
}, {
|
|
60801
|
+
key: "setPhysicsOptions",
|
|
60802
|
+
value: function setPhysicsOptions(options) {
|
|
60803
|
+
this.physicsOptions = options;
|
|
60804
|
+
}
|
|
60805
|
+
}, {
|
|
60806
|
+
key: "getPhysicsOptions",
|
|
60807
|
+
value: function getPhysicsOptions(option) {
|
|
60808
|
+
return option ? this.physicsOptions[option] : this.physicsOptions;
|
|
60809
|
+
}
|
|
60761
60810
|
}, {
|
|
60762
60811
|
key: "enablePhysics",
|
|
60763
60812
|
value: function enablePhysics() {
|
|
@@ -61007,6 +61056,14 @@ function (_Entity) {
|
|
|
61007
61056
|
}, this.options);
|
|
61008
61057
|
}
|
|
61009
61058
|
}
|
|
61059
|
+
}], [{
|
|
61060
|
+
key: "EVENTS",
|
|
61061
|
+
get: function get() {
|
|
61062
|
+
return {
|
|
61063
|
+
COLLISION_EVENT: 'COLLISION_EVENT',
|
|
61064
|
+
PHYSICS_UPDATE: 'PHYSICS_UPDATE'
|
|
61065
|
+
};
|
|
61066
|
+
}
|
|
61010
61067
|
}]);
|
|
61011
61068
|
|
|
61012
61069
|
return Element;
|
|
@@ -83141,4 +83198,4 @@ var Shaders$1 = new Shaders();var Shader$1 = function Shader(name, attributes, u
|
|
|
83141
83198
|
this.instance = this.shader.instance;
|
|
83142
83199
|
}
|
|
83143
83200
|
};// import Assets from './core/Assets';
|
|
83144
|
-
window.THREE = THREE$1;export{LightAmbient as AmbientLight,Atmosphere,Audio$2 as Audio,BackgroundSound,BaseScript,Box,Camera$1 as Camera,Color$1 as Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_TYPES,Element,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight$1 as HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line$1 as Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PARTICLES,constants$1 as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter as ParticlEmitter,Particles$1 as Particles,index as Partykals,Physics$1 as Physics,Plane$1 as Plane,PointLight$1 as PointLight,PostProcessing$1 as PostProcessing,Provider,Router$1 as Router,Scene$2 as Scene,Scripts$1 as Scripts,Shader$1 as Shader,Skybox,Sound,Sphere$1 as Sphere,SpotLight$1 as SpotLight,Sprite$1 as Sprite,Stats$1 as Stats,SunLight,THREE$1 as THREE,Universe$1 as Universe,Vector3$1 as Vector3,author$1 as author,connect,constants,functions,math,utils as physicsUtils,index$1 as store,strings,uuid$1 as uuid,workers};
|
|
83201
|
+
window.THREE = THREE$1;export{LightAmbient as AmbientLight,Atmosphere,Audio$2 as Audio,BUILTIN,BackgroundSound,BaseScript,Box,Camera$1 as Camera,Color$1 as Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_TYPES,Element,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight$1 as HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line$1 as Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PARTICLES,constants$1 as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter as ParticlEmitter,Particles$1 as Particles,index as Partykals,Physics$1 as Physics,Plane$1 as Plane,PointLight$1 as PointLight,PostProcessing$1 as PostProcessing,Provider,Router$1 as Router,Scene$2 as Scene,Scripts$1 as Scripts,Shader$1 as Shader,Skybox,Sound,Sphere$1 as Sphere,SpotLight$1 as SpotLight,Sprite$1 as Sprite,Stats$1 as Stats,SunLight,THREE$1 as THREE,Universe$1 as Universe,Vector3$1 as Vector3,author$1 as author,connect,constants,functions,math,utils as physicsUtils,index$1 as store,strings,uuid$1 as uuid,workers};
|