@aws-cdk/integ-runner 2.45.0 → 2.47.0
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/THIRD_PARTY_LICENSES +2 -2
- package/lib/index.js +1 -1
- package/lib/runner/integ-test-runner.js +26 -18
- package/lib/runner/runner-base.d.ts +1 -0
- package/lib/runner/runner-base.js +2 -1
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +10 -2
- package/lib/workers/extract/index.js +12928 -4590
- package/package.json +11 -11
package/lib/index.js
CHANGED
|
@@ -10196,4 +10196,4 @@ var cli_1 = (init_cli(), __toCommonJS(cli_exports));
|
|
|
10196
10196
|
Object.defineProperty(exports, "cli", { enumerable: true, get: function() {
|
|
10197
10197
|
return cli_1.cli;
|
|
10198
10198
|
} });
|
|
10199
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3dvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvaW5kZXguanMiLCAibG9nZ2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWxpZnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL3BvbHlmaWxscy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvbGVnYWN5LXN0cmVhbXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2Nsb25lLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9ncmFjZWZ1bC1mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2ZzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hdC1sZWFzdC1ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL21ha2UtZGlyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5LXN5bmMvY29weS1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcGF0aC1leGlzdHMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2NvcHkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL3JpbXJhZi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2VtcHR5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2ZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXBhdGhzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstdHlwZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvanNvbmZpbGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUtc3luYy9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlLXN5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL21vdmUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAicnVubmVyL2ludGVncmF0aW9uLXRlc3RzLnRzIiwgIndvcmtlcnMvY29tbW9uLnRzIiwgInV0aWxzLnRzIiwgIndvcmtlcnMvaW50ZWctdGVzdC13b3JrZXIudHMiLCAid29ya2Vycy9pbnRlZy1zbmFwc2hvdC13b3JrZXIudHMiLCAid29ya2Vycy9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZXNjYWxhZGUvc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZXF1aXJlLWRpcmVjdG9yeS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95YXJncy9pbmRleC5janMiLCAiY2xpLnRzIiwgImluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwgIi8qIE1JVCBsaWNlbnNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmNvbnN0IGNzc0tleXdvcmRzID0gcmVxdWlyZSgnY29sb3ItbmFtZScpO1xuXG4vLyBOT1RFOiBjb252ZXJzaW9ucyBzaG91bGQgb25seSByZXR1cm4gcHJpbWl0aXZlIHZhbHVlcyAoaS5lLiBhcnJheXMsIG9yXG4vLyAgICAgICB2YWx1ZXMgdGhhdCBnaXZlIGNvcnJlY3QgYHR5cGVvZmAgcmVzdWx0cykuXG4vLyAgICAgICBkbyBub3QgdXNlIGJveCB2YWx1ZXMgdHlwZXMgKGkuZS4gTnVtYmVyKCksIFN0cmluZygpLCBldGMuKVxuXG5jb25zdCByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRyZXZlcnNlS2V5d29yZHNbY3NzS2V5d29yZHNba2V5XV0gPSBrZXk7XG59XG5cbmNvbnN0IGNvbnZlcnQgPSB7XG5cdHJnYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdyZ2InfSxcblx0aHNsOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzbCd9LFxuXHRoc3Y6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHN2J30sXG5cdGh3Yjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdod2InfSxcblx0Y215azoge2NoYW5uZWxzOiA0LCBsYWJlbHM6ICdjbXlrJ30sXG5cdHh5ejoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICd4eXonfSxcblx0bGFiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xhYid9LFxuXHRsY2g6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGNoJ30sXG5cdGhleDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnaGV4J119LFxuXHRrZXl3b3JkOiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydrZXl3b3JkJ119LFxuXHRhbnNpMTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kxNiddfSxcblx0YW5zaTI1Njoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTI1NiddfSxcblx0aGNnOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydoJywgJ2MnLCAnZyddfSxcblx0YXBwbGU6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ3IxNicsICdnMTYnLCAnYjE2J119LFxuXHRncmF5OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydncmF5J119XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cbi8vIEhpZGUgLmNoYW5uZWxzIGFuZCAubGFiZWxzIHByb3BlcnRpZXNcbmZvciAoY29uc3QgbW9kZWwgb2YgT2JqZWN0LmtleXMoY29udmVydCkpIHtcblx0aWYgKCEoJ2NoYW5uZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoISgnbGFiZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoY29udmVydFttb2RlbF0ubGFiZWxzLmxlbmd0aCAhPT0gY29udmVydFttb2RlbF0uY2hhbm5lbHMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogJyArIG1vZGVsKTtcblx0fVxuXG5cdGNvbnN0IHtjaGFubmVscywgbGFiZWxzfSA9IGNvbnZlcnRbbW9kZWxdO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0uY2hhbm5lbHM7XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5sYWJlbHM7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGxhYmVsc30pO1xufVxuXG5jb252ZXJ0LnJnYi5oc2wgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGVsdGEgPSBtYXggLSBtaW47XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmIChyID09PSBtYXgpIHtcblx0XHRoID0gKGcgLSBiKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGcgPT09IG1heCkge1xuXHRcdGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuXHRcdGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXHR9XG5cblx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGwgPSAobWluICsgbWF4KSAvIDI7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAobCA8PSAwLjUpIHtcblx0XHRzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcblx0fSBlbHNlIHtcblx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cdH1cblxuXHRyZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuaHN2ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgcmRpZjtcblx0bGV0IGdkaWY7XG5cdGxldCBiZGlmO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgdiA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmID0gdiAtIE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmYyA9IGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICh2IC0gYykgLyA2IC8gZGlmZiArIDEgLyAyO1xuXHR9O1xuXG5cdGlmIChkaWZmID09PSAwKSB7XG5cdFx0aCA9IDA7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRpZmYgLyB2O1xuXHRcdHJkaWYgPSBkaWZmYyhyKTtcblx0XHRnZGlmID0gZGlmZmMoZyk7XG5cdFx0YmRpZiA9IGRpZmZjKGIpO1xuXG5cdFx0aWYgKHIgPT09IHYpIHtcblx0XHRcdGggPSBiZGlmIC0gZ2RpZjtcblx0XHR9IGVsc2UgaWYgKGcgPT09IHYpIHtcblx0XHRcdGggPSAoMSAvIDMpICsgcmRpZiAtIGJkaWY7XG5cdFx0fSBlbHNlIGlmIChiID09PSB2KSB7XG5cdFx0XHRoID0gKDIgLyAzKSArIGdkaWYgLSByZGlmO1xuXHRcdH1cblxuXHRcdGlmIChoIDwgMCkge1xuXHRcdFx0aCArPSAxO1xuXHRcdH0gZWxzZSBpZiAoaCA+IDEpIHtcblx0XHRcdGggLT0gMTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gW1xuXHRcdGggKiAzNjAsXG5cdFx0cyAqIDEwMCxcblx0XHR2ICogMTAwXG5cdF07XG59O1xuXG5jb252ZXJ0LnJnYi5od2IgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF07XG5cdGNvbnN0IGcgPSByZ2JbMV07XG5cdGxldCBiID0gcmdiWzJdO1xuXHRjb25zdCBoID0gY29udmVydC5yZ2IuaHNsKHJnYilbMF07XG5cdGNvbnN0IHcgPSAxIC8gMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpO1xuXG5cdGIgPSAxIC0gMSAvIDI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuXHRyZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuY215ayA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHRjb25zdCBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG5cdGNvbnN0IGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cblx0cmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn07XG5cbmZ1bmN0aW9uIGNvbXBhcmF0aXZlRGlzdGFuY2UoeCwgeSkge1xuXHQvKlxuXHRcdFNlZSBodHRwczovL2VuLm0ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9kaXN0YW5jZSNTcXVhcmVkX0V1Y2xpZGVhbl9kaXN0YW5jZVxuXHQqL1xuXHRyZXR1cm4gKFxuXHRcdCgoeFswXSAtIHlbMF0pICoqIDIpICtcblx0XHQoKHhbMV0gLSB5WzFdKSAqKiAyKSArXG5cdFx0KCh4WzJdIC0geVsyXSkgKiogMilcblx0KTtcbn1cblxuY29udmVydC5yZ2Iua2V5d29yZCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgcmV2ZXJzZWQgPSByZXZlcnNlS2V5d29yZHNbcmdiXTtcblx0aWYgKHJldmVyc2VkKSB7XG5cdFx0cmV0dXJuIHJldmVyc2VkO1xuXHR9XG5cblx0bGV0IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblx0bGV0IGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcblxuXHRmb3IgKGNvbnN0IGtleXdvcmQgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcblxuXHRcdC8vIENvbXB1dGUgY29tcGFyYXRpdmUgZGlzdGFuY2Vcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvbXBhcmF0aXZlRGlzdGFuY2UocmdiLCB2YWx1ZSk7XG5cblx0XHQvLyBDaGVjayBpZiBpdHMgbGVzcywgaWYgc28gc2V0IGFzIGNsb3Nlc3Rcblx0XHRpZiAoZGlzdGFuY2UgPCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlKSB7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdEtleXdvcmQgPSBrZXl3b3JkO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG59O1xuXG5jb252ZXJ0LmtleXdvcmQucmdiID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0cmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufTtcblxuY29udmVydC5yZ2IueHl6ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgciA9IHJnYlswXSAvIDI1NTtcblx0bGV0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGxldCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wNDA0NSA/ICgoKHIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChyIC8gMTIuOTIpO1xuXHRnID0gZyA+IDAuMDQwNDUgPyAoKChnICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoZyAvIDEyLjkyKTtcblx0YiA9IGIgPiAwLjA0MDQ1ID8gKCgoYiArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGIgLyAxMi45Mik7XG5cblx0Y29uc3QgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcblx0Y29uc3QgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcblx0Y29uc3QgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuXHRyZXR1cm4gW3ggKiAxMDAsIHkgKiAxMDAsIHogKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IubGFiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB4eXogPSBjb252ZXJ0LnJnYi54eXoocmdiKTtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmhzbC5yZ2IgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF0gLyAzNjA7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCB0Mjtcblx0bGV0IHQzO1xuXHRsZXQgdmFsO1xuXG5cdGlmIChzID09PSAwKSB7XG5cdFx0dmFsID0gbCAqIDI1NTtcblx0XHRyZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuXHR9XG5cblx0aWYgKGwgPCAwLjUpIHtcblx0XHR0MiA9IGwgKiAoMSArIHMpO1xuXHR9IGVsc2Uge1xuXHRcdHQyID0gbCArIHMgLSBsICogcztcblx0fVxuXG5cdGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcblxuXHRjb25zdCByZ2IgPSBbMCwgMCwgMF07XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRpZiAodDMgPCAwKSB7XG5cdFx0XHR0MysrO1xuXHRcdH1cblxuXHRcdGlmICh0MyA+IDEpIHtcblx0XHRcdHQzLS07XG5cdFx0fVxuXG5cdFx0aWYgKDYgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuXHRcdH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDI7XG5cdFx0fSBlbHNlIGlmICgzICogdDMgPCAyKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbCA9IHQxO1xuXHRcdH1cblxuXHRcdHJnYltpXSA9IHZhbCAqIDI1NTtcblx0fVxuXG5cdHJldHVybiByZ2I7XG59O1xuXG5jb252ZXJ0LmhzbC5oc3YgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF07XG5cdGxldCBzID0gaHNsWzFdIC8gMTAwO1xuXHRsZXQgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHNtaW4gPSBzO1xuXHRjb25zdCBsbWluID0gTWF0aC5tYXgobCwgMC4wMSk7XG5cblx0bCAqPSAyO1xuXHRzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRzbWluICo9IGxtaW4gPD0gMSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0Y29uc3QgdiA9IChsICsgcykgLyAyO1xuXHRjb25zdCBzdiA9IGwgPT09IDAgPyAoMiAqIHNtaW4pIC8gKGxtaW4gKyBzbWluKSA6ICgyICogcykgLyAobCArIHMpO1xuXG5cdHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YucmdiID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdIC8gNjA7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGxldCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCBoaSA9IE1hdGguZmxvb3IoaCkgJSA2O1xuXG5cdGNvbnN0IGYgPSBoIC0gTWF0aC5mbG9vcihoKTtcblx0Y29uc3QgcCA9IDI1NSAqIHYgKiAoMSAtIHMpO1xuXHRjb25zdCBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSk7XG5cdGNvbnN0IHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKTtcblx0diAqPSAyNTU7XG5cblx0c3dpdGNoIChoaSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHJldHVybiBbdiwgdCwgcF07XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cmV0dXJuIFtxLCB2LCBwXTtcblx0XHRjYXNlIDI6XG5cdFx0XHRyZXR1cm4gW3AsIHYsIHRdO1xuXHRcdGNhc2UgMzpcblx0XHRcdHJldHVybiBbcCwgcSwgdl07XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cmV0dXJuIFt0LCBwLCB2XTtcblx0XHRjYXNlIDU6XG5cdFx0XHRyZXR1cm4gW3YsIHAsIHFdO1xuXHR9XG59O1xuXG5jb252ZXJ0Lmhzdi5oc2wgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF07XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IHZtaW4gPSBNYXRoLm1heCh2LCAwLjAxKTtcblx0bGV0IHNsO1xuXHRsZXQgbDtcblxuXHRsID0gKDIgLSBzKSAqIHY7XG5cdGNvbnN0IGxtaW4gPSAoMiAtIHMpICogdm1pbjtcblx0c2wgPSBzICogdm1pbjtcblx0c2wgLz0gKGxtaW4gPD0gMSkgPyBsbWluIDogMiAtIGxtaW47XG5cdHNsID0gc2wgfHwgMDtcblx0bCAvPSAyO1xuXG5cdHJldHVybiBbaCwgc2wgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5jb252ZXJ0Lmh3Yi5yZ2IgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IGggPSBod2JbMF0gLyAzNjA7XG5cdGxldCB3aCA9IGh3YlsxXSAvIDEwMDtcblx0bGV0IGJsID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCByYXRpbyA9IHdoICsgYmw7XG5cdGxldCBmO1xuXG5cdC8vIFdoICsgYmwgY2FudCBiZSA+IDFcblx0aWYgKHJhdGlvID4gMSkge1xuXHRcdHdoIC89IHJhdGlvO1xuXHRcdGJsIC89IHJhdGlvO1xuXHR9XG5cblx0Y29uc3QgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuXHRjb25zdCB2ID0gMSAtIGJsO1xuXHRmID0gNiAqIGggLSBpO1xuXG5cdGlmICgoaSAmIDB4MDEpICE9PSAwKSB7XG5cdFx0ZiA9IDEgLSBmO1xuXHR9XG5cblx0Y29uc3QgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvblxuXG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXHRzd2l0Y2ggKGkpIHtcblx0XHRkZWZhdWx0OlxuXHRcdGNhc2UgNjpcblx0XHRjYXNlIDA6IHIgPSB2OyAgZyA9IG47ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMTogciA9IG47ICBnID0gdjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAyOiByID0gd2g7IGcgPSB2OyAgYiA9IG47IGJyZWFrO1xuXHRcdGNhc2UgMzogciA9IHdoOyBnID0gbjsgIGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDQ6IHIgPSBuOyAgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA1OiByID0gdjsgIGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQuY215ay5yZ2IgPSBmdW5jdGlvbiAoY215aykge1xuXHRjb25zdCBjID0gY215a1swXSAvIDEwMDtcblx0Y29uc3QgbSA9IGNteWtbMV0gLyAxMDA7XG5cdGNvbnN0IHkgPSBjbXlrWzJdIC8gMTAwO1xuXHRjb25zdCBrID0gY215a1szXSAvIDEwMDtcblxuXHRjb25zdCByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGcgPSAxIC0gTWF0aC5taW4oMSwgbSAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgYiA9IDEgLSBNYXRoLm1pbigxLCB5ICogKDEgLSBrKSArIGspO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5yZ2IgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGNvbnN0IHggPSB4eXpbMF0gLyAxMDA7XG5cdGNvbnN0IHkgPSB4eXpbMV0gLyAxMDA7XG5cdGNvbnN0IHogPSB4eXpbMl0gLyAxMDA7XG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cblx0ciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuXHRnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcblx0YiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAociAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiByICogMTIuOTI7XG5cblx0ZyA9IGcgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoZyAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBnICogMTIuOTI7XG5cblx0YiA9IGIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoYiAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBiICogMTIuOTI7XG5cblx0ciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcblx0ZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcblx0YiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoubGFiID0gZnVuY3Rpb24gKHh5eikge1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQubGFiLnh5eiA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IHg7XG5cdGxldCB5O1xuXHRsZXQgejtcblxuXHR5ID0gKGwgKyAxNikgLyAxMTY7XG5cdHggPSBhIC8gNTAwICsgeTtcblx0eiA9IHkgLSBiIC8gMjAwO1xuXG5cdGNvbnN0IHkyID0geSAqKiAzO1xuXHRjb25zdCB4MiA9IHggKiogMztcblx0Y29uc3QgejIgPSB6ICoqIDM7XG5cdHkgPSB5MiA+IDAuMDA4ODU2ID8geTIgOiAoeSAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR4ID0geDIgPiAwLjAwODg1NiA/IHgyIDogKHggLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eiA9IHoyID4gMC4wMDg4NTYgPyB6MiA6ICh6IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cblx0eCAqPSA5NS4wNDc7XG5cdHkgKj0gMTAwO1xuXHR6ICo9IDEwOC44ODM7XG5cblx0cmV0dXJuIFt4LCB5LCB6XTtcbn07XG5cbmNvbnZlcnQubGFiLmxjaCA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IGg7XG5cblx0Y29uc3QgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuXHRoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG5cblx0cmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmNvbnZlcnQubGNoLmxhYiA9IGZ1bmN0aW9uIChsY2gpIHtcblx0Y29uc3QgbCA9IGxjaFswXTtcblx0Y29uc3QgYyA9IGxjaFsxXTtcblx0Y29uc3QgaCA9IGxjaFsyXTtcblxuXHRjb25zdCBociA9IGggLyAzNjAgKiAyICogTWF0aC5QSTtcblx0Y29uc3QgYSA9IGMgKiBNYXRoLmNvcyhocik7XG5cdGNvbnN0IGIgPSBjICogTWF0aC5zaW4oaHIpO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncywgc2F0dXJhdGlvbiA9IG51bGwpIHtcblx0Y29uc3QgW3IsIGcsIGJdID0gYXJncztcblx0bGV0IHZhbHVlID0gc2F0dXJhdGlvbiA9PT0gbnVsbCA/IGNvbnZlcnQucmdiLmhzdihhcmdzKVsyXSA6IHNhdHVyYXRpb247IC8vIEhzdiAtPiBhbnNpMTYgb3B0aW1pemF0aW9uXG5cblx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gNTApO1xuXG5cdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdHJldHVybiAzMDtcblx0fVxuXG5cdGxldCBhbnNpID0gMzBcblx0XHQrICgoTWF0aC5yb3VuZChiIC8gMjU1KSA8PCAyKVxuXHRcdHwgKE1hdGgucm91bmQoZyAvIDI1NSkgPDwgMSlcblx0XHR8IE1hdGgucm91bmQociAvIDI1NSkpO1xuXG5cdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdGFuc2kgKz0gNjA7XG5cdH1cblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuaHN2LmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIE9wdGltaXphdGlvbiBoZXJlOyB3ZSBhbHJlYWR5IGtub3cgdGhlIHZhbHVlIGFuZCBkb24ndCBuZWVkIHRvIGdldFxuXHQvLyBpdCBjb252ZXJ0ZWQgZm9yIHVzLlxuXHRyZXR1cm4gY29udmVydC5yZ2IuYW5zaTE2KGNvbnZlcnQuaHN2LnJnYihhcmdzKSwgYXJnc1syXSk7XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMjU2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgciA9IGFyZ3NbMF07XG5cdGNvbnN0IGcgPSBhcmdzWzFdO1xuXHRjb25zdCBiID0gYXJnc1syXTtcblxuXHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0aWYgKHIgPT09IGcgJiYgZyA9PT0gYikge1xuXHRcdGlmIChyIDwgOCkge1xuXHRcdFx0cmV0dXJuIDE2O1xuXHRcdH1cblxuXHRcdGlmIChyID4gMjQ4KSB7XG5cdFx0XHRyZXR1cm4gMjMxO1xuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLnJvdW5kKCgociAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0fVxuXG5cdGNvbnN0IGFuc2kgPSAxNlxuXHRcdCsgKDM2ICogTWF0aC5yb3VuZChyIC8gMjU1ICogNSkpXG5cdFx0KyAoNiAqIE1hdGgucm91bmQoZyAvIDI1NSAqIDUpKVxuXHRcdCsgTWF0aC5yb3VuZChiIC8gMjU1ICogNSk7XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0LmFuc2kxNi5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRsZXQgY29sb3IgPSBhcmdzICUgMTA7XG5cblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoY29sb3IgPT09IDAgfHwgY29sb3IgPT09IDcpIHtcblx0XHRpZiAoYXJncyA+IDUwKSB7XG5cdFx0XHRjb2xvciArPSAzLjU7XG5cdFx0fVxuXG5cdFx0Y29sb3IgPSBjb2xvciAvIDEwLjUgKiAyNTU7XG5cblx0XHRyZXR1cm4gW2NvbG9yLCBjb2xvciwgY29sb3JdO1xuXHR9XG5cblx0Y29uc3QgbXVsdCA9ICh+fihhcmdzID4gNTApICsgMSkgKiAwLjU7XG5cdGNvbnN0IHIgPSAoKGNvbG9yICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgZyA9ICgoKGNvbG9yID4+IDEpICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgYiA9ICgoKGNvbG9yID4+IDIpICYgMSkgKiBtdWx0KSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5hbnNpMjU2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGFyZ3MgPj0gMjMyKSB7XG5cdFx0Y29uc3QgYyA9IChhcmdzIC0gMjMyKSAqIDEwICsgODtcblx0XHRyZXR1cm4gW2MsIGMsIGNdO1xuXHR9XG5cblx0YXJncyAtPSAxNjtcblxuXHRsZXQgcmVtO1xuXHRjb25zdCByID0gTWF0aC5mbG9vcihhcmdzIC8gMzYpIC8gNSAqIDI1NTtcblx0Y29uc3QgZyA9IE1hdGguZmxvb3IoKHJlbSA9IGFyZ3MgJSAzNikgLyA2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGIgPSAocmVtICUgNikgLyA1ICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oZXggPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBpbnRlZ2VyID0gKChNYXRoLnJvdW5kKGFyZ3NbMF0pICYgMHhGRikgPDwgMTYpXG5cdFx0KyAoKE1hdGgucm91bmQoYXJnc1sxXSkgJiAweEZGKSA8PCA4KVxuXHRcdCsgKE1hdGgucm91bmQoYXJnc1syXSkgJiAweEZGKTtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5oZXgucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgbWF0Y2ggPSBhcmdzLnRvU3RyaW5nKDE2KS5tYXRjaCgvW2EtZjAtOV17Nn18W2EtZjAtOV17M30vaSk7XG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHR9XG5cblx0bGV0IGNvbG9yU3RyaW5nID0gbWF0Y2hbMF07XG5cblx0aWYgKG1hdGNoWzBdLmxlbmd0aCA9PT0gMykge1xuXHRcdGNvbG9yU3RyaW5nID0gY29sb3JTdHJpbmcuc3BsaXQoJycpLm1hcChjaGFyID0+IHtcblx0XHRcdHJldHVybiBjaGFyICsgY2hhcjtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdGNvbnN0IGludGVnZXIgPSBwYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXHRjb25zdCByID0gKGludGVnZXIgPj4gMTYpICYgMHhGRjtcblx0Y29uc3QgZyA9IChpbnRlZ2VyID4+IDgpICYgMHhGRjtcblx0Y29uc3QgYiA9IGludGVnZXIgJiAweEZGO1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oY2cgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KE1hdGgubWF4KHIsIGcpLCBiKTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4oTWF0aC5taW4ociwgZyksIGIpO1xuXHRjb25zdCBjaHJvbWEgPSAobWF4IC0gbWluKTtcblx0bGV0IGdyYXlzY2FsZTtcblx0bGV0IGh1ZTtcblxuXHRpZiAoY2hyb21hIDwgMSkge1xuXHRcdGdyYXlzY2FsZSA9IG1pbiAvICgxIC0gY2hyb21hKTtcblx0fSBlbHNlIHtcblx0XHRncmF5c2NhbGUgPSAwO1xuXHR9XG5cblx0aWYgKGNocm9tYSA8PSAwKSB7XG5cdFx0aHVlID0gMDtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IHIpIHtcblx0XHRodWUgPSAoKGcgLSBiKSAvIGNocm9tYSkgJSA2O1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gZykge1xuXHRcdGh1ZSA9IDIgKyAoYiAtIHIpIC8gY2hyb21hO1xuXHR9IGVsc2Uge1xuXHRcdGh1ZSA9IDQgKyAociAtIGcpIC8gY2hyb21hO1xuXHR9XG5cblx0aHVlIC89IDY7XG5cdGh1ZSAlPSAxO1xuXG5cdHJldHVybiBbaHVlICogMzYwLCBjaHJvbWEgKiAxMDAsIGdyYXlzY2FsZSAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhzbC5oY2cgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IGwgPCAwLjUgPyAoMi4wICogcyAqIGwpIDogKDIuMCAqIHMgKiAoMS4wIC0gbCkpO1xuXG5cdGxldCBmID0gMDtcblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKGwgLSAwLjUgKiBjKSAvICgxLjAgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHNsWzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LmhjZyA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gcyAqIHY7XG5cdGxldCBmID0gMDtcblxuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHN2WzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLnJnYiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgaCA9IGhjZ1swXSAvIDM2MDtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRpZiAoYyA9PT0gMC4wKSB7XG5cdFx0cmV0dXJuIFtnICogMjU1LCBnICogMjU1LCBnICogMjU1XTtcblx0fVxuXG5cdGNvbnN0IHB1cmUgPSBbMCwgMCwgMF07XG5cdGNvbnN0IGhpID0gKGggJSAxKSAqIDY7XG5cdGNvbnN0IHYgPSBoaSAlIDE7XG5cdGNvbnN0IHcgPSAxIC0gdjtcblx0bGV0IG1nID0gMDtcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXHRzd2l0Y2ggKE1hdGguZmxvb3IoaGkpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSB2OyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cHVyZVswXSA9IHc7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSB3OyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cHVyZVswXSA9IHY7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IHc7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXG5cdG1nID0gKDEuMCAtIGMpICogZztcblxuXHRyZXR1cm4gW1xuXHRcdChjICogcHVyZVswXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMV0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzJdICsgbWcpICogMjU1XG5cdF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc3YgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKHYgPiAwLjApIHtcblx0XHRmID0gYyAvIHY7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgZiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc2wgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgbCA9IGcgKiAoMS4wIC0gYykgKyAwLjUgKiBjO1xuXHRsZXQgcyA9IDA7XG5cblx0aWYgKGwgPiAwLjAgJiYgbCA8IDAuNSkge1xuXHRcdHMgPSBjIC8gKDIgKiBsKTtcblx0fSBlbHNlXG5cdGlmIChsID49IDAuNSAmJiBsIDwgMS4wKSB7XG5cdFx0cyA9IGMgLyAoMiAqICgxIC0gbCkpO1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdHJldHVybiBbaGNnWzBdLCAodiAtIGMpICogMTAwLCAoMSAtIHYpICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHdiLmhjZyA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgdyA9IGh3YlsxXSAvIDEwMDtcblx0Y29uc3QgYiA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgdiA9IDEgLSBiO1xuXHRjb25zdCBjID0gdiAtIHc7XG5cdGxldCBnID0gMDtcblxuXHRpZiAoYyA8IDEpIHtcblx0XHRnID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2h3YlswXSwgYyAqIDEwMCwgZyAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmFwcGxlLnJnYiA9IGZ1bmN0aW9uIChhcHBsZSkge1xuXHRyZXR1cm4gWyhhcHBsZVswXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzFdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMl0gLyA2NTUzNSkgKiAyNTVdO1xufTtcblxuY29udmVydC5yZ2IuYXBwbGUgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHJldHVybiBbKHJnYlswXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsxXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsyXSAvIDI1NSkgKiA2NTUzNV07XG59O1xuXG5jb252ZXJ0LmdyYXkucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFthcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc2wgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gWzAsIDAsIGFyZ3NbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmhzdiA9IGNvbnZlcnQuZ3JheS5oc2w7XG5cbmNvbnZlcnQuZ3JheS5od2IgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDEwMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuY215ayA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMCwgMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkubGFiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFtncmF5WzBdLCAwLCAwXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oZXggPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRjb25zdCB2YWwgPSBNYXRoLnJvdW5kKGdyYXlbMF0gLyAxMDAgKiAyNTUpICYgMHhGRjtcblx0Y29uc3QgaW50ZWdlciA9ICh2YWwgPDwgMTYpICsgKHZhbCA8PCA4KSArIHZhbDtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5yZ2IuZ3JheSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgdmFsID0gKHJnYlswXSArIHJnYlsxXSArIHJnYlsyXSkgLyAzO1xuXHRyZXR1cm4gW3ZhbCAvIDI1NSAqIDEwMF07XG59O1xuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuXG4vKlxuXHRUaGlzIGZ1bmN0aW9uIHJvdXRlcyBhIG1vZGVsIHRvIGFsbCBvdGhlciBtb2RlbHMuXG5cblx0YWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSByb3V0ZWQgaGF2ZSBhIHByb3BlcnR5IGAuY29udmVyc2lvbmAgYXR0YWNoZWRcblx0dG8gdGhlIHJldHVybmVkIHN5bnRoZXRpYyBmdW5jdGlvbi4gVGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheVxuXHRvZiBzdHJpbmdzLCBlYWNoIHdpdGggdGhlIHN0ZXBzIGluIGJldHdlZW4gdGhlICdmcm9tJyBhbmQgJ3RvJ1xuXHRjb2xvciBtb2RlbHMgKGluY2x1c2l2ZSkuXG5cblx0Y29udmVyc2lvbnMgdGhhdCBhcmUgbm90IHBvc3NpYmxlIHNpbXBseSBhcmUgbm90IGluY2x1ZGVkLlxuKi9cblxuZnVuY3Rpb24gYnVpbGRHcmFwaCgpIHtcblx0Y29uc3QgZ3JhcGggPSB7fTtcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL29iamVjdC1rZXlzLXZzLWZvci1pbi13aXRoLWNsb3N1cmUvM1xuXHRjb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9ucyk7XG5cblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGdyYXBoW21vZGVsc1tpXV0gPSB7XG5cdFx0XHQvLyBodHRwOi8vanNwZXJmLmNvbS8xLXZzLWluZmluaXR5XG5cdFx0XHQvLyBtaWNyby1vcHQsIGJ1dCB0aGlzIGlzIHNpbXBsZS5cblx0XHRcdGRpc3RhbmNlOiAtMSxcblx0XHRcdHBhcmVudDogbnVsbFxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JyZWFkdGgtZmlyc3Rfc2VhcmNoXG5mdW5jdGlvbiBkZXJpdmVCRlMoZnJvbU1vZGVsKSB7XG5cdGNvbnN0IGdyYXBoID0gYnVpbGRHcmFwaCgpO1xuXHRjb25zdCBxdWV1ZSA9IFtmcm9tTW9kZWxdOyAvLyBVbnNoaWZ0IC0+IHF1ZXVlIC0+IHBvcFxuXG5cdGdyYXBoW2Zyb21Nb2RlbF0uZGlzdGFuY2UgPSAwO1xuXG5cdHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcXVldWUucG9wKCk7XG5cdFx0Y29uc3QgYWRqYWNlbnRzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnNbY3VycmVudF0pO1xuXG5cdFx0Zm9yIChsZXQgbGVuID0gYWRqYWNlbnRzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y29uc3QgYWRqYWNlbnQgPSBhZGphY2VudHNbaV07XG5cdFx0XHRjb25zdCBub2RlID0gZ3JhcGhbYWRqYWNlbnRdO1xuXG5cdFx0XHRpZiAobm9kZS5kaXN0YW5jZSA9PT0gLTEpIHtcblx0XHRcdFx0bm9kZS5kaXN0YW5jZSA9IGdyYXBoW2N1cnJlbnRdLmRpc3RhbmNlICsgMTtcblx0XHRcdFx0bm9kZS5wYXJlbnQgPSBjdXJyZW50O1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KGFkamFjZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbmZ1bmN0aW9uIGxpbmsoZnJvbSwgdG8pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG5cdFx0cmV0dXJuIHRvKGZyb20oYXJncykpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCkge1xuXHRjb25zdCBwYXRoID0gW2dyYXBoW3RvTW9kZWxdLnBhcmVudCwgdG9Nb2RlbF07XG5cdGxldCBmbiA9IGNvbnZlcnNpb25zW2dyYXBoW3RvTW9kZWxdLnBhcmVudF1bdG9Nb2RlbF07XG5cblx0bGV0IGN1ciA9IGdyYXBoW3RvTW9kZWxdLnBhcmVudDtcblx0d2hpbGUgKGdyYXBoW2N1cl0ucGFyZW50KSB7XG5cdFx0cGF0aC51bnNoaWZ0KGdyYXBoW2N1cl0ucGFyZW50KTtcblx0XHRmbiA9IGxpbmsoY29udmVyc2lvbnNbZ3JhcGhbY3VyXS5wYXJlbnRdW2N1cl0sIGZuKTtcblx0XHRjdXIgPSBncmFwaFtjdXJdLnBhcmVudDtcblx0fVxuXG5cdGZuLmNvbnZlcnNpb24gPSBwYXRoO1xuXHRyZXR1cm4gZm47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGRlcml2ZUJGUyhmcm9tTW9kZWwpO1xuXHRjb25zdCBjb252ZXJzaW9uID0ge307XG5cblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoZ3JhcGgpO1xuXHRmb3IgKGxldCBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Y29uc3QgdG9Nb2RlbCA9IG1vZGVsc1tpXTtcblx0XHRjb25zdCBub2RlID0gZ3JhcGhbdG9Nb2RlbF07XG5cblx0XHRpZiAobm9kZS5wYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdC8vIE5vIHBvc3NpYmxlIGNvbnZlcnNpb24sIG9yIHRoaXMgbm9kZSBpcyB0aGUgc291cmNlIG1vZGVsLlxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udmVyc2lvblt0b01vZGVsXSA9IHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKTtcblx0fVxuXG5cdHJldHVybiBjb252ZXJzaW9uO1xufTtcblxuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuY29uc3Qgcm91dGUgPSByZXF1aXJlKCcuL3JvdXRlJyk7XG5cbmNvbnN0IGNvbnZlcnQgPSB7fTtcblxuY29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBmbihhcmdzKTtcblxuXHRcdC8vIFdlJ3JlIGFzc3VtaW5nIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgaGVyZS5cblx0XHQvLyBzZWUgbm90aWNlIGluIGNvbnZlcnNpb25zLmpzOyBkb24ndCB1c2UgYm94IHR5cGVzXG5cdFx0Ly8gaW4gY29udmVyc2lvbiBmdW5jdGlvbnMuXG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGxldCBsZW4gPSByZXN1bHQubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdFtpXSA9IE1hdGgucm91bmQocmVzdWx0W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxubW9kZWxzLmZvckVhY2goZnJvbU1vZGVsID0+IHtcblx0Y29udmVydFtmcm9tTW9kZWxdID0ge307XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0ubGFiZWxzfSk7XG5cblx0Y29uc3Qgcm91dGVzID0gcm91dGUoZnJvbU1vZGVsKTtcblx0Y29uc3Qgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2godG9Nb2RlbCA9PiB7XG5cdFx0Y29uc3QgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgcmdiID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmdiWzBdfTske3JnYlsxXX07JHtyZ2JbMl19bWA7XG59O1xuXG5jb25zdCBhbnNpMmFuc2kgPSBuID0+IG47XG5jb25zdCByZ2IycmdiID0gKHIsIGcsIGIpID0+IFtyLCBnLCBiXTtcblxuY29uc3Qgc2V0TGF6eVByb3BlcnR5ID0gKG9iamVjdCwgcHJvcGVydHksIGdldCkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoKTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xufTtcblxuLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCdjb2xvci1jb252ZXJ0Jyl9ICovXG5sZXQgY29sb3JDb252ZXJ0O1xuY29uc3QgbWFrZUR5bmFtaWNTdHlsZXMgPSAod3JhcCwgdGFyZ2V0U3BhY2UsIGlkZW50aXR5LCBpc0JhY2tncm91bmQpID0+IHtcblx0aWYgKGNvbG9yQ29udmVydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29sb3JDb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXHR9XG5cblx0Y29uc3Qgb2Zmc2V0ID0gaXNCYWNrZ3JvdW5kID8gMTAgOiAwO1xuXHRjb25zdCBzdHlsZXMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IFtzb3VyY2VTcGFjZSwgc3VpdGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9yQ29udmVydCkpIHtcblx0XHRjb25zdCBuYW1lID0gc291cmNlU3BhY2UgPT09ICdhbnNpMTYnID8gJ2Fuc2knIDogc291cmNlU3BhY2U7XG5cdFx0aWYgKHNvdXJjZVNwYWNlID09PSB0YXJnZXRTcGFjZSkge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChpZGVudGl0eSwgb2Zmc2V0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzdWl0ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoc3VpdGVbdGFyZ2V0U3BhY2VdLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIHRydWUpKTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG4vLyBNYWtlIHRoZSBleHBvcnQgaW1tdXRhYmxlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBhc3NlbWJsZVN0eWxlc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2ID0gcHJvY2Vzcy5hcmd2KSA9PiB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBURU1QTEFURV9SRUdFWCA9IC8oPzpcXFxcKHUoPzpbYS1mXFxkXXs0fXxcXHtbYS1mXFxkXXsxLDZ9XFx9KXx4W2EtZlxcZF17Mn18LikpfCg/Olxceyh+KT8oXFx3Kyg/OlxcKFteKV0qXFwpKT8oPzpcXC5cXHcrKD86XFwoW14pXSpcXCkpPykqKSg/OlsgXFx0XXwoPz1cXHI/XFxuKSkpfChcXH0pfCgoPzoufFtcXHJcXG5cXGZdKSs/KS9naTtcbmNvbnN0IFNUWUxFX1JFR0VYID0gLyg/Ol58XFwuKShcXHcrKSg/OlxcKChbXildKilcXCkpPy9nO1xuY29uc3QgU1RSSU5HX1JFR0VYID0gL14oWydcIl0pKCg/OlxcXFwufCg/IVxcMSlbXlxcXFxdKSopXFwxJC87XG5jb25zdCBFU0NBUEVfUkVHRVggPSAvXFxcXCh1KD86W2EtZlxcZF17NH18e1thLWZcXGRdezEsNn19KXx4W2EtZlxcZF17Mn18Lil8KFteXFxcXF0pL2dpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IE1hcChbXG5cdFsnbicsICdcXG4nXSxcblx0WydyJywgJ1xcciddLFxuXHRbJ3QnLCAnXFx0J10sXG5cdFsnYicsICdcXGInXSxcblx0WydmJywgJ1xcZiddLFxuXHRbJ3YnLCAnXFx2J10sXG5cdFsnMCcsICdcXDAnXSxcblx0WydcXFxcJywgJ1xcXFwnXSxcblx0WydlJywgJ1xcdTAwMUInXSxcblx0WydhJywgJ1xcdTAwMDcnXVxuXSk7XG5cbmZ1bmN0aW9uIHVuZXNjYXBlKGMpIHtcblx0Y29uc3QgdSA9IGNbMF0gPT09ICd1Jztcblx0Y29uc3QgYnJhY2tldCA9IGNbMV0gPT09ICd7JztcblxuXHRpZiAoKHUgJiYgIWJyYWNrZXQgJiYgYy5sZW5ndGggPT09IDUpIHx8IChjWzBdID09PSAneCcgJiYgYy5sZW5ndGggPT09IDMpKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zbGljZSgxKSwgMTYpKTtcblx0fVxuXG5cdGlmICh1ICYmIGJyYWNrZXQpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoYy5zbGljZSgyLCAtMSksIDE2KSk7XG5cdH1cblxuXHRyZXR1cm4gRVNDQVBFUy5nZXQoYykgfHwgYztcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMobmFtZSwgYXJndW1lbnRzXykge1xuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IGFyZ3VtZW50c18udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovZyk7XG5cdGxldCBtYXRjaGVzO1xuXG5cdGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG5cdFx0Y29uc3QgbnVtYmVyID0gTnVtYmVyKGNodW5rKTtcblx0XHRpZiAoIU51bWJlci5pc05hTihudW1iZXIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobnVtYmVyKTtcblx0XHR9IGVsc2UgaWYgKChtYXRjaGVzID0gY2h1bmsubWF0Y2goU1RSSU5HX1JFR0VYKSkpIHtcblx0XHRcdHJlc3VsdHMucHVzaChtYXRjaGVzWzJdLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCAobSwgZXNjYXBlLCBjaGFyYWN0ZXIpID0+IGVzY2FwZSA/IHVuZXNjYXBlKGVzY2FwZSkgOiBjaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIENoYWxrIHRlbXBsYXRlIHN0eWxlIGFyZ3VtZW50OiAke2NodW5rfSAoaW4gc3R5bGUgJyR7bmFtZX0nKWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0eWxlKHN0eWxlKSB7XG5cdFNUWUxFX1JFR0VYLmxhc3RJbmRleCA9IDA7XG5cblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRsZXQgbWF0Y2hlcztcblxuXHR3aGlsZSAoKG1hdGNoZXMgPSBTVFlMRV9SRUdFWC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRjb25zdCBuYW1lID0gbWF0Y2hlc1sxXTtcblxuXHRcdGlmIChtYXRjaGVzWzJdKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gcGFyc2VBcmd1bWVudHMobmFtZSwgbWF0Y2hlc1syXSk7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdLmNvbmNhdChhcmdzKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpIHtcblx0Y29uc3QgZW5hYmxlZCA9IHt9O1xuXG5cdGZvciAoY29uc3QgbGF5ZXIgb2Ygc3R5bGVzKSB7XG5cdFx0Zm9yIChjb25zdCBzdHlsZSBvZiBsYXllci5zdHlsZXMpIHtcblx0XHRcdGVuYWJsZWRbc3R5bGVbMF1dID0gbGF5ZXIuaW52ZXJzZSA/IG51bGwgOiBzdHlsZS5zbGljZSgxKTtcblx0XHR9XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IGNoYWxrO1xuXHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlc10gb2YgT2JqZWN0LmVudHJpZXMoZW5hYmxlZCkpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3R5bGVzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEoc3R5bGVOYW1lIGluIGN1cnJlbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gQ2hhbGsgc3R5bGU6ICR7c3R5bGVOYW1lfWApO1xuXHRcdH1cblxuXHRcdGN1cnJlbnQgPSBzdHlsZXMubGVuZ3RoID4gMCA/IGN1cnJlbnRbc3R5bGVOYW1lXSguLi5zdHlsZXMpIDogY3VycmVudFtzdHlsZU5hbWVdO1xuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKGNoYWxrLCB0ZW1wb3JhcnkpID0+IHtcblx0Y29uc3Qgc3R5bGVzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IFtdO1xuXHRsZXQgY2h1bmsgPSBbXTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuXHR0ZW1wb3JhcnkucmVwbGFjZShURU1QTEFURV9SRUdFWCwgKG0sIGVzY2FwZUNoYXJhY3RlciwgaW52ZXJzZSwgc3R5bGUsIGNsb3NlLCBjaGFyYWN0ZXIpID0+IHtcblx0XHRpZiAoZXNjYXBlQ2hhcmFjdGVyKSB7XG5cdFx0XHRjaHVuay5wdXNoKHVuZXNjYXBlKGVzY2FwZUNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSBpZiAoc3R5bGUpIHtcblx0XHRcdGNvbnN0IHN0cmluZyA9IGNodW5rLmpvaW4oJycpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdGNodW5rcy5wdXNoKHN0eWxlcy5sZW5ndGggPT09IDAgPyBzdHJpbmcgOiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKHN0cmluZykpO1xuXHRcdFx0c3R5bGVzLnB1c2goe2ludmVyc2UsIHN0eWxlczogcGFyc2VTdHlsZShzdHlsZSl9KTtcblx0XHR9IGVsc2UgaWYgKGNsb3NlKSB7XG5cdFx0XHRpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGV4dHJhbmVvdXMgfSBpbiBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNodW5rcy5wdXNoKGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoY2h1bmsuam9pbignJykpKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRzdHlsZXMucG9wKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNodW5rLnB1c2goY2hhcmFjdGVyKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNodW5rcy5wdXNoKGNodW5rLmpvaW4oJycpKTtcblxuXHRpZiAoc3R5bGVzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBlcnJNZXNzYWdlID0gYENoYWxrIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWlzc2luZyAke3N0eWxlcy5sZW5ndGh9IGNsb3NpbmcgYnJhY2tldCR7c3R5bGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSAoXFxgfVxcYClgO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJNZXNzYWdlKTtcblx0fVxuXG5cdHJldHVybiBjaHVua3Muam9pbignJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcbmNvbnN0IHtcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4XG59ID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vLyBgc3VwcG9ydHNDb2xvci5sZXZlbGAgXHUyMTkyIGBhbnNpU3R5bGVzLmNvbG9yW25hbWVdYCBtYXBwaW5nXG5jb25zdCBsZXZlbE1hcHBpbmcgPSBbXG5cdCdhbnNpJyxcblx0J2Fuc2knLFxuXHQnYW5zaTI1NicsXG5cdCdhbnNpMTZtJ1xuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuY2xhc3MgQ2hhbGtDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG5cdFx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcblx0fVxufVxuXG5jb25zdCBjaGFsa0ZhY3RvcnkgPSBvcHRpb25zID0+IHtcblx0Y29uc3QgY2hhbGsgPSB7fTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRjaGFsay50ZW1wbGF0ZSA9ICguLi5hcmd1bWVudHNfKSA9PiBjaGFsa1RhZyhjaGFsay50ZW1wbGF0ZSwgLi4uYXJndW1lbnRzXyk7XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLCBDaGFsay5wcm90b3R5cGUpO1xuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGsudGVtcGxhdGUsIGNoYWxrKTtcblxuXHRjaGFsay50ZW1wbGF0ZS5jb25zdHJ1Y3RvciA9ICgpID0+IHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BjaGFsay5jb25zdHJ1Y3RvcigpYCBpcyBkZXByZWNhdGVkLiBVc2UgYG5ldyBjaGFsay5JbnN0YW5jZSgpYCBpbnN0ZWFkLicpO1xuXHR9O1xuXG5cdGNoYWxrLnRlbXBsYXRlLkluc3RhbmNlID0gQ2hhbGtDbGFzcztcblxuXHRyZXR1cm4gY2hhbGsudGVtcGxhdGU7XG59O1xuXG5mdW5jdGlvbiBDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpcy5fc3R5bGVyKSwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3R5bGVOYW1lLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRcdHJldHVybiBidWlsZGVyO1xuXHRcdH1cblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzLl9zdHlsZXIsIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9XG59O1xuXG5jb25zdCB1c2VkTW9kZWxzID0gWydyZ2InLCAnaGV4JywgJ2tleXdvcmQnLCAnaHNsJywgJ2hzdicsICdod2InLCAnYW5zaScsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihhbnNpU3R5bGVzLmNvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5iZ0NvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5iZ0NvbG9yLmNsb3NlLCB0aGlzLl9zdHlsZXIpO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dlbmVyYXRvci5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpcy5fZ2VuZXJhdG9yLmxldmVsID0gbGV2ZWw7XG5cdFx0fVxuXHR9XG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnRcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0aWYgKGlzQXJyYXkoYXJndW1lbnRzX1swXSkgJiYgaXNBcnJheShhcmd1bWVudHNfWzBdLnJhdykpIHtcblx0XHRcdC8vIENhbGxlZCBhcyBhIHRlbXBsYXRlIGxpdGVyYWwsIGZvciBleGFtcGxlOiBjaGFsay5yZWRgMiArIDMgPSB7Ym9sZCAkezIrM319YFxuXHRcdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgY2hhbGtUYWcoYnVpbGRlciwgLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0XHRyZXR1cm4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cdH07XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyLl9nZW5lcmF0b3IgPSBzZWxmO1xuXHRidWlsZGVyLl9zdHlsZXIgPSBfc3R5bGVyO1xuXHRidWlsZGVyLl9pc0VtcHR5ID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZi5faXNFbXB0eSA/ICcnIDogc3RyaW5nO1xuXHR9XG5cblx0bGV0IHN0eWxlciA9IHNlbGYuX3N0eWxlcjtcblxuXHRpZiAoc3R5bGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qge29wZW5BbGwsIGNsb3NlQWxsfSA9IHN0eWxlcjtcblx0aWYgKHN0cmluZy5pbmRleE9mKCdcXHUwMDFCJykgIT09IC0xKSB7XG5cdFx0d2hpbGUgKHN0eWxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBSZXBsYWNlIGFueSBpbnN0YW5jZXMgYWxyZWFkeSBwcmVzZW50IHdpdGggYSByZS1vcGVuaW5nIGNvZGVcblx0XHRcdC8vIG90aGVyd2lzZSBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdW50aWwgc2FpZCBjbG9zaW5nIGNvZGVcblx0XHRcdC8vIHdpbGwgYmUgY29sb3JlZCwgYW5kIHRoZSByZXN0IHdpbGwgc2ltcGx5IGJlICdwbGFpbicuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmdSZXBsYWNlQWxsKHN0cmluZywgc3R5bGVyLmNsb3NlLCBzdHlsZXIub3Blbik7XG5cblx0XHRcdHN0eWxlciA9IHN0eWxlci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV2UgY2FuIG1vdmUgYm90aCBuZXh0IGFjdGlvbnMgb3V0IG9mIGxvb3AsIGJlY2F1c2UgcmVtYWluaW5nIGFjdGlvbnMgaW4gbG9vcCB3b24ndCBoYXZlXG5cdC8vIGFueS92aXNpYmxlIGVmZmVjdCBvbiBwYXJ0cyB3ZSBhZGQgaGVyZS4gQ2xvc2UgdGhlIHN0eWxpbmcgYmVmb3JlIGEgbGluZWJyZWFrIGFuZCByZW9wZW5cblx0Ly8gYWZ0ZXIgbmV4dCBsaW5lIHRvIGZpeCBhIGJsZWVkIGlzc3VlIG9uIG1hY09TOiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGsvcHVsbC85MlxuXHRjb25zdCBsZkluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicpO1xuXHRpZiAobGZJbmRleCAhPT0gLTEpIHtcblx0XHRzdHJpbmcgPSBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBjbG9zZUFsbCwgb3BlbkFsbCwgbGZJbmRleCk7XG5cdH1cblxuXHRyZXR1cm4gb3BlbkFsbCArIHN0cmluZyArIGNsb3NlQWxsO1xufTtcblxubGV0IHRlbXBsYXRlO1xuY29uc3QgY2hhbGtUYWcgPSAoY2hhbGssIC4uLnN0cmluZ3MpID0+IHtcblx0Y29uc3QgW2ZpcnN0U3RyaW5nXSA9IHN0cmluZ3M7XG5cblx0aWYgKCFpc0FycmF5KGZpcnN0U3RyaW5nKSB8fCAhaXNBcnJheShmaXJzdFN0cmluZy5yYXcpKSB7XG5cdFx0Ly8gSWYgY2hhbGsoKSB3YXMgY2FsbGVkIGJ5IGl0c2VsZiBvciB3aXRoIGEgc3RyaW5nLFxuXHRcdC8vIHJldHVybiB0aGUgc3RyaW5nIGl0c2VsZiBhcyBhIHN0cmluZy5cblx0XHRyZXR1cm4gc3RyaW5ncy5qb2luKCcgJyk7XG5cdH1cblxuXHRjb25zdCBhcmd1bWVudHNfID0gc3RyaW5ncy5zbGljZSgxKTtcblx0Y29uc3QgcGFydHMgPSBbZmlyc3RTdHJpbmcucmF3WzBdXTtcblxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0cGFydHMucHVzaChcblx0XHRcdFN0cmluZyhhcmd1bWVudHNfW2kgLSAxXSkucmVwbGFjZSgvW3t9XFxcXF0vZywgJ1xcXFwkJicpLFxuXHRcdFx0U3RyaW5nKGZpcnN0U3RyaW5nLnJhd1tpXSlcblx0XHQpO1xuXHR9XG5cblx0aWYgKHRlbXBsYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHR0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGVzJyk7XG5cdH1cblxuXHRyZXR1cm4gdGVtcGxhdGUoY2hhbGssIHBhcnRzLmpvaW4oJycpKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBDaGFsaygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbmNoYWxrLnN1cHBvcnRzQ29sb3IgPSBzdGRvdXRDb2xvcjtcbmNoYWxrLnN0ZGVyciA9IENoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdGRlcnIuc3VwcG9ydHNDb2xvciA9IHN0ZGVyckNvbG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNoYWxrO1xuIiwgIi8vIHNvdXJjZSBvZiBpbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9yZXF1aXJlLWZvb2wtd2VicGFja1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IGV2YWwoXG4gICAgJ3R5cGVvZiByZXF1aXJlICE9PSBcXCd1bmRlZmluZWRcXCcgJyArXG4gICAgJz8gcmVxdWlyZSAnICtcbiAgICAnOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcihcXCdNb2R1bGUgXCIgKyBtb2R1bGUgKyBcIiBub3QgZm91bmQuXFwnKSB9J1xuKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRm9vbFdlYnBhY2s7XG4iLCAidmFyIHJlcXVpcmVGb29sV2VicGFjayA9IHJlcXVpcmUoJy4vcmVxdWlyZUZvb2xXZWJwYWNrJyk7XG5cbi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZsZXhkaW5lc2gvYnJvd3Nlci1vci1ub2RlXG52YXIgaXNOb2RlID0gZnVuY3Rpb24gKG5vZGVQcm9jZXNzKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG5vZGVQcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5vZGVQcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcbiAgKTtcbn1cbm1vZHVsZS5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZVxuXG4vLyBkZXRlcm1pbmVzIHRoZSBKYXZhU2NyaXB0IHBsYXRmb3JtOiBicm93c2VyIG9yIG5vZGVcbm1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIGlzTm9kZShwcm9jZXNzKVxuICA/ICdub2RlJ1xuICA6ICdicm93c2VyJztcblxuLy8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb2RlIGlzIHJ1bm5pbmcgaW4gbWFpbiB0aHJlYWQgb3Igbm90XG4vLyBub3RlIHRoYXQgaW4gbm9kZS5qcyB3ZSBoYXZlIHRvIGNoZWNrIGJvdGggd29ya2VyX3RocmVhZCBhbmQgY2hpbGRfcHJvY2Vzc1xudmFyIHdvcmtlcl90aHJlYWRzID0gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xubW9kdWxlLmV4cG9ydHMuaXNNYWluVGhyZWFkID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdub2RlJ1xuICA/ICgoIXdvcmtlcl90aHJlYWRzIHx8IHdvcmtlcl90aHJlYWRzLmlzTWFpblRocmVhZCkgJiYgIXByb2Nlc3MuY29ubmVjdGVkKVxuICA6IHR5cGVvZiBXaW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY3B1cyBhdmFpbGFibGVcbm1vZHVsZS5leHBvcnRzLmNwdXMgPSBtb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInXG4gID8gc2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeVxuICA6IHJlcXVpcmVGb29sV2VicGFjaygnb3MnKS5jcHVzKCkubGVuZ3RoO1xuXG5mdW5jdGlvbiB0cnlSZXF1aXJlRm9vbFdlYnBhY2sgKG1vZHVsZSkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2sobW9kdWxlKTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFByb21pc2VcbiAqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9SdWJhWGEvODUwMTM1OSBmcm9tIFJ1YmFYYSA8dHJhc2hAcnViYXhhLm9yZz5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyICAgQ2FsbGVkIGFzIGhhbmRsZXIocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pXG4gKiBAcGFyYW0ge1Byb21pc2V9IFtwYXJlbnRdICAgUGFyZW50IHByb21pc2UgZm9yIHByb3BhZ2F0aW9uIG9mIGNhbmNlbCBhbmQgdGltZW91dFxuICovXG5mdW5jdGlvbiBQcm9taXNlKGhhbmRsZXIsIHBhcmVudCkge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHBhcmFtZXRlciBoYW5kbGVyKHJlc29sdmUsIHJlamVjdCkgbWlzc2luZycpO1xuICB9XG5cbiAgdmFyIF9vblN1Y2Nlc3MgPSBbXTtcbiAgdmFyIF9vbkZhaWwgPSBbXTtcblxuICAvLyBzdGF0dXNcbiAgdGhpcy5yZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLnJlamVjdGVkID0gZmFsc2U7XG4gIHRoaXMucGVuZGluZyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgb25TdWNjZXNzIGFuZCBvbkZhaWwgY2FsbGJhY2tzOiBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gICAqIE9uY2UgdGhlIHByb21pc2UgaXMgcmVzb2x2ZSwgdGhlIGZ1bmN0aW9uIF9wcm9taXNlIGlzIHJlcGxhY2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2Vzc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIF9vblN1Y2Nlc3MucHVzaChvblN1Y2Nlc3MpO1xuICAgIF9vbkZhaWwucHVzaChvbkZhaWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gb25TdWNjZXNzIGNhbGxiYWNrIGFuZCBvcHRpb25hbGx5IGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbF1cbiAgICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAgICovXG4gIHRoaXMudGhlbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcyA9IG9uU3VjY2VzcyA/IF90aGVuKG9uU3VjY2VzcywgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlc29sdmU7XG4gICAgICB2YXIgZiA9IG9uRmFpbCAgICA/IF90aGVuKG9uRmFpbCwgICAgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlamVjdDtcblxuICAgICAgX3Byb2Nlc3MocywgZik7XG4gICAgfSwgbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Kn0gcmVzdWx0XG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVzb2x2ZSA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSB0cnVlO1xuICAgIG1lLnJlamVjdGVkID0gZmFsc2U7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uU3VjY2Vzcy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4ocmVzdWx0KTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvblN1Y2Nlc3MocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgX3Jlc29sdmUgPSBfcmVqZWN0ID0gZnVuY3Rpb24gKCkgeyB9O1xuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIHByb21pc2VcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSBmYWxzZTtcbiAgICBtZS5yZWplY3RlZCA9IHRydWU7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uRmFpbC5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4oZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICAgIG9uRmFpbChlcnJvcik7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW5jZWwgdGUgcHJvbWlzZS4gVGhpcyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoIGEgQ2FuY2VsbGF0aW9uRXJyb3JcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5jYW5jZWwoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBfcmVqZWN0KG5ldyBDYW5jZWxsYXRpb25FcnJvcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhIHRpbWVvdXQgZm9yIHRoZSBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyBub3QgcmVzb2x2ZWQgd2l0aGluXG4gICAqIHRoZSB0aW1lLCB0aGUgcHJvbWlzZSB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgYSBUaW1lb3V0RXJyb3IgaXMgdGhyb3duLlxuICAgKiBJZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbiB0aW1lLCB0aGUgdGltZW91dCBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgICAgIERlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gc2VsZlxuICAgKi9cbiAgdGhpcy50aW1lb3V0ID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnRpbWVvdXQoZGVsYXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ1Byb21pc2UgdGltZWQgb3V0IGFmdGVyICcgKyBkZWxheSArICcgbXMnKSk7XG4gICAgICB9LCBkZWxheSk7XG5cbiAgICAgIG1lLmFsd2F5cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLy8gYXR0YWNoIGhhbmRsZXIgcGFzc2luZyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9uc1xuICBoYW5kbGVyKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBfcmVzb2x2ZShyZXN1bHQpO1xuICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBfcmVqZWN0KGVycm9yKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBnaXZlbiBjYWxsYmFjaywgdGhlbiBjYWxsIHJlc29sdmUvcmVqZWN0IGJhc2VkIG9uIHRoZSByZXR1cm5lZCByZXN1bHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF90aGVuKGNhbGxiYWNrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlcyA9IGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcmVzWydjYXRjaCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG1ldGhvZCByZXR1cm5lZCBhIHByb21pc2VcbiAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gb25GYWlsIGNhbGxiYWNrIHRvIHRoZSBQcm9taXNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24gKG9uRmFpbCkge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uRmFpbCk7XG59O1xuXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgY2FsbGJhY2spXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgRXJyb3IsIGNhbGxiYWNrKVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2sgd2hlbiB0aGUgcHJvbWlzZSBlaXRoZXIgcmVzb2x2ZXMgb3IgcmVqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZS5hbHdheXMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIHRoaXMudGhlbihmbiwgZm4pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIHByb3ZpZGVkIHByb21pc2VzIGFyZSByZXNvbHZlZCxcbiAqIGFuZCBmYWlscyB3aGVuIGFueSBvZiB0aGUgcHJvbWlzZXMgcmVzb2x2ZXMuXG4gKiBAcGFyYW0ge1Byb21pc2VbXX0gcHJvbWlzZXNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UuYWxsID0gZnVuY3Rpb24gKHByb21pc2VzKXtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVtYWluaW5nID0gcHJvbWlzZXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gW107XG5cbiAgICBpZiAocmVtYWluaW5nKSB7XG4gICAgICBwcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7XG4gICAgICAgIHAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdDtcbiAgICAgICAgICByZW1haW5pbmctLTtcbiAgICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZW1haW5pbmcgPSAwO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHJlc29sdmVyXG4gKiBAcmV0dXJucyB7e3Byb21pc2U6IFByb21pc2UsIHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gcmVzb2x2ZXJcbiAqL1xuUHJvbWlzZS5kZWZlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlc29sdmVyID0ge307XG5cbiAgcmVzb2x2ZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXNvbHZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICByZXNvbHZlci5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHJldHVybiByZXNvbHZlcjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FuY2VsbGF0aW9uIGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBDYW5jZWxsYXRpb25FcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Byb21pc2UgY2FuY2VsbGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdDYW5jZWxsYXRpb25FcnJvcic7XG5cblByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3IgPSBDYW5jZWxsYXRpb25FcnJvcjtcblxuXG4vKipcbiAqIENyZWF0ZSBhIHRpbWVvdXQgZXJyb3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWVzc2FnZV1cbiAqIEBleHRlbmRzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIFRpbWVvdXRFcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cblByb21pc2UuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICIvKipcbiAqIGVtYmVkZGVkV29ya2VyLmpzIGNvbnRhaW5zIGFuIGVtYmVkZGVkIHZlcnNpb24gb2Ygd29ya2VyLmpzLlxuICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLFxuICogY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IFwiIWZ1bmN0aW9uKCl7dmFyIF9fd2VicGFja19leHBvcnRzX189e307IWZ1bmN0aW9uKCl7dmFyIGV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO2Z1bmN0aW9uIF90eXBlb2Yocil7cmV0dXJuKF90eXBlb2Y9XFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmXFxcInN5bWJvbFxcXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/XFxcInN5bWJvbFxcXCI6dHlwZW9mIHJ9KShyKX12YXIgcmVxdWlyZUZvb2xXZWJwYWNrPWV2YWwoXFxcInR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUgOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcignTW9kdWxlIFxcXFxcXFwiICsgbW9kdWxlICsgXFxcXFxcXCIgbm90IGZvdW5kLicpIH1cXFwiKSxURVJNSU5BVEVfTUVUSE9EX0lEPVxcXCJfX3dvcmtlcnBvb2wtdGVybWluYXRlX19cXFwiLHdvcmtlcj17ZXhpdDpmdW5jdGlvbigpe319LFdvcmtlclRocmVhZHMscGFyZW50UG9ydDtpZihcXFwidW5kZWZpbmVkXFxcIiE9dHlwZW9mIHNlbGYmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIpd29ya2VyLm9uPWZ1bmN0aW9uKHIsZSl7YWRkRXZlbnRMaXN0ZW5lcihyLGZ1bmN0aW9uKHIpe2Uoci5kYXRhKX0pfSx3b3JrZXIuc2VuZD1mdW5jdGlvbihyKXtwb3N0TWVzc2FnZShyKX07ZWxzZXtpZihcXFwidW5kZWZpbmVkXFxcIj09dHlwZW9mIHByb2Nlc3MpdGhyb3cgbmV3IEVycm9yKFxcXCJTY3JpcHQgbXVzdCBiZSBleGVjdXRlZCBhcyBhIHdvcmtlclxcXCIpO3RyeXtXb3JrZXJUaHJlYWRzPXJlcXVpcmVGb29sV2VicGFjayhcXFwid29ya2VyX3RocmVhZHNcXFwiKX1jYXRjaChlcnJvcil7aWYoXFxcIm9iamVjdFxcXCIhPT1fdHlwZW9mKGVycm9yKXx8bnVsbD09PWVycm9yfHxcXFwiTU9EVUxFX05PVF9GT1VORFxcXCIhPT1lcnJvci5jb2RlKXRocm93IGVycm9yfVdvcmtlclRocmVhZHMmJm51bGwhPT1Xb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ/KHBhcmVudFBvcnQ9V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0LHdvcmtlci5zZW5kPXBhcmVudFBvcnQucG9zdE1lc3NhZ2UuYmluZChwYXJlbnRQb3J0KSx3b3JrZXIub249cGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpKTood29ya2VyLm9uPXByb2Nlc3Mub24uYmluZChwcm9jZXNzKSx3b3JrZXIuc2VuZD1wcm9jZXNzLnNlbmQuYmluZChwcm9jZXNzKSx3b3JrZXIub24oXFxcImRpc2Nvbm5lY3RcXFwiLGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KDEpfSksd29ya2VyLmV4aXQ9cHJvY2Vzcy5leGl0LmJpbmQocHJvY2VzcykpfWZ1bmN0aW9uIGNvbnZlcnRFcnJvcihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKGZ1bmN0aW9uKHIsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse3ZhbHVlOm9bZV0sZW51bWVyYWJsZTohMH0pfSx7fSl9ZnVuY3Rpb24gaXNQcm9taXNlKHIpe3JldHVybiByJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci50aGVuJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci5jYXRjaH13b3JrZXIubWV0aG9kcz17fSx3b3JrZXIubWV0aG9kcy5ydW49ZnVuY3Rpb24ocixlKXtyPW5ldyBGdW5jdGlvbihcXFwicmV0dXJuIChcXFwiK3IrXFxcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcXFwiKTtyZXR1cm4gci5hcHBseShyLGUpfSx3b3JrZXIubWV0aG9kcy5tZXRob2RzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKX07dmFyIGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbDt3b3JrZXIub24oXFxcIm1lc3NhZ2VcXFwiLGZ1bmN0aW9uKGUpe2lmKGU9PT1URVJNSU5BVEVfTUVUSE9EX0lEKXJldHVybiB3b3JrZXIuZXhpdCgwKTt0cnl7dmFyIHI9d29ya2VyLm1ldGhvZHNbZS5tZXRob2RdO2lmKCFyKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXFxcIicrZS5tZXRob2QrJ1xcXCInKTtjdXJyZW50UmVxdWVzdElkPWUuaWQ7dmFyIG89ci5hcHBseShyLGUucGFyYW1zKTtpc1Byb21pc2Uobyk/by50aGVuKGZ1bmN0aW9uKHIpe3dvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpyLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KS5jYXRjaChmdW5jdGlvbihyKXt3b3JrZXIuc2VuZCh7aWQ6ZS5pZCxyZXN1bHQ6bnVsbCxlcnJvcjpjb252ZXJ0RXJyb3Iocil9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KTood29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om8sZXJyb3I6bnVsbH0pLGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbCl9Y2F0Y2gocil7d29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKHIpfSl9fSksd29ya2VyLnJlZ2lzdGVyPWZ1bmN0aW9uKHIpe2lmKHIpZm9yKHZhciBlIGluIHIpci5oYXNPd25Qcm9wZXJ0eShlKSYmKHdvcmtlci5tZXRob2RzW2VdPXJbZV0pO3dvcmtlci5zZW5kKFxcXCJyZWFkeVxcXCIpfSx3b3JrZXIuZW1pdD1mdW5jdGlvbihyKXtjdXJyZW50UmVxdWVzdElkJiZ3b3JrZXIuc2VuZCh7aWQ6Y3VycmVudFJlcXVlc3RJZCxpc0V2ZW50OiEwLHBheWxvYWQ6cn0pfSxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fPXdvcmtlci5yZWdpc3Rlcix3b3JrZXIuZW1pdH0oKX0oKTtcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gcmVxdWlyZSgnLi9yZXF1aXJlRm9vbFdlYnBhY2snKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIGEgY2hpbGQgcHJvY2VzcyB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG4vKipcbiAqIElmIHNlbmRpbmcgYFRFUk1JTkFURV9NRVRIT0RfSURgIGRvZXMgbm90IGNhdXNlIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGV4aXQgaW4gdGhpcyBtYW55IG1pbGxpc2Vjb25kcyxcbiAqIGZvcmNlLWtpbGwgdGhlIGNoaWxkIHByb2Nlc3MuXG4gKi9cbnZhciBDSElMRF9QUk9DRVNTX0VYSVRfVElNRU9VVCA9IDEwMDA7XG5cbmZ1bmN0aW9uIGVuc3VyZVdvcmtlclRocmVhZHMoKSB7XG4gIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKVxuICBpZiAoIVdvcmtlclRocmVhZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IHdvcmtlclR5cGUgPSBcXCd0aHJlYWRcXCcgaXMgbm90IHN1cHBvcnRlZCwgTm9kZSA+PSAxMS43LjAgcmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIFdvcmtlclRocmVhZHM7XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgV29ya2VyIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlclxuZnVuY3Rpb24gZW5zdXJlV2ViV29ya2VyKCkge1xuICAvLyBXb3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBQaGFudG9tSlMgKE9yIFF0V2Via2l0KTogaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTQ1MzRcbiAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBXb3JrZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBXb3JrZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyUG9vbDogV2ViIFdvcmtlcnMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKCkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzIGF2YWlsYWJsZSAob2xkIHZlcnNpb24gb2Ygbm9kZS5qcylcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuLy8gZ2V0IHRoZSBkZWZhdWx0IHdvcmtlciBzY3JpcHRcbmZ1bmN0aW9uIGdldERlZmF1bHRXb3JrZXIoKSB7XG4gIGlmIChlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgLy8gdGVzdCB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGFsbCBmZWF0dXJlcyB0aGF0IHdlIG5lZWRcbiAgICBpZiAodHlwZW9mIEJsb2IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jsb2Igbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5VUkwgfHwgdHlwZW9mIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5jcmVhdGVPYmplY3RVUkwgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cblxuICAgIC8vIHVzZSBlbWJlZGRlZCB3b3JrZXIuanNcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXF1aXJlKCcuL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlcicpXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XG4gICAgcmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIHVzZSBleHRlcm5hbCB3b3JrZXIuanMgaW4gY3VycmVudCBkaXJlY3RvcnlcbiAgICByZXR1cm4gX19kaXJuYW1lICsgJy93b3JrZXIuanMnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwV29ya2VyKHNjcmlwdCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAnd2ViJykgeyAvLyBicm93c2VyIG9ubHlcbiAgICBlbnN1cmVXZWJXb3JrZXIoKTtcbiAgICByZXR1cm4gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7IC8vIG5vZGUuanMgb25seVxuICAgIFdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAncHJvY2VzcycgfHwgIW9wdGlvbnMud29ya2VyVHlwZSkgeyAvLyBub2RlLmpzIG9ubHlcbiAgICByZXR1cm4gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgcmVzb2x2ZUZvcmtPcHRpb25zKG9wdGlvbnMpLCByZXF1aXJlRm9vbFdlYnBhY2soJ2NoaWxkX3Byb2Nlc3MnKSk7XG4gIH0gZWxzZSB7IC8vIG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ2F1dG8nIG9yIHVuZGVmaW5lZFxuICAgIGlmIChlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgICBlbnN1cmVXZWJXb3JrZXIoKTtcbiAgICAgIHJldHVybiBzZXR1cEJyb3dzZXJXb3JrZXIoc2NyaXB0LCBXb3JrZXIpO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdub2RlJ1xuICAgICAgdmFyIFdvcmtlclRocmVhZHMgPSB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcygpO1xuICAgICAgaWYgKFdvcmtlclRocmVhZHMpIHtcbiAgICAgICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgcmVzb2x2ZUZvcmtPcHRpb25zKG9wdGlvbnMpLCByZXF1aXJlRm9vbFdlYnBhY2soJ2NoaWxkX3Byb2Nlc3MnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIFdvcmtlcikge1xuICAvLyBjcmVhdGUgdGhlIHdlYiB3b3JrZXJcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoc2NyaXB0KTtcblxuICB3b3JrZXIuaXNCcm93c2VyV29ya2VyID0gdHJ1ZTtcbiAgLy8gYWRkIG5vZGUuanMgQVBJIHRvIHRoZSB3ZWIgd29ya2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgIH0pO1xuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcbiAgcmV0dXJuIHdvcmtlcjtcbn1cblxuZnVuY3Rpb24gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXIoc2NyaXB0LCBXb3JrZXJUaHJlYWRzKSB7XG4gIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyVGhyZWFkcy5Xb3JrZXIoc2NyaXB0LCB7XG4gICAgc3Rkb3V0OiBmYWxzZSwgLy8gYXV0b21hdGljYWxseSBwaXBlIHdvcmtlci5TVERPVVQgdG8gcHJvY2Vzcy5TVERPVVRcbiAgICBzdGRlcnI6IGZhbHNlICAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNUREVSUiB0byBwcm9jZXNzLlNUREVSUlxuICB9KTtcbiAgd29ya2VyLmlzV29ya2VyVGhyZWFkID0gdHJ1ZTtcbiAgLy8gbWFrZSB0aGUgd29ya2VyIG1pbWljIGEgY2hpbGRfcHJvY2Vzc1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICB9O1xuXG4gIHdvcmtlci5raWxsID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXJtaW5hdGUoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICB3b3JrZXIuZGlzY29ubmVjdCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gIH07XG5cbiAgcmV0dXJuIHdvcmtlcjtcbn1cblxuZnVuY3Rpb24gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgb3B0aW9ucywgY2hpbGRfcHJvY2Vzcykge1xuICAvLyBubyBXb3JrZXJUaHJlYWRzLCBmYWxsYmFjayB0byBzdWItcHJvY2VzcyBiYXNlZCB3b3JrZXJzXG4gIHZhciB3b3JrZXIgPSBjaGlsZF9wcm9jZXNzLmZvcmsoXG4gICAgc2NyaXB0LFxuICAgIG9wdGlvbnMuZm9ya0FyZ3MsXG4gICAgb3B0aW9ucy5mb3JrT3B0c1xuICApO1xuXG4gIHdvcmtlci5pc0NoaWxkUHJvY2VzcyA9IHRydWU7XG4gIHJldHVybiB3b3JrZXI7XG59XG5cbi8vIGFkZCBkZWJ1ZyBmbGFncyB0byBjaGlsZCBwcm9jZXNzZXMgaWYgdGhlIG5vZGUgaW5zcGVjdG9yIGlzIGFjdGl2ZVxuZnVuY3Rpb24gcmVzb2x2ZUZvcmtPcHRpb25zKG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgdmFyIHByb2Nlc3NFeGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbignICcpO1xuICB2YXIgaW5zcGVjdG9yQWN0aXZlID0gcHJvY2Vzc0V4ZWNBcmd2LmluZGV4T2YoJy0taW5zcGVjdCcpICE9PSAtMTtcbiAgdmFyIGRlYnVnQnJrID0gcHJvY2Vzc0V4ZWNBcmd2LmluZGV4T2YoJy0tZGVidWctYnJrJykgIT09IC0xO1xuXG4gIHZhciBleGVjQXJndiA9IFtdO1xuICBpZiAoaW5zcGVjdG9yQWN0aXZlKSB7XG4gICAgZXhlY0FyZ3YucHVzaCgnLS1pbnNwZWN0PScgKyBvcHRzLmRlYnVnUG9ydCk7XG5cbiAgICBpZiAoZGVidWdCcmspIHtcbiAgICAgIGV4ZWNBcmd2LnB1c2goJy0tZGVidWctYnJrJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5leGVjQXJndi5mb3JFYWNoKGZ1bmN0aW9uKGFyZykge1xuICAgIGlmIChhcmcuaW5kZXhPZignLS1tYXgtb2xkLXNwYWNlLXNpemUnKSA+IC0xKSB7XG4gICAgICBleGVjQXJndi5wdXNoKGFyZylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtcbiAgICBmb3JrQXJnczogb3B0cy5mb3JrQXJncyxcbiAgICBmb3JrT3B0czogT2JqZWN0LmFzc2lnbih7fSwgb3B0cy5mb3JrT3B0cywge1xuICAgICAgZXhlY0FyZ3Y6IChvcHRzLmZvcmtPcHRzICYmIG9wdHMuZm9ya09wdHMuZXhlY0FyZ3YgfHwgW10pXG4gICAgICAuY29uY2F0KGV4ZWNBcmd2KVxuICAgIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc2VyaWFsaXplZCBlcnJvciB0byBFcnJvclxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBFcnJvciB0aGF0IGhhcyBiZWVuIHNlcmlhbGl6ZWQgYW5kIHBhcnNlZCB0byBvYmplY3RcbiAqIEByZXR1cm4ge0Vycm9yfSBUaGUgZXF1aXZhbGVudCBFcnJvci5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9FcnJvciAob2JqKSB7XG4gIHZhciB0ZW1wID0gbmV3IEVycm9yKCcnKVxuICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmopXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHRlbXBbcHJvcHNbaV1dID0gb2JqW3Byb3BzW2ldXVxuICB9XG5cbiAgcmV0dXJuIHRlbXBcbn1cblxuLyoqXG4gKiBBIFdvcmtlckhhbmRsZXIgY29udHJvbHMgYSBzaW5nbGUgd29ya2VyLiBUaGlzIHdvcmtlciBjYW4gYmUgYSBjaGlsZCBwcm9jZXNzXG4gKiBvbiBub2RlLmpzIG9yIGEgV2ViV29ya2VyIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbc2NyaXB0XSBJZiBubyBzY3JpcHQgaXMgcHJvdmlkZWQsIGEgZGVmYXVsdCB3b3JrZXIgd2l0aCBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcnVuIHdpbGwgYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB7V29ya2VyUG9vbE9wdGlvbnN9IF9vcHRpb25zIFNlZSBkb2NzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gV29ya2VySGFuZGxlcihzY3JpcHQsIF9vcHRpb25zKSB7XG4gIHZhciBtZSA9IHRoaXM7XG4gIHZhciBvcHRpb25zID0gX29wdGlvbnMgfHwge307XG5cbiAgdGhpcy5zY3JpcHQgPSBzY3JpcHQgfHwgZ2V0RGVmYXVsdFdvcmtlcigpO1xuICB0aGlzLndvcmtlciA9IHNldHVwV29ya2VyKHRoaXMuc2NyaXB0LCBvcHRpb25zKTtcbiAgdGhpcy5kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydDtcbiAgdGhpcy5mb3JrT3B0cyA9IG9wdGlvbnMuZm9ya09wdHM7XG4gIHRoaXMuZm9ya0FyZ3MgPSBvcHRpb25zLmZvcmtBcmdzO1xuXG4gIC8vIFRoZSByZWFkeSBtZXNzYWdlIGlzIG9ubHkgc2VudCBpZiB0aGUgd29ya2VyLmFkZCBtZXRob2QgaXMgY2FsbGVkIChBbmQgdGhlIGRlZmF1bHQgc2NyaXB0IGlzIG5vdCB1c2VkKVxuICBpZiAoIXNjcmlwdCkge1xuICAgIHRoaXMud29ya2VyLnJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHF1ZXVlIGZvciByZXF1ZXN0cyB0aGF0IGFyZSByZWNlaXZlZCBiZWZvcmUgdGhlIHdvcmtlciBpcyByZWFkeVxuICB0aGlzLnJlcXVlc3RRdWV1ZSA9IFtdO1xuICB0aGlzLndvcmtlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIGlmIChtZS50ZXJtaW5hdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2UgPT09ICdzdHJpbmcnICYmIHJlc3BvbnNlID09PSAncmVhZHknKSB7XG4gICAgICBtZS53b3JrZXIucmVhZHkgPSB0cnVlO1xuICAgICAgZGlzcGF0Y2hRdWV1ZWRSZXF1ZXN0cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaW5kIHRoZSB0YXNrIGZyb20gdGhlIHByb2Nlc3NpbmcgcXVldWUsIGFuZCBydW4gdGhlIHRhc2tzIGNhbGxiYWNrXG4gICAgICB2YXIgaWQgPSByZXNwb25zZS5pZDtcbiAgICAgIHZhciB0YXNrID0gbWUucHJvY2Vzc2luZ1tpZF07XG4gICAgICBpZiAodGFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5pc0V2ZW50KSB7XG4gICAgICAgICAgaWYgKHRhc2sub3B0aW9ucyAmJiB0eXBlb2YgdGFzay5vcHRpb25zLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0YXNrLm9wdGlvbnMub24ocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgdGFzayBmcm9tIHRoZSBxdWV1ZVxuICAgICAgICAgIGRlbGV0ZSBtZS5wcm9jZXNzaW5nW2lkXTtcblxuICAgICAgICAgIC8vIHRlc3QgaWYgd2UgbmVlZCB0byB0ZXJtaW5hdGVcbiAgICAgICAgICBpZiAobWUudGVybWluYXRpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGNvbXBsZXRlIHdvcmtlciB0ZXJtaW5hdGlvbiBpZiBhbGwgdGFza3MgYXJlIGZpbmlzaGVkXG4gICAgICAgICAgICBtZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyByZXNvbHZlIHRoZSB0YXNrJ3MgcHJvbWlzZVxuICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgdGFzay5yZXNvbHZlci5yZWplY3Qob2JqZWN0VG9FcnJvcihyZXNwb25zZS5lcnJvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZXIucmVzb2x2ZShyZXNwb25zZS5yZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVqZWN0IGFsbCBydW5uaW5nIHRhc2tzIG9uIHdvcmtlciBlcnJvclxuICBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgbWUudGVybWluYXRlZCA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpZCBpbiBtZS5wcm9jZXNzaW5nKSB7XG4gICAgICBpZiAobWUucHJvY2Vzc2luZ1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZS5wcm9jZXNzaW5nW2lkXS5yZXNvbHZlci5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBtZS5wcm9jZXNzaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIC8vIHNlbmQgYWxsIHF1ZXVlZCByZXF1ZXN0cyB0byB3b3JrZXJcbiAgZnVuY3Rpb24gZGlzcGF0Y2hRdWV1ZWRSZXF1ZXN0cygpXG4gIHtcbiAgICBmb3IoY29uc3QgcmVxdWVzdCBvZiBtZS5yZXF1ZXN0UXVldWUuc3BsaWNlKDApKSB7XG4gICAgICBtZS53b3JrZXIuc2VuZChyZXF1ZXN0KTtcbiAgICB9XG4gIH1cblxuICB2YXIgd29ya2VyID0gdGhpcy53b3JrZXI7XG4gIC8vIGxpc3RlbiBmb3Igd29ya2VyIG1lc3NhZ2VzIGVycm9yIGFuZCBleGl0XG4gIHRoaXMud29ya2VyLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICB0aGlzLndvcmtlci5vbignZXhpdCcsIGZ1bmN0aW9uIChleGl0Q29kZSwgc2lnbmFsQ29kZSkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dvcmtlcnBvb2wgV29ya2VyIHRlcm1pbmF0ZWQgVW5leHBlY3RlZGx5XFxuJztcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBleGl0Q29kZTogYCcgKyBleGl0Q29kZSArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc2lnbmFsQ29kZTogYCcgKyBzaWduYWxDb2RlICsgJ2BcXG4nO1xuXG4gICAgbWVzc2FnZSArPSAnICAgIHdvcmtlcnBvb2wuc2NyaXB0OiBgJyArICBtZS5zY3JpcHQgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNwYXduQXJnczogYCcgKyAgd29ya2VyLnNwYXduYXJncyArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc3Bhd25maWxlOiBgJyArIHdvcmtlci5zcGF3bmZpbGUgKyAnYFxcbidcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRvdXQ6IGAnICsgd29ya2VyLnN0ZG91dCArICdgXFxuJ1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRlcnI6IGAnICsgd29ya2VyLnN0ZGVyciArICdgXFxuJ1xuXG4gICAgb25FcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICB9KTtcblxuICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpOyAvLyBxdWV1ZSB3aXRoIHRhc2tzIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuXG4gIHRoaXMudGVybWluYXRpbmcgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2U7XG4gIHRoaXMudGVybWluYXRpb25IYW5kbGVyID0gbnVsbDtcbiAgdGhpcy5sYXN0SWQgPSAwO1xufVxuXG4vKipcbiAqIEdldCBhIGxpc3Qgd2l0aCBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyLlxuICogQHJldHVybiB7UHJvbWlzZS48U3RyaW5nW10sIEVycm9yPn0gbWV0aG9kc1xuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS5tZXRob2RzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5leGVjKCdtZXRob2RzJyk7XG59O1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBtZXRob2Qgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzIG9uIHRoZSB3b3JrZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbXNdXG4gKiBAcGFyYW0ge3tyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbn19IFtyZXNvbHZlcl1cbiAqIEBwYXJhbSB7RXhlY09wdGlvbnN9ICBbb3B0aW9uc11cbiAqIEByZXR1cm4ge1Byb21pc2UuPCosIEVycm9yPn0gcmVzdWx0XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihtZXRob2QsIHBhcmFtcywgcmVzb2x2ZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFyZXNvbHZlcikge1xuICAgIHJlc29sdmVyID0gUHJvbWlzZS5kZWZlcigpO1xuICB9XG5cbiAgLy8gZ2VuZXJhdGUgYSB1bmlxdWUgaWQgZm9yIHRoZSB0YXNrXG4gIHZhciBpZCA9ICsrdGhpcy5sYXN0SWQ7XG5cbiAgLy8gcmVnaXN0ZXIgYSBuZXcgdGFzayBhcyBiZWluZyBpbiBwcm9ncmVzc1xuICB0aGlzLnByb2Nlc3NpbmdbaWRdID0ge1xuICAgIGlkOiBpZCxcbiAgICByZXNvbHZlcjogcmVzb2x2ZXIsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9O1xuXG4gIC8vIGJ1aWxkIGEgSlNPTi1SUEMgcmVxdWVzdFxuICB2YXIgcmVxdWVzdCA9IHtcbiAgICBpZDogaWQsXG4gICAgbWV0aG9kOiBtZXRob2QsXG4gICAgcGFyYW1zOiBwYXJhbXNcbiAgfTtcblxuICBpZiAodGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgcmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIGlzIHRlcm1pbmF0ZWQnKSk7XG4gIH0gZWxzZSBpZiAodGhpcy53b3JrZXIucmVhZHkpIHtcbiAgICAvLyBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSB3b3JrZXJcbiAgICB0aGlzLndvcmtlci5zZW5kKHJlcXVlc3QpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVxdWVzdFF1ZXVlLnB1c2gocmVxdWVzdCk7XG4gIH1cblxuICAvLyBvbiBjYW5jZWxsYXRpb24sIGZvcmNlIHRoZSB3b3JrZXIgdG8gdGVybWluYXRlXG4gIHZhciBtZSA9IHRoaXM7XG4gIHJldHVybiByZXNvbHZlci5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBQcm9taXNlLlRpbWVvdXRFcnJvcikge1xuICAgICAgLy8gcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSBxdWV1ZS4gSXQgaXMgYWxyZWFkeSByZWplY3RlZCAoaGVuY2UgdGhpc1xuICAgICAgLy8gY2F0Y2ggZXZlbnQpLCBhbmQgZWxzZSBpdCB3aWxsIGJlIHJlamVjdGVkIGFnYWluIHdoZW4gdGVybWluYXRpbmdcbiAgICAgIGRlbGV0ZSBtZS5wcm9jZXNzaW5nW2lkXTtcblxuICAgICAgLy8gdGVybWluYXRlIHdvcmtlclxuICAgICAgcmV0dXJuIG1lLnRlcm1pbmF0ZUFuZE5vdGlmeSh0cnVlKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9KVxufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIHdvcmtlciBpcyB3b3JraW5nIG9yIG5vdFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB3b3JrZXIgaXMgYnVzeVxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS5idXN5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wcm9jZXNzaW5nKS5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXIgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFjaz1udWxsXSBJZiBwcm92aWRlZCwgd2lsbCBiZSBjYWxsZWQgd2hlbiBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChmb3JjZSwgY2FsbGJhY2spIHtcbiAgdmFyIG1lID0gdGhpcztcbiAgaWYgKGZvcmNlKSB7XG4gICAgLy8gY2FuY2VsIGFsbCB0YXNrcyBpbiBwcm9ncmVzc1xuICAgIGZvciAodmFyIGlkIGluIHRoaXMucHJvY2Vzc2luZykge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdbaWRdLnJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1dvcmtlciB0ZXJtaW5hdGVkJykpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMudGVybWluYXRpb25IYW5kbGVyID0gY2FsbGJhY2s7XG4gIH1cbiAgaWYgKCF0aGlzLmJ1c3koKSkge1xuICAgIC8vIGFsbCB0YXNrcyBhcmUgZmluaXNoZWQuIGtpbGwgdGhlIHdvcmtlclxuICAgIHZhciBjbGVhbnVwID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICBtZS50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIGlmIChtZS53b3JrZXIgIT0gbnVsbCAmJiBtZS53b3JrZXIucmVtb3ZlQWxsTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIHJlbW92ZUFsbExpc3RlbmVycyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgY2hpbGRfcHJvY2Vzc1xuICAgICAgICBtZS53b3JrZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCdtZXNzYWdlJyk7XG4gICAgICB9XG4gICAgICBtZS53b3JrZXIgPSBudWxsO1xuICAgICAgbWUudGVybWluYXRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChtZS50ZXJtaW5hdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgbWUudGVybWluYXRpb25IYW5kbGVyKGVyciwgbWUpO1xuICAgICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLndvcmtlcikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLndvcmtlci5raWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtlci5raWxsZWQpIHtcbiAgICAgICAgICBjbGVhbnVwKG5ldyBFcnJvcignd29ya2VyIGFscmVhZHkga2lsbGVkIScpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53b3JrZXIuaXNDaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgICB2YXIgY2xlYW5FeGl0VGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAobWUud29ya2VyKSB7XG4gICAgICAgICAgICAgIG1lLndvcmtlci5raWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgQ0hJTERfUFJPQ0VTU19FWElUX1RJTUVPVVQpO1xuXG4gICAgICAgICAgdGhpcy53b3JrZXIub25jZSgnZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNsZWFuRXhpdFRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKG1lLndvcmtlcikge1xuICAgICAgICAgICAgICBtZS53b3JrZXIua2lsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLndvcmtlci5yZWFkeSkge1xuICAgICAgICAgICAgdGhpcy53b3JrZXIuc2VuZChURVJNSU5BVEVfTUVUSE9EX0lEKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UXVldWUucHVzaChURVJNSU5BVEVfTUVUSE9EX0lEKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3b3JrZXJfdGhyZWFkXG4gICAgICAgICAgdGhpcy53b3JrZXIua2lsbCgpO1xuICAgICAgICAgIHRoaXMud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLndvcmtlci50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy53b3JrZXIudGVybWluYXRlKCk7IC8vIHdlYiB3b3JrZXJcbiAgICAgICAgdGhpcy53b3JrZXIua2lsbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgd29ya2VyJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyB3ZSBjYW4ndCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHksIHRoZXJlIGFyZSBzdGlsbCB0YXNrcyBiZWluZyBleGVjdXRlZFxuICAgIHRoaXMudGVybWluYXRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIFRlcm1pbmF0ZSB0aGUgd29ya2VyLCByZXR1cm5pbmcgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVybWluYXRpb24gaGFzIGJlZW4gZG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXIgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF0gICAgICAgIElmIHByb3ZpZGVkIGFuZCBub24temVybywgd29ya2VyIHRlcm1pbmF0aW9uIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGltZW91dCBpZiB3b3JrZXIgcHJvY2VzcyBoYXMgbm90IGJlZW4gdGVybWluYXRlZC5cbiAqIEByZXR1cm4ge1Byb21pc2UuPFdvcmtlckhhbmRsZXIsIEVycm9yPn1cbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUudGVybWluYXRlQW5kTm90aWZ5ID0gZnVuY3Rpb24gKGZvcmNlLCB0aW1lb3V0KSB7XG4gIHZhciByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICByZXNvbHZlci5wcm9taXNlLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG4gIHRoaXMudGVybWluYXRlKGZvcmNlLCBmdW5jdGlvbihlcnIsIHdvcmtlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJlc29sdmVyLnJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlci5yZXNvbHZlKHdvcmtlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmtlckhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cy5fdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMgPSB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcztcbm1vZHVsZS5leHBvcnRzLl9zZXR1cFByb2Nlc3NXb3JrZXIgPSBzZXR1cFByb2Nlc3NXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBCcm93c2VyV29ya2VyID0gc2V0dXBCcm93c2VyV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwV29ya2VyVGhyZWFkV29ya2VyID0gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5lbnN1cmVXb3JrZXJUaHJlYWRzID0gZW5zdXJlV29ya2VyVGhyZWFkcztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBNQVhfUE9SVFMgPSA2NTUzNTtcbm1vZHVsZS5leHBvcnRzID0gRGVidWdQb3J0QWxsb2NhdG9yO1xuZnVuY3Rpb24gRGVidWdQb3J0QWxsb2NhdG9yKCkge1xuICB0aGlzLnBvcnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLm5leHRBdmFpbGFibGVTdGFydGluZ0F0ID0gZnVuY3Rpb24oc3RhcnRpbmcpIHtcbiAgd2hpbGUgKHRoaXMucG9ydHNbc3RhcnRpbmddID09PSB0cnVlKSB7XG4gICAgc3RhcnRpbmcrKztcbiAgfVxuXG4gIGlmIChzdGFydGluZyA+PSBNQVhfUE9SVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2wgZGVidWcgcG9ydCBsaW1pdCByZWFjaGVkOiAnICsgc3RhcnRpbmcgKyAnPj0gJyArIE1BWF9QT1JUUyApO1xuICB9XG5cbiAgdGhpcy5wb3J0c1tzdGFydGluZ10gPSB0cnVlO1xuICB0aGlzLmxlbmd0aCsrO1xuICByZXR1cm4gc3RhcnRpbmc7XG59O1xuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLnJlbGVhc2VQb3J0ID0gZnVuY3Rpb24ocG9ydCkge1xuICBkZWxldGUgdGhpcy5wb3J0c1twb3J0XTtcbiAgdGhpcy5sZW5ndGgtLTtcbn07XG5cbiIsICJ2YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xudmFyIFdvcmtlckhhbmRsZXIgPSByZXF1aXJlKCcuL1dvcmtlckhhbmRsZXInKTtcbnZhciBlbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKTtcbnZhciBEZWJ1Z1BvcnRBbGxvY2F0b3IgPSByZXF1aXJlKCcuL2RlYnVnLXBvcnQtYWxsb2NhdG9yJyk7XG52YXIgREVCVUdfUE9SVF9BTExPQ0FUT1IgPSBuZXcgRGVidWdQb3J0QWxsb2NhdG9yKCk7XG4vKipcbiAqIEEgcG9vbCB0byBtYW5hZ2Ugd29ya2Vyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtzY3JpcHRdICAgT3B0aW9uYWwgd29ya2VyIHNjcmlwdFxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gW29wdGlvbnNdICBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc2NyaXB0ID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IG51bGw7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICAgIG9wdGlvbnMgPSBzY3JpcHQ7XG4gIH1cblxuICB0aGlzLndvcmtlcnMgPSBbXTsgIC8vIHF1ZXVlIHdpdGggYWxsIHdvcmtlcnNcbiAgdGhpcy50YXNrcyA9IFtdOyAgICAvLyBxdWV1ZSB3aXRoIHRhc2tzIGF3YWl0aW5nIGV4ZWN1dGlvblxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuZm9ya0FyZ3MgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMuZm9ya0FyZ3MgfHwgW10pO1xuICB0aGlzLmZvcmtPcHRzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLmZvcmtPcHRzIHx8IHt9KTtcbiAgdGhpcy5kZWJ1Z1BvcnRTdGFydCA9IChvcHRpb25zLmRlYnVnUG9ydFN0YXJ0IHx8IDQzMjEwKTtcbiAgdGhpcy5ub2RlV29ya2VyID0gb3B0aW9ucy5ub2RlV29ya2VyO1xuICB0aGlzLndvcmtlclR5cGUgPSBvcHRpb25zLndvcmtlclR5cGUgfHwgb3B0aW9ucy5ub2RlV29ya2VyIHx8ICdhdXRvJ1xuICB0aGlzLm1heFF1ZXVlU2l6ZSA9IG9wdGlvbnMubWF4UXVldWVTaXplIHx8IEluZmluaXR5O1xuXG4gIHRoaXMub25DcmVhdGVXb3JrZXIgPSBvcHRpb25zLm9uQ3JlYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcbiAgdGhpcy5vblRlcm1pbmF0ZVdvcmtlciA9IG9wdGlvbnMub25UZXJtaW5hdGVXb3JrZXIgfHwgKCgpID0+IG51bGwpO1xuXG4gIC8vIGNvbmZpZ3VyYXRpb25cbiAgaWYgKG9wdGlvbnMgJiYgJ21heFdvcmtlcnMnIGluIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU1heFdvcmtlcnMob3B0aW9ucy5tYXhXb3JrZXJzKTtcbiAgICB0aGlzLm1heFdvcmtlcnMgPSBvcHRpb25zLm1heFdvcmtlcnM7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gTWF0aC5tYXgoKGVudmlyb25tZW50LmNwdXMgfHwgNCkgLSAxLCAxKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICYmICdtaW5Xb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgaWYob3B0aW9ucy5taW5Xb3JrZXJzID09PSAnbWF4Jykge1xuICAgICAgdGhpcy5taW5Xb3JrZXJzID0gdGhpcy5tYXhXb3JrZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZU1pbldvcmtlcnMob3B0aW9ucy5taW5Xb3JrZXJzKTtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IG9wdGlvbnMubWluV29ya2VycztcbiAgICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KHRoaXMubWluV29ya2VycywgdGhpcy5tYXhXb3JrZXJzKTsgICAgIC8vIGluIGNhc2UgbWluV29ya2VycyBpcyBoaWdoZXIgdGhhbiBtYXhXb3JrZXJzXG4gICAgfVxuICAgIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kTmV4dCA9IHRoaXMuX25leHQuYmluZCh0aGlzKTtcblxuXG4gIGlmICh0aGlzLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7XG4gICAgV29ya2VySGFuZGxlci5lbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBmdW5jdGlvbiBvbiBhIHdvcmtlci5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICpcbiAqICAgdmFyIHBvb2wgPSBuZXcgUG9vbCgpXG4gKlxuICogICAvLyBjYWxsIGEgZnVuY3Rpb24gYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXJcbiAqICAgcG9vbC5leGVjKCdmaWJvbmFjY2knLCBbNl0pXG4gKlxuICogICAvLyBvZmZsb2FkIGEgZnVuY3Rpb25cbiAqICAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAqICAgICByZXR1cm4gYSArIGJcbiAqICAgfTtcbiAqICAgcG9vbC5leGVjKGFkZCwgWzIsIDRdKVxuICogICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyBvdXRwdXRzIDZcbiAqICAgICAgIH0pXG4gKiAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICogICAgICAgfSk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmcgfCBGdW5jdGlvbn0gbWV0aG9kICBGdW5jdGlvbiBuYW1lIG9yIGZ1bmN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIHN0cmluZywgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG9uIHRoZSB3b3JrZXIgd2lsbCBiZSBleGVjdXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIEZ1bmN0aW9uLCB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzdHJpbmdpZmllZCBhbmQgZXhlY3V0ZWQgdmlhIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIGJ1aWx0LWluIGZ1bmN0aW9uIGBydW4oZm4sIGFyZ3MpYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbXNdICBGdW5jdGlvbiBhcmd1bWVudHMgYXBwbGllZCB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSBbb3B0aW9uc10gIE9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJuIHtQcm9taXNlLjwqLCBFcnJvcj59IHJlc3VsdFxuICovXG5Qb29sLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKG1ldGhvZCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8vIHZhbGlkYXRlIHR5cGUgb2YgYXJndW1lbnRzXG4gIGlmIChwYXJhbXMgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwicGFyYW1zXCInKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgIHZhciByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcblxuICAgIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+PSB0aGlzLm1heFF1ZXVlU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXggcXVldWUgc2l6ZSBvZiAnICsgdGhpcy5tYXhRdWV1ZVNpemUgKyAnIHJlYWNoZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBuZXcgdGFzayB0byB0aGUgcXVldWVcbiAgICB2YXIgdGFza3MgPSB0aGlzLnRhc2tzO1xuICAgIHZhciB0YXNrID0ge1xuICAgICAgbWV0aG9kOiAgbWV0aG9kLFxuICAgICAgcGFyYW1zOiAgcGFyYW1zLFxuICAgICAgcmVzb2x2ZXI6IHJlc29sdmVyLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9O1xuICAgIHRhc2tzLnB1c2godGFzayk7XG5cbiAgICAvLyByZXBsYWNlIHRoZSB0aW1lb3V0IG1ldGhvZCBvZiB0aGUgUHJvbWlzZSB3aXRoIG91ciBvd24sXG4gICAgLy8gd2hpY2ggc3RhcnRzIHRoZSB0aW1lciBhcyBzb29uIGFzIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHN0YXJ0ZWRcbiAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0O1xuICAgIHJlc29sdmVyLnByb21pc2UudGltZW91dCA9IGZ1bmN0aW9uIHRpbWVvdXQgKGRlbGF5KSB7XG4gICAgICBpZiAodGFza3MuaW5kZXhPZih0YXNrKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gdGFzayBpcyBzdGlsbCBxdWV1ZWQgLT4gc3RhcnQgdGhlIHRpbWVyIGxhdGVyIG9uXG4gICAgICAgIHRhc2sudGltZW91dCA9IGRlbGF5O1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyB0YXNrIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQgLT4gc3RhcnQgdGltZXIgaW1tZWRpYXRlbHlcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dC5jYWxsKHJlc29sdmVyLnByb21pc2UsIGRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdHJpZ2dlciB0YXNrIGV4ZWN1dGlvblxuICAgIHRoaXMuX25leHQoKTtcblxuICAgIHJldHVybiByZXNvbHZlci5wcm9taXNlO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBzZW5kIHN0cmluZ2lmaWVkIGZ1bmN0aW9uIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgdG8gd29ya2VyXG4gICAgcmV0dXJuIHRoaXMuZXhlYygncnVuJywgW1N0cmluZyhtZXRob2QpLCBwYXJhbXNdKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgYXJndW1lbnQgXCJtZXRob2RcIicpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHByb3h5IGZvciBjdXJyZW50IHdvcmtlci4gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGxcbiAqIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuIFRoZSBtZXRob2RzIGFsd2F5cyByZXR1cm4gYSBwcm9taXNlLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2UuPE9iamVjdCwgRXJyb3I+fSBwcm94eVxuICovXG5Qb29sLnByb3RvdHlwZS5wcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhcmd1bWVudHMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHZhciBwb29sID0gdGhpcztcbiAgcmV0dXJuIHRoaXMuZXhlYygnbWV0aG9kcycpXG4gICAgICAudGhlbihmdW5jdGlvbiAobWV0aG9kcykge1xuICAgICAgICB2YXIgcHJveHkgPSB7fTtcblxuICAgICAgICBtZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgIHByb3h5W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9vbC5leGVjKG1ldGhvZCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBhcnJheS5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgRnVuY3Rpb24gdGFraW5nIHR3byBhcmd1bWVudHM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxiYWNrKGN1cnJlbnRWYWx1ZSwgaW5kZXgpYFxuICogQHJldHVybiB7UHJvbWlzZS48QXJyYXk+fSBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyAgd2l0aCBhbiBBcnJheVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgYXJyYXkgZWxlbWVudHMuXG4gKi9cbi8qIFRPRE86IGltcGxlbWVudCBtYXBcblBvb2wucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChhcnJheSwgY2FsbGJhY2spIHtcbn07XG4qL1xuXG4vKipcbiAqIEdyYWIgdGhlIGZpcnN0IHRhc2sgZnJvbSB0aGUgcXVldWUsIGZpbmQgYSBmcmVlIHdvcmtlciwgYW5kIGFzc2lnbiB0aGVcbiAqIHdvcmtlciB0byB0aGUgdGFzay5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAvLyB0aGVyZSBhcmUgdGFza3MgaW4gdGhlIHF1ZXVlXG5cbiAgICAvLyBmaW5kIGFuIGF2YWlsYWJsZSB3b3JrZXJcbiAgICB2YXIgd29ya2VyID0gdGhpcy5fZ2V0V29ya2VyKCk7XG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgLy8gZ2V0IHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlXG4gICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgdmFyIHRhc2sgPSB0aGlzLnRhc2tzLnNoaWZ0KCk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSB0YXNrIGlzIHN0aWxsIHBlbmRpbmcgKGFuZCBub3QgY2FuY2VsbGVkIC0+IHByb21pc2UgcmVqZWN0ZWQpXG4gICAgICBpZiAodGFzay5yZXNvbHZlci5wcm9taXNlLnBlbmRpbmcpIHtcbiAgICAgICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgd29ya2VyXG4gICAgICAgIHZhciBwcm9taXNlID0gd29ya2VyLmV4ZWModGFzay5tZXRob2QsIHRhc2sucGFyYW1zLCB0YXNrLnJlc29sdmVyLCB0YXNrLm9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4obWUuX2JvdW5kTmV4dClcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHdvcmtlciBjcmFzaGVkIGFuZCB0ZXJtaW5hdGVkLCByZW1vdmUgaXQgZnJvbSB0aGUgcG9vbFxuICAgICAgICAgICAgaWYgKHdvcmtlci50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZS5fcmVtb3ZlV29ya2VyKHdvcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG1lLl9uZXh0KCk7IC8vIHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHN0YXJ0IHF1ZXVlZCB0aW1lciBub3dcbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrLnRpbWVvdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcHJvbWlzZS50aW1lb3V0KHRhc2sudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0YXNrIHRha2VuIHdhcyBhbHJlYWR5IGNvbXBsZXRlIChlaXRoZXIgcmVqZWN0ZWQgb3IgcmVzb2x2ZWQpLCBzbyBqdXN0IHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICBtZS5fbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYW4gYXZhaWxhYmxlIHdvcmtlci4gSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSBhbmQgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiB3b3JrZXJzIGlzbid0IHlldCByZWFjaGVkLCBhIG5ldyB3b3JrZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIGlzIHJlYWNoZWQsXG4gKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHJldHVybiB7V29ya2VySGFuZGxlciB8IG51bGx9IHdvcmtlclxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2dldFdvcmtlciA9IGZ1bmN0aW9uKCkge1xuICAvLyBmaW5kIGEgbm9uLWJ1c3kgd29ya2VyXG4gIHZhciB3b3JrZXJzID0gdGhpcy53b3JrZXJzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgd29ya2VyID0gd29ya2Vyc1tpXTtcbiAgICBpZiAod29ya2VyLmJ1c3koKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtlcnMubGVuZ3RoIDwgdGhpcy5tYXhXb3JrZXJzKSB7XG4gICAgLy8gY3JlYXRlIGEgbmV3IHdvcmtlclxuICAgIHdvcmtlciA9IHRoaXMuX2NyZWF0ZVdvcmtlckhhbmRsZXIoKTtcbiAgICB3b3JrZXJzLnB1c2god29ya2VyKTtcbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sLlxuICogQXR0ZW1wdHMgdG8gdGVybWluYXRlIHdvcmtlciBpZiBub3QgYWxyZWFkeSB0ZXJtaW5hdGVkLCBhbmQgZW5zdXJlcyB0aGUgbWluaW11bVxuICogcG9vbCBzaXplIGlzIG1ldC5cbiAqIEBwYXJhbSB7V29ya2VySGFuZGxlcn0gd29ya2VyXG4gKiBAcmV0dXJuIHtQcm9taXNlPFdvcmtlckhhbmRsZXI+fVxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyID0gZnVuY3Rpb24od29ya2VyKSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgREVCVUdfUE9SVF9BTExPQ0FUT1IucmVsZWFzZVBvcnQod29ya2VyLmRlYnVnUG9ydCk7XG4gIC8vIF9yZW1vdmVXb3JrZXIgd2lsbCBjYWxsIHRoaXMsIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHJlbW92ZWQgc3luY2hyb25vdXNseVxuICB0aGlzLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCh3b3JrZXIpO1xuICAvLyBJZiBtaW5Xb3JrZXJzIHNldCwgc3BpbiB1cCBuZXcgd29ya2VycyB0byByZXBsYWNlIHRoZSBjcmFzaGVkIG9uZXNcbiAgdGhpcy5fZW5zdXJlTWluV29ya2VycygpO1xuICAvLyB0ZXJtaW5hdGUgdGhlIHdvcmtlciAoaWYgbm90IGFscmVhZHkgdGVybWluYXRlZClcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHdvcmtlci50ZXJtaW5hdGUoZmFsc2UsIGZ1bmN0aW9uKGVycikge1xuICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICBmb3JrQXJnczogd29ya2VyLmZvcmtBcmdzLFxuICAgICAgICBmb3JrT3B0czogd29ya2VyLmZvcmtPcHRzLFxuICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgIH0pO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUod29ya2VyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sIGxpc3QuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyRnJvbUxpc3QgPSBmdW5jdGlvbih3b3JrZXIpIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIGxpc3Qgd2l0aCB3b3JrZXJzXG4gIHZhciBpbmRleCA9IHRoaXMud29ya2Vycy5pbmRleE9mKHdvcmtlcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLndvcmtlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbG9zZSBhbGwgYWN0aXZlIHdvcmtlcnMuIFRhc2tzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCB3aWxsIGJlIGZpbmlzaGVkIGZpcnN0LlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VycyBhcmUgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VycyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XSAgICAgICAgSWYgcHJvdmlkZWQgYW5kIG5vbi16ZXJvLCB3b3JrZXIgdGVybWluYXRpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aW1lb3V0IGlmIHdvcmtlciBwcm9jZXNzIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkLlxuICogQHJldHVybiB7UHJvbWlzZS48dm9pZCwgRXJyb3I+fVxuICovXG5Qb29sLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoZm9yY2UsIHRpbWVvdXQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICAvLyBjYW5jZWwgYW55IHBlbmRpbmcgdGFza3NcbiAgdGhpcy50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgdGFzay5yZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdQb29sIHRlcm1pbmF0ZWQnKSk7XG4gIH0pO1xuICB0aGlzLnRhc2tzLmxlbmd0aCA9IDA7XG5cbiAgdmFyIGYgPSBmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgfTtcbiAgdmFyIHJlbW92ZVdvcmtlciA9IGYuYmluZCh0aGlzKTtcblxuICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgdmFyIHdvcmtlcnMgPSB0aGlzLndvcmtlcnMuc2xpY2UoKTtcbiAgd29ya2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICB2YXIgdGVybVByb21pc2UgPSB3b3JrZXIudGVybWluYXRlQW5kTm90aWZ5KGZvcmNlLCB0aW1lb3V0KVxuICAgICAgLnRoZW4ocmVtb3ZlV29ya2VyKVxuICAgICAgLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICAgIGZvcmtBcmdzOiB3b3JrZXIuZm9ya0FyZ3MsXG4gICAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBwcm9taXNlcy5wdXNoKHRlcm1Qcm9taXNlKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHN0YXRpc3RpY3Mgb24gdGFza3MgYW5kIHdvcmtlcnMuXG4gKiBAcmV0dXJuIHt7dG90YWxXb3JrZXJzOiBudW1iZXIsIGJ1c3lXb3JrZXJzOiBudW1iZXIsIGlkbGVXb3JrZXJzOiBudW1iZXIsIHBlbmRpbmdUYXNrczogbnVtYmVyLCBhY3RpdmVUYXNrczogbnVtYmVyfX0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzdGF0aXN0aWNzXG4gKi9cblBvb2wucHJvdG90eXBlLnN0YXRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG90YWxXb3JrZXJzID0gdGhpcy53b3JrZXJzLmxlbmd0aDtcbiAgdmFyIGJ1c3lXb3JrZXJzID0gdGhpcy53b3JrZXJzLmZpbHRlcihmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgcmV0dXJuIHdvcmtlci5idXN5KCk7XG4gIH0pLmxlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHRvdGFsV29ya2VyczogIHRvdGFsV29ya2VycyxcbiAgICBidXN5V29ya2VyczogICBidXN5V29ya2VycyxcbiAgICBpZGxlV29ya2VyczogICB0b3RhbFdvcmtlcnMgLSBidXN5V29ya2VycyxcblxuICAgIHBlbmRpbmdUYXNrczogIHRoaXMudGFza3MubGVuZ3RoLFxuICAgIGFjdGl2ZVRhc2tzOiAgIGJ1c3lXb3JrZXJzXG4gIH07XG59O1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIG1pbmltdW0gb2YgbWluV29ya2VycyBpcyB1cCBhbmQgcnVubmluZ1xuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fZW5zdXJlTWluV29ya2VycyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5taW5Xb3JrZXJzKSB7XG4gICAgZm9yKHZhciBpID0gdGhpcy53b3JrZXJzLmxlbmd0aDsgaSA8IHRoaXMubWluV29ya2VyczsgaSsrKSB7XG4gICAgICB0aGlzLndvcmtlcnMucHVzaCh0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCkpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IFdvcmtlckhhbmRsZXIgYW5kIHBhc3MgYWxsIG9wdGlvbnMuXG4gKiBAcmV0dXJuIHtXb3JrZXJIYW5kbGVyfVxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2NyZWF0ZVdvcmtlckhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG92ZXJyaWRlblBhcmFtcyA9IHRoaXMub25DcmVhdGVXb3JrZXIoe1xuICAgIGZvcmtBcmdzOiB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiB0aGlzLmZvcmtPcHRzLFxuICAgIHNjcmlwdDogdGhpcy5zY3JpcHRcbiAgfSkgfHwge307XG5cbiAgcmV0dXJuIG5ldyBXb3JrZXJIYW5kbGVyKG92ZXJyaWRlblBhcmFtcy5zY3JpcHQgfHwgdGhpcy5zY3JpcHQsIHtcbiAgICBmb3JrQXJnczogb3ZlcnJpZGVuUGFyYW1zLmZvcmtBcmdzIHx8IHRoaXMuZm9ya0FyZ3MsXG4gICAgZm9ya09wdHM6IG92ZXJyaWRlblBhcmFtcy5mb3JrT3B0cyB8fCB0aGlzLmZvcmtPcHRzLFxuICAgIGRlYnVnUG9ydDogREVCVUdfUE9SVF9BTExPQ0FUT1IubmV4dEF2YWlsYWJsZVN0YXJ0aW5nQXQodGhpcy5kZWJ1Z1BvcnRTdGFydCksXG4gICAgd29ya2VyVHlwZTogdGhpcy53b3JrZXJUeXBlXG4gIH0pO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBtYXhXb3JrZXJzIG9wdGlvbiBpcyBhbiBpbnRlZ2VyID49IDFcbiAqIEBwYXJhbSB7Kn0gbWF4V29ya2Vyc1xuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBtYXhXb3JrZXJzIGhhcyBhIHZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWF4V29ya2VycyhtYXhXb3JrZXJzKSB7XG4gIGlmICghaXNOdW1iZXIobWF4V29ya2VycykgfHwgIWlzSW50ZWdlcihtYXhXb3JrZXJzKSB8fCBtYXhXb3JrZXJzIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBtYXhXb3JrZXJzIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgPj0gMScpO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIG1pbldvcmtlcnMgb3B0aW9uIGlzIGFuIGludGVnZXIgPj0gMFxuICogQHBhcmFtIHsqfSBtaW5Xb3JrZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIHdoZW4gbWluV29ya2VycyBoYXMgYSB2YWxpZCB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU1pbldvcmtlcnMobWluV29ya2Vycykge1xuICBpZiAoIWlzTnVtYmVyKG1pbldvcmtlcnMpIHx8ICFpc0ludGVnZXIobWluV29ya2VycykgfHwgbWluV29ya2VycyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gbWluV29ya2VycyBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyID49IDAnKTtcbiAgfVxufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHZhcmlhYmxlIGlzIGEgbnVtYmVyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIHdoZW4gdmFsdWUgaXMgYSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgbnVtYmVyIGlzIGFuIGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSkgPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbDtcbiIsICIvKipcbiAqIHdvcmtlciBtdXN0IGJlIHN0YXJ0ZWQgYXMgYSBjaGlsZCBwcm9jZXNzIG9yIGEgd2ViIHdvcmtlci5cbiAqIEl0IGxpc3RlbnMgZm9yIFJQQyBtZXNzYWdlcyBmcm9tIHRoZSBwYXJlbnQgcHJvY2Vzcy5cbiAqL1xuXG4vLyBzb3VyY2Ugb2YgaW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcmVxdWlyZS1mb29sLXdlYnBhY2tcbnZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSBldmFsKFxuICAgICd0eXBlb2YgcmVxdWlyZSAhPT0gXFwndW5kZWZpbmVkXFwnJyArXG4gICAgJyA/IHJlcXVpcmUnICtcbiAgICAnIDogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoXFwnTW9kdWxlIFwiICsgbW9kdWxlICsgXCIgbm90IGZvdW5kLlxcJykgfSdcbik7XG5cbi8qKlxuICogU3BlY2lhbCBtZXNzYWdlIHNlbnQgYnkgcGFyZW50IHdoaWNoIGNhdXNlcyB0aGUgd29ya2VyIHRvIHRlcm1pbmF0ZSBpdHNlbGYuXG4gKiBOb3QgYSBcIm1lc3NhZ2Ugb2JqZWN0XCI7IHRoaXMgc3RyaW5nIGlzIHRoZSBlbnRpcmUgbWVzc2FnZS5cbiAqL1xudmFyIFRFUk1JTkFURV9NRVRIT0RfSUQgPSAnX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fJztcblxuLy8gdmFyIG5vZGVPU1BsYXRmb3JtID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpLm5vZGVPU1BsYXRmb3JtO1xuXG4vLyBjcmVhdGUgYSB3b3JrZXIgQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgbWVzc2FnZXMgd2hpY2ggd29ya3MgYm90aCBvblxuLy8gbm9kZS5qcyBhbmQgaW4gdGhlIGJyb3dzZXJcbnZhciB3b3JrZXIgPSB7XG4gIGV4aXQ6IGZ1bmN0aW9uKCkge31cbn07XG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyB3b3JrZXIgaW4gdGhlIGJyb3dzZXJcbiAgd29ya2VyLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgIH0pXG4gIH07XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICBwb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcbn1cbmVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAvLyBub2RlLmpzXG5cbiAgdmFyIFdvcmtlclRocmVhZHM7XG4gIHRyeSB7XG4gICAgV29ya2VyVGhyZWFkcyA9IHJlcXVpcmVGb29sV2VicGFjaygnd29ya2VyX3RocmVhZHMnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmIGVycm9yLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xuICAgICAgLy8gbm8gd29ya2VyX3RocmVhZHMsIGZhbGxiYWNrIHRvIHN1Yi1wcm9jZXNzIGJhc2VkIHdvcmtlcnNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgaWYgKFdvcmtlclRocmVhZHMgJiZcbiAgICAvKiBpZiB0aGVyZSBpcyBhIHBhcmVudFBvcnQsIHdlIGFyZSBpbiBhIFdvcmtlclRocmVhZCAqL1xuICAgIFdvcmtlclRocmVhZHMucGFyZW50UG9ydCAhPT0gbnVsbCkge1xuICAgIHZhciBwYXJlbnRQb3J0ICA9IFdvcmtlclRocmVhZHMucGFyZW50UG9ydDtcbiAgICB3b3JrZXIuc2VuZCA9IHBhcmVudFBvcnQucG9zdE1lc3NhZ2UuYmluZChwYXJlbnRQb3J0KTtcbiAgICB3b3JrZXIub24gPSBwYXJlbnRQb3J0Lm9uLmJpbmQocGFyZW50UG9ydCk7XG4gIH0gZWxzZSB7XG4gICAgd29ya2VyLm9uID0gcHJvY2Vzcy5vbi5iaW5kKHByb2Nlc3MpO1xuICAgIHdvcmtlci5zZW5kID0gcHJvY2Vzcy5zZW5kLmJpbmQocHJvY2Vzcyk7XG4gICAgLy8gcmVnaXN0ZXIgZGlzY29ubmVjdCBoYW5kbGVyIG9ubHkgZm9yIHN1YnByb2Nlc3Mgd29ya2VyIHRvIGV4aXQgd2hlbiBwYXJlbnQgaXMga2lsbGVkIHVuZXhwZWN0ZWRseVxuICAgIHdvcmtlci5vbignZGlzY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgICB3b3JrZXIuZXhpdCA9IHByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpO1xuICB9XG59XG5lbHNlIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdTY3JpcHQgbXVzdCBiZSBleGVjdXRlZCBhcyBhIHdvcmtlcicpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5yZWR1Y2UoZnVuY3Rpb24ocHJvZHVjdCwgbmFtZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvZHVjdCwgbmFtZSwge1xuXHR2YWx1ZTogZXJyb3JbbmFtZV0sXG5cdGVudW1lcmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGEgUHJvbWlzZSB2aWEgZHVjayB0eXBpbmcuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgaGF2aW5nIGZ1bmN0aW9ucyBgdGhlbmAgYW5kIGBjYXRjaGAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSAmJiAodHlwZW9mIHZhbHVlLmNhdGNoID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLy8gZnVuY3Rpb25zIGF2YWlsYWJsZSBleHRlcm5hbGx5XG53b3JrZXIubWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIHByb3ZpZGVkIGFyZ3VtZW50c1xuICogQHBhcmFtIHtTdHJpbmd9IGZuICAgICBTdHJpbmdpZmllZCBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdICBGdW5jdGlvbiBhcmd1bWVudHNcbiAqIEByZXR1cm5zIHsqfVxuICovXG53b3JrZXIubWV0aG9kcy5ydW4gPSBmdW5jdGlvbiBydW4oZm4sIGFyZ3MpIHtcbiAgdmFyIGYgPSBuZXcgRnVuY3Rpb24oJ3JldHVybiAoJyArIGZuICsgJykuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsnKTtcbiAgcmV0dXJuIGYuYXBwbHkoZiwgYXJncyk7XG59O1xuXG4vKipcbiAqIEdldCBhIGxpc3Qgd2l0aCBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGlzIHdvcmtlclxuICogQHJldHVybiB7U3RyaW5nW119IG1ldGhvZHNcbiAqL1xud29ya2VyLm1ldGhvZHMubWV0aG9kcyA9IGZ1bmN0aW9uIG1ldGhvZHMoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh3b3JrZXIubWV0aG9kcyk7XG59O1xuXG52YXIgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG5cbndvcmtlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gIGlmIChyZXF1ZXN0ID09PSBURVJNSU5BVEVfTUVUSE9EX0lEKSB7XG4gICAgcmV0dXJuIHdvcmtlci5leGl0KDApO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIG1ldGhvZCA9IHdvcmtlci5tZXRob2RzW3JlcXVlc3QubWV0aG9kXTtcblxuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSByZXF1ZXN0LmlkO1xuICAgICAgXG4gICAgICAvLyBleGVjdXRlIHRoZSBmdW5jdGlvblxuICAgICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseShtZXRob2QsIHJlcXVlc3QucGFyYW1zKTtcblxuICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgIC8vIHByb21pc2UgcmV0dXJuZWQsIHJlc29sdmUgdGhpcyBhbmQgdGhlbiByZXR1cm5cbiAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIHdvcmtlci5zZW5kKHtcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogY29udmVydEVycm9yKGVycilcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gaW1tZWRpYXRlIHJlc3VsdFxuICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1ldGhvZCBcIicgKyByZXF1ZXN0Lm1ldGhvZCArICdcIicpO1xuICAgIH1cbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgd29ya2VyLnNlbmQoe1xuICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICByZXN1bHQ6IG51bGwsXG4gICAgICBlcnJvcjogY29udmVydEVycm9yKGVycilcbiAgICB9KTtcbiAgfVxufSk7XG5cbi8qKlxuICogUmVnaXN0ZXIgbWV0aG9kcyB0byB0aGUgd29ya2VyXG4gKiBAcGFyYW0ge09iamVjdH0gbWV0aG9kc1xuICovXG53b3JrZXIucmVnaXN0ZXIgPSBmdW5jdGlvbiAobWV0aG9kcykge1xuXG4gIGlmIChtZXRob2RzKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAobWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB3b3JrZXIubWV0aG9kc1tuYW1lXSA9IG1ldGhvZHNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd29ya2VyLnNlbmQoJ3JlYWR5Jyk7XG5cbn07XG5cbndvcmtlci5lbWl0ID0gZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgaWYgKGN1cnJlbnRSZXF1ZXN0SWQpIHtcbiAgICB3b3JrZXIuc2VuZCh7XG4gICAgICBpZDogY3VycmVudFJlcXVlc3RJZCxcbiAgICAgIGlzRXZlbnQ6IHRydWUsXG4gICAgICBwYXlsb2FkXG4gICAgfSk7XG4gIH1cbn07XG5cbmlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZXhwb3J0cy5hZGQgPSB3b3JrZXIucmVnaXN0ZXI7XG4gIGV4cG9ydHMuZW1pdCA9IHdvcmtlci5lbWl0O1xufVxuIiwgInZhciBlbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgd29ya2VyIHBvb2xcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UG9vbH0gcG9vbFxuICovXG5leHBvcnRzLnBvb2wgPSBmdW5jdGlvbiBwb29sKHNjcmlwdCwgb3B0aW9ucykge1xuICB2YXIgUG9vbCA9IHJlcXVpcmUoJy4vUG9vbCcpO1xuXG4gIHJldHVybiBuZXcgUG9vbChzY3JpcHQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSB3b3JrZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXIgYSBzZXQgb2YgbWV0aG9kcyB0byB0aGUgd29ya2VyLlxuICogQHBhcmFtIHtPYmplY3R9IFttZXRob2RzXVxuICovXG5leHBvcnRzLndvcmtlciA9IGZ1bmN0aW9uIHdvcmtlcihtZXRob2RzKSB7XG4gIHZhciB3b3JrZXIgPSByZXF1aXJlKCcuL3dvcmtlcicpO1xuICB3b3JrZXIuYWRkKG1ldGhvZHMpO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhbiBldmVudCB0byB0aGUgcGFyZW50IHdvcmtlciBwb29sLlxuICogQHBhcmFtIHthbnl9IHBheWxvYWQgXG4gKi9cbmV4cG9ydHMud29ya2VyRW1pdCA9IGZ1bmN0aW9uIHdvcmtlckVtaXQocGF5bG9hZCkge1xuICB2YXIgd29ya2VyID0gcmVxdWlyZSgnLi93b3JrZXInKTtcbiAgd29ya2VyLmVtaXQocGF5bG9hZCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHByb21pc2UuXG4gKiBAdHlwZSB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5leHBvcnRzLlByb21pc2UgPSByZXF1aXJlKCcuL1Byb21pc2UnKTtcblxuZXhwb3J0cy5wbGF0Zm9ybSA9IGVudmlyb25tZW50LnBsYXRmb3JtO1xuZXhwb3J0cy5pc01haW5UaHJlYWQgPSBlbnZpcm9ubWVudC5pc01haW5UaHJlYWQ7XG5leHBvcnRzLmNwdXMgPSBlbnZpcm9ubWVudC5jcHVzOyIsICJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG50eXBlIFN0eWxlRm4gPSAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbmNvbnN0IHsgc3RkZXJyIH0gPSBwcm9jZXNzO1xuXG5jb25zdCBsb2dnZXIgPSAoc3RyZWFtOiBXcml0YWJsZSwgc3R5bGVzPzogU3R5bGVGbltdKSA9PiAoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gIGxldCBzdHIgPSB1dGlsLmZvcm1hdChmbXQsIC4uLmFyZ3MpO1xuICBpZiAoc3R5bGVzICYmIHN0eWxlcy5sZW5ndGgpIHtcbiAgICBzdHIgPSBzdHlsZXMucmVkdWNlKChhLCBzdHlsZSkgPT4gc3R5bGUoYSksIHN0cik7XG4gIH1cbiAgc3RyZWFtLndyaXRlKHN0ciArICdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmludCA9IGxvZ2dlcihzdGRlcnIpO1xuZXhwb3J0IGNvbnN0IGVycm9yID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLnJlZF0pO1xuZXhwb3J0IGNvbnN0IHdhcm5pbmcgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsueWVsbG93XSk7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ncmVlbl0pO1xuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodCA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ib2xkXSk7XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuZnJvbUNhbGxiYWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykgZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGZuLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIChlcnIsIHJlcykgPT4gKGVyciAhPSBudWxsKSA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShyZXMpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cblxuZXhwb3J0cy5mcm9tUHJvbWlzZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV1cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3Muc2xpY2UoMCwgLTEpKS50aGVuKHIgPT4gY2IobnVsbCwgciksIGNiKVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cbiIsICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtXG5cbm1vZHVsZS5leHBvcnRzID0gbGVnYWN5XG5cbmZ1bmN0aW9uIGxlZ2FjeSAoZnMpIHtcbiAgcmV0dXJuIHtcbiAgICBSZWFkU3RyZWFtOiBSZWFkU3RyZWFtLFxuICAgIFdyaXRlU3RyZWFtOiBXcml0ZVN0cmVhbVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKSkgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3InO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5idWZmZXJTaXplID0gNjQgKiAxMDI0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignZW5kIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgPiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPD0gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZCAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fcmVhZCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIHNlbGYucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmZkID0gZmQ7XG4gICAgICBzZWxmLmVtaXQoJ29wZW4nLCBmZCk7XG4gICAgICBzZWxmLl9yZWFkKCk7XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKSkgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAndyc7XG4gICAgdGhpcy5lbmNvZGluZyA9ICdiaW5hcnknO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhcnQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA+PSB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmcy5vcGVuO1xuICAgICAgdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3BlbiwgdGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIHVuZGVmaW5lZF0pO1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lXG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmouX19wcm90b19fXG59XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gb2JqXG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdClcbiAgICB2YXIgY29weSA9IHsgX19wcm90b19fOiBnZXRQcm90b3R5cGVPZihvYmopIH1cbiAgZWxzZVxuICAgIHZhciBjb3B5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvcHksIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gIH0pXG5cbiAgcmV0dXJuIGNvcHlcbn1cbiIsICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuLy8gVGhpcyBpcyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vcm1hbGl6ZS9telxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYgSm9uYXRoYW4gT25nIG1lQGpvbmdsZWJlcnJ5LmNvbSBhbmQgQ29udHJpYnV0b3JzXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuY29uc3QgYXBpID0gW1xuICAnYWNjZXNzJyxcbiAgJ2FwcGVuZEZpbGUnLFxuICAnY2htb2QnLFxuICAnY2hvd24nLFxuICAnY2xvc2UnLFxuICAnY29weUZpbGUnLFxuICAnZmNobW9kJyxcbiAgJ2ZjaG93bicsXG4gICdmZGF0YXN5bmMnLFxuICAnZnN0YXQnLFxuICAnZnN5bmMnLFxuICAnZnRydW5jYXRlJyxcbiAgJ2Z1dGltZXMnLFxuICAnbGNobW9kJyxcbiAgJ2xjaG93bicsXG4gICdsaW5rJyxcbiAgJ2xzdGF0JyxcbiAgJ21rZGlyJyxcbiAgJ21rZHRlbXAnLFxuICAnb3BlbicsXG4gICdvcGVuZGlyJyxcbiAgJ3JlYWRkaXInLFxuICAncmVhZEZpbGUnLFxuICAncmVhZGxpbmsnLFxuICAncmVhbHBhdGgnLFxuICAncmVuYW1lJyxcbiAgJ3JtJyxcbiAgJ3JtZGlyJyxcbiAgJ3N0YXQnLFxuICAnc3ltbGluaycsXG4gICd0cnVuY2F0ZScsXG4gICd1bmxpbmsnLFxuICAndXRpbWVzJyxcbiAgJ3dyaXRlRmlsZSdcbl0uZmlsdGVyKGtleSA9PiB7XG4gIC8vIFNvbWUgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgb24gc29tZSBzeXN0ZW1zLiBFeDpcbiAgLy8gZnMub3BlbmRpciB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MTIuMTIuMFxuICAvLyBmcy5ybSB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MTQuMTQuMFxuICAvLyBmcy5sY2hvd24gaXMgbm90IGF2YWlsYWJsZSBvbiBhdCBsZWFzdCBzb21lIExpbnV4XG4gIHJldHVybiB0eXBlb2YgZnNba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xufSlcblxuLy8gRXhwb3J0IGFsbCBrZXlzOlxuT2JqZWN0LmtleXMoZnMpLmZvckVhY2goa2V5ID0+IHtcbiAgaWYgKGtleSA9PT0gJ3Byb21pc2VzJykge1xuICAgIC8vIGZzLnByb21pc2VzIGlzIGEgZ2V0dGVyIHByb3BlcnR5IHRoYXQgdHJpZ2dlcnMgRXhwZXJpbWVudGFsV2FybmluZ1xuICAgIC8vIERvbid0IHJlLWV4cG9ydCBpdCBoZXJlLCB0aGUgZ2V0dGVyIGlzIGRlZmluZWQgaW4gXCJsaWIvaW5kZXguanNcIlxuICAgIHJldHVyblxuICB9XG4gIGV4cG9ydHNba2V5XSA9IGZzW2tleV1cbn0pXG5cbi8vIFVuaXZlcnNhbGlmeSBhc3luYyBtZXRob2RzOlxuYXBpLmZvckVhY2gobWV0aG9kID0+IHtcbiAgZXhwb3J0c1ttZXRob2RdID0gdShmc1ttZXRob2RdKVxufSlcblxuLy8gV2UgZGlmZmVyIGZyb20gbXovZnMgaW4gdGhhdCB3ZSBzdGlsbCBzaGlwIHRoZSBvbGQsIGJyb2tlbiwgZnMuZXhpc3RzKClcbi8vIHNpbmNlIHdlIGFyZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBuYXRpdmUgbW9kdWxlXG5leHBvcnRzLmV4aXN0cyA9IGZ1bmN0aW9uIChmaWxlbmFtZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCByZXNvbHZlKVxuICB9KVxufVxuXG4vLyBmcy5yZWFkKCksIGZzLndyaXRlKCksICYgZnMud3JpdGV2KCkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBkdWUgdG8gbXVsdGlwbGUgY2FsbGJhY2sgYXJnc1xuXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLnJlYWQoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWQoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCAoZXJyLCBieXRlc1JlYWQsIGJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNSZWFkLCBidWZmZXIgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyBGdW5jdGlvbiBzaWduYXR1cmUgY2FuIGJlXG4vLyBmcy53cml0ZShmZCwgYnVmZmVyWywgb2Zmc2V0WywgbGVuZ3RoWywgcG9zaXRpb25dXV0sIGNhbGxiYWNrKVxuLy8gT1Jcbi8vIGZzLndyaXRlKGZkLCBzdHJpbmdbLCBwb3NpdGlvblssIGVuY29kaW5nXV0sIGNhbGxiYWNrKVxuLy8gV2UgbmVlZCB0byBoYW5kbGUgYm90aCBjYXNlcywgc28gd2UgdXNlIC4uLmFyZ3NcbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy53cml0ZShmZCwgYnVmZmVyLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy53cml0ZShmZCwgYnVmZmVyLCAuLi5hcmdzLCAoZXJyLCBieXRlc1dyaXR0ZW4sIGJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXIgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyBmcy53cml0ZXYgb25seSBhdmFpbGFibGUgaW4gTm9kZSB2MTIuOS4wK1xuaWYgKHR5cGVvZiBmcy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4gIC8vIHMud3JpdGV2KGZkLCBidWZmZXJzWywgcG9zaXRpb25dLCBjYWxsYmFjaylcbiAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIG9wdGlvbmFsIGFyZywgc28gd2UgdXNlIC4uLmFyZ3NcbiAgZXhwb3J0cy53cml0ZXYgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzLCAoZXJyLCBieXRlc1dyaXR0ZW4sIGJ1ZmZlcnMpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlcnMgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG4vLyBmcy5yZWFscGF0aC5uYXRpdmUgb25seSBhdmFpbGFibGUgaW4gTm9kZSB2OS4yK1xuaWYgKHR5cGVvZiBmcy5yZWFscGF0aC5uYXRpdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgZXhwb3J0cy5yZWFscGF0aC5uYXRpdmUgPSB1KGZzLnJlYWxwYXRoLm5hdGl2ZSlcbn1cbiIsICJtb2R1bGUuZXhwb3J0cyA9IHIgPT4ge1xuICBjb25zdCBuID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJykubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKVxuICByID0gci5zcGxpdCgnLicpLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgcmV0dXJuIG5bMF0gPiByWzBdIHx8IChuWzBdID09PSByWzBdICYmIChuWzFdID4gclsxXSB8fCAoblsxXSA9PT0gclsxXSAmJiBuWzJdID49IHJbMl0pKSlcbn1cbiIsICIvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tYWtlLWRpclxuLy8gQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuJ3VzZSBzdHJpY3QnXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGF0TGVhc3ROb2RlID0gcmVxdWlyZSgnYXQtbGVhc3Qtbm9kZScpXG5cbmNvbnN0IHVzZU5hdGl2ZVJlY3Vyc2l2ZU9wdGlvbiA9IGF0TGVhc3ROb2RlKCcxMC4xMi4wJylcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84OTg3XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8xMDg4XG5jb25zdCBjaGVja1BhdGggPSBwdGggPT4ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycyA9IC9bPD46XCJ8PypdLy50ZXN0KHB0aC5yZXBsYWNlKHBhdGgucGFyc2UocHRoKS5yb290LCAnJykpXG5cbiAgICBpZiAocGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7cHRofWApXG4gICAgICBlcnJvci5jb2RlID0gJ0VJTlZBTCdcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NPcHRpb25zID0gb3B0aW9ucyA9PiB7XG4gIGNvbnN0IGRlZmF1bHRzID0geyBtb2RlOiAwbzc3NyB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIG9wdGlvbnMgPSB7IG1vZGU6IG9wdGlvbnMgfVxuICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4ub3B0aW9ucyB9XG59XG5cbmNvbnN0IHBlcm1pc3Npb25FcnJvciA9IHB0aCA9PiB7XG4gIC8vIFRoaXMgcmVwbGljYXRlcyB0aGUgZXhjZXB0aW9uIG9mIGBmcy5ta2RpcmAgd2l0aCBuYXRpdmUgdGhlXG4gIC8vIGByZWN1c2l2ZWAgb3B0aW9uIHdoZW4gcnVuIG9uIGFuIGludmFsaWQgZHJpdmUgdW5kZXIgV2luZG93cy5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYG9wZXJhdGlvbiBub3QgcGVybWl0dGVkLCBta2RpciAnJHtwdGh9J2ApXG4gIGVycm9yLmNvZGUgPSAnRVBFUk0nXG4gIGVycm9yLmVycm5vID0gLTQwNDhcbiAgZXJyb3IucGF0aCA9IHB0aFxuICBlcnJvci5zeXNjYWxsID0gJ21rZGlyJ1xuICByZXR1cm4gZXJyb3Jcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjaGVja1BhdGgoaW5wdXQpXG4gIG9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXG4gIGlmICh1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24pIHtcbiAgICBjb25zdCBwdGggPSBwYXRoLnJlc29sdmUoaW5wdXQpXG5cbiAgICByZXR1cm4gZnMubWtkaXIocHRoLCB7XG4gICAgICBtb2RlOiBvcHRpb25zLm1vZGUsXG4gICAgICByZWN1cnNpdmU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbWFrZSA9IGFzeW5jIHB0aCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHB0aCwgb3B0aW9ucy5tb2RlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgaWYgKHBhdGguZGlybmFtZShwdGgpID09PSBwdGgpIHtcbiAgICAgICAgICB0aHJvdyBwZXJtaXNzaW9uRXJyb3IocHRoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ251bGwgYnl0ZXMnKSkge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBtYWtlKHBhdGguZGlybmFtZShwdGgpKVxuICAgICAgICByZXR1cm4gbWFrZShwdGgpXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChwdGgpXG4gICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIC8vIFRoaXMgZXJyb3IgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgdXNlclxuICAgICAgICAgIC8vIGl0IGlzIGNhdWdodCBiZWxvdywgYW5kIHRoZSBvcmlnaW5hbCBlcnJvciBpcyB0aHJvd25cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYXRoIGlzIG5vdCBhIGRpcmVjdG9yeScpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlKHBhdGgucmVzb2x2ZShpbnB1dCkpXG59XG5cbm1vZHVsZS5leHBvcnRzLm1ha2VEaXJTeW5jID0gKGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChpbnB1dClcbiAgb3B0aW9ucyA9IHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cbiAgaWYgKHVzZU5hdGl2ZVJlY3Vyc2l2ZU9wdGlvbikge1xuICAgIGNvbnN0IHB0aCA9IHBhdGgucmVzb2x2ZShpbnB1dClcblxuICAgIHJldHVybiBmcy5ta2RpclN5bmMocHRoLCB7XG4gICAgICBtb2RlOiBvcHRpb25zLm1vZGUsXG4gICAgICByZWN1cnNpdmU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbWFrZSA9IHB0aCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZzLm1rZGlyU3luYyhwdGgsIG9wdGlvbnMubW9kZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocHRoKSA9PT0gcHRoKSB7XG4gICAgICAgICAgdGhyb3cgcGVybWlzc2lvbkVycm9yKHB0aClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdudWxsIGJ5dGVzJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgbWFrZShwYXRoLmRpcm5hbWUocHRoKSlcbiAgICAgICAgcmV0dXJuIG1ha2UocHRoKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHB0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIC8vIFRoaXMgZXJyb3IgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgdXNlclxuICAgICAgICAgIC8vIGl0IGlzIGNhdWdodCBiZWxvdywgYW5kIHRoZSBvcmlnaW5hbCBlcnJvciBpcyB0aHJvd25cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYXRoIGlzIG5vdCBhIGRpcmVjdG9yeScpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlKHBhdGgucmVzb2x2ZShpbnB1dCkpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHsgbWFrZURpcjogX21ha2VEaXIsIG1ha2VEaXJTeW5jIH0gPSByZXF1aXJlKCcuL21ha2UtZGlyJylcbmNvbnN0IG1ha2VEaXIgPSB1KF9tYWtlRGlyKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWtkaXJzOiBtYWtlRGlyLFxuICBta2RpcnNTeW5jOiBtYWtlRGlyU3luYyxcbiAgLy8gYWxpYXNcbiAgbWtkaXJwOiBtYWtlRGlyLFxuICBta2RpcnBTeW5jOiBtYWtlRGlyU3luYyxcbiAgZW5zdXJlRGlyOiBtYWtlRGlyLFxuICBlbnN1cmVEaXJTeW5jOiBtYWtlRGlyU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKSB7XG4gIC8vIGlmICghSEFTX01JTExJU19SRVMpIHJldHVybiBmcy51dGltZXMocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaylcbiAgZnMub3BlbihwYXRoLCAncisnLCAoZXJyLCBmZCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgZnMuZnV0aW1lcyhmZCwgYXRpbWUsIG10aW1lLCBmdXRpbWVzRXJyID0+IHtcbiAgICAgIGZzLmNsb3NlKGZkLCBjbG9zZUVyciA9PiB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZnV0aW1lc0VyciB8fCBjbG9zZUVycilcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gdXRpbWVzTWlsbGlzU3luYyAocGF0aCwgYXRpbWUsIG10aW1lKSB7XG4gIGNvbnN0IGZkID0gZnMub3BlblN5bmMocGF0aCwgJ3IrJylcbiAgZnMuZnV0aW1lc1N5bmMoZmQsIGF0aW1lLCBtdGltZSlcbiAgcmV0dXJuIGZzLmNsb3NlU3luYyhmZClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHV0aW1lc01pbGxpcyxcbiAgdXRpbWVzTWlsbGlzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IGF0TGVhc3ROb2RlID0gcmVxdWlyZSgnYXQtbGVhc3Qtbm9kZScpXG5cbmNvbnN0IG5vZGVTdXBwb3J0c0JpZ0ludCA9IGF0TGVhc3ROb2RlKCcxMC41LjAnKVxuY29uc3Qgc3RhdCA9IChmaWxlKSA9PiBub2RlU3VwcG9ydHNCaWdJbnQgPyBmcy5zdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pIDogZnMuc3RhdChmaWxlKVxuY29uc3Qgc3RhdFN5bmMgPSAoZmlsZSkgPT4gbm9kZVN1cHBvcnRzQmlnSW50ID8gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSkgOiBmcy5zdGF0U3luYyhmaWxlKVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoc3JjLCBkZXN0KSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdChzcmMpLFxuICAgIHN0YXQoZGVzdCkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBudWxsXG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICBdKS50aGVuKChbc3JjU3RhdCwgZGVzdFN0YXRdKSA9PiAoeyBzcmNTdGF0LCBkZXN0U3RhdCB9KSlcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHNTeW5jIChzcmMsIGRlc3QpIHtcbiAgbGV0IGRlc3RTdGF0XG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBzdGF0U3luYyhkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdDogbnVsbCB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQgfVxufVxuXG5mdW5jdGlvbiBjaGVja1BhdGhzIChzcmMsIGRlc3QsIGZ1bmNOYW1lLCBjYikge1xuICB1dGlsLmNhbGxiYWNraWZ5KGdldFN0YXRzKShzcmMsIGRlc3QsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0c1xuICAgIGlmIChkZXN0U3RhdCAmJiBhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKCdTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLicpKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmIGlzU3JjU3ViZGlyKHNyYywgZGVzdCkpIHtcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKSlcbiAgICB9XG4gICAgcmV0dXJuIGNiKG51bGwsIHsgc3JjU3RhdCwgZGVzdFN0YXQgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdClcbiAgaWYgKGRlc3RTdGF0ICYmIGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuJylcbiAgfVxuICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmIGlzU3JjU3ViZGlyKHNyYywgZGVzdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuLy8gcmVjdXJzaXZlbHkgY2hlY2sgaWYgZGVzdCBwYXJlbnQgaXMgYSBzdWJkaXJlY3Rvcnkgb2Ygc3JjLlxuLy8gSXQgd29ya3MgZm9yIGFsbCBmaWxlIHR5cGVzIGluY2x1ZGluZyBzeW1saW5rcyBzaW5jZSBpdFxuLy8gY2hlY2tzIHRoZSBzcmMgYW5kIGRlc3QgaW5vZGVzLiBJdCBzdGFydHMgZnJvbSB0aGUgZGVlcGVzdFxuLy8gcGFyZW50IGFuZCBzdG9wcyBvbmNlIGl0IHJlYWNoZXMgdGhlIHNyYyBwYXJlbnQgb3IgdGhlIHJvb3QgcGF0aC5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50UGF0aHMgKHNyYywgc3JjU3RhdCwgZGVzdCwgZnVuY05hbWUsIGNiKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm4gY2IoKVxuICBjb25zdCBjYWxsYmFjayA9IChlcnIsIGRlc3RTdGF0KSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIGNiKClcbiAgICAgIHJldHVybiBjYihlcnIpXG4gICAgfVxuICAgIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSkpXG4gICAgfVxuICAgIHJldHVybiBjaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdFBhcmVudCwgZnVuY05hbWUsIGNiKVxuICB9XG4gIGlmIChub2RlU3VwcG9ydHNCaWdJbnQpIGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSwgY2FsbGJhY2spXG4gIGVsc2UgZnMuc3RhdChkZXN0UGFyZW50LCBjYWxsYmFjaylcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJlbnRQYXRoc1N5bmMgKHNyYywgc3JjU3RhdCwgZGVzdCwgZnVuY05hbWUpIHtcbiAgY29uc3Qgc3JjUGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShzcmMpKVxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShkZXN0KSlcbiAgaWYgKGRlc3RQYXJlbnQgPT09IHNyY1BhcmVudCB8fCBkZXN0UGFyZW50ID09PSBwYXRoLnBhcnNlKGRlc3RQYXJlbnQpLnJvb3QpIHJldHVyblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRTeW5jKGRlc3RQYXJlbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVyblxuICAgIHRocm93IGVyclxuICB9XG4gIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0UGFyZW50LCBmdW5jTmFtZSlcbn1cblxuZnVuY3Rpb24gYXJlSWRlbnRpY2FsIChzcmNTdGF0LCBkZXN0U3RhdCkge1xuICBpZiAoZGVzdFN0YXQuaW5vICYmIGRlc3RTdGF0LmRldiAmJiBkZXN0U3RhdC5pbm8gPT09IHNyY1N0YXQuaW5vICYmIGRlc3RTdGF0LmRldiA9PT0gc3JjU3RhdC5kZXYpIHtcbiAgICBpZiAobm9kZVN1cHBvcnRzQmlnSW50IHx8IGRlc3RTdGF0LmlubyA8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAvLyBkZWZpbml0aXZlIGFuc3dlclxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gVXNlIGFkZGl0aW9uYWwgaGV1cmlzdGljcyBpZiB3ZSBjYW4ndCB1c2UgJ2JpZ2ludCcuXG4gICAgLy8gRGlmZmVyZW50ICdpbm8nIGNvdWxkIGJlIHJlcHJlc2VudGVkIHRoZSBzYW1lIGlmIHRoZXkgYXJlID49IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG4gICAgLy8gU2VlIGlzc3VlIDY1N1xuICAgIGlmIChkZXN0U3RhdC5zaXplID09PSBzcmNTdGF0LnNpemUgJiZcbiAgICAgICAgZGVzdFN0YXQubW9kZSA9PT0gc3JjU3RhdC5tb2RlICYmXG4gICAgICAgIGRlc3RTdGF0Lm5saW5rID09PSBzcmNTdGF0Lm5saW5rICYmXG4gICAgICAgIGRlc3RTdGF0LmF0aW1lTXMgPT09IHNyY1N0YXQuYXRpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5tdGltZU1zID09PSBzcmNTdGF0Lm10aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQuY3RpbWVNcyA9PT0gc3JjU3RhdC5jdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0LmJpcnRodGltZU1zID09PSBzcmNTdGF0LmJpcnRodGltZU1zKSB7XG4gICAgICAvLyBoZXVyaXN0aWMgYW5zd2VyXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gcmV0dXJuIHRydWUgaWYgZGVzdCBpcyBhIHN1YmRpciBvZiBzcmMsIG90aGVyd2lzZSBmYWxzZS5cbi8vIEl0IG9ubHkgY2hlY2tzIHRoZSBwYXRoIHN0cmluZ3MuXG5mdW5jdGlvbiBpc1NyY1N1YmRpciAoc3JjLCBkZXN0KSB7XG4gIGNvbnN0IHNyY0FyciA9IHBhdGgucmVzb2x2ZShzcmMpLnNwbGl0KHBhdGguc2VwKS5maWx0ZXIoaSA9PiBpKVxuICBjb25zdCBkZXN0QXJyID0gcGF0aC5yZXNvbHZlKGRlc3QpLnNwbGl0KHBhdGguc2VwKS5maWx0ZXIoaSA9PiBpKVxuICByZXR1cm4gc3JjQXJyLnJlZHVjZSgoYWNjLCBjdXIsIGkpID0+IGFjYyAmJiBkZXN0QXJyW2ldID09PSBjdXIsIHRydWUpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjaGVja1BhdGhzLFxuICBjaGVja1BhdGhzU3luYyxcbiAgY2hlY2tQYXJlbnRQYXRocyxcbiAgY2hlY2tQYXJlbnRQYXRoc1N5bmMsXG4gIGlzU3JjU3ViZGlyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1N5bmNcbmNvbnN0IHV0aW1lc01pbGxpc1N5bmMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1N5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5U3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBjb25zb2xlLndhcm4oYGZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XFxuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5YClcbiAgfVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnY29weScpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScpXG4gIHJldHVybiBoYW5kbGVGaWx0ZXJBbmRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlckFuZENvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdFBhcmVudCkpIG1rZGlyc1N5bmMoZGVzdFBhcmVudClcbiAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBzdGFydENvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHN0YXRTeW5jID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXRTeW5jIDogZnMubHN0YXRTeW5jXG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBvbkZpbGUgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIG1heUNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWF5Q29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAob3B0cy5vdmVyd3JpdGUpIHtcbiAgICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgfSBlbHNlIGlmIChvcHRzLmVycm9yT25FeGlzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLmNvcHlGaWxlU3luYyhzcmMsIGRlc3QpXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykgaGFuZGxlVGltZXN0YW1wcyhzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdClcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY1N0YXQubW9kZSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZXN0YW1wcyAoc3JjTW9kZSwgc3JjLCBkZXN0KSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAvLyAodGhyb3VnaCB1dGltZXMgY2FsbClcbiAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY01vZGUpKSBtYWtlRmlsZVdyaXRhYmxlKGRlc3QsIHNyY01vZGUpXG4gIHJldHVybiBzZXREZXN0VGltZXN0YW1wcyhzcmMsIGRlc3QpXG59XG5cbmZ1bmN0aW9uIGZpbGVJc05vdFdyaXRhYmxlIChzcmNNb2RlKSB7XG4gIHJldHVybiAoc3JjTW9kZSAmIDBvMjAwKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBtYWtlRmlsZVdyaXRhYmxlIChkZXN0LCBzcmNNb2RlKSB7XG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlIHwgMG8yMDApXG59XG5cbmZ1bmN0aW9uIHNldERlc3RNb2RlIChkZXN0LCBzcmNNb2RlKSB7XG4gIHJldHVybiBmcy5jaG1vZFN5bmMoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHMgKHNyYywgZGVzdCkge1xuICAvLyBUaGUgaW5pdGlhbCBzcmNTdGF0LmF0aW1lIGNhbm5vdCBiZSB0cnVzdGVkXG4gIC8vIGJlY2F1c2UgaXQgaXMgbW9kaWZpZWQgYnkgdGhlIHJlYWQoMikgc3lzdGVtIGNhbGxcbiAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgY29uc3QgdXBkYXRlZFNyY1N0YXQgPSBmcy5zdGF0U3luYyhzcmMpXG4gIHJldHVybiB1dGltZXNNaWxsaXNTeW5jKGRlc3QsIHVwZGF0ZWRTcmNTdGF0LmF0aW1lLCB1cGRhdGVkU3JjU3RhdC5tdGltZSlcbn1cblxuZnVuY3Rpb24gb25EaXIgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIG1rRGlyQW5kQ29weShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgb3B0cylcbiAgaWYgKGRlc3RTdGF0ICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7ZGVzdH0nIHdpdGggZGlyZWN0b3J5ICcke3NyY30nLmApXG4gIH1cbiAgcmV0dXJuIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBta0RpckFuZENvcHkgKHNyY01vZGUsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5ta2RpclN5bmMoZGVzdClcbiAgY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlyIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMucmVhZGRpclN5bmMoc3JjKS5mb3JFYWNoKGl0ZW0gPT4gY29weURpckl0ZW0oaXRlbSwgc3JjLCBkZXN0LCBvcHRzKSlcbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgY29uc3QgeyBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmNJdGVtLCBkZXN0SXRlbSwgJ2NvcHknKVxuICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmNJdGVtLCBkZXN0SXRlbSwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGZzLnJlYWRsaW5rU3luYyhzcmMpXG4gIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gIH1cblxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9IGVsc2Uge1xuICAgIGxldCByZXNvbHZlZERlc3RcbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWREZXN0ID0gZnMucmVhZGxpbmtTeW5jKGRlc3QpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgIC8vIGZzIHRocm93cyBlcnJvciBhbnl3YXksIHNvIG5vIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpdCBoZXJlLlxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRUlOVkFMJyB8fCBlcnIuY29kZSA9PT0gJ1VOS05PV04nKSByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gICAgfVxuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIHByZXZlbnQgY29weSBpZiBzcmMgaXMgYSBzdWJkaXIgb2YgZGVzdCBzaW5jZSB1bmxpbmtpbmdcbiAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgLy8gYW5kIHRoZXJlZm9yZSBhIGJyb2tlbiBzeW1saW5rIHdvdWxkIGJlIGNyZWF0ZWQuXG4gICAgaWYgKGZzLnN0YXRTeW5jKGRlc3QpLmlzRGlyZWN0b3J5KCkgJiYgc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKVxuICAgIH1cbiAgICByZXR1cm4gY29weUxpbmsocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUxpbmsgKHJlc29sdmVkU3JjLCBkZXN0KSB7XG4gIGZzLnVubGlua1N5bmMoZGVzdClcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5U3luYzogcmVxdWlyZSgnLi9jb3B5LXN5bmMnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuZnVuY3Rpb24gcGF0aEV4aXN0cyAocGF0aCkge1xuICByZXR1cm4gZnMuYWNjZXNzKHBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXRoRXhpc3RzOiB1KHBhdGhFeGlzdHMpLFxuICBwYXRoRXhpc3RzU3luYzogZnMuZXhpc3RzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlycyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1xuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuY29uc3QgdXRpbWVzTWlsbGlzID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKS51dGltZXNNaWxsaXNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5IChzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJyAmJiAhY2IpIHtcbiAgICBjYiA9IG9wdHNcbiAgICBvcHRzID0ge31cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKGBmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OWApXG4gIH1cblxuICBzdGF0LmNoZWNrUGF0aHMoc3JjLCBkZXN0LCAnY29weScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0c1xuICAgIHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBpZiAob3B0cy5maWx0ZXIpIHJldHVybiBoYW5kbGVGaWx0ZXIoY2hlY2tQYXJlbnREaXIsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgICAgcmV0dXJuIGNoZWNrUGFyZW50RGlyKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50RGlyIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIHBhdGhFeGlzdHMoZGVzdFBhcmVudCwgKGVyciwgZGlyRXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIG1rZGlycyhkZXN0UGFyZW50LCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlRmlsdGVyIChvbkluY2x1ZGUsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIFByb21pc2UucmVzb2x2ZShvcHRzLmZpbHRlcihzcmMsIGRlc3QpKS50aGVuKGluY2x1ZGUgPT4ge1xuICAgIGlmIChpbmNsdWRlKSByZXR1cm4gb25JbmNsdWRlKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIHJldHVybiBjYigpXG4gIH0sIGVycm9yID0+IGNiKGVycm9yKSlcbn1cblxuZnVuY3Rpb24gc3RhcnRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAob3B0cy5maWx0ZXIpIHJldHVybiBoYW5kbGVGaWx0ZXIoZ2V0U3RhdHMsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICByZXR1cm4gZ2V0U3RhdHMoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBzdGF0ID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXQgOiBmcy5sc3RhdFxuICBzdGF0KHNyYywgKGVyciwgc3JjU3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG5cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gb25EaXIoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZpbGUoKSB8fFxuICAgICAgICAgICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgcmV0dXJuIG1heUNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGluayhkZXN0LCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKSlcbiAgfSBlbHNlIHJldHVybiBjYigpXG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLmNvcHlGaWxlKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykgcmV0dXJuIGhhbmRsZVRpbWVzdGFtcHNBbmRNb2RlKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBjYilcbiAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZXN0YW1wc0FuZE1vZGUgKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIHtcbiAgICByZXR1cm4gbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBzZXREZXN0VGltZXN0YW1wc0FuZE1vZGUoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYilcbiAgICB9KVxuICB9XG4gIHJldHVybiBzZXREZXN0VGltZXN0YW1wc0FuZE1vZGUoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYilcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUsIGNiKSB7XG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlIHwgMG8yMDAsIGNiKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wc0FuZE1vZGUgKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpIHtcbiAgc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSwgY2IpIHtcbiAgcmV0dXJuIGZzLmNobW9kKGRlc3QsIHNyY01vZGUsIGNiKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0LCBjYikge1xuICAvLyBUaGUgaW5pdGlhbCBzcmNTdGF0LmF0aW1lIGNhbm5vdCBiZSB0cnVzdGVkXG4gIC8vIGJlY2F1c2UgaXQgaXMgbW9kaWZpZWQgYnkgdGhlIHJlYWQoMikgc3lzdGVtIGNhbGxcbiAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgZnMuc3RhdChzcmMsIChlcnIsIHVwZGF0ZWRTcmNTdGF0KSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gdXRpbWVzTWlsbGlzKGRlc3QsIHVwZGF0ZWRTcmNTdGF0LmF0aW1lLCB1cGRhdGVkU3JjU3RhdC5tdGltZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgaWYgKGRlc3RTdGF0ICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9Jy5gKSlcbiAgfVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBta0RpckFuZENvcHkgKHNyY01vZGUsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMubWtkaXIoZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5RGlyIChzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLnJlYWRkaXIoc3JjLCAoZXJyLCBpdGVtcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIGNvcHlEaXJJdGVtcyhpdGVtcywgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW1zIChpdGVtcywgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBpdGVtID0gaXRlbXMucG9wKClcbiAgaWYgKCFpdGVtKSByZXR1cm4gY2IoKVxuICByZXR1cm4gY29weURpckl0ZW0oaXRlbXMsIGl0ZW0sIHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtIChpdGVtcywgaXRlbSwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgc3RhdC5jaGVja1BhdGhzKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0c1xuICAgIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIGNvcHlEaXJJdGVtcyhpdGVtcywgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkxpbmsgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLnJlYWRsaW5rKHNyYywgKGVyciwgcmVzb2x2ZWRTcmMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgICB9XG5cbiAgICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgICByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLnJlYWRsaW5rKGRlc3QsIChlcnIsIHJlc29sdmVkRGVzdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgICAgICAvLyBXaW5kb3dzIG1heSB0aHJvdyBVTktOT1dOIGVycm9yLiBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLFxuICAgICAgICAgIC8vIGZzIHRocm93cyBlcnJvciBhbnl3YXksIHNvIG5vIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpdCBoZXJlLlxuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgICAgICAgIHJldHVybiBjYihlcnIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7cmVzb2x2ZWRTcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3Jlc29sdmVkRGVzdH0nLmApKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG8gbm90IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAgICAgLy8gYW5kIHRoZXJlZm9yZSBhIGJyb2tlbiBzeW1saW5rIHdvdWxkIGJlIGNyZWF0ZWQuXG4gICAgICAgIGlmIChkZXN0U3RhdC5pc0RpcmVjdG9yeSgpICYmIHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weUxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCwgY2IpIHtcbiAgZnMudW5saW5rKGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogdShyZXF1aXJlKCcuL2NvcHknKSlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBpc1dpbmRvd3MgPSAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJylcblxuZnVuY3Rpb24gZGVmYXVsdHMgKG9wdGlvbnMpIHtcbiAgY29uc3QgbWV0aG9kcyA9IFtcbiAgICAndW5saW5rJyxcbiAgICAnY2htb2QnLFxuICAgICdzdGF0JyxcbiAgICAnbHN0YXQnLFxuICAgICdybWRpcicsXG4gICAgJ3JlYWRkaXInXG4gIF1cbiAgbWV0aG9kcy5mb3JFYWNoKG0gPT4ge1xuICAgIG9wdGlvbnNbbV0gPSBvcHRpb25zW21dIHx8IGZzW21dXG4gICAgbSA9IG0gKyAnU3luYydcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICB9KVxuXG4gIG9wdGlvbnMubWF4QnVzeVRyaWVzID0gb3B0aW9ucy5tYXhCdXN5VHJpZXMgfHwgM1xufVxuXG5mdW5jdGlvbiByaW1yYWYgKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGxldCBidXN5VHJpZXMgPSAwXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBhc3NlcnQocCwgJ3JpbXJhZjogbWlzc2luZyBwYXRoJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwLCAnc3RyaW5nJywgJ3JpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAncmltcmFmOiBjYWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCcpXG4gIGFzc2VydChvcHRpb25zLCAncmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIG9wdGlvbnMsICdvYmplY3QnLCAncmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QnKVxuXG4gIGRlZmF1bHRzKG9wdGlvbnMpXG5cbiAgcmltcmFmXyhwLCBvcHRpb25zLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICBpZiAoZXIpIHtcbiAgICAgIGlmICgoZXIuY29kZSA9PT0gJ0VCVVNZJyB8fCBlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSAmJlxuICAgICAgICAgIGJ1c3lUcmllcyA8IG9wdGlvbnMubWF4QnVzeVRyaWVzKSB7XG4gICAgICAgIGJ1c3lUcmllcysrXG4gICAgICAgIGNvbnN0IHRpbWUgPSBidXN5VHJpZXMgKiAxMDBcbiAgICAgICAgLy8gdHJ5IGFnYWluLCB3aXRoIHRoZSBzYW1lIGV4YWN0IGNhbGxiYWNrIGFzIHRoaXMgb25lLlxuICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiByaW1yYWZfKHAsIG9wdGlvbnMsIENCKSwgdGltZSlcbiAgICAgIH1cblxuICAgICAgLy8gYWxyZWFkeSBnb25lXG4gICAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIGVyID0gbnVsbFxuICAgIH1cblxuICAgIGNiKGVyKVxuICB9KVxufVxuXG4vLyBUd28gcG9zc2libGUgc3RyYXRlZ2llcy5cbi8vIDEuIEFzc3VtZSBpdCdzIGEgZmlsZS4gIHVubGluayBpdCwgdGhlbiBkbyB0aGUgZGlyIHN0dWZmIG9uIEVQRVJNIG9yIEVJU0RJUlxuLy8gMi4gQXNzdW1lIGl0J3MgYSBkaXJlY3RvcnkuICByZWFkZGlyLCB0aGVuIGRvIHRoZSBmaWxlIHN0dWZmIG9uIEVOT1RESVJcbi8vXG4vLyBCb3RoIHJlc3VsdCBpbiBhbiBleHRyYSBzeXNjYWxsIHdoZW4geW91IGd1ZXNzIHdyb25nLiAgSG93ZXZlciwgdGhlcmVcbi8vIGFyZSBsaWtlbHkgZmFyIG1vcmUgbm9ybWFsIGZpbGVzIGluIHRoZSB3b3JsZCB0aGFuIGRpcmVjdG9yaWVzLiAgVGhpc1xuLy8gaXMgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBhIHRoZSBhdmVyYWdlIG51bWJlciBvZiBmaWxlcyBwZXJcbi8vIGRpcmVjdG9yeSBpcyA+PSAxLlxuLy9cbi8vIElmIGFueW9uZSBldmVyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB0aGVuIEkgZ3Vlc3MgdGhlIHN0cmF0ZWd5IGNvdWxkXG4vLyBiZSBtYWRlIGNvbmZpZ3VyYWJsZSBzb21laG93LiAgQnV0IHVudGlsIHRoZW4sIFlBR05JLlxuZnVuY3Rpb24gcmltcmFmXyAocCwgb3B0aW9ucywgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIC8vIHN1bm9zIGxldHMgdGhlIHJvb3QgdXNlciB1bmxpbmsgZGlyZWN0b3JpZXMsIHdoaWNoIGlzLi4uIHdlaXJkLlxuICAvLyBzbyB3ZSBoYXZlIHRvIGxzdGF0IGhlcmUgYW5kIG1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpci5cbiAgb3B0aW9ucy5sc3RhdChwLCAoZXIsIHN0KSA9PiB7XG4gICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm4gY2IobnVsbClcbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICByZXR1cm4gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgIH1cblxuICAgIGlmIChzdCAmJiBzdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgIH1cblxuICAgIG9wdGlvbnMudW5saW5rKHAsIGVyID0+IHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbClcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgIHJldHVybiAoaXNXaW5kb3dzKVxuICAgICAgICAgICAgPyBmaXhXaW5FUEVSTShwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgICAgICA6IHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VJU0RJUicpIHtcbiAgICAgICAgICByZXR1cm4gcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2IoZXIpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk0gKHAsIG9wdGlvbnMsIGVyLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgb3B0aW9ucy5jaG1vZChwLCAwbzY2NiwgZXIyID0+IHtcbiAgICBpZiAoZXIyKSB7XG4gICAgICBjYihlcjIuY29kZSA9PT0gJ0VOT0VOVCcgPyBudWxsIDogZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuc3RhdChwLCAoZXIzLCBzdGF0cykgPT4ge1xuICAgICAgICBpZiAoZXIzKSB7XG4gICAgICAgICAgY2IoZXIzLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy51bmxpbmsocCwgY2IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBmaXhXaW5FUEVSTVN5bmMgKHAsIG9wdGlvbnMsIGVyKSB7XG4gIGxldCBzdGF0c1xuXG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcblxuICB0cnkge1xuICAgIG9wdGlvbnMuY2htb2RTeW5jKHAsIDBvNjY2KVxuICB9IGNhdGNoIChlcjIpIHtcbiAgICBpZiAoZXIyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHN0YXRzID0gb3B0aW9ucy5zdGF0U3luYyhwKVxuICB9IGNhdGNoIChlcjMpIHtcbiAgICBpZiAoZXIzLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLnVubGlua1N5bmMocClcbiAgfVxufVxuXG5mdW5jdGlvbiBybWRpciAocCwgb3B0aW9ucywgb3JpZ2luYWxFciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIC8vIHRyeSB0byBybWRpciBmaXJzdCwgYW5kIG9ubHkgcmVhZGRpciBvbiBFTk9URU1QVFkgb3IgRUVYSVNUIChTdW5PUylcbiAgLy8gaWYgd2UgZ3Vlc3NlZCB3cm9uZywgYW5kIGl0J3Mgbm90IGEgZGlyZWN0b3J5LCB0aGVuXG4gIC8vIHJhaXNlIHRoZSBvcmlnaW5hbCBlcnJvci5cbiAgb3B0aW9ucy5ybWRpcihwLCBlciA9PiB7XG4gICAgaWYgKGVyICYmIChlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRUVYSVNUJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSkge1xuICAgICAgcm1raWRzKHAsIG9wdGlvbnMsIGNiKVxuICAgIH0gZWxzZSBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICBjYihvcmlnaW5hbEVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYihlcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJta2lkcyAocCwgb3B0aW9ucywgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMucmVhZGRpcihwLCAoZXIsIGZpbGVzKSA9PiB7XG4gICAgaWYgKGVyKSByZXR1cm4gY2IoZXIpXG5cbiAgICBsZXQgbiA9IGZpbGVzLmxlbmd0aFxuICAgIGxldCBlcnJTdGF0ZVxuXG4gICAgaWYgKG4gPT09IDApIHJldHVybiBvcHRpb25zLnJtZGlyKHAsIGNiKVxuXG4gICAgZmlsZXMuZm9yRWFjaChmID0+IHtcbiAgICAgIHJpbXJhZihwYXRoLmpvaW4ocCwgZiksIG9wdGlvbnMsIGVyID0+IHtcbiAgICAgICAgaWYgKGVyclN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyKSByZXR1cm4gY2IoZXJyU3RhdGUgPSBlcilcbiAgICAgICAgaWYgKC0tbiA9PT0gMCkge1xuICAgICAgICAgIG9wdGlvbnMucm1kaXIocCwgY2IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gdGhpcyBsb29rcyBzaW1wbGVyLCBhbmQgaXMgc3RyaWN0bHkgKmZhc3RlciosIGJ1dCB3aWxsXG4vLyB0aWUgdXAgdGhlIEphdmFTY3JpcHQgdGhyZWFkIGFuZCBmYWlsIG9uIGV4Y2Vzc2l2ZWx5XG4vLyBkZWVwIGRpcmVjdG9yeSB0cmVlcy5cbmZ1bmN0aW9uIHJpbXJhZlN5bmMgKHAsIG9wdGlvbnMpIHtcbiAgbGV0IHN0XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgZGVmYXVsdHMob3B0aW9ucylcblxuICBhc3NlcnQocCwgJ3JpbXJhZjogbWlzc2luZyBwYXRoJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwLCAnc3RyaW5nJywgJ3JpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogbWlzc2luZyBvcHRpb25zJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICB0cnkge1xuICAgIHN0ID0gb3B0aW9ucy5sc3RhdFN5bmMocClcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFdpbmRvd3MgY2FuIEVQRVJNIG9uIHN0YXQuICBMaWZlIGlzIHN1ZmZlcmluZy5cbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJyAmJiBpc1dpbmRvd3MpIHtcbiAgICAgIGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcilcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHN1bm9zIGxldHMgdGhlIHJvb3QgdXNlciB1bmxpbmsgZGlyZWN0b3JpZXMsIHdoaWNoIGlzLi4uIHdlaXJkLlxuICAgIGlmIChzdCAmJiBzdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBybWRpclN5bmMocCwgb3B0aW9ucywgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy51bmxpbmtTeW5jKHApXG4gICAgfVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmIChlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICByZXR1cm4gaXNXaW5kb3dzID8gZml4V2luRVBFUk1TeW5jKHAsIG9wdGlvbnMsIGVyKSA6IHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgIT09ICdFSVNESVInKSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgICBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcm1kaXJTeW5jIChwLCBvcHRpb25zLCBvcmlnaW5hbEVyKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcblxuICB0cnkge1xuICAgIG9wdGlvbnMucm1kaXJTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgdGhyb3cgb3JpZ2luYWxFclxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VFWElTVCcgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcm1raWRzU3luYyhwLCBvcHRpb25zKVxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJta2lkc1N5bmMgKHAsIG9wdGlvbnMpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBvcHRpb25zLnJlYWRkaXJTeW5jKHApLmZvckVhY2goZiA9PiByaW1yYWZTeW5jKHBhdGguam9pbihwLCBmKSwgb3B0aW9ucykpXG5cbiAgaWYgKGlzV2luZG93cykge1xuICAgIC8vIFdlIG9ubHkgZW5kIHVwIGhlcmUgb25jZSB3ZSBnb3QgRU5PVEVNUFRZIGF0IGxlYXN0IG9uY2UsIGFuZFxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgcmVtb3ZlZCBhbGwgdGhlIGtpZHMuXG4gICAgLy8gU28sIHdlIGtub3cgdGhhdCBpdCB3b24ndCBiZSBFTk9FTlQgb3IgRU5PVERJUiBvciBhbnl0aGluZyBlbHNlLlxuICAgIC8vIHRyeSByZWFsbHkgaGFyZCB0byBkZWxldGUgc3R1ZmYgb24gd2luZG93cywgYmVjYXVzZSBpdCBoYXMgYVxuICAgIC8vIFBST0ZPVU5ETFkgYW5ub3lpbmcgaGFiaXQgb2Ygbm90IGNsb3NpbmcgaGFuZGxlcyBwcm9tcHRseSB3aGVuXG4gICAgLy8gZmlsZXMgYXJlIGRlbGV0ZWQsIHJlc3VsdGluZyBpbiBzcHVyaW91cyBFTk9URU1QVFkgZXJyb3JzLlxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICBkbyB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXQgPSBvcHRpb25zLnJtZGlyU3luYyhwLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IDUwMCkgLy8gZ2l2ZSB1cCBhZnRlciA1MDBtc1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJldCA9IG9wdGlvbnMucm1kaXJTeW5jKHAsIG9wdGlvbnMpXG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmltcmFmXG5yaW1yYWYuc3luYyA9IHJpbXJhZlN5bmNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcmltcmFmID0gcmVxdWlyZSgnLi9yaW1yYWYnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiB1KHJpbXJhZiksXG4gIHJlbW92ZVN5bmM6IHJpbXJhZi5zeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcmVtb3ZlID0gcmVxdWlyZSgnLi4vcmVtb3ZlJylcblxuY29uc3QgZW1wdHlEaXIgPSB1KGZ1bmN0aW9uIGVtcHR5RGlyIChkaXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge31cbiAgZnMucmVhZGRpcihkaXIsIChlcnIsIGl0ZW1zKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIG1rZGlyLm1rZGlycyhkaXIsIGNhbGxiYWNrKVxuXG4gICAgaXRlbXMgPSBpdGVtcy5tYXAoaXRlbSA9PiBwYXRoLmpvaW4oZGlyLCBpdGVtKSlcblxuICAgIGRlbGV0ZUl0ZW0oKVxuXG4gICAgZnVuY3Rpb24gZGVsZXRlSXRlbSAoKSB7XG4gICAgICBjb25zdCBpdGVtID0gaXRlbXMucG9wKClcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgIHJlbW92ZS5yZW1vdmUoaXRlbSwgZXJyID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgZGVsZXRlSXRlbSgpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn0pXG5cbmZ1bmN0aW9uIGVtcHR5RGlyU3luYyAoZGlyKSB7XG4gIGxldCBpdGVtc1xuICB0cnkge1xuICAgIGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIH1cblxuICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGl0ZW0gPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIHJlbW92ZS5yZW1vdmVTeW5jKGl0ZW0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlbXB0eURpclN5bmMsXG4gIGVtcHR5ZGlyU3luYzogZW1wdHlEaXJTeW5jLFxuICBlbXB0eURpcixcbiAgZW1wdHlkaXI6IGVtcHR5RGlyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuXG5mdW5jdGlvbiBjcmVhdGVGaWxlIChmaWxlLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBtYWtlRmlsZSAoKSB7XG4gICAgZnMud3JpdGVGaWxlKGZpbGUsICcnLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9KVxuICB9XG5cbiAgZnMuc3RhdChmaWxlLCAoZXJyLCBzdGF0cykgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGhhbmRsZS1jYWxsYmFjay1lcnJcbiAgICBpZiAoIWVyciAmJiBzdGF0cy5pc0ZpbGUoKSkgcmV0dXJuIGNhbGxiYWNrKClcbiAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgICBmcy5zdGF0KGRpciwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBtYWtlIGl0XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBtYWtlRmlsZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkgbWFrZUZpbGUoKVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnlcbiAgICAgICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgICAgIGZzLnJlYWRkaXIoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKVxuICB9IGNhdGNoIHt9XG4gIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkgcmV0dXJuXG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHRyeSB7XG4gICAgaWYgKCFmcy5zdGF0U3luYyhkaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnlcbiAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgZnMucmVhZGRpclN5bmMoZGlyKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gSWYgdGhlIHN0YXQgY2FsbCBhYm92ZSBmYWlsZWQgYmVjYXVzZSB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdFTk9FTlQnKSBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgICBlbHNlIHRocm93IGVyclxuICB9XG5cbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUZpbGU6IHUoY3JlYXRlRmlsZSksXG4gIGNyZWF0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBjcmVhdGVMaW5rIChzcmNwYXRoLCBkc3RwYXRoLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBtYWtlTGluayAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICAgIGZzLmxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBjYWxsYmFjayhudWxsKVxuICAgIH0pXG4gIH1cblxuICBwYXRoRXhpc3RzKGRzdHBhdGgsIChlcnIsIGRlc3RpbmF0aW9uRXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiBjYWxsYmFjayhudWxsKVxuICAgIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBwYXRoRXhpc3RzKGRpciwgKGVyciwgZGlyRXhpc3RzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBtYWtlTGluayhzcmNwYXRoLCBkc3RwYXRoKVxuICAgICAgICBta2Rpci5ta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgbWFrZUxpbmsoc3JjcGF0aCwgZHN0cGF0aClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgY29uc3QgZGVzdGluYXRpb25FeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRzdHBhdGgpXG4gIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZGlyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChkaXJFeGlzdHMpIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBta2Rpci5ta2RpcnNTeW5jKGRpcilcblxuICByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUxpbms6IHUoY3JlYXRlTGluayksXG4gIGNyZWF0ZUxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5mdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoc3JjcGF0aCkpIHtcbiAgICByZXR1cm4gZnMubHN0YXQoc3JjcGF0aCwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICB9KVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgY29uc3QgcmVsYXRpdmVUb0RzdCA9IHBhdGguam9pbihkc3RkaXIsIHNyY3BhdGgpXG4gICAgcmV0dXJuIHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdCwgKGVyciwgZXhpc3RzKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgIHRvQ3dkOiByZWxhdGl2ZVRvRHN0LFxuICAgICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZnMubHN0YXQoc3JjcGF0aCwgKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlU3ltbGluaycpXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgICAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHN5bWxpbmtQYXRoc1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgbGV0IGV4aXN0c1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMocmVsYXRpdmVUb0RzdClcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgICAgaWYgKCFleGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1BhdGhzLFxuICBzeW1saW5rUGF0aHNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZSAoc3JjcGF0aCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gdHlwZSA6IGNhbGxiYWNrXG4gIHR5cGUgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gZmFsc2UgOiB0eXBlXG4gIGlmICh0eXBlKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgdHlwZSlcbiAgZnMubHN0YXQoc3JjcGF0aCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgJ2ZpbGUnKVxuICAgIHR5cGUgPSAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xuICAgIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHN5bWxpbmtUeXBlU3luYyAoc3JjcGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcblxuICBpZiAodHlwZSkgcmV0dXJuIHR5cGVcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cbiAgcmV0dXJuIChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSA/ICdkaXInIDogJ2ZpbGUnXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rVHlwZSxcbiAgc3ltbGlua1R5cGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgX21rZGlycyA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBta2RpcnMgPSBfbWtkaXJzLm1rZGlyc1xuY29uc3QgbWtkaXJzU3luYyA9IF9ta2RpcnMubWtkaXJzU3luY1xuXG5jb25zdCBfc3ltbGlua1BhdGhzID0gcmVxdWlyZSgnLi9zeW1saW5rLXBhdGhzJylcbmNvbnN0IHN5bWxpbmtQYXRocyA9IF9zeW1saW5rUGF0aHMuc3ltbGlua1BhdGhzXG5jb25zdCBzeW1saW5rUGF0aHNTeW5jID0gX3N5bWxpbmtQYXRocy5zeW1saW5rUGF0aHNTeW5jXG5cbmNvbnN0IF9zeW1saW5rVHlwZSA9IHJlcXVpcmUoJy4vc3ltbGluay10eXBlJylcbmNvbnN0IHN5bWxpbmtUeXBlID0gX3N5bWxpbmtUeXBlLnN5bWxpbmtUeXBlXG5jb25zdCBzeW1saW5rVHlwZVN5bmMgPSBfc3ltbGlua1R5cGUuc3ltbGlua1R5cGVTeW5jXG5cbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gY3JlYXRlU3ltbGluayAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gdHlwZSA6IGNhbGxiYWNrXG4gIHR5cGUgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gZmFsc2UgOiB0eXBlXG5cbiAgcGF0aEV4aXN0cyhkc3RwYXRoLCAoZXJyLCBkZXN0aW5hdGlvbkV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gY2FsbGJhY2sobnVsbClcbiAgICBzeW1saW5rUGF0aHMoc3JjcGF0aCwgZHN0cGF0aCwgKGVyciwgcmVsYXRpdmUpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgICAgIHN5bWxpbmtUeXBlKHJlbGF0aXZlLnRvQ3dkLCB0eXBlLCAoZXJyLCB0eXBlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgICBwYXRoRXhpc3RzKGRpciwgKGVyciwgZGlyRXhpc3RzKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gZnMuc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaylcbiAgICAgICAgICBta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ltbGlua1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpIHtcbiAgY29uc3QgZGVzdGluYXRpb25FeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRzdHBhdGgpXG4gIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IHJlbGF0aXZlID0gc3ltbGlua1BhdGhzU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgdHlwZSA9IHN5bWxpbmtUeXBlU3luYyhyZWxhdGl2ZS50b0N3ZCwgdHlwZSlcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZGlyKVxuICBpZiAoZXhpc3RzKSByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbiAgbWtkaXJzU3luYyhkaXIpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlU3ltbGluazogdShjcmVhdGVTeW1saW5rKSxcbiAgY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZmlsZSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCBsaW5rID0gcmVxdWlyZSgnLi9saW5rJylcbmNvbnN0IHN5bWxpbmsgPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlOiBmaWxlLmNyZWF0ZUZpbGUsXG4gIGNyZWF0ZUZpbGVTeW5jOiBmaWxlLmNyZWF0ZUZpbGVTeW5jLFxuICBlbnN1cmVGaWxlOiBmaWxlLmNyZWF0ZUZpbGUsXG4gIGVuc3VyZUZpbGVTeW5jOiBmaWxlLmNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbms6IGxpbmsuY3JlYXRlTGluayxcbiAgY3JlYXRlTGlua1N5bmM6IGxpbmsuY3JlYXRlTGlua1N5bmMsXG4gIGVuc3VyZUxpbms6IGxpbmsuY3JlYXRlTGluayxcbiAgZW5zdXJlTGlua1N5bmM6IGxpbmsuY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluazogc3ltbGluay5jcmVhdGVTeW1saW5rLFxuICBjcmVhdGVTeW1saW5rU3luYzogc3ltbGluay5jcmVhdGVTeW1saW5rU3luYyxcbiAgZW5zdXJlU3ltbGluazogc3ltbGluay5jcmVhdGVTeW1saW5rLFxuICBlbnN1cmVTeW1saW5rU3luYzogc3ltbGluay5jcmVhdGVTeW1saW5rU3luY1xufVxuIiwgImZ1bmN0aW9uIHN0cmluZ2lmeSAob2JqLCB7IEVPTCA9ICdcXG4nLCBmaW5hbEVPTCA9IHRydWUsIHJlcGxhY2VyID0gbnVsbCwgc3BhY2VzIH0gPSB7fSkge1xuICBjb25zdCBFT0YgPSBmaW5hbEVPTCA/IEVPTCA6ICcnXG4gIGNvbnN0IHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIsIHNwYWNlcylcblxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcbi9nLCBFT0wpICsgRU9GXG59XG5cbmZ1bmN0aW9uIHN0cmlwQm9tIChjb250ZW50KSB7XG4gIC8vIHdlIGRvIHRoaXMgYmVjYXVzZSBKU09OLnBhcnNlIHdvdWxkIGNvbnZlcnQgaXQgdG8gYSB1dGY4IHN0cmluZyBpZiBlbmNvZGluZyB3YXNuJ3Qgc3BlY2lmaWVkXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCd1dGY4JylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfVxuIiwgImxldCBfZnNcbnRyeSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbn0gY2F0Y2ggKF8pIHtcbiAgX2ZzID0gcmVxdWlyZSgnZnMnKVxufVxuY29uc3QgdW5pdmVyc2FsaWZ5ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JylcbmNvbnN0IHsgc3RyaW5naWZ5LCBzdHJpcEJvbSB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmFzeW5jIGZ1bmN0aW9uIF9yZWFkRmlsZSAoZmlsZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc2hvdWxkVGhyb3cgPSAndGhyb3dzJyBpbiBvcHRpb25zID8gb3B0aW9ucy50aHJvd3MgOiB0cnVlXG5cbiAgbGV0IGRhdGEgPSBhd2FpdCB1bml2ZXJzYWxpZnkuZnJvbUNhbGxiYWNrKGZzLnJlYWRGaWxlKShmaWxlLCBvcHRpb25zKVxuXG4gIGRhdGEgPSBzdHJpcEJvbShkYXRhKVxuXG4gIGxldCBvYmpcbiAgdHJ5IHtcbiAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEsIG9wdGlvbnMgPyBvcHRpb25zLnJldml2ZXIgOiBudWxsKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5jb25zdCByZWFkRmlsZSA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZShfcmVhZEZpbGUpXG5cbmZ1bmN0aW9uIHJlYWRGaWxlU3luYyAoZmlsZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc2hvdWxkVGhyb3cgPSAndGhyb3dzJyBpbiBvcHRpb25zID8gb3B0aW9ucy50aHJvd3MgOiB0cnVlXG5cbiAgdHJ5IHtcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLCBvcHRpb25zKVxuICAgIGNvbnRlbnQgPSBzdHJpcEJvbShjb250ZW50KVxuICAgIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQsIG9wdGlvbnMucmV2aXZlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfd3JpdGVGaWxlIChmaWxlLCBvYmosIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KG9iaiwgb3B0aW9ucylcblxuICBhd2FpdCB1bml2ZXJzYWxpZnkuZnJvbUNhbGxiYWNrKGZzLndyaXRlRmlsZSkoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5jb25zdCB3cml0ZUZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3dyaXRlRmlsZSlcblxuZnVuY3Rpb24gd3JpdGVGaWxlU3luYyAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG4gIC8vIG5vdCBzdXJlIGlmIGZzLndyaXRlRmlsZVN5bmMgcmV0dXJucyBhbnl0aGluZywgYnV0IGp1c3QgaW4gY2FzZVxuICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyhmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbmNvbnN0IGpzb25maWxlID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqc29uZmlsZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBqc29uRmlsZSA9IHJlcXVpcmUoJ2pzb25maWxlJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGpzb25maWxlIGV4cG9ydHNcbiAgcmVhZEpzb246IGpzb25GaWxlLnJlYWRGaWxlLFxuICByZWFkSnNvblN5bmM6IGpzb25GaWxlLnJlYWRGaWxlU3luYyxcbiAgd3JpdGVKc29uOiBqc29uRmlsZS53cml0ZUZpbGUsXG4gIHdyaXRlSnNvblN5bmM6IGpzb25GaWxlLndyaXRlRmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIG91dHB1dEZpbGUgKGZpbGUsIGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGl0RG9lcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGl0RG9lcykgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG5cbiAgICBta2Rpci5ta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcblxuICAgICAgZnMud3JpdGVGaWxlKGZpbGUsIGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBvdXRwdXRGaWxlU3luYyAoZmlsZSwgLi4uYXJncykge1xuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG4gIH1cbiAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgLi4uYXJncylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG91dHB1dEZpbGU6IHUob3V0cHV0RmlsZSksXG4gIG91dHB1dEZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdqc29uZmlsZS91dGlscycpXG5jb25zdCB7IG91dHB1dEZpbGUgfSA9IHJlcXVpcmUoJy4uL291dHB1dCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG91dHB1dEpzb24gKGZpbGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucylcblxuICBhd2FpdCBvdXRwdXRGaWxlKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRwdXRKc29uXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdqc29uZmlsZS91dGlscycpXG5jb25zdCB7IG91dHB1dEZpbGVTeW5jIH0gPSByZXF1aXJlKCcuLi9vdXRwdXQnKVxuXG5mdW5jdGlvbiBvdXRwdXRKc29uU3luYyAoZmlsZSwgZGF0YSwgb3B0aW9ucykge1xuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucylcblxuICBvdXRwdXRGaWxlU3luYyhmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblN5bmNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBqc29uRmlsZSA9IHJlcXVpcmUoJy4vanNvbmZpbGUnKVxuXG5qc29uRmlsZS5vdXRwdXRKc29uID0gdShyZXF1aXJlKCcuL291dHB1dC1qc29uJykpXG5qc29uRmlsZS5vdXRwdXRKc29uU3luYyA9IHJlcXVpcmUoJy4vb3V0cHV0LWpzb24tc3luYycpXG4vLyBhbGlhc2VzXG5qc29uRmlsZS5vdXRwdXRKU09OID0ganNvbkZpbGUub3V0cHV0SnNvblxuanNvbkZpbGUub3V0cHV0SlNPTlN5bmMgPSBqc29uRmlsZS5vdXRwdXRKc29uU3luY1xuanNvbkZpbGUud3JpdGVKU09OID0ganNvbkZpbGUud3JpdGVKc29uXG5qc29uRmlsZS53cml0ZUpTT05TeW5jID0ganNvbkZpbGUud3JpdGVKc29uU3luY1xuanNvbkZpbGUucmVhZEpTT04gPSBqc29uRmlsZS5yZWFkSnNvblxuanNvbkZpbGUucmVhZEpTT05TeW5jID0ganNvbkZpbGUucmVhZEpzb25TeW5jXG5cbm1vZHVsZS5leHBvcnRzID0ganNvbkZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5U3luYyA9IHJlcXVpcmUoJy4uL2NvcHktc3luYycpLmNvcHlTeW5jXG5jb25zdCByZW1vdmVTeW5jID0gcmVxdWlyZSgnLi4vcmVtb3ZlJykucmVtb3ZlU3luY1xuY29uc3QgbWtkaXJwU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFN5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBtb3ZlU3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdtb3ZlJylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcbiAgbWtkaXJwU3luYyhwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIHJldHVybiBkb1JlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gZG9SZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGlmIChvdmVyd3JpdGUpIHtcbiAgICByZW1vdmVTeW5jKGRlc3QpXG4gICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxuICBpZiAoZnMuZXhpc3RzU3luYyhkZXN0KSkgdGhyb3cgbmV3IEVycm9yKCdkZXN0IGFscmVhZHkgZXhpc3RzLicpXG4gIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG59XG5cbmZ1bmN0aW9uIHJlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgdHJ5IHtcbiAgICBmcy5yZW5hbWVTeW5jKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB0aHJvdyBlcnJcbiAgICByZXR1cm4gbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWVcbiAgfVxuICBjb3B5U3luYyhzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiByZW1vdmVTeW5jKHNyYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlU3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZVN5bmM6IHJlcXVpcmUoJy4vbW92ZS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5ID0gcmVxdWlyZSgnLi4vY29weScpLmNvcHlcbmNvbnN0IHJlbW92ZSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVxuY29uc3QgbWtkaXJwID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJwXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZSAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHNcbiAgICBvcHRzID0ge31cbiAgfVxuXG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIHN0YXQuY2hlY2tQYXRocyhzcmMsIGRlc3QsICdtb3ZlJywgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgc3JjU3RhdCB9ID0gc3RhdHNcbiAgICBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgbWtkaXJwKHBhdGguZGlybmFtZShkZXN0KSwgZXJyID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gZG9SZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYikge1xuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmV0dXJuIHJlbW92ZShkZXN0LCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICAgIH0pXG4gIH1cbiAgcGF0aEV4aXN0cyhkZXN0LCAoZXJyLCBkZXN0RXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoZGVzdEV4aXN0cykgcmV0dXJuIGNiKG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKSlcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgZnMucmVuYW1lKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoIWVycikgcmV0dXJuIGNiKClcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlXG4gIH1cbiAgY29weShzcmMsIGRlc3QsIG9wdHMsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gcmVtb3ZlKHNyYywgY2IpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogdShyZXF1aXJlKCcuL21vdmUnKSlcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIEV4cG9ydCBwcm9taXNlaWZpZWQgZ3JhY2VmdWwtZnM6XG4gIC4uLnJlcXVpcmUoJy4vZnMnKSxcbiAgLy8gRXhwb3J0IGV4dHJhIG1ldGhvZHM6XG4gIC4uLnJlcXVpcmUoJy4vY29weS1zeW5jJyksXG4gIC4uLnJlcXVpcmUoJy4vY29weScpLFxuICAuLi5yZXF1aXJlKCcuL2VtcHR5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW5zdXJlJyksXG4gIC4uLnJlcXVpcmUoJy4vanNvbicpLFxuICAuLi5yZXF1aXJlKCcuL21rZGlycycpLFxuICAuLi5yZXF1aXJlKCcuL21vdmUtc3luYycpLFxuICAuLi5yZXF1aXJlKCcuL21vdmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9vdXRwdXQnKSxcbiAgLi4ucmVxdWlyZSgnLi9wYXRoLWV4aXN0cycpLFxuICAuLi5yZXF1aXJlKCcuL3JlbW92ZScpXG59XG5cbi8vIEV4cG9ydCBmcy5wcm9taXNlcyBhcyBhIGdldHRlciBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IHRyaWdnZXJcbi8vIEV4cGVyaW1lbnRhbFdhcm5pbmcgYmVmb3JlIGZzLnByb21pc2VzIGlzIGFjdHVhbGx5IGFjY2Vzc2VkLlxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmcywgJ3Byb21pc2VzJykpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAncHJvbWlzZXMnLCB7XG4gICAgZ2V0ICgpIHsgcmV0dXJuIGZzLnByb21pc2VzIH1cbiAgfSlcbn1cbiIsICJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5jb25zdCBDREtfT1VURElSX1BSRUZJWCA9ICdjZGstaW50ZWcub3V0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGludGVncmF0aW9uIHRlc3RcbiAqXG4gKiBUaGlzIHR5cGUgaXMgYSBkYXRhLW9ubHkgc3RydWN0dXJlLCBzbyBpdCBjYW4gdHJpdmlhbGx5IGJlIHBhc3NlZCB0byB3b3JrZXJzLlxuICogRGVyaXZlZCBhdHRyaWJ1dGVzIGFyZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBgSW50ZWdUZXN0YCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgd2UgZGlzY292ZXJlZCB0aGlzIHRlc3QgZnJvbVxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzY292ZXJ5Um9vdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlcml2ZWQgaW5mb3JtYXRpb24gZm9yIEludGVnVGVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVnVGVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBSZWxhdGl2ZSBmcm9tIHRoZSBcImRpc2NvdmVyeSByb290XCIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFic29sdXRlRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5vcm1hbGl6ZWQgbmFtZSBvZiB0aGUgdGVzdC4gVGhpcyBuYW1lXG4gICAqIHdpbGwgYmUgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGF0IGRpcmVjdG9yeSB0aGUgdG9vbFxuICAgKiBpcyBydW4gZnJvbS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub3JtYWxpemVkVGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGlyZWN0b3J5IHRoZSB0ZXN0IGlzIGluXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgbmFtZSBmb3IgdGhlIHRlc3RcbiAgICpcbiAgICogRGVwZW5kcyBvbiB0aGUgZGlzY292ZXJ5IGRpcmVjdG9yeS5cbiAgICpcbiAgICogTG9va3MgbGlrZSBgaW50ZWcubXl0ZXN0YCBvciBgcGFja2FnZS90ZXN0L2ludGVnLm15dGVzdGAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBvZiB0aGUgc25hcHNob3QgZGlyZWN0b3J5IGZvciB0aGlzIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzbmFwc2hvdERpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSB0ZW1wb3Jhcnkgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVtcG9yYXJ5T3V0cHV0RGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGluZm86IEludGVnVGVzdEluZm8pIHtcbiAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoaW5mby5maWxlTmFtZSk7XG4gICAgdGhpcy5maWxlTmFtZSA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgaW5mby5maWxlTmFtZSk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXRoLnBhcnNlKHRoaXMuZmlsZU5hbWUpO1xuICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSA9IHBhdGgucmVsYXRpdmUoaW5mby5kaXNjb3ZlcnlSb290LCBpbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmRpcmVjdG9yeSA9IHBhcnNlZC5kaXI7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhY2thZ2UgZGlyZWN0b3J5IHRoZW4ganVzdCB1c2UgdGhlIGZpbGVOYW1lXG4gICAgLy8gYXMgdGhlIHRlc3RuYW1lLCBidXQgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBwYXJlbnQgZGlyZWN0b3J5IHdpdGhcbiAgICAvLyBtdWx0aXBsZSBwYWNrYWdlcyB0aGVuIHVzZSB0aGUgZGlyZWN0b3J5L2ZpbGVuYW1lIGFzIHRoZSB0ZXN0bmFtZVxuICAgIC8vXG4gICAgLy8gTG9va3MgZWl0aGVyIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgIGNvbnN0IHJlbERpc2NvdmVyeVJvb3QgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZGlzY292ZXJ5Um9vdCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdCwgJ3Rlc3QnKSB8fCB0aGlzLmRpcmVjdG9yeSA9PT0gcGF0aC5qb2luKHJlbERpc2NvdmVyeVJvb3QpXG4gICAgICA/IHBhcnNlZC5uYW1lXG4gICAgICA6IHBhdGguam9pbihwYXRoLnJlbGF0aXZlKHRoaXMuaW5mby5kaXNjb3ZlcnlSb290LCBwYXJzZWQuZGlyKSwgcGFyc2VkLm5hbWUpO1xuXG4gICAgY29uc3QgbmFrZWRUZXN0TmFtZSA9IHBhcnNlZC5uYW1lLnNsaWNlKDYpOyAvLyBMZWF2ZSBuYW1lIHdpdGhvdXQgJ2ludGVnLicgYW5kICcudHMnXG4gICAgdGhpcy5ub3JtYWxpemVkVGVzdE5hbWUgPSBwYXJzZWQubmFtZTtcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtuYWtlZFRlc3ROYW1lfS5pbnRlZy5zbmFwc2hvdGApO1xuICAgIHRoaXMudGVtcG9yYXJ5T3V0cHV0RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtDREtfT1VURElSX1BSRUZJWH0uJHtuYWtlZFRlc3ROYW1lfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0ZXN0IG1hdGNoZXMgdGhlIHVzZXItZ2l2ZW4gbmFtZVxuICAgKlxuICAgKiBXZSBhcmUgdmVyeSBsZW5pZW50IGhlcmUuIEEgbmFtZSBtYXRjaGVzIGlmIGl0IG1hdGNoZXM6XG4gICAqXG4gICAqIC0gVGhlIENXRC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBkaXNjb3Zlcnkgcm9vdC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBzdWl0ZSBuYW1lXG4gICAqIC0gVGhlIGFic29sdXRlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlcyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgIHRoaXMudGVzdE5hbWUsXG4gICAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUsXG4gICAgXS5pbmNsdWRlcyhuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1biBjYW4gYmUgcHJvdmlkZWQgaW4gYSBmaWxlXG4gKiBpbnN0ZWFkIG9mIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGxpc3Qgb2YgdGVzdHNcbiAgICogcHJvdmlkZWQgd2lsbCBiZSBleGNsdWRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdyYXRpb25UZXN0cyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGZpbGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgdGVzdFxuICAgKiB0byBlaXRoZXIgcnVuIG9yIGV4Y2x1ZGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIEludGVncmF0aW9uIFRlc3RzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZmlsZTogSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgICBjb25zdCBmb3VuZFRlc3RzID0gYXdhaXQgdGhpcy5kaXNjb3ZlcigpO1xuXG4gICAgY29uc3QgYWxsVGVzdHMgPSB0aGlzLmZpbHRlclRlc3RzKGZvdW5kVGVzdHMsIGZpbGUudGVzdHMsIGZpbGUuZXhjbHVkZSk7XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVzZXIgcHJvdmlkZXMgYSBsaXN0IG9mIHRlc3RzLCB0aGVzZSBjYW4gZWl0aGVyIGJlIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIG9yIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLlxuICAgKlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgcHJvdmlkZWQgdmFsaWQgdGVzdHMuXG4gICAqICAgSWYgdGhleSBoYXZlIHByb3ZpZGVkIGEgdGVzdCBuYW1lIHRoYXQgd2UgZG9uJ3QgZmluZCwgdGhlbiB3ZSB3cml0ZSBvdXQgdGhhdCBlcnJvciBtZXNzYWdlLlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLCB0aGVuIHdlIGRpc2NvdmVyIGFsbCBhdmFpbGFibGUgdGVzdHMgYW5kIGZpbHRlciBvdXQgdGhlIHRlc3RzIHRoYXQgd2VyZSBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgZmlsdGVyVGVzdHMoZGlzY292ZXJlZFRlc3RzOiBJbnRlZ1Rlc3RbXSwgcmVxdWVzdGVkVGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgaWYgKCFyZXF1ZXN0ZWRUZXN0cykge1xuICAgICAgcmV0dXJuIGRpc2NvdmVyZWRUZXN0cztcbiAgICB9XG5cblxuICAgIGNvbnN0IGFsbFRlc3RzID0gZGlzY292ZXJlZFRlc3RzLmZpbHRlcih0ID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0ZWRUZXN0cy5zb21lKHBhdHRlcm4gPT4gdC5tYXRjaGVzKHBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBtYXRjaGVzICE9PSAhIWV4Y2x1ZGU7IC8vIExvb2tzIHdlaXJkIGJ1dCBpcyBlcXVhbCB0byAobWF0Y2hlcyAmJiAhZXhjbHVkZSkgfHwgKCFtYXRjaGVzICYmIGV4Y2x1ZGUpXG4gICAgfSk7XG5cbiAgICAvLyBJZiBub3QgZXhjbHVkaW5nLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIG1hdGNoZWQgYXQgbGVhc3Qgb25lIHRlc3RcbiAgICBpZiAoIWV4Y2x1ZGUpIHtcbiAgICAgIGNvbnN0IHVubWF0Y2hlZFBhdHRlcm5zID0gcmVxdWVzdGVkVGVzdHMuZmlsdGVyKHBhdHRlcm4gPT4gIWRpc2NvdmVyZWRUZXN0cy5zb21lKHQgPT4gdC5tYXRjaGVzKHBhdHRlcm4pKSk7XG4gICAgICBmb3IgKGNvbnN0IHVubWF0Y2hlZCBvZiB1bm1hdGNoZWRQYXR0ZXJucykge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgTm8gc3VjaCBpbnRlZyB0ZXN0OiAke3VubWF0Y2hlZH1cXG5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1bm1hdGNoZWRQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBBdmFpbGFibGUgdGVzdHM6ICR7ZGlzY292ZXJlZFRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignICcpfVxcbmApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgdGVzdHMgdG8gbG9vayBmb3IsIG90aGVyd2lzZVxuICAgKiBpdCB3aWxsIGxvb2sgZm9yIGFsbCB0ZXN0cyBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICpcbiAgICogQHBhcmFtIHRlc3RzIFRlc3RzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSwgdW5kZWZpbmVkIG1lYW5zIGluY2x1ZGUgYWxsIHRlc3RzLlxuICAgKiBAcGFyYW0gZXhjbHVkZSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlBcmdzKHRlc3RzPzogc3RyaW5nW10sIGV4Y2x1ZGU/OiBib29sZWFuKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGRpc2NvdmVyZWRUZXN0cyA9IGF3YWl0IHRoaXMuZGlzY292ZXIoKTtcblxuICAgIGNvbnN0IGFsbFRlc3RzID0gdGhpcy5maWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHMsIHRlc3RzLCBleGNsdWRlKTtcblxuICAgIHJldHVybiBhbGxUZXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGlzY292ZXIoKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5yZWFkVHJlZSgpO1xuICAgIGNvbnN0IGludGVncyA9IGZpbGVzLmZpbHRlcihmaWxlTmFtZSA9PiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5zdGFydHNXaXRoKCdpbnRlZy4nKSAmJiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5lbmRzV2l0aCgnLmpzJykpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoaW50ZWdzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdChmaWxlczogc3RyaW5nW10pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgcmV0dXJuIGZpbGVzLm1hcChmaWxlTmFtZSA9PiBuZXcgSW50ZWdUZXN0KHsgZGlzY292ZXJ5Um9vdDogdGhpcy5kaXJlY3RvcnksIGZpbGVOYW1lIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHsgcmV0LnB1c2goZnVsbFBhdGgpOyB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7IGF3YWl0IHJlY3Vyc2UocGF0aC5qb2luKGZ1bGxQYXRoKSk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCByZWN1cnNlKHRoaXMuZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcblxuLyoqXG4gKiBUaGUgYWdncmVnYXRlIHJlc3VsdHMgZnJvbSBydW5uaW5nIGFzc2VydGlvbnMgb24gYSB0ZXN0IGNhc2VcbiAqL1xuZXhwb3J0IHR5cGUgQXNzZXJ0aW9uUmVzdWx0cyA9IHsgW2lkOiBzdHJpbmddOiBBc3NlcnRpb25SZXN1bHQgfTtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGluZGl2aWR1YWwgYXNzZXJ0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXJ0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gbWVzc2FnZS4gSWYgdGhlIGFzc2VydGlvbiBmYWlsZWQsIHRoaXMgd2lsbFxuICAgKiBpbmNsdWRlIHRoZSByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFzc2VydGlvbiBzdWNjZWVkZWQgb3IgZmFpbGVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdzdWNjZXNzJyB8ICdmYWlsJztcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIGFuIGludGVncmF0aW9uIHRlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RXb3JrZXJDb25maWcgZXh0ZW5kcyBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdHJ1Y3RpdmVDaGFuZ2VzPzogRGVzdHJ1Y3RpdmVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvbiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlc3RydWN0aXZlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBsb2dpY2FsSWQgb2YgdGhlIHJlc291cmNlIHdpdGggYSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhY2sgdGhhdCBjb250YWlucyB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGltcGFjdCBvZiB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBpbXBhY3Q6IFJlc291cmNlSW1wYWN0O1xufVxuXG5cbi8qKlxuICogUmVwcmVzZW50cyBpbnRlZ3JhdGlvbiB0ZXN0cyBtZXRyaWNzIGZvciBhIGdpdmVuIHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyTWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB0ZXN0IHdhcyBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHdvcmtlci5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWwgdGVzdCBkdXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQgdGhlXG4gICAqIHdvcmtlciBleGVjdXRlZC5cbiAgICpcbiAgICogTWFwIG9mIHRlc3ROYW1lIHRvIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgdGhhdCB3YXMgdXNlZCB0byBydW4gdGhlIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJldGFpbiBmYWlsZWQgc25hcHNob3QgY29tcGFyaXNvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2UgbW9kZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCByZXN1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdCYXRjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmFpbGVkIHRlc3RzXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRUZXN0czogSW50ZWdUZXN0SW5mb1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEludGVncmF0aW9uIHRlc3QgbWV0cmljcy4gRWFjaCBlbnRyeSBpbiB0aGVcbiAgICogbGlzdCByZXByZXNlbnRzIG1ldHJpY3MgZnJvbSBhIHNpbmdsZSB3b3JrZXIgKGFjY291bnQgKyByZWdpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW107XG59XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBydW5cbiAgICogaW4gdGhpcyBiYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHRoZSBzdGFja3MgYXQgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBpcyBzZXQgdG8gYHRydWVgIHRoZSBzbmFwc2hvdCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQgX3dpdGhvdXRfIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogVGhlIHJlc3VsdGluZyBzbmFwc2hvdCBTSE9VTEQgTk9UIGJlIGNoZWNrZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBvZiB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gICAqIEhpZ2hlciBudW1iZXIgbWVhbnMgbW9yZSBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVXb3JrZmxvdz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBwb3NzaWJsZSByZWFzb25zIGZvciBhIGRpYWdub3N0aWNcbiAqL1xuZXhwb3J0IGVudW0gRGlhZ25vc3RpY1JlYXNvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZVxuICAgKiBpcyBub3QgZXhpc3Rpbmcgc25hcHNob3RcbiAgICovXG4gIE5PX1NOQVBTSE9UID0gJ05PX1NOQVBTSE9UJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkXG4gICAqL1xuICBURVNUX0ZBSUxFRCA9ICdURVNUX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAqL1xuICBURVNUX0VSUk9SID0gJ1RFU1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGUgYWN0dWFsXG4gICAqIHNuYXBzaG90IHdhcyBkaWZmZXJlbnQgdGhhbiB0aGUgZXhwZWN0ZWQgc25hcHNob3RcbiAgICovXG4gIFNOQVBTSE9UX0ZBSUxFRCA9ICdTTkFQU0hPVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZXhlY3V0aW5nIGl0XG4gICAqL1xuICBTTkFQU0hPVF9FUlJPUiA9ICdTTkFQU0hPVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgU05BUFNIT1RfU1VDQ0VTUyA9ICdTTkFQU0hPVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBURVNUX1NVQ0NFU1MgPSAnVEVTVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBmYWlsZWRcbiAgICovXG4gIEFTU0VSVElPTl9GQUlMRUQgPSAnQVNTRVJUSU9OX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBkaWFnbm9zdGljc1xuICogVGhpcyBpcyB1c2VkIHRvIHJlcG9ydCBiYWNrIHRoZSBzdGF0dXMgb2YgZWFjaCB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpdCB0b29rIHRvIHJ1biB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFzb24gZm9yIHRoZSBkaWFnbm9zdGljXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERpYWdub3N0aWNSZWFzb247XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gcHJpbnRcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZXNzYWdlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTdW1tYXJ5KHRvdGFsOiBudW1iZXIsIGZhaWxlZDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsucmVkKGZhaWxlZCksIGNoYWxrLnJlZCgnZmFpbGVkJyksIHRvdGFsKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIucHJpbnQoJyVzOiAgICAlcyAlcywgJXMgdG90YWwnLCBjaGFsay5ib2xkKCdUZXN0cycpLCBjaGFsay5ncmVlbih0b3RhbCksIGNoYWxrLmdyZWVuKCdwYXNzZWQnKSwgdG90YWwpO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBhc3NlcnRpb24gcmVzdWx0cyBzbyB0aGF0IHRoZSByZXN1bHRzIGNhbiBiZVxuICogcHJpbnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzOiBBc3NlcnRpb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpXG4gICAgLm1hcCgoW2lkLCByZXN1bHRdKSA9PiBmb3JtYXQoJyVzJXMnLCBpZCwgcmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gYCAtICR7cmVzdWx0LnN0YXR1c31gIDogYFxcbiR7cmVzdWx0Lm1lc3NhZ2V9YCkpXG4gICAgLmpvaW4oJ1xcbiAgICAgICcpO1xufVxuXG4vKipcbiAqIFByaW50IG91dCB0aGUgcmVzdWx0cyBmcm9tIHRlc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFJlc3VsdHMoZGlhZ25vc3RpYzogRGlhZ25vc3RpYyk6IHZvaWQge1xuICBzd2l0Y2ggKGRpYWdub3N0aWMucmVhc29uKSB7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX1NVQ0NFU1M6XG4gICAgICBsb2dnZXIuc3VjY2VzcygnICBVTkNIQU5HRUQgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgU1VDQ0VTUyAgICAlcyAlc1xcbiAgICAgICcsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uTk9fU05BUFNIT1Q6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgTkVXICAgICAgICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBDSEFOR0VEICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0VSUk9SOlxuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0VSUk9SOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEVSUk9SICAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRkFJTEVEICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5BU1NFUlRJT05fRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEFTU0VSVCAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgfVxuICBmb3IgKGNvbnN0IGFkZGwgb2YgZGlhZ25vc3RpYy5hZGRpdGlvbmFsTWVzc2FnZXMgPz8gW10pIHtcbiAgICBsb2dnZXIucHJpbnQoYCAgICAgICR7YWRkbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMYWdnYXJkcyh0ZXN0TmFtZXM6IFNldDxzdHJpbmc+KSB7XG4gIGNvbnN0IHBhcnRzID0gW1xuICAgICcgICcsXG4gICAgYFdhaXRpbmcgZm9yICR7dGVzdE5hbWVzLnNpemV9IG1vcmVgLFxuICAgIHRlc3ROYW1lcy5zaXplIDwgMTAgPyBbJygnLCBBcnJheS5mcm9tKHRlc3ROYW1lcykuam9pbignLCAnKSwgJyknXS5qb2luKCcnKSA6ICcnLFxuICBdO1xuXG4gIGxvZ2dlci5wcmludChjaGFsay5ncmV5KHBhcnRzLmZpbHRlcih4ID0+IHgpLmpvaW4oJyAnKSkpO1xufVxuIiwgIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIENESyBFeGVjXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuLyoqXG4gKiBPdXIgb3duIGV4ZWN1dGUgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCB1c2Ugc2hlbGxzIGFuZCBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZTogc3RyaW5nW10sIG9wdGlvbnM6IHsgY3dkPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbiwgZW52PzogYW55IH0gPSB7IH0pOiBhbnkge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNvbW1hbmRMaW5lWzBdLCBjb21tYW5kTGluZS5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgb3B0aW9ucy52ZXJib3NlID8gJ2luaGVyaXQnIDogJ3BpcGUnXSwgLy8gaW5oZXJpdCBTVERFUlIgaW4gdmVyYm9zZSBtb2RlXG4gICAgZW52OiB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgIH0sXG4gICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgfSk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHsgdGhyb3cgcHJvYy5lcnJvcjsgfVxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvY2Vzcy5zdGRlcnIpIHsgLy8gd2lsbCBiZSAnbnVsbCcgaW4gdmVyYm9zZSBtb2RlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShwcm9jLnN0ZGVycik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBleGl0ZWQgd2l0aCAke3Byb2Muc3RhdHVzID8gYHN0YXR1cyAke3Byb2Muc3RhdHVzfWAgOiBgc2lnbmFsICR7cHJvYy5zaWduYWx9YH1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHByb2Muc3Rkb3V0LnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogQ2hhaW4gY29tbWFuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNvbW1hbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kcy5maWx0ZXIoYyA9PiAhIWMpLmpvaW4oJyAmJiAnKTtcbn1cblxuXG4vKipcbiAqIEEgY2xhc3MgaG9sZGluZyBhIHNldCBvZiBpdGVtcyB3aGljaCBhcmUgYmVpbmcgY3Jvc3NlZCBvZmYgaW4gdGltZVxuICpcbiAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGNyb3NzIG9mZiBhIG5ldyBpdGVtLCBwcmludCB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtMaXN0PEE+IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1haW5pbmcgPSBuZXcgU2V0KHRoaXMuaXRlbXMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IEFbXSwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBXb3JrTGlzdE9wdGlvbnM8QT4gPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyA2MF8wMDA7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3Jvc3NPZmYoaXRlbTogQSkge1xuICAgIHRoaXMucmVtYWluaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5zaXplID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvbmUoKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUaW1lcigpIHtcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlcG9ydCgpLCB0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVGltZW91dD8uKHRoaXMucmVtYWluaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtMaXN0T3B0aW9uczxBPiB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHJlcGx5IHdpdGggcmVtYWluaW5nIGl0ZW1zXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGltZW91dCBoaXRzXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoeDogU2V0PEE+KSA9PiB2b2lkO1xufSIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMsIHByaW50U3VtbWFyeSwgSW50ZWdCYXRjaFJlc3BvbnNlLCBJbnRlZ1Rlc3RPcHRpb25zLCBJbnRlZ1J1bm5lck1ldHJpY3MgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdCBiYXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEJhdGNoUmVxdWVzdCBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gdG8gcnVuIHRoaXMgYmF0Y2ggaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIHdoZW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyBhbGwgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RSdW5PcHRpb25zIGV4dGVuZHMgSW50ZWdUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzIGFjcm9zcy5cbiAgICogVGhpcyBhbGxvd3MgdGhlIHJ1bm5lciB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWxcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEFXUyBwcm9maWxlcy4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgcmVnaW9uc2BcbiAgICogdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhY2NvdW50cyArIHJlZ2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JrZXJwb29sIHRvIHVzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sO1xufVxuXG4vKipcbiAqIFJ1biBJbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHMob3B0aW9uczogSW50ZWdUZXN0UnVuT3B0aW9ucyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuLCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSB9PiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgZm9yIGZhaWxlZCB0ZXN0cy4uLlxcbicpO1xuICBsb2dnZXIucHJpbnQoXG4gICAgJ1J1bm5pbmcgaW4gcGFyYWxsZWwgYWNyb3NzICVzcmVnaW9uczogJXMnLFxuICAgIG9wdGlvbnMucHJvZmlsZXMgPyBgcHJvZmlsZXMgJHtvcHRpb25zLnByb2ZpbGVzLmpvaW4oJywgJyl9IGFuZCBgOiAnJyxcbiAgICBvcHRpb25zLnJlZ2lvbnMuam9pbignLCAnKSk7XG4gIGNvbnN0IHRvdGFsVGVzdHMgPSBvcHRpb25zLnRlc3RzLmxlbmd0aDtcblxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzSW5QYXJhbGxlbChvcHRpb25zKTtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVGVzdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRvdGFsVGVzdHMsIHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGggPT09IDAsXG4gICAgbWV0cmljczogcmVzcG9uc2VzLm1ldHJpY3MsXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHdvcmtlciBmb3IgYSBzaW5nbGUgYWNjb3VudCArIHJlZ2lvblxuICovXG5pbnRlcmZhY2UgQWNjb3VudFdvcmtlciB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB3b3JrZXIgc2hvdWxkIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0aGF0IHRoZSB3b3JrZXIgc2hvdWxkIHVzZVxuICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSAnLS1wcm9maWxlJyBvcHRpb24gdG8gdGhlIENESyBDTElcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgQWNjb3VudFdvcmtlcnMgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVnaW9ucyBhbmQgcHJvZmlsZXNcbiAqIGdpdmVuIHRvIHRoZSBDTEkuXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRXb3JrZXJzKHJlZ2lvbnM6IHN0cmluZ1tdLCBwcm9maWxlcz86IHN0cmluZ1tdKTogQWNjb3VudFdvcmtlcltdIHtcbiAgY29uc3Qgd29ya2VyczogQWNjb3VudFdvcmtlcltdID0gW107XG4gIGZ1bmN0aW9uIHB1c2hXb3JrZXIocHJvZmlsZT86IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIHdvcmtlcnMucHVzaCh7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgcHJvZmlsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAocHJvZmlsZXMgJiYgcHJvZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBwcm9maWxlcyA/PyBbXSkge1xuICAgICAgcHVzaFdvcmtlcihwcm9maWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHVzaFdvcmtlcigpO1xuICB9XG4gIHJldHVybiB3b3JrZXJzO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzZXQgb2YgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwgYWNyb3NzIGEgbGlzdCBvZiBBV1MgcmVnaW9ucy5cbiAqIE9ubHkgYSBzaW5nbGUgdGVzdCBjYW4gYmUgcnVuIGF0IGEgdGltZSBpbiBhIGdpdmVuIHJlZ2lvbi4gT25jZSBhIHJlZ2lvblxuICogaXMgZG9uZSBydW5uaW5nIGEgdGVzdCwgdGhlIG5leHQgdGVzdCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBxdWV1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwoXG4gIG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnQmF0Y2hSZXNwb25zZT4ge1xuXG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucy50ZXN0cztcbiAgY29uc3QgcmVzdWx0czogSW50ZWdCYXRjaFJlc3BvbnNlID0ge1xuICAgIG1ldHJpY3M6IFtdLFxuICAgIGZhaWxlZFRlc3RzOiBbXSxcbiAgfTtcbiAgY29uc3QgYWNjb3VudFdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IGdldEFjY291bnRXb3JrZXJzKG9wdGlvbnMucmVnaW9ucywgb3B0aW9ucy5wcm9maWxlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh3b3JrZXI6IEFjY291bnRXb3JrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGlmICghdGVzdCkgYnJlYWs7XG4gICAgICBjb25zdCB0ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgbG9nZ2VyLmhpZ2hsaWdodChgUnVubmluZyB0ZXN0ICR7dGVzdC5maWxlTmFtZX0gaW4gJHt3b3JrZXIucHJvZmlsZSA/IHdvcmtlci5wcm9maWxlICsgJy8nIDogJyd9JHt3b3JrZXIucmVnaW9ufWApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEludGVnVGVzdEluZm9bXVtdID0gYXdhaXQgb3B0aW9ucy5wb29sLmV4ZWMoJ2ludGVnVGVzdFdvcmtlcicsIFt7XG4gICAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgICAgcHJvZmlsZTogd29ya2VyLnByb2ZpbGUsXG4gICAgICAgIHRlc3RzOiBbdGVzdF0sXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogb3B0aW9ucy51cGRhdGVXb3JrZmxvdyxcbiAgICAgIH1dLCB7XG4gICAgICAgIG9uOiBwcmludFJlc3VsdHMsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy5mYWlsZWRUZXN0cy5wdXNoKC4uLmZsYXR0ZW4ocmVzcG9uc2UpKTtcbiAgICAgIHRlc3RzW3Rlc3QuZmlsZU5hbWVdID0gKERhdGUubm93KCkgLSB0ZXN0U3RhcnQpIC8gMTAwMDtcbiAgICB9IHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3MgPSB7XG4gICAgICByZWdpb246IHdvcmtlci5yZWdpb24sXG4gICAgICBwcm9maWxlOiB3b3JrZXIucHJvZmlsZSxcbiAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICB0ZXN0cyxcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5tZXRyaWNzLnB1c2gobWV0cmljcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ya2VycyA9IGFjY291bnRXb3JrZXJzLm1hcCgod29ya2VyKSA9PiBydW5UZXN0KHdvcmtlcikpO1xuICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzKTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iLCAiaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0IH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4sIFdvcmtMaXN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcHJpbnRTdW1tYXJ5LCBwcmludFJlc3VsdHMsIEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBwcmludExhZ2dhcmRzIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIFJ1biBTbmFwc2hvdCB0ZXN0c1xuICogRmlyc3QgYmF0Y2ggdXAgdGhlIHRlc3RzLiBCeSBkZWZhdWx0IHRoZXJlIHdpbGwgYmUgMyB0ZXN0cyBwZXIgYmF0Y2guXG4gKiBVc2UgYSB3b3JrZXJwb29sIHRvIHJ1biB0aGUgYmF0Y2hlcyBpbiBwYXJhbGxlbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNuYXBzaG90VGVzdHMoXG4gIHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbCxcbiAgdGVzdHM6IEludGVnVGVzdFtdLFxuICBvcHRpb25zOiBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnVGVzdFdvcmtlckNvbmZpZ1tdPiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblZlcmlmeWluZyBpbnRlZ3JhdGlvbiB0ZXN0IHNuYXBzaG90cy4uLlxcbicpO1xuXG4gIGNvbnN0IHRvZG8gPSBuZXcgV29ya0xpc3QodGVzdHMubWFwKHQgPT4gdC50ZXN0TmFtZSksIHtcbiAgICBvblRpbWVvdXQ6IHByaW50TGFnZ2FyZHMsXG4gIH0pO1xuXG4gIGNvbnN0IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdGVzdHMubWFwKCh0ZXN0KSA9PiBwb29sLmV4ZWMoJ3NuYXBzaG90VGVzdFdvcmtlcicsIFt0ZXN0LmluZm8gLyogRGVoeWRyYXRlIGNsYXNzIC0+IGRhdGEgKi8sIG9wdGlvbnNdLCB7XG4gICAgICBvbjogKHgpID0+IHtcbiAgICAgICAgdG9kby5jcm9zc09mZih4LnRlc3ROYW1lKTtcbiAgICAgICAgcHJpbnRSZXN1bHRzKHgpO1xuICAgICAgfSxcbiAgICB9KSksXG4gICk7XG4gIHRvZG8uZG9uZSgpO1xuICBjb25zdCB0ZXN0c1RvUnVuID0gZmxhdHRlbihmYWlsZWRUZXN0cyk7XG5cbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuU25hcHNob3QgUmVzdWx0czogXFxuJyk7XG4gIHByaW50U3VtbWFyeSh0ZXN0cy5sZW5ndGgsIHRlc3RzVG9SdW4ubGVuZ3RoKTtcbiAgcmV0dXJuIHRlc3RzVG9SdW47XG5cbn1cbiIsICJleHBvcnQgKiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVnLXRlc3Qtd29ya2VyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctc25hcHNob3Qtd29ya2VyJztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgc2hpbTtcbmNsYXNzIFkxOE4ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgLy8gY29uZmlndXJhYmxlIG9wdGlvbnMuXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5IHx8ICcuL2xvY2FsZXMnO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzID0gdHlwZW9mIG9wdHMudXBkYXRlRmlsZXMgPT09ICdib29sZWFuJyA/IG9wdHMudXBkYXRlRmlsZXMgOiB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IG9wdHMubG9jYWxlIHx8ICdlbic7XG4gICAgICAgIHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlID0gdHlwZW9mIG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlID09PSAnYm9vbGVhbicgPyBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA6IHRydWU7XG4gICAgICAgIC8vIGludGVybmFsIHN0dWZmLlxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlID0gW107XG4gICAgfVxuICAgIF9fKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnZ2VkTGl0ZXJhbChhcmd1bWVudHNbMF0sIC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdID0gc3RyO1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIFt0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdIHx8IHN0cl0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgX19uKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGxldCBzdHIgPSBxdWFudGl0eSA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xuICAgICAgICBpZiAodGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXTtcbiAgICAgICAgICAgIHN0ciA9IGVudHJ5W3F1YW50aXR5ID09PSAxID8gJ29uZScgOiAnb3RoZXInXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdID0ge1xuICAgICAgICAgICAgICAgIG9uZTogc2luZ3VsYXIsXG4gICAgICAgICAgICAgICAgb3RoZXI6IHBsdXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYSAlZCBwbGFjZWhvbGRlciBpcyBwcm92aWRlZCwgYWRkIHF1YW50aXR5XG4gICAgICAgIC8vIHRvIHRoZSBhcmd1bWVudHMgZXhwYW5kZWQgYnkgdXRpbC5mb3JtYXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtzdHJdO1xuICAgICAgICBpZiAofnN0ci5pbmRleE9mKCclZCcpKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocXVhbnRpdHkpO1xuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIHZhbHVlcy5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cbiAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfdGFnZ2VkTGl0ZXJhbChwYXJ0cywgLi4uYXJncykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgc3RyICs9IHBhcnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9fLmFwcGx5KHRoaXMsIFtzdHJdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlV3JpdGUod29yaykge1xuICAgICAgICB0aGlzLndyaXRlUXVldWUucHVzaCh3b3JrKTtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgIH1cbiAgICBfcHJvY2Vzc1dyaXRlUXVldWUoKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgY29uc3Qgd29yayA9IHRoaXMud3JpdGVRdWV1ZVswXTtcbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmUgdGhlIGVucXVldWVkIHdvcmsuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHdvcmsuZGlyZWN0b3J5O1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB3b3JrLmxvY2FsZTtcbiAgICAgICAgY29uc3QgY2IgPSB3b3JrLmNiO1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2NhbGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlW2xvY2FsZV0sIG51bGwsIDIpO1xuICAgICAgICBzaGltLmZzLndyaXRlRmlsZShsYW5ndWFnZUZpbGUsIHNlcmlhbGl6ZWRMb2NhbGUsICd1dGYtOCcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIF90aGlzLndyaXRlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlYWRMb2NhbGVGaWxlKCkge1xuICAgICAgICBsZXQgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgYnVuZGxlciBzdWNoIGFzIHdlYnBhY2ssIHJlYWRGaWxlU3luYyBtYXkgbm90IGJlIGRlZmluZWQ6XG4gICAgICAgICAgICBpZiAoc2hpbS5mcy5yZWFkRmlsZVN5bmMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSBKU09OLnBhcnNlKHNoaW0uZnMucmVhZEZpbGVTeW5jKGxhbmd1YWdlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gJ3N5bnRheCBlcnJvciBpbiAnICsgbGFuZ3VhZ2VGaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0gPSBsb2NhbGVMb29rdXA7XG4gICAgfVxuICAgIF9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSkge1xuICAgICAgICBsZXQgZmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZSArICcuanNvbicpO1xuICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgJiYgIXRoaXMuX2ZpbGVFeGlzdHNTeW5jKGZpbGUpICYmIH5sb2NhbGUubGFzdEluZGV4T2YoJ18nKSkge1xuICAgICAgICAgICAgLy8gYXR0ZW1wdCBmYWxsYmFjayB0byBsYW5ndWFnZSBvbmx5XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUuc3BsaXQoJ18nKVswXSArICcuanNvbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeGlzdHNTeW5jKGxhbmd1YWdlRmlsZSkpXG4gICAgICAgICAgICAgICAgZmlsZSA9IGxhbmd1YWdlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gICAgX2ZpbGVFeGlzdHNTeW5jKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0uZXhpc3RzKGZpbGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHkxOG4kMShvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cblxudmFyIG5vZGVQbGF0Zm9ybVNoaW0gPSB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jOiBmcy5yZWFkRmlsZVN5bmMsXG4gICAgICAgIHdyaXRlRmlsZTogZnMud3JpdGVGaWxlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIHJlc29sdmU6IHBhdGgucmVzb2x2ZSxcbiAgICBleGlzdHM6IChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gICAgcmV0dXJuIHkxOG4kMShvcHRzLCBub2RlUGxhdGZvcm1TaGltKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geTE4bjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgY29uc3QgaXNDYW1lbENhc2UgPSBzdHIgIT09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPT0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFpc0NhbWVsQ2FzZSkge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHN0ci5pbmRleE9mKCctJykgPT09IC0xICYmIHN0ci5pbmRleE9mKCdfJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2FtZWxjYXNlID0gJyc7XG4gICAgICAgIGxldCBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGVhZGluZ0h5cGhlbnMgPSBzdHIubWF0Y2goL14tKy8pO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVhZGluZ0h5cGhlbnMgPyBsZWFkaW5nSHlwaGVuc1swXS5sZW5ndGggOiAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChuZXh0Q2hyVXBwZXIpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjaHIgPSBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIChjaHIgPT09ICctJyB8fCBjaHIgPT09ICdfJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hyICE9PSAnLScgJiYgY2hyICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBjYW1lbGNhc2UgKz0gY2hyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW1lbGNhc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIsIGpvaW5TdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlcmNhc2UgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICBqb2luU3RyaW5nID0gam9pblN0cmluZyB8fCAnLSc7XG4gICAgbGV0IG5vdENhbWVsY2FzZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNockxvd2VyID0gbG93ZXJjYXNlLmNoYXJBdChpKTtcbiAgICAgICAgY29uc3QgY2hyU3RyaW5nID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGNockxvd2VyICE9PSBjaHJTdHJpbmcgJiYgaSA+IDApIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBgJHtqb2luU3RyaW5nfSR7bG93ZXJjYXNlLmNoYXJBdChpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGNoclN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm90Q2FtZWxjYXNlO1xufVxuZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG5cbmZ1bmN0aW9uIHRva2VuaXplQXJnU3RyaW5nKGFyZ1N0cmluZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ1N0cmluZy5tYXAoZSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycgPyBlICsgJycgOiBlKTtcbiAgICB9XG4gICAgYXJnU3RyaW5nID0gYXJnU3RyaW5nLnRyaW0oKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IHByZXZDID0gbnVsbDtcbiAgICBsZXQgYyA9IG51bGw7XG4gICAgbGV0IG9wZW5pbmcgPSBudWxsO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgYXJnU3RyaW5nLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBwcmV2QyA9IGM7XG4gICAgICAgIGMgPSBhcmdTdHJpbmcuY2hhckF0KGlpKTtcbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgaWYgKCEocHJldkMgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3NbaV0pXG4gICAgICAgICAgICBhcmdzW2ldID0gJyc7XG4gICAgICAgIGFyZ3NbaV0gKz0gYztcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5cbnZhciBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleTtcbihmdW5jdGlvbiAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkpIHtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIlNUUklOR1wiXSA9IFwic3RyaW5nXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJOVU1CRVJcIl0gPSBcIm51bWJlclwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG59KShEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB8fCAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgPSB7fSkpO1xuXG5sZXQgbWl4aW47XG5jbGFzcyBZYXJnc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IoX21peGluKSB7XG4gICAgICAgIG1peGluID0gX21peGluO1xuICAgIH1cbiAgICBwYXJzZShhcmdzSW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYWxpYXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFycmF5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib29sZWFuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvZXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudlByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmFyZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX186IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogdW5kZWZpbmVkXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJnc0lucHV0KTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpO1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnY2FtZWwtY2FzZS1leHBhbnNpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NvbWJpbmUtYXJyYXlzJzogZmFsc2UsXG4gICAgICAgICAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5JzogdHJ1ZSxcbiAgICAgICAgICAgICdmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2hhbHQtYXQtbm9uLW9wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgJ25hcmdzLWVhdHMtb3B0aW9ucyc6IGZhbHNlLFxuICAgICAgICAgICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICAgICAgICAgJ3BhcnNlLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3NldC1wbGFjZWhvbGRlci1rZXknOiBmYWxzZSxcbiAgICAgICAgICAgICdzaG9ydC1vcHRpb24tZ3JvdXBzJzogdHJ1ZSxcbiAgICAgICAgICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgICAgICAgICAnc3RyaXAtZGFzaGVkJzogZmFsc2UsXG4gICAgICAgICAgICAndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnOiBmYWxzZVxuICAgICAgICB9LCBvcHRzLmNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5kZWZhdWx0KTtcbiAgICAgICAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgZW52UHJlZml4ID0gb3B0cy5lbnZQcmVmaXg7XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzT3B0aW9uID0gY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXyc7XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBfXyA9IG9wdHMuX18gfHwgbWl4aW4uZm9ybWF0O1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBib29sczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIHN0cmluZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY291bnRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5hcmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29lcmNpb25zOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAga2V5czogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmUgPSAvXi0oWzAtOV0rKFxcLlswLTldKyk/fFxcLlswLTldKykkLztcbiAgICAgICAgY29uc3QgbmVnYXRlZEJvb2xlYW4gPSBuZXcgUmVnRXhwKCdeLS0nICsgY29uZmlndXJhdGlvblsnbmVnYXRpb24tcHJlZml4J10gKyAnKC4rKScpO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5hcnJheSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQua2V5IDogb3B0O1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IE9iamVjdC5rZXlzKG9wdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUZsYWdLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICBib29sZWFuOiAnYm9vbHMnLFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmc6ICdzdHJpbmdzJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiAnbnVtYmVycydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUZsYWdLZXlzW2tleV07XG4gICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikucG9wKCk7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZsYWdzW2Fzc2lnbm1lbnRdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3MuYXJyYXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ib29sZWFuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ib29sc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuc3RyaW5nIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5udW1iZXIgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm51bWJlcnNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmNvdW50IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5jb3VudHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm5vcm1hbGl6ZSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubmFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMubmFyZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MubmFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29lcmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb2VyY2UpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29lcmNpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuY29uZmlnKSB8fCB0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KG9wdHMuY29uZmlnKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1thbGlhc10gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbGV0IG5vdEZsYWdzID0gW107XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSk7XG4gICAgICAgIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkQXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLS0nKTtcbiAgICAgICAgICAgIGxldCBicm9rZW47XG4gICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgbGV0IGxldHRlcnM7XG4gICAgICAgICAgICBsZXQgbTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGFyZyAhPT0gJy0tJyAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRydW5jYXRlZEFyZy5tYXRjaCgvLS0tKyg9fCQpLykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKz0vKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pICYmIGNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpID8gW2ZhbHNlXSA6IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIW5leHQubWF0Y2goL14tLykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rPS8pKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAhbmV4dC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVteLV0rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbGV0dGVyc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKG5leHQsIGZsYWdzLmJvb2xzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgZGVmYXVsdFZhbHVlKGxldHRlcnNbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCEvXigtfC0tKVteLV0vLnRlc3QobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tWzAtOV0kLykgJiZcbiAgICAgICAgICAgICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGFyZy5zbGljZSgxKSwgZmxhZ3MuYm9vbHMpKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpO1xuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3RGbGFnc09wdGlvbiAmJiBub3RGbGFncy5sZW5ndGgpXG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0gPSBbXTtcbiAgICAgICAgbm90RmxhZ3MuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnLS0nICYmIGtleS5pbmNsdWRlcygnLScpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3Zba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzdHJpcC1hbGlhc2VkJ10pIHtcbiAgICAgICAgICAgIFtdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgYWxpYXMuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXNdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHVzaFBvc2l0aW9uYWwoYXJnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUNvZXJjZWROdW1iZXIgPSBtYXliZUNvZXJjZU51bWJlcignXycsIGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8ucHVzaChtYXliZUNvZXJjZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdE5hcmdzKGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBpaTtcbiAgICAgICAgICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIHRvRWF0ID0gdHlwZW9mIHRvRWF0ICE9PSAnbnVtYmVyJyB8fCBpc05hTih0b0VhdCkgPyAxIDogdG9FYXQ7XG4gICAgICAgICAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdBcmd1bWVudCB1bmV4cGVjdGVkIGZvcjogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdG9FYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzW2lpXS5tYXRjaCgvXi1bXjAtOV0vKSB8fCBhcmdzW2lpXS5tYXRjaChuZWdhdGl2ZSkgfHwgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnc1tpaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlIDwgdG9FYXQpXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb25zdW1lZCA9IE1hdGgubWluKGF2YWlsYWJsZSwgdG9FYXQpO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgY29uc3VtZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChpICsgY29uc3VtZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdEFycmF5KGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBhcmdzVG9TZXQgPSBbXTtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gYXJnQWZ0ZXJFcXVhbFNpZ24gfHwgYXJnc1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgICAgICAgICAgKGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiAvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFyZ3NDb3VudCAmJiB0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgKChuYXJnc0NvdW50ICYmIGFyZ3NUb1NldC5sZW5ndGggPCBuYXJnc0NvdW50KSB8fFxuICAgICAgICAgICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzVG9TZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0QXJnKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIHNwbGl0S2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gW10uY29uY2F0KHNwbGl0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0aWVzID0ga2V5UHJvcGVydGllcy5jb25jYXQoYSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG1peGluLm5vcm1hbGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkTmV3QWxpYXMoa2V5LCBhbGlhcykge1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldICYmIGZsYWdzLmFsaWFzZXNba2V5XS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXTtcbiAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2FsaWFzXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2FsaWFzXSAmJiBmbGFncy5hbGlhc2VzW2FsaWFzXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoYWxpYXMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodmFsWzBdID09PSBcIidcIiB8fCB2YWxbMF0gPT09ICdcIicpICYmXG4gICAgICAgICAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxLCB2YWwubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiYgKGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsLm1hcCgodmFsKSA9PiB7IHJldHVybiBtaXhpbi5ub3JtYWxpemUodmFsKTsgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1peGluLm5vcm1hbGl6ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gJiYga2V5ID09PSAnXycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENvZXJjZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcih2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsncGFyc2UtbnVtYmVycyddICYmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWcoYXJndikge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGNvbmZpZ0xvb2t1cCwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY29uZmlncykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbmZpZ1BhdGggPSBtaXhpbi5yZXNvbHZlKG1peGluLmN3ZCgpLCBjb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSBmbGFncy5jb25maWdzW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSByZXNvbHZlQ29uZmlnKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1peGluLnJlcXVpcmUocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3QoY29uZmlnLCBwcmV2KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZXYgPyBwcmV2ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhmdWxsS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gZW52VmFyLnNwbGl0KCdfXycpLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleXMuam9pbignLicpLCBlbnZbZW52VmFyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyhhcmd2KSB7XG4gICAgICAgICAgICBsZXQgY29lcmNlO1xuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgY29lcmNlKGFyZ3Zba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpKS5mb3JFYWNoKGFsaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuYWRkKGFsaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpIHtcbiAgICAgICAgICAgIGZsYWdzLmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc2FuaXRpemVLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG9ba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XS5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzYW5pdGl6ZUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cyk7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J107XG4gICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBpbmNyZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGluY3JlbWVudChvW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZHVwbGljYXRlICYmIEJvb2xlYW4oaXNUeXBlQXJyYXkpID09PSBCb29sZWFuKGlzVmFsdWVBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBvW2tleV0uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9ba2V5XSA9PT0gdW5kZWZpbmVkICYmIGlzVHlwZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaXNWYWx1ZUFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZHVwbGljYXRlICYmICEob1trZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbXS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvLS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhbWVsQ2FzZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gZGVjYW1lbGl6ZSh4LCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1t4XSA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0uZmlsdGVyKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggIT09IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZyk7XG4gICAgICAgICAgICBjb25zdCBzZXRBbGlhcyA9IHRvQ2hlY2suZmluZChrZXkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBzZXRBbGlhcyA/IGZsYWdbc2V0QWxpYXNdIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQW55RmxhZyhrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzS2V5cyA9IE9iamVjdC5rZXlzKGZsYWdzKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3NLZXlzLm1hcChrID0+IGZsYWdzW2tdKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmxhZykgPyBmbGFnLmluY2x1ZGVzKGtleSkgOiBmbGFnW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNGbGFnc01hdGNoaW5nKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoLi4ucGF0dGVybnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBoYXNBbnlGbGFnKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0FsbFNob3J0RmxhZ3MoYXJnKSB7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQWxsU2hvcnRGbGFncyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmxhZ1dpdGhFcXVhbHMgPSAvXi0rKFtePV0rPyk9W1xcc1xcU10qJC87XG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5EaWdpdHMgPSAvXi0rKFtePV0rP1xcZCspJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyA9IC9eLSsoW149XSs/KVxcVysuKiQvO1xuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBndWVzc1R5cGUoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklORztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVI7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5hcnJheS4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBmbGFncy5hbGlhc2VzKSxcbiAgICAgICAgICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdGVkOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0ZWQpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgbmV3QWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgbmV3QWxpYXNlcylcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21iaW5lQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgY29uc3QgYWxpYXNBcnJheXMgPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGV0IGNoYW5nZSA9IHRydWU7XG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgd2hpbGUgKGNoYW5nZSkge1xuICAgICAgICBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhbGlhc0FycmF5c1tpXS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5c1tpXSA9IGFsaWFzQXJyYXlzW2ldLmNvbmNhdChhbGlhc0FycmF5c1tpaV0pO1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuZnVuY3Rpb24gaW5jcmVtZW50KG9yaWcpIHtcbiAgICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxO1xufVxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBwYXJzZXIgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zYCk7XG4gICAgfVxufVxuY29uc3QgZW52ID0gcHJvY2VzcyA/IHByb2Nlc3MuZW52IDoge307XG5jb25zdCBwYXJzZXIgPSBuZXcgWWFyZ3NQYXJzZXIoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW52OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIG5vcm1hbGl6ZTogcGF0aC5ub3JtYWxpemUsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdvbmx5IC5qc29uIGNvbmZpZyBmaWxlcyBhcmUgc3VwcG9ydGVkIGluIEVTTScpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5jb25zdCB5YXJnc1BhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihhcmdzLCBvcHRzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5hcmd2O1xufTtcbnlhcmdzUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG59O1xueWFyZ3NQYXJzZXIuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xueWFyZ3NQYXJzZXIuZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemU7XG55YXJnc1BhcnNlci5sb29rc0xpa2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXI7XG5cbm1vZHVsZS5leHBvcnRzID0geWFyZ3NQYXJzZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpUmVnZXggPSByZXF1aXJlKCdhbnNpLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnID8gc3RyaW5nLnJlcGxhY2UoYW5zaVJlZ2V4KCksICcnKSA6IHN0cmluZztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSB5b2RhICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gY29kZVBvaW50ID0+IHtcblx0aWYgKE51bWJlci5pc05hTihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ29kZSBwb2ludHMgYXJlIGRlcml2ZWQgZnJvbTpcblx0Ly8gaHR0cDovL3d3dy51bml4Lm9yZy9QdWJsaWMvVU5JREFUQS9FYXN0QXNpYW5XaWR0aC50eHRcblx0aWYgKFxuXHRcdGNvZGVQb2ludCA+PSAweDExMDAgJiYgKFxuXHRcdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMjkgfHwgLy8gTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyQSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0XHQoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3ICYmIGNvZGVQb2ludCAhPT0gMHgzMDNGKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG5cdFx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAuLiBZaSBSYWRpY2Fsc1xuXHRcdFx0KDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0XHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHRcdCgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG5cdFx0XHQvLyBIYW5ndWwgU3lsbGFibGVzXG5cdFx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1xuXHRcdFx0KDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0XHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0XHQoMHhGRTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTE5KSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuXHRcdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHRcdC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXG5cdFx0XHQoMHhGRjAxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRjYwKSB8fFxuXHRcdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHRcdC8vIEthbmEgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUYyMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjUxKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAuLiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZVxuXHRcdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IHJlcXVpcmUoJ2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Jyk7XG5jb25zdCBlbW9qaVJlZ2V4ID0gcmVxdWlyZSgnZW1vamktcmVnZXgnKTtcblxuY29uc3Qgc3RyaW5nV2lkdGggPSBzdHJpbmcgPT4ge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGVtb2ppUmVnZXgoKSwgJyAgJyk7XG5cblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPD0gMHgxRiB8fCAoY29kZSA+PSAweDdGICYmIGNvZGUgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlID49IDB4MzAwICYmIGNvZGUgPD0gMHgzNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFN1cnJvZ2F0ZXNcblx0XHRpZiAoY29kZSA+IDB4RkZGRikge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGlzRnVsbHdpZHRoQ29kZVBvaW50KGNvZGUpID8gMiA6IDE7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1dpZHRoO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ1dpZHRoO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaSA9IGNvZGUgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0NTSX0ke2NvZGV9JHtBTlNJX1NHUl9URVJNSU5BVE9SfWA7XG5jb25zdCB3cmFwQW5zaUh5cGVybGluayA9IHVyaSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfRVNDQVBFX0xJTkt9JHt1cml9JHtBTlNJX0VTQ0FQRV9CRUxMfWA7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHdvcmRzIHNwbGl0IG9uICcgJywgaWdub3Jpbmdcbi8vIHRoZSBleHRyYSBjaGFyYWN0ZXJzIGFkZGVkIGJ5IGFuc2kgZXNjYXBlIGNvZGVzXG5jb25zdCB3b3JkTGVuZ3RocyA9IHN0cmluZyA9PiBzdHJpbmcuc3BsaXQoJyAnKS5tYXAoY2hhcmFjdGVyID0+IHN0cmluZ1dpZHRoKGNoYXJhY3RlcikpO1xuXG4vLyBXcmFwIGEgbG9uZyB3b3JkIGFjcm9zcyBtdWx0aXBsZSByb3dzXG4vLyBBbnNpIGVzY2FwZSBjb2RlcyBkbyBub3QgY291bnQgdG93YXJkcyBsZW5ndGhcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcblx0Y29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcblxuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRsZXQgdmlzaWJsZSA9IHN0cmluZ1dpZHRoKHN0cmlwQW5zaShyb3dzW3Jvd3MubGVuZ3RoIC0gMV0pKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBjaGFyYWN0ZXJzLnNsaWNlKGluZGV4ICsgMSkuam9pbignJykuc3RhcnRzV2l0aChBTlNJX0VTQ0FQRV9MSU5LKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnNpZGVFc2NhcGUpIHtcblx0XHRcdGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcblx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gQU5TSV9FU0NBUEVfQkVMTCkge1xuXHRcdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBBTlNJX1NHUl9URVJNSU5BVE9SKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZpc2libGUgKz0gY2hhcmFjdGVyTGVuZ3RoO1xuXG5cdFx0aWYgKHZpc2libGUgPT09IGNvbHVtbnMgJiYgaW5kZXggPCBjaGFyYWN0ZXJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cdH1cblxuXHQvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3Qgcm93IHdlIGNvcHkgb3ZlciBpcyBvbmx5XG5cdC8vIGFuc2kgZXNjYXBlIGNoYXJhY3RlcnMsIGhhbmRsZSB0aGlzIGVkZ2UtY2FzZVxuXHRpZiAoIXZpc2libGUgJiYgcm93c1tyb3dzLmxlbmd0aCAtIDFdLmxlbmd0aCA+IDAgJiYgcm93cy5sZW5ndGggPiAxKSB7XG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG5cdH1cbn07XG5cbi8vIFRyaW1zIHNwYWNlcyBmcm9tIGEgc3RyaW5nIGlnbm9yaW5nIGludmlzaWJsZSBzZXF1ZW5jZXNcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSBzdHJpbmcgPT4ge1xuXHRjb25zdCB3b3JkcyA9IHN0cmluZy5zcGxpdCgnICcpO1xuXHRsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcblxuXHR3aGlsZSAobGFzdCA+IDApIHtcblx0XHRpZiAoc3RyaW5nV2lkdGgod29yZHNbbGFzdCAtIDFdKSA+IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxhc3QtLTtcblx0fVxuXG5cdGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0cmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcblxuLy8gVGhlIHdyYXAtYW5zaSBtb2R1bGUgY2FuIGJlIGludm9rZWQgaW4gZWl0aGVyICdoYXJkJyBvciAnc29mdCcgd3JhcCBtb2RlXG4vL1xuLy8gJ2hhcmQnIHdpbGwgbmV2ZXIgYWxsb3cgYSBzdHJpbmcgdG8gdGFrZSB1cCBtb3JlIHRoYW4gY29sdW1ucyBjaGFyYWN0ZXJzXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoXG5jb25zdCBleGVjID0gKHN0cmluZywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlICYmIHN0cmluZy50cmltKCkgPT09ICcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGxldCBlc2NhcGVDb2RlO1xuXHRsZXQgZXNjYXBlVXJsO1xuXG5cdGNvbnN0IGxlbmd0aHMgPSB3b3JkTGVuZ3RocyhzdHJpbmcpO1xuXHRsZXQgcm93cyA9IFsnJ107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHdvcmRdIG9mIHN0cmluZy5zcGxpdCgnICcpLmVudHJpZXMoKSkge1xuXHRcdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV0udHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0Y29uc3QgcHJlID0gWy4uLnJvd3Muam9pbignXFxuJyldO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIHByZS5lbnRyaWVzKCkpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBjaGFyYWN0ZXI7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29uc3Qge2dyb3Vwc30gPSBuZXcgUmVnRXhwKGAoPzpcXFxcJHtBTlNJX0NTSX0oPzxjb2RlPlxcXFxkKyltfFxcXFwke0FOU0lfRVNDQVBFX0xJTkt9KD88dXJpPi4qKSR7QU5TSV9FU0NBUEVfQkVMTH0pYCkuZXhlYyhwcmUuc2xpY2UoaW5kZXgpLmpvaW4oJycpKSB8fCB7Z3JvdXBzOiB7fX07XG5cdFx0XHRpZiAoZ3JvdXBzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlRmxvYXQoZ3JvdXBzLmNvZGUpO1xuXHRcdFx0XHRlc2NhcGVDb2RlID0gY29kZSA9PT0gRU5EX0NPREUgPyB1bmRlZmluZWQgOiBjb2RlO1xuXHRcdFx0fSBlbHNlIGlmIChncm91cHMudXJpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXNjYXBlVXJsID0gZ3JvdXBzLnVyaS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBncm91cHMudXJpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluaygnJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLy8gRm9yIGVhY2ggbmV3bGluZSwgaW52b2tlIHRoZSBtZXRob2Qgc2VwYXJhdGVseVxubW9kdWxlLmV4cG9ydHMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zKSA9PiB7XG5cdHJldHVybiBTdHJpbmcoc3RyaW5nKVxuXHRcdC5ub3JtYWxpemUoKVxuXHRcdC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmNsYXNzIFVJIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy53aWR0aCA9IG9wdHMud2lkdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IChfYSA9IG9wdHMud3JhcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIHNwYW4oLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5kaXYoLi4uYXJncyk7XG4gICAgICAgIGNvbHMuc3BhbiA9IHRydWU7XG4gICAgfVxuICAgIHJlc2V0T3V0cHV0KCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgZGl2KC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpdignJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JhcCAmJiB0aGlzLnNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlMYXlvdXREU0woYXJnc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29scyA9IGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xGcm9tU3RyaW5nKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dzLnB1c2goY29scyk7XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cbiAgICBzaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC9bXFx0XFxuXS8udGVzdChhcmdzWzBdKTtcbiAgICB9XG4gICAgYXBwbHlMYXlvdXREU0woc3RyKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChyb3cgPT4gcm93LnNwbGl0KCdcXHQnKSk7XG4gICAgICAgIGxldCBsZWZ0Q29sdW1uV2lkdGggPSAwO1xuICAgICAgICAvLyBzaW1wbGUgaGV1cmlzdGljIGZvciBsYXlvdXQsIG1ha2Ugc3VyZSB0aGVcbiAgICAgICAgLy8gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cCBhbG9uZyB0aGUgbGVmdC1oYW5kLlxuICAgICAgICAvLyBkb24ndCBhbGxvdyB0aGUgZmlyc3QgY29sdW1uIHRvIHRha2UgdXAgbW9yZVxuICAgICAgICAvLyB0aGFuIDUwJSBvZiB0aGUgc2NyZWVuLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPiAxICYmIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pID4gbGVmdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGVmdENvbHVtbldpZHRoID0gTWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLndpZHRoICogMC41KSwgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSB0YWJsZTpcbiAgICAgICAgLy8gIHJlcGxhY2luZyAnICcgd2l0aCBwYWRkaW5nIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgLy8gIHVzaW5nIHRoZSBhbGdvcml0aG1pY2FsbHkgZ2VuZXJhdGVkIHdpZHRoLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpdiguLi5jb2x1bW5zLm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHIudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHIpLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKGkgPT09IDAgJiYgY29sdW1ucy5sZW5ndGggPiAxKSA/IGxlZnRDb2x1bW5XaWR0aCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgY29sRnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyh0ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBtZWFzdXJlUGFkZGluZyhzdHIpIHtcbiAgICAgICAgLy8gbWVhc3VyZSBwYWRkaW5nIHdpdGhvdXQgYW5zaSBlc2NhcGUgY29kZXNcbiAgICAgICAgY29uc3Qgbm9BbnNpID0gbWl4aW4uc3RyaXBBbnNpKHN0cik7XG4gICAgICAgIHJldHVybiBbMCwgbm9BbnNpLm1hdGNoKC9cXHMqJC8pWzBdLmxlbmd0aCwgMCwgbm9BbnNpLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aF07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dUb1N0cmluZyhyb3csIGxpbmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGRvbid0IGRpc3BsYXkgYW55IGxpbmVzIHdpdGggdGhlXG4gICAgICAgIC8vIGhpZGRlbiBmbGFnIHNldC5cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gIWxpbmUuaGlkZGVuKVxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUudGV4dClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcm93VG9TdHJpbmcocm93LCBsaW5lcykge1xuICAgICAgICB0aGlzLnJhc3Rlcml6ZShyb3cpLmZvckVhY2goKHJyb3csIHIpID0+IHtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHJyb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gcm93W2NdOyAvLyB0aGUgd2lkdGggd2l0aCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBXaWR0aCA9IHRoaXMubmVnYXRlUGFkZGluZyhyb3dbY10pOyAvLyB0aGUgd2lkdGggd2l0aG91dCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGxldCB0cyA9IGNvbDsgLy8gdGVtcG9yYXJ5IHN0cmluZyB1c2VkIGR1cmluZyBhbGlnbm1lbnQvcGFkZGluZy5cbiAgICAgICAgICAgICAgICBpZiAod3JhcFdpZHRoID4gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSkge1xuICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KHdyYXBXaWR0aCAtIG1peGluLnN0cmluZ1dpZHRoKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhbGlnbiB0aGUgc3RyaW5nIHdpdGhpbiBpdHMgY29sdW1uLlxuICAgICAgICAgICAgICAgIGlmIChyb3dbY10uYWxpZ24gJiYgcm93W2NdLmFsaWduICE9PSAnbGVmdCcgJiYgdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gYWxpZ25bcm93W2NdLmFsaWduXTtcbiAgICAgICAgICAgICAgICAgICAgdHMgPSBmbih0cywgd3JhcFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1peGluLnN0cmluZ1dpZHRoKHRzKSA8IHdyYXBXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCgod2lkdGggfHwgMCkgLSBtaXhpbi5zdHJpbmdXaWR0aCh0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhcHBseSBib3JkZXIgYW5kIHBhZGRpbmcgdG8gc3RyaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSByb3dbY10ucGFkZGluZyB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbbGVmdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tsZWZ0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJ3wgJyk7XG4gICAgICAgICAgICAgICAgc3RyICs9IHRzO1xuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJyB8Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbcmlnaHRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbcmlnaHRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJpb3Igcm93IGlzIHNwYW4sIHRyeSB0byByZW5kZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCByb3cgb24gdGhlIHByaW9yIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKHIgPT09IDAgJiYgbGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnJlbmRlcklubGluZShzdHIsIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyLnJlcGxhY2UoLyArJC8sICcnKSxcbiAgICAgICAgICAgICAgICBzcGFuOiByb3cuc3BhblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBmdWxsICdzb3VyY2UnIGNhbiByZW5kZXIgaW5cbiAgICAvLyB0aGUgdGFyZ2V0IGxpbmUsIGRvIHNvLlxuICAgIHJlbmRlcklubGluZShzb3VyY2UsIHByZXZpb3VzTGluZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaCgvXiAqLyk7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwcmV2aW91c0xpbmUudGV4dDtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGV4dFdpZHRoID0gbWl4aW4uc3RyaW5nV2lkdGgodGFyZ2V0LnRyaW1SaWdodCgpKTtcbiAgICAgICAgaWYgKCFwcmV2aW91c0xpbmUuc3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgYXBwbHlpbmcgd3JhcHBpbmcgbG9naWMsXG4gICAgICAgIC8vIGp1c3QgYWx3YXlzIGFwcGVuZCB0byB0aGUgc3Bhbi5cbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCArIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ1doaXRlc3BhY2UgPCB0YXJnZXRUZXh0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0YXJnZXQudHJpbVJpZ2h0KCkgKyAnICcucmVwZWF0KGxlYWRpbmdXaGl0ZXNwYWNlIC0gdGFyZ2V0VGV4dFdpZHRoKSArIHNvdXJjZS50cmltTGVmdCgpO1xuICAgIH1cbiAgICByYXN0ZXJpemUocm93KSB7XG4gICAgICAgIGNvbnN0IHJyb3dzID0gW107XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuY29sdW1uV2lkdGhzKHJvdyk7XG4gICAgICAgIGxldCB3cmFwcGVkO1xuICAgICAgICAvLyB3b3JkIHdyYXAgYWxsIGNvbHVtbnMsIGFuZCBjcmVhdGVcbiAgICAgICAgLy8gYSBkYXRhLXN0cnVjdHVyZSB0aGF0IGlzIGVhc3kgdG8gcmFzdGVyaXplLlxuICAgICAgICByb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAvLyBsZWF2ZSByb29tIGZvciBsZWZ0IGFuZCByaWdodCBwYWRkaW5nLlxuICAgICAgICAgICAgY29sLndpZHRoID0gd2lkdGhzW2NdO1xuICAgICAgICAgICAgaWYgKHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBtaXhpbi53cmFwKGNvbC50ZXh0LCB0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSwgeyBoYXJkOiB0cnVlIH0pLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBjb2wudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCgnLicgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyAnLicpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaChcIidcIiArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nLlxuICAgICAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1t0b3BdIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW2JvdHRvbV0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcHBlZC5mb3JFYWNoKChzdHIsIHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJyb3dzW3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJyb3dzLnB1c2goW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycm93ID0gcnJvd3Nbcl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJyb3dbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnJvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBycm93LnB1c2goc3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJyb3dzO1xuICAgIH1cbiAgICBuZWdhdGVQYWRkaW5nKGNvbCkge1xuICAgICAgICBsZXQgd3JhcFdpZHRoID0gY29sLndpZHRoIHx8IDA7XG4gICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IChjb2wucGFkZGluZ1tsZWZ0XSB8fCAwKSArIChjb2wucGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwV2lkdGg7XG4gICAgfVxuICAgIGNvbHVtbldpZHRocyhyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHJldHVybiByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aCB8fCBtaXhpbi5zdHJpbmdXaWR0aChjb2wudGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdW5zZXQgPSByb3cubGVuZ3RoO1xuICAgICAgICBsZXQgcmVtYWluaW5nV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAvLyBjb2x1bW4gd2lkdGhzIGNhbiBiZSBzZXQgaW4gY29uZmlnLlxuICAgICAgICBjb25zdCB3aWR0aHMgPSByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQtLTtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSBjb2wud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbnkgdW5zZXQgd2lkdGhzIHNob3VsZCBiZSBjYWxjdWxhdGVkLlxuICAgICAgICBjb25zdCB1bnNldFdpZHRoID0gdW5zZXQgPyBNYXRoLmZsb29yKHJlbWFpbmluZ1dpZHRoIC8gdW5zZXQpIDogMDtcbiAgICAgICAgcmV0dXJuIHdpZHRocy5tYXAoKHcsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodW5zZXRXaWR0aCwgX21pbldpZHRoKHJvd1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEJvcmRlcihjb2wsIHRzLCBzdHlsZSkge1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIGlmICgvWy4nXS0rWy4nXS8udGVzdCh0cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHMudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnICAnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4vLyBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHdpZHRoIG9mXG4vLyBhIGNvbHVtbiwgYmFzZWQgb24gcGFkZGluZyBwcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIF9taW5XaWR0aChjb2wpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29sLnBhZGRpbmcgfHwgW107XG4gICAgY29uc3QgbWluV2lkdGggPSAxICsgKHBhZGRpbmdbbGVmdF0gfHwgMCkgKyAocGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG1pbldpZHRoICsgNDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbldpZHRoO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHN0cldpZHRoID49IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiAnICcucmVwZWF0KCh3aWR0aCAtIHN0cldpZHRoKSA+PiAxKSArIHN0cjtcbn1cbmxldCBtaXhpbjtcbmZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cblxuLy8gQm9vdHN0cmFwIGNsaXVpIHdpdGggQ29tbW9uSlMgZGVwZW5kZW5jaWVzOlxuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdyYXAgPSByZXF1aXJlKCd3cmFwLWFuc2knKTtcbmZ1bmN0aW9uIHVpKG9wdHMpIHtcbiAgICByZXR1cm4gY2xpdWkob3B0cywge1xuICAgICAgICBzdHJpbmdXaWR0aCxcbiAgICAgICAgc3RyaXBBbnNpLFxuICAgICAgICB3cmFwXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdWk7XG4iLCAiY29uc3QgeyBkaXJuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9ID0gcmVxdWlyZSgnZnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhcnQsIGNhbGxiYWNrKSB7XG5cdGxldCBkaXIgPSByZXNvbHZlKCcuJywgc3RhcnQpO1xuXHRsZXQgdG1wLCBzdGF0cyA9IHN0YXRTeW5jKGRpcik7XG5cblx0aWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0ZGlyID0gZGlybmFtZShkaXIpO1xuXHR9XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHR0bXAgPSBjYWxsYmFjayhkaXIsIHJlYWRkaXJTeW5jKGRpcikpO1xuXHRcdGlmICh0bXApIHJldHVybiByZXNvbHZlKGRpciwgdG1wKTtcblx0XHRkaXIgPSBkaXJuYW1lKHRtcCA9IGRpcik7XG5cdFx0aWYgKHRtcCA9PT0gZGlyKSBicmVhaztcblx0fVxufVxuIiwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKSxcbiAgam9pbiA9IHJlcXVpcmUoJ3BhdGgnKS5qb2luLFxuICByZXNvbHZlID0gcmVxdWlyZSgncGF0aCcpLnJlc29sdmUsXG4gIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZSxcbiAgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZXh0ZW5zaW9uczogWydqcycsICdqc29uJywgJ2NvZmZlZSddLFxuICAgIHJlY3Vyc2U6IHRydWUsXG4gICAgcmVuYW1lOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcbiAgICB2aXNpdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG5cbmZ1bmN0aW9uIGNoZWNrRmlsZUluY2x1c2lvbihwYXRoLCBmaWxlbmFtZSwgb3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIC8vIHZlcmlmeSBmaWxlIGhhcyB2YWxpZCBleHRlbnNpb25cbiAgICAobmV3IFJlZ0V4cCgnXFxcXC4oJyArIG9wdGlvbnMuZXh0ZW5zaW9ucy5qb2luKCd8JykgKyAnKSQnLCAnaScpLnRlc3QoZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5pbmNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIG9wdGlvbnMuaW5jbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhb3B0aW9ucy5pbmNsdWRlLnRlc3QocGF0aCkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBmdW5jdGlvbiwgZXZhbHVhdGUgaXQgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aCBwYXNzZXNcbiAgICAhKG9wdGlvbnMuaW5jbHVkZSAmJiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSAnZnVuY3Rpb24nICYmICFvcHRpb25zLmluY2x1ZGUocGF0aCwgZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIG9wdGlvbnMuZXhjbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBvcHRpb25zLmV4Y2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuZXhjbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmV4Y2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5leGNsdWRlKHBhdGgsIGZpbGVuYW1lKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZURpcmVjdG9yeShtLCBwYXRoLCBvcHRpb25zKSB7XG4gIHZhciByZXR2YWwgPSB7fTtcblxuICAvLyBwYXRoIGlzIG9wdGlvbmFsXG4gIGlmIChwYXRoICYmICFvcHRpb25zICYmIHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBwYXRoO1xuICAgIHBhdGggPSBudWxsO1xuICB9XG5cbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW3Byb3BdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRPcHRpb25zW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vIHBhdGggd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoZSBlcXVpdmVsYW50IG9mIF9fZGlybmFtZSBmcm9tIGNhbGxlclxuICAvLyBvdGhlcndpc2UsIHJlc29sdmUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZXF1aXZhbGVudCBvZiBfX2Rpcm5hbWVcbiAgcGF0aCA9ICFwYXRoID8gZGlybmFtZShtLmZpbGVuYW1lKSA6IHJlc29sdmUoZGlybmFtZShtLmZpbGVuYW1lKSwgcGF0aCk7XG5cbiAgLy8gZ2V0IHRoZSBwYXRoIG9mIGVhY2ggZmlsZSBpbiBzcGVjaWZpZWQgZGlyZWN0b3J5LCBhcHBlbmQgdG8gY3VycmVudCB0cmVlIG5vZGUsIHJlY3Vyc2VcbiAgZnMucmVhZGRpclN5bmMocGF0aCkuZm9yRWFjaChmdW5jdGlvbiAoZmlsZW5hbWUpIHtcbiAgICB2YXIgam9pbmVkID0gam9pbihwYXRoLCBmaWxlbmFtZSksXG4gICAgICBmaWxlcyxcbiAgICAgIGtleSxcbiAgICAgIG9iajtcblxuICAgIGlmIChmcy5zdGF0U3luYyhqb2luZWQpLmlzRGlyZWN0b3J5KCkgJiYgb3B0aW9ucy5yZWN1cnNlKSB7XG4gICAgICAvLyB0aGlzIG5vZGUgaXMgYSBkaXJlY3Rvcnk7IHJlY3Vyc2VcbiAgICAgIGZpbGVzID0gcmVxdWlyZURpcmVjdG9yeShtLCBqb2luZWQsIG9wdGlvbnMpO1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBkaXJlY3Rvcmllc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbGVzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dmFsW29wdGlvbnMucmVuYW1lKGZpbGVuYW1lLCBqb2luZWQsIGZpbGVuYW1lKV0gPSBmaWxlcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGpvaW5lZCAhPT0gbS5maWxlbmFtZSAmJiBjaGVja0ZpbGVJbmNsdXNpb24oam9pbmVkLCBmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICAgICAgLy8gaGFzaCBub2RlIGtleSBzaG91bGRuJ3QgaW5jbHVkZSBmaWxlIGV4dGVuc2lvblxuICAgICAgICBrZXkgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgICAgIG9iaiA9IG0ucmVxdWlyZShqb2luZWQpO1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoa2V5LCBqb2luZWQsIGZpbGVuYW1lKV0gPSBvcHRpb25zLnZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkgfHwgb2JqO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJldHZhbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRGlyZWN0b3J5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9ucztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcblxuY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBZRXJyb3IpO1xuICAgIH1cbn1cblxubGV0IHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xubGV0IHNoaW07XG5mdW5jdGlvbiBhcHBseUV4dGVuZHMoY29uZmlnLCBjd2QsIG1lcmdlRXh0ZW5kcywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgbGV0IGRlZmF1bHRDb25maWcgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2V4dGVuZHMnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5leHRlbmRzICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgICAgICBjb25zdCBpc1BhdGggPSAvXFwuanNvbnxcXC4uKnJjJC8udGVzdChjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGxldCBwYXRoVG9EZWZhdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpc1BhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IHJlcXVpcmUucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiByZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbWFuZChjbWQpIHtcbiAgICBjb25zdCBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZCA9IGNtZC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgY29uc3Qgc3BsaXRDb21tYW5kID0gZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQuc3BsaXQoL1xccysoPyFbXltdKl18W148XSo+KS8pO1xuICAgIGNvbnN0IGJyZWdleCA9IC9cXC4qW1xcXVs8Pl0vZztcbiAgICBjb25zdCBmaXJzdENvbW1hbmQgPSBzcGxpdENvbW1hbmQuc2hpZnQoKTtcbiAgICBpZiAoIWZpcnN0Q29tbWFuZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGZvdW5kIGluOiAke2NtZH1gKTtcbiAgICBjb25zdCBwYXJzZWRDb21tYW5kID0ge1xuICAgICAgICBjbWQ6IGZpcnN0Q29tbWFuZC5yZXBsYWNlKGJyZWdleCwgJycpLFxuICAgICAgICBkZW1hbmRlZDogW10sXG4gICAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9O1xuICAgIHNwbGl0Q29tbWFuZC5mb3JFYWNoKChjbWQsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoL1xcLitbXFxdPl0vLnRlc3QoY21kKSAmJiBpID09PSBzcGxpdENvbW1hbmQubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICAgICAgaWYgKC9eXFxbLy50ZXN0KGNtZCkpIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQub3B0aW9uYWwucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZENvbW1hbmQ7XG59XG5cbmNvbnN0IHBvc2l0aW9uTmFtZSA9IFsnZmlyc3QnLCAnc2Vjb25kJywgJ3RoaXJkJywgJ2ZvdXJ0aCcsICdmaWZ0aCcsICdzaXh0aCddO1xuZnVuY3Rpb24gYXJnc2VydChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFt7IGRlbWFuZGVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sIGFyZzEsIGFyZzJdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNvbW1hbmQoYGNtZCAke2FyZzF9YCksXG4gICAgICAgICAgICAgICAgYXJnMixcbiAgICAgICAgICAgICAgICBhcmczLFxuICAgICAgICAgICAgXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgW3BhcnNlZCwgY2FsbGVyQXJndW1lbnRzLCBfbGVuZ3RoXSA9IHBhcnNlQXJncygpO1xuICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChjYWxsZXJBcmd1bWVudHMpO1xuICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGggJiYgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBfbGVuZ3RoIHx8IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgTm90IGVub3VnaCBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkICR7cGFyc2VkLmRlbWFuZGVkLmxlbmd0aH0gYnV0IHJlY2VpdmVkICR7YXJncy5sZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsQ29tbWFuZHMgPSBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoICsgcGFyc2VkLm9wdGlvbmFsLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IHRvdGFsQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgbWF4ICR7dG90YWxDb21tYW5kc30gYnV0IHJlY2VpdmVkICR7bGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkZW1hbmRlZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBkZW1hbmRlZC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBkZW1hbmRlZC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvcHRpb25hbCA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gb3B0aW9uYWwuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgb3B0aW9uYWwuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG59XG5mdW5jdGlvbiBndWVzc1R5cGUoYXJnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgYXJnO1xufVxuZnVuY3Rpb24gYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBhbGxvd2VkVHlwZXMsIHBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IFlFcnJvcihgSW52YWxpZCAke3Bvc2l0aW9uTmFtZVtwb3NpdGlvbl0gfHwgJ21hbnlpdGgnfSBhcmd1bWVudC4gRXhwZWN0ZWQgJHthbGxvd2VkVHlwZXMuam9pbignIG9yICcpfSBidXQgcmVjZWl2ZWQgJHtvYnNlcnZlZFR5cGV9LmApO1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHNoaW0sIG1lc3NhZ2UpIHtcbiAgICBzaGltLmFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5mdW5jdGlvbiBvYmplY3RLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBvYmpGaWx0ZXIob3JpZ2luYWwgPSB7fSwgZmlsdGVyID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIG9iamVjdEtleXMob3JpZ2luYWwpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcihrZXksIG9yaWdpbmFsW2tleV0pKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnbG9iYWxNaWRkbGV3YXJlRmFjdG9yeShnbG9iYWxNaWRkbGV3YXJlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gZmFsc2UpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrW2ldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdtaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFja1tpXS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnbG9iYWxNaWRkbGV3YXJlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBnbG9iYWxNaWRkbGV3YXJlLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpIHtcbiAgICBpZiAoIWNvbW1hbmRNaWRkbGV3YXJlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIGNvbW1hbmRNaWRkbGV3YXJlLm1hcChtaWRkbGV3YXJlID0+IHtcbiAgICAgICAgbWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgY29uc3QgYmVmb3JlVmFsaWRhdGlvbkVycm9yID0gbmV3IEVycm9yKCdtaWRkbGV3YXJlIGNhbm5vdCByZXR1cm4gYSBwcm9taXNlIHdoZW4gYXBwbHlCZWZvcmVWYWxpZGF0aW9uIGlzIHRydWUnKTtcbiAgICByZXR1cm4gbWlkZGxld2FyZXMucmVkdWNlKChhY2MsIG1pZGRsZXdhcmUpID0+IHtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uICE9PSBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGluaXRpYWxPYmosXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZShpbml0aWFsT2JqLCB5YXJncyksXG4gICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAudGhlbigoW2luaXRpYWxPYmosIG1pZGRsZXdhcmVPYmpdKSA9PiBPYmplY3QuYXNzaWduKGluaXRpYWxPYmosIG1pZGRsZXdhcmVPYmopKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZXdhcmUoYWNjLCB5YXJncyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlVmFsaWRhdGlvbiAmJiBpc1Byb21pc2UocmVzdWx0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBiZWZvcmVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50aGVuKG1pZGRsZXdhcmVPYmogPT4gT2JqZWN0LmFzc2lnbihhY2MsIG1pZGRsZXdhcmVPYmopKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9LCBhcmd2KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5mdW5jdGlvbiBoaWRlQmluKGFyZ3YpIHtcbiAgICByZXR1cm4gYXJndi5zbGljZShnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkgKyAxKTtcbn1cbmZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpXTtcbn1cblxudmFyIHByb2Nlc3NBcmd2ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhpZGVCaW46IGhpZGVCaW4sXG4gIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpblxufSk7XG5cbmZ1bmN0aW9uIHdoaWNoTW9kdWxlKGV4cG9ydGVkKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDAsIGZpbGVzID0gT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSksIG1vZDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZXNbaV1dO1xuICAgICAgICBpZiAobW9kLmV4cG9ydHMgPT09IGV4cG9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmZ1bmN0aW9uIGNvbW1hbmQoeWFyZ3MsIHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlID0gW10sIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGhhbmRsZXJzID0ge307XG4gICAgbGV0IGFsaWFzTWFwID0ge307XG4gICAgbGV0IGRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYuYWRkSGFuZGxlciA9IGZ1bmN0aW9uIGFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgY29tbWFuZE1pZGRsZXdhcmUsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlciB8fCAoKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSkge1xuICAgICAgICAgICAgICAgIFtjbWQsIC4uLmFsaWFzZXNdID0gY21kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkpIHtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShjbWQuY29tbWFuZCkgfHwgdHlwZW9mIGNtZC5jb21tYW5kID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY21kLmNvbW1hbmRcbiAgICAgICAgICAgICAgICA6IG1vZHVsZU5hbWUoY21kKTtcbiAgICAgICAgICAgIGlmIChjbWQuYWxpYXNlcylcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gW10uY29uY2F0KGNvbW1hbmQpLmNvbmNhdChjbWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCwgZXh0cmFjdERlc2MoY21kKSwgY21kLmJ1aWxkZXIsIGNtZC5oYW5kbGVyLCBjbWQubWlkZGxld2FyZXMsIGNtZC5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgc2VsZi5hZGRIYW5kbGVyKFtjbWRdLmNvbmNhdChhbGlhc2VzKSwgZGVzY3JpcHRpb24sIGJ1aWxkZXIuYnVpbGRlciwgYnVpbGRlci5oYW5kbGVyLCBidWlsZGVyLm1pZGRsZXdhcmVzLCBidWlsZGVyLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHBhcnNlQ29tbWFuZChjbWQpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGFsaWFzZXMubWFwKGFsaWFzID0+IHBhcnNlQ29tbWFuZChhbGlhcykuY21kKTtcbiAgICAgICAgICAgIGxldCBpc0RlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFsaWFzZXMgPSBbcGFyc2VkQ29tbWFuZC5jbWRdLmNvbmNhdChhbGlhc2VzKS5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKERFRkFVTFRfTUFSS0VSLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEFsaWFzZXMubGVuZ3RoID09PSAwICYmIGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBwYXJzZWRBbGlhc2VzLnB1c2goJyQwJyk7XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5jbWQgPSBwYXJzZWRBbGlhc2VzWzBdO1xuICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBwYXJzZWRBbGlhc2VzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCBwYXJzZWRDb21tYW5kLmNtZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBjbWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIHx8IHt9LFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmVzLFxuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQsXG4gICAgICAgICAgICAgICAgZGVtYW5kZWQ6IHBhcnNlZENvbW1hbmQuZGVtYW5kZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHBhcnNlZENvbW1hbmQub3B0aW9uYWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IGhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5hZGREaXJlY3RvcnkgPSBmdW5jdGlvbiBhZGREaXJlY3RvcnkoZGlyLCBjb250ZXh0LCByZXEsIGNhbGxlckZpbGUsIG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5yZWN1cnNlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICBvcHRzLnJlY3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdHMuZXh0ZW5zaW9ucykpXG4gICAgICAgICAgICBvcHRzLmV4dGVuc2lvbnMgPSBbJ2pzJ107XG4gICAgICAgIGNvbnN0IHBhcmVudFZpc2l0ID0gdHlwZW9mIG9wdHMudmlzaXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnZpc2l0IDogKG8pID0+IG87XG4gICAgICAgIG9wdHMudmlzaXQgPSBmdW5jdGlvbiB2aXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBwYXJlbnRWaXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAofmNvbnRleHQuZmlsZXMuaW5kZXhPZihqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGVzLnB1c2goam9pbmVkKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIodmlzaXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgfTtcbiAgICAgICAgc2hpbS5yZXF1aXJlRGlyZWN0b3J5KHsgcmVxdWlyZTogcmVxLCBmaWxlbmFtZTogY2FsbGVyRmlsZSB9LCBkaXIsIG9wdHMpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbW9kdWxlTmFtZShvYmopIHtcbiAgICAgICAgY29uc3QgbW9kID0gd2hpY2hNb2R1bGUob2JqKTtcbiAgICAgICAgaWYgKCFtb2QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgbmFtZSBnaXZlbiBmb3IgbW9kdWxlOiAke3NoaW0uaW5zcGVjdChvYmopfWApO1xuICAgICAgICByZXR1cm4gY29tbWFuZEZyb21GaWxlbmFtZShtb2QuZmlsZW5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21tYW5kRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiBzaGltLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHNoaW0ucGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjLCB9KSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdCBvZiBbZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJyB8fCB0ZXN0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRlc3QsIHRydWUsIHNoaW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IE9iamVjdC5rZXlzKGhhbmRsZXJzKS5jb25jYXQoT2JqZWN0LmtleXMoYWxpYXNNYXApKTtcbiAgICBzZWxmLmdldENvbW1hbmRIYW5kbGVycyA9ICgpID0+IGhhbmRsZXJzO1xuICAgIHNlbGYuaGFzRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAhIWRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYucnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4KSB7XG4gICAgICAgIGxldCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRIYW5kbGVyID0gaGFuZGxlcnNbY29tbWFuZF0gfHwgaGFuZGxlcnNbYWxpYXNNYXBbY29tbWFuZF1dIHx8IGRlZmF1bHRDb21tYW5kO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgbGV0IG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGxldCBpbm5lckFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJPdXRwdXQgPSBidWlsZGVyKHlhcmdzLnJlc2V0KHBhcnNlZC5hbGlhc2VzKSk7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0gaXNZYXJnc0luc3RhbmNlKGJ1aWxkZXJPdXRwdXQpID8gYnVpbGRlck91dHB1dCA6IHlhcmdzO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0geWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXAgPSBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGdsb2JhbE1pZGRsZXdhcmVcbiAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgLmNvbmNhdChjb21tYW5kSGFuZGxlci5taWRkbGV3YXJlcyk7XG4gICAgICAgIGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgdHJ1ZSk7XG4gICAgICAgIGlmICgheWFyZ3MuX2hhc091dHB1dCgpKSB7XG4gICAgICAgICAgICB5YXJncy5fcnVuVmFsaWRhdGlvbihpbm5lckFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHlhcmdzLnBhcnNlZC5lcnJvciwgIWNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kSGFuZGxlci5oYW5kbGVyICYmICF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9zZXRIYXNPdXRwdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEheWFyZ3MuZ2V0T3B0aW9ucygpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgICAgIHlhcmdzLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyUmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGlubmVyQXJndi50aGVuKGFyZ3YgPT4gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihhcmd2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihpbm5lckFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZpbmlzaENvbW1hbmQgPSB5YXJncy5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jYWNoZUhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5mYWlsKG51bGwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jbGVhckNhY2hlZEhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckZpbmlzaENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQoaGFuZGxlclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wb3AoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBudW1GaWxlcyA9IGN1cnJlbnRDb250ZXh0LmZpbGVzLmxlbmd0aCAtIG51bUZpbGVzO1xuICAgICAgICBpZiAobnVtRmlsZXMgPiAwKVxuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZmlsZXMuc3BsaWNlKG51bUZpbGVzICogLTEsIG51bUZpbGVzKTtcbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSB7XG4gICAgICAgIHJldHVybiAoIXlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZURpc2FibGVkKCkgJiZcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGMgPSBERUZBVUxUX01BUktFUi50ZXN0KGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKVxuICAgICAgICAgICAgPyBjb21tYW5kSGFuZGxlci5vcmlnaW5hbC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCAnJykudHJpbSgpXG4gICAgICAgICAgICA6IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsO1xuICAgICAgICBjb25zdCBwYyA9IHBhcmVudENvbW1hbmRzLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhREVGQVVMVF9NQVJLRVIudGVzdChjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBjLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBgJDAgJHtwYy5qb2luKCcgJyl9YDtcbiAgICB9XG4gICAgc2VsZi5ydW5EZWZhdWx0QnVpbGRlck9uID0gZnVuY3Rpb24gKHlhcmdzKSB7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGRlZmF1bHRDb21tYW5kLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdChkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS51c2FnZShjb21tYW5kU3RyaW5nLCBkZWZhdWx0Q29tbWFuZC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGRlZmF1bHRDb21tYW5kLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIoeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHlhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgYXJndiwgY29udGV4dCkge1xuICAgICAgICBhcmd2Ll8gPSBhcmd2Ll8uc2xpY2UoY29udGV4dC5jb21tYW5kcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZCA9IGNvbW1hbmRIYW5kbGVyLmRlbWFuZGVkLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IGNvbW1hbmRIYW5kbGVyLm9wdGlvbmFsLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIHZhbGlkYXRpb24ucG9zaXRpb25hbENvdW50KGRlbWFuZGVkLmxlbmd0aCwgYXJndi5fLmxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChkZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IGRlbWFuZGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwobWF5YmUsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3YuXyA9IGNvbnRleHQuY29tbWFuZHMuY29uY2F0KGFyZ3YuXy5tYXAoYSA9PiAnJyArIGEpKTtcbiAgICAgICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBzZWxmLmNtZFRvUGFyc2VPcHRpb25zKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbmFsTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWwocG9zaXRpb25hbCwgYXJndiwgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBjb25zdCBjbWQgPSBwb3NpdGlvbmFsLmNtZFswXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uYWwudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IGFyZ3YuXy5zcGxpY2UoMCkubWFwKFN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aClcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBbU3RyaW5nKGFyZ3YuXy5zaGlmdCgpKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHlhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdCA9IE9iamVjdC5hc3NpZ24ocGFyc2VPcHRpb25zLmRlZmF1bHQsIG9wdGlvbnMuZGVmYXVsdCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlT3B0aW9ucy5hbGlhcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XSA9IChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pLmNvbmNhdChwYXJzZU9wdGlvbnMuYWxpYXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5hcnJheSA9IG9wdGlvbnMuYXJyYXkuY29uY2F0KHBhcnNlT3B0aW9ucy5hcnJheSk7XG4gICAgICAgIG9wdGlvbnMuY29uZmlnID0ge307XG4gICAgICAgIGNvbnN0IHVucGFyc2VkID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XS5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10pXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2goYC0tJHtrZXl9YCk7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdW5wYXJzZWQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHNoaW0uUGFyc2VyLmRldGFpbGVkKHVucGFyc2VkLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHBhcnNlZC5lcnJvcikge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwocGFyc2VkLmVycm9yLm1lc3NhZ2UsIHBhcnNlZC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxLZXlzLnB1c2goLi4ucGFyc2VkLmFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZC5hcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmFsTWFwW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiAoY21kU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb21tYW5kKGNtZFN0cmluZyk7XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBkLmNtZDtcbiAgICAgICAgICAgIGlmIChkLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVtYW5kW2NtZF0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IG8uY21kO1xuICAgICAgICAgICAgaWYgKG8udmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGVycyA9IHt9O1xuICAgICAgICBhbGlhc01hcCA9IHt9O1xuICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSAoKSA9PiB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBoYW5kbGVycywgYWxpYXNNYXAsIGRlZmF1bHRDb21tYW5kIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIGlmIChjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNtZCk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB1c2FnZSh5YXJncywgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgY29uc3QgZmFpbHMgPSBbXTtcbiAgICBzZWxmLmZhaWxGbiA9IGZ1bmN0aW9uIGZhaWxGbihmKSB7XG4gICAgICAgIGZhaWxzLnB1c2goZik7XG4gICAgfTtcbiAgICBsZXQgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkFyZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtlbmFibGVkLCBtZXNzYWdlXSA9IHBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgc2hvd0hlbHBPbkZhaWwgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgc2VsZi5mYWlsID0gZnVuY3Rpb24gZmFpbChtc2csIGVycikge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5fZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgZmFpbHNbaV0obXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpXG4gICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0hlbHBPbkZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc2hvd0hlbHAoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZyB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChmYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5faGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IHVzYWdlcyA9IFtdO1xuICAgIGxldCB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgc2VsZi51c2FnZSA9IChtc2csIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcy5wdXNoKFttc2csIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlcztcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlRGlzYWJsZWQ7XG4gICAgfTtcbiAgICBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfXygnUG9zaXRpb25hbHM6Jyk7XG4gICAgfTtcbiAgICBsZXQgZXhhbXBsZXMgPSBbXTtcbiAgICBzZWxmLmV4YW1wbGUgPSAoY21kLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBleGFtcGxlcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMubWFwKGNtZEFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBjbWRBcnJheVsyXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWRBcnJheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJycsIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZF0pO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IGNvbW1hbmRzO1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSB7fTtcbiAgICBzZWxmLmRlc2NyaWJlID0gZnVuY3Rpb24gZGVzY3JpYmUoa2V5T3JLZXlzLCBkZXNjKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgICAgICAgIGtleU9yS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywgZGVzYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5T3JLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5T3JLZXlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywga2V5T3JLZXlzW2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2tleU9yS2V5c10gPSBkZXNjO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldERlc2NyaXB0aW9ucyA9ICgpID0+IGRlc2NyaXB0aW9ucztcbiAgICBsZXQgZXBpbG9ncyA9IFtdO1xuICAgIHNlbGYuZXBpbG9nID0gbXNnID0+IHtcbiAgICAgICAgZXBpbG9ncy5wdXNoKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgd3JhcFNldCA9IGZhbHNlO1xuICAgIGxldCB3cmFwO1xuICAgIHNlbGYud3JhcCA9IGNvbHMgPT4ge1xuICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgd3JhcCA9IGNvbHM7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRXcmFwKCkge1xuICAgICAgICBpZiAoIXdyYXBTZXQpIHtcbiAgICAgICAgICAgIHdyYXAgPSB3aW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXA7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyWTE4bkxvb2t1cFByZWZpeCA9ICdfX3lhcmdzU3RyaW5nX186JztcbiAgICBzZWxmLmRlZmVyWTE4bkxvb2t1cCA9IHN0ciA9PiBkZWZlclkxOG5Mb29rdXBQcmVmaXggKyBzdHI7XG4gICAgc2VsZi5oZWxwID0gZnVuY3Rpb24gaGVscCgpIHtcbiAgICAgICAgaWYgKGNhY2hlZEhlbHBNZXNzYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgICAgICBub3JtYWxpemVBbGlhc2VzKCk7XG4gICAgICAgIGNvbnN0IGJhc2UkMCA9IHlhcmdzLmN1c3RvbVNjcmlwdE5hbWVcbiAgICAgICAgICAgID8geWFyZ3MuJDBcbiAgICAgICAgICAgIDogc2hpbS5wYXRoLmJhc2VuYW1lKHlhcmdzLiQwKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0geWFyZ3MuZ2V0R3JvdXBzKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGxldCBrZXlzID0gW107XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZXNjcmlwdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRDb21tYW5kcykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0KSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKTtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ18nKVxuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGNvbnN0IHRoZVdyYXAgPSBnZXRXcmFwKCk7XG4gICAgICAgIGNvbnN0IHVpID0gc2hpbS5jbGl1aSh7XG4gICAgICAgICAgICB3aWR0aDogdGhlV3JhcCxcbiAgICAgICAgICAgIHdyYXA6ICEhdGhlV3JhcCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdXNhZ2VEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHVzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB1c2FnZXMuZm9yRWFjaCh1c2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdihgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMV19YCwgcGFkZGluZzogWzEsIDAsIDAsIDBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSA8JHtfXygnY29tbWFuZCcpfT5cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gWyR7X18oJ2NvbW1hbmQnKX1dXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWkuZGl2KGAke3V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdDb21tYW5kczonKSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjb250ZXh0LmNvbW1hbmRzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYCR7Y29udGV4dC5jb21tYW5kcy5qb2luKCcgJyl9IGBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc29ydC1jb21tYW5kcyddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gYCR7YmFzZSQwfSAke3BhcmVudENvbW1hbmRzfSR7Y29tbWFuZFswXS5yZXBsYWNlKC9eXFwkMCA/LywgJycpfWA7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbW1hbmRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGNvbW1hbmRzLCB0aGVXcmFwLCBgJHtiYXNlJDB9JHtwYXJlbnRDb21tYW5kc31gKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgeyB0ZXh0OiBjb21tYW5kWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpbnRzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbMl0pXG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZWZhdWx0Jyl9XWApO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzNdICYmIGNvbW1hbmRbM10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdhbGlhc2VzOicpfSAke2NvbW1hbmRbM10uam9pbignLCAnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZFs0XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkOiAlcycsIGNvbW1hbmRbNF0pfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkJyl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGhpbnRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAwLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNLZXlzID0gKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5jb25jYXQoT2JqZWN0LmtleXMoeWFyZ3MucGFyc2VkLm5ld0FsaWFzZXMpIHx8IFtdKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiAheWFyZ3MucGFyc2VkLm5ld0FsaWFzZXNba2V5XSAmJlxuICAgICAgICAgICAgYWxpYXNLZXlzLmV2ZXJ5KGFsaWFzID0+IChvcHRpb25zLmFsaWFzW2FsaWFzXSB8fCBbXSkuaW5kZXhPZihrZXkpID09PSAtMSkpO1xuICAgICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBfXygnT3B0aW9uczonKTtcbiAgICAgICAgaWYgKCFncm91cHNbZGVmYXVsdEdyb3VwXSlcbiAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdID0gW107XG4gICAgICAgIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgb3B0aW9ucy5hbGlhcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApO1xuICAgICAgICBjb25zdCBpc0xvbmdTd2l0Y2ggPSAoc3cpID0+IC9eLS0vLnRlc3QoZ2V0VGV4dChzdykpO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRHcm91cHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAuZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cHNbZ3JvdXBOYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSBncm91cHNbZ3JvdXBOYW1lXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5hbGlhc0tleXMuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhbGlhc0tleTsgKGFsaWFzS2V5ID0gYWxpYXNLZXlzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKH4ob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0tleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBub3JtYWxpemVkS2V5cyB9KSA9PiBub3JtYWxpemVkS2V5cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaGVzID0gbm9ybWFsaXplZEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lID09PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldJC8udGVzdChzdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3cubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLScpICsgc3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKHN3MSwgc3cyKSA9PiBpc0xvbmdTd2l0Y2goc3cxKSA9PT0gaXNMb25nU3dpdGNoKHN3MilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXNMb25nU3dpdGNoKHN3MSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaG9ydFN3aXRjaGVzVXNlZCA9IGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgIC5zb21lKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiAhbm9ybWFsaXplZEtleXMuZXZlcnkoa2V5ID0+IGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkpO1xuICAgICAgICBpZiAoc2hvcnRTd2l0Y2hlc1VzZWQpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzW2tleV0gPSBhZGRJbmRlbnRhdGlvbihzd2l0Y2hlc1trZXldLCAnLXgsICcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheWVkR3JvdXBzLmZvckVhY2goKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgdWkuZGl2KGdyb3VwTmFtZSk7XG4gICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga3N3aXRjaCA9IHN3aXRjaGVzW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkZXNjcmlwdGlvbnNba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKH5kZXNjLmxhc3RJbmRleE9mKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmNvdW50LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5hcnJheS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSlcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLnN0cmluZy5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5udW1iZXIuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgYWxpYXNlcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApIHtcbiAgICAgICAgbGV0IGdyb3VwZWRLZXlzID0gW107XG4gICAgICAgIGxldCB0b0NoZWNrID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwZWRLZXlzID0gZ3JvdXBlZEtleXMuY29uY2F0KGdyb3Vwc1tncm91cF0pO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0b0NoZWNrID0gW2tleV0uY29uY2F0KGFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXRvQ2hlY2suc29tZShrID0+IGdyb3VwZWRLZXlzLmluZGV4T2YoaykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cGVkS2V5cztcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlsdGVySGlkZGVuT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICh5YXJncy5nZXRPcHRpb25zKCkuaGlkZGVuT3B0aW9ucy5pbmRleE9mKGtleSkgPCAwIHx8XG4gICAgICAgICAgICB5YXJncy5wYXJzZWQuYXJndlt5YXJncy5nZXRPcHRpb25zKCkuc2hvd0hpZGRlbk9wdF0pO1xuICAgIH1cbiAgICBzZWxmLnNob3dIZWxwID0gKGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHNlbGYuaGVscCgpKTtcbiAgICB9O1xuICAgIHNlbGYuZnVuY3Rpb25EZXNjcmlwdGlvbiA9IGZuID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmbi5uYW1lXG4gICAgICAgICAgICA/IHNoaW0uUGFyc2VyLmRlY2FtZWxpemUoZm4ubmFtZSwgJy0nKVxuICAgICAgICAgICAgOiBfXygnZ2VuZXJhdGVkLXZhbHVlJyk7XG4gICAgICAgIHJldHVybiBbJygnLCBkZXNjcmlwdGlvbiwgJyknXS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHNlbGYuc3RyaW5naWZpZWRWYWx1ZXMgPSBmdW5jdGlvbiBzdHJpbmdpZmllZFZhbHVlcyh2YWx1ZXMsIHNlcGFyYXRvcikge1xuICAgICAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvciB8fCAnLCAnO1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCAhYXJyYXkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gc2VwO1xuICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyaW5nKHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IGBbJHtfXygnZGVmYXVsdDonKX0gYDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWRlZmF1bHREZXNjcmlwdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyaW5nfV1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aW5kb3dXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSA4MDtcbiAgICAgICAgaWYgKHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gICAgc2VsZi52ZXJzaW9uID0gdmVyID0+IHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcjtcbiAgICB9O1xuICAgIHNlbGYuc2hvd1ZlcnNpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBsb2dnZXIubG9nKHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0luZGVudGVkVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGFkZEluZGVudGF0aW9uKHRleHQsIGluZGVudCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KVxuICAgICAgICA/IHsgdGV4dDogdGV4dC50ZXh0LCBpbmRlbnRhdGlvbjogdGV4dC5pbmRlbnRhdGlvbiArIGluZGVudCB9XG4gICAgICAgIDogeyB0ZXh0LCBpbmRlbnRhdGlvbjogaW5kZW50IH07XG59XG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbih0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC5pbmRlbnRhdGlvbiA6IDA7XG59XG5mdW5jdGlvbiBnZXRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LnRleHQgOiB0ZXh0O1xufVxuXG5jb25zdCBjb21wbGV0aW9uU2hUZW1wbGF0ZSA9IGAjIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hfcHJvZmlsZSBvbiBPU1guXG4jXG5feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgIHR5cGVfbGlzdD0kKHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHthcmdzW0BdfVwiKVxuXG4gICAgQ09NUFJFUExZPSggJChjb21wZ2VuIC1XIFwiXFwke3R5cGVfbGlzdH1cIiAtLSBcXCR7Y3VyX3dvcmR9KSApXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGRlZmF1bHQgLUYgX3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuY29uc3QgY29tcGxldGlvblpzaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hfcHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgbG9jYWwgcmVwbHlcbiAgbG9jYWwgc2k9JElGU1xuICBJRlM9JCdcXG4nIHJlcGx5PSgkKENPTVBfQ1dPUkQ9XCIkKChDVVJSRU5ULTEpKVwiIENPTVBfTElORT1cIiRCVUZGRVJcIiBDT01QX1BPSU5UPVwiJENVUlNPUlwiIHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHt3b3Jkc1tAXX1cIikpXG4gIElGUz0kc2lcbiAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG59XG5jb21wZGVmIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5cbmZ1bmN0aW9uIGNvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgY29uc3Qgc2VsZiA9IHtcbiAgICAgICAgY29tcGxldGlvbktleTogJ2dldC15YXJncy1jb21wbGV0aW9ucycsXG4gICAgfTtcbiAgICBsZXQgYWxpYXNlcztcbiAgICBzZWxmLnNldFBhcnNlZCA9IGZ1bmN0aW9uIHNldFBhcnNlZChwYXJzZWQpIHtcbiAgICAgICAgYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH07XG4gICAgY29uc3QgenNoU2hlbGwgPSAoc2hpbS5nZXRFbnYoJ1NIRUxMJykgJiYgc2hpbS5nZXRFbnYoJ1NIRUxMJykuaW5kZXhPZignenNoJykgIT09IC0xKSB8fFxuICAgICAgICAoc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykgJiYgc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykuaW5kZXhPZignenNoJykgIT09IC0xKTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFyZ3MubGVuZ3RoID8gYXJnc1thcmdzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB5YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHM7XG4gICAgICAgIGZ1bmN0aW9uIHJ1bkNvbXBsZXRpb25GdW5jdGlvbihhcmd2KSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChjb21wbGV0aW9uRnVuY3Rpb24sIG51bGwsIHNoaW0pO1xuICAgICAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKGFyZ3YpXG4gICAgICAgICAgICAgICAgPyBhcmd2LnRoZW4ocnVuQ29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIDogcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gY29tbWFuZC5nZXRDb21tYW5kSGFuZGxlcnMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbYXJnc1tpXV0gJiYgaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHlhcmdzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIoeSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5LmFyZ3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgcGFyZW50Q29tbWFuZHNbcGFyZW50Q29tbWFuZHMubGVuZ3RoIC0gMV0gIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHVzYWdlLmdldENvbW1hbmRzKCkuZm9yRWFjaCh1c2FnZUNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcGFyc2VDb21tYW5kKHVzYWdlQ29tbWFuZFswXSkuY21kO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmluZGV4T2YoY29tbWFuZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB1c2FnZUNvbW1hbmRbMV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lLnJlcGxhY2UoLzovZywgJ1xcXFw6JykgKyAnOicgKyBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Lm1hdGNoKC9eLS8pIHx8IChjdXJyZW50ID09PSAnJyAmJiBjb21wbGV0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcyA9IHVzYWdlLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMua2V5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVnYWJsZSA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGtleUFuZEFsaWFzZXMgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSlcbiAgICAgICAgICAgICAgICAgICAga2V5QW5kQWxpYXNlcyA9IGtleUFuZEFsaWFzZXMuY29uY2F0KGtleUFuZEFsaWFzZXMubWFwKGtleSA9PiBgbm8tJHtrZXl9YCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlT3B0aW9uS2V5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RJbkFyZ3MgPSBrZXlBbmRBbGlhc2VzLmV2ZXJ5KHZhbCA9PiBhcmdzLmluZGV4T2YoYC0tJHt2YWx9YCkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdEluQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRzQnlUd29EYXNoZXMgPSAocykgPT4gL14tLS8udGVzdChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGFzaGVzID0gIXN0YXJ0c0J5VHdvRGFzaGVzKGN1cnJlbnQpICYmIGlzU2hvcnRPcHRpb24oa2V5KSA/ICctJyA6ICctLSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcGxldGVPcHRpb25LZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSAmJiAhIW9wdGlvbnMuZGVmYXVsdFtrZXldKVxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShgbm8tJHtrZXl9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICB9O1xuICAgIHNlbGYuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9IHpzaFNoZWxsXG4gICAgICAgICAgICA/IGNvbXBsZXRpb25ac2hUZW1wbGF0ZVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uU2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNoaW0ucGF0aC5iYXNlbmFtZSgkMCk7XG4gICAgICAgIGlmICgkMC5tYXRjaCgvXFwuanMkLykpXG4gICAgICAgICAgICAkMCA9IGAuLyR7JDB9YDtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX25hbWV9fS9nLCBuYW1lKTtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7Y29tcGxldGlvbl9jb21tYW5kfX0vZywgY21kKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5yZXBsYWNlKC97e2FwcF9wYXRofX0vZywgJDApO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25GdW5jdGlvbiA9IG51bGw7XG4gICAgc2VsZi5yZWdpc3RlckZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb21wbGV0aW9uRnVuY3Rpb24gPSBmbjtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cblxuZnVuY3Rpb24gbGV2ZW5zaHRlaW4oYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXRyaXhbaV0gPSBbaV07XG4gICAgfVxuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMSkpIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xufVxuXG5jb25zdCBzcGVjaWFsS2V5cyA9IFsnJDAnLCAnLS0nLCAnXyddO1xuZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHkxOG4sIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHkxOG4uX187XG4gICAgY29uc3QgX19uID0geTE4bi5fX247XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIHNlbGYubm9uT3B0aW9uQ291bnQgPSBmdW5jdGlvbiBub25PcHRpb25Db3VudChhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxDb3VudCA9IGFyZ3YuXy5sZW5ndGggKyAoYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10ubGVuZ3RoIDogMCk7XG4gICAgICAgIGNvbnN0IF9zID0gcG9zaXRpb25hbENvdW50IC0geWFyZ3MuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXyAmJlxuICAgICAgICAgICAgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbiB8fCBfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpKSB7XG4gICAgICAgICAgICBpZiAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucG9zaXRpb25hbENvdW50ID0gZnVuY3Rpb24gcG9zaXRpb25hbENvdW50KHJlcXVpcmVkLCBvYnNlcnZlZCkge1xuICAgICAgICBpZiAob2JzZXJ2ZWQgPCByZXF1aXJlZCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBvYnNlcnZlZCwgb2JzZXJ2ZWQgKyAnJywgcmVxdWlyZWQgKyAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVkQXJndW1lbnRzID0gZnVuY3Rpb24gcmVxdWlyZWRBcmd1bWVudHMoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IG1pc3NpbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyB8fCB7fTtcbiAgICAgICAgICAgICAgICBtaXNzaW5nW2tleV0gPSBkZW1hbmRlZE9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWlzc2luZykge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNncyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWlzc2luZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBtaXNzaW5nW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBjdXN0b21Nc2dzLmluZGV4T2YobXNnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tTXNncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNnID0gY3VzdG9tTXNncy5sZW5ndGggPyBgXFxuJHtjdXN0b21Nc2dzLmpvaW4oJ1xcbicpfWAgOiAnJztcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAlcycsICdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50czogJXMnLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5sZW5ndGgsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmpvaW4oJywgJykgKyBjdXN0b21Nc2cpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQXJndW1lbnRzID0gZnVuY3Rpb24gdW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kLCBjaGVja1Bvc2l0aW9uYWxzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwb3NpdGlvbmFsTWFwLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5YXJncy5fZ2V0UGFyc2VDb250ZXh0KCksIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgY29tbWFuZEtleXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzRGVmYXVsdENvbW1hbmQpKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGFyZ3VtZW50OiAlcycsICdVbmtub3duIGFyZ3VtZW50czogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkNvbW1hbmRzID0gZnVuY3Rpb24gdW5rbm93bkNvbW1hbmRzKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJncy5nZXRDb21tYW5kSW5zdGFuY2UoKS5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fCBjb21tYW5kS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGNvbW1hbmQ6ICVzJywgJ1Vua25vd24gY29tbWFuZHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24uam9pbignLCAnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3ID0gZnVuY3Rpb24gaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGlhc2VzLCBrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzO1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgW2tleSwgLi4uYWxpYXNlc1trZXldXSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3QWxpYXNlcywgYSkgfHxcbiAgICAgICAgICAgICAgICAhbmV3QWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBjaGVja3MgPSBbXTtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gY2hlY2soZiwgZ2xvYmFsKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGYsXG4gICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5jdXN0b21DaGVja3MgPSBmdW5jdGlvbiBjdXN0b21DaGVja3MoYXJndiwgYWxpYXNlcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjsgKGYgPSBjaGVja3NbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZnVuYyA9IGYuZnVuYztcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyciwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGZ1bmMudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKHJlc3VsdC50b1N0cmluZygpLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgaW1wbGllZCA9IHt9O1xuICAgIHNlbGYuaW1wbGllcyA9IGZ1bmN0aW9uIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fG51bWJlcnxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbXBsaWVzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFpbXBsaWVkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmltcGxpZXMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh2YWx1ZSwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0SW1wbGllZCA9IGZ1bmN0aW9uIGdldEltcGxpZWQoKSB7XG4gICAgICAgIHJldHVybiBpbXBsaWVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24ga2V5RXhpc3RzKGFyZ3YsIHZhbCkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICAgICAgdmFsID0gaXNOYU4obnVtKSA/IHZhbCA6IG51bTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWwgPSBhcmd2Ll8ubGVuZ3RoID49IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwubWF0Y2goL14tLW5vLS4rLykpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5tYXRjaCgvXi0tbm8tKC4rKS8pWzFdO1xuICAgICAgICAgICAgdmFsID0gIWFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBsZXZlbnNodGVpbihjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoYyA9PiBjLmdsb2JhbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNoZWNrcyxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjaGVja3MsIGNvbmZsaWN0aW5nIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5cbmxldCBzaGltJDE7XG5mdW5jdGlvbiBZYXJnc1dpdGhTaGltKF9zaGltKSB7XG4gICAgc2hpbSQxID0gX3NoaW07XG4gICAgcmV0dXJuIFlhcmdzO1xufVxuZnVuY3Rpb24gWWFyZ3MocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkID0gc2hpbSQxLnByb2Nlc3MuY3dkKCksIHBhcmVudFJlcXVpcmUpIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGNvbW1hbmQkMTtcbiAgICBsZXQgY29tcGxldGlvbiQxID0gbnVsbDtcbiAgICBsZXQgZ3JvdXBzID0ge307XG4gICAgY29uc3QgZ2xvYmFsTWlkZGxld2FyZSA9IFtdO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBjb25zdCBwcmVzZXJ2ZWRHcm91cHMgPSB7fTtcbiAgICBsZXQgdXNhZ2UkMTtcbiAgICBsZXQgdmFsaWRhdGlvbiQxO1xuICAgIGxldCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IG51bGw7XG4gICAgY29uc3QgeTE4biA9IHNoaW0kMS55MThuO1xuICAgIHNlbGYubWlkZGxld2FyZSA9IGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIHNlbGYpO1xuICAgIHNlbGYuc2NyaXB0TmFtZSA9IGZ1bmN0aW9uIChzY3JpcHROYW1lKSB7XG4gICAgICAgIHNlbGYuY3VzdG9tU2NyaXB0TmFtZSA9IHRydWU7XG4gICAgICAgIHNlbGYuJDAgPSBzY3JpcHROYW1lO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZWZhdWx0JDA7XG4gICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3Qoc2hpbSQxLnByb2Nlc3MuYXJndigpWzBdKSkge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMSwgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMCwgMSk7XG4gICAgfVxuICAgIHNlbGYuJDAgPSBkZWZhdWx0JDBcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHJlYmFzZShjd2QsIHgpO1xuICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIGlmIChzaGltJDEuZ2V0RW52KCdfJykgJiYgc2hpbSQxLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IHNoaW0kMS5nZXRFbnYoJ18nKSkge1xuICAgICAgICBzZWxmLiQwID0gc2hpbSQxXG4gICAgICAgICAgICAuZ2V0RW52KCdfJylcbiAgICAgICAgICAgIC5yZXBsYWNlKGAke3NoaW0kMS5wYXRoLmRpcm5hbWUoc2hpbSQxLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHsgcmVzZXRzOiAtMSwgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdLCBmaWxlczogW10gfTtcbiAgICBzZWxmLmdldENvbnRleHQgPSAoKSA9PiBjb250ZXh0O1xuICAgIGxldCBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICBsZXQgZXhpdEVycm9yID0gbnVsbDtcbiAgICBzZWxmLmV4aXQgPSAoY29kZSwgZXJyKSA9PiB7XG4gICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgIGV4aXRFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgc2hpbSQxLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIGxldCBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgc2VsZi5jb21wbGV0aW9uID0gZnVuY3Rpb24gKGNtZCwgZGVzYywgZm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ3xib29sZWFufGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2NtZCwgZGVzYywgZm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbiA9IGRlc2M7XG4gICAgICAgICAgICBkZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRpb25Db21tYW5kID0gY21kIHx8IGNvbXBsZXRpb25Db21tYW5kIHx8ICdjb21wbGV0aW9uJztcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmNvbW1hbmQoY29tcGxldGlvbkNvbW1hbmQsIGRlc2MpO1xuICAgICAgICBpZiAoZm4pXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgc2VsZi5yZXNldE9wdGlvbnMgPSBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXRPcHRpb25zKGFsaWFzZXMgPSB7fSkge1xuICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdG1wT3B0aW9ucyA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbCA/IG9wdGlvbnMubG9jYWwgOiBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA/IG9wdGlvbnMuY29uZmlnT2JqZWN0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXNlcnZlZEdyb3VwcywgT2JqZWN0LmtleXMoZ3JvdXBzKS5yZWR1Y2UoKGFjYywgZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGdyb3VwcyA9IHt9O1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnY29lcmNlJyxcbiAgICAgICAgICAgICdkZXByZWNhdGVkT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGFycmF5T3B0aW9ucy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IChvcHRpb25zW2tdIHx8IFtdKS5maWx0ZXIoKGspID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RPcHRpb25zLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSBvYmpGaWx0ZXIob3B0aW9uc1trXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgb3B0aW9ucyA9IHRtcE9wdGlvbnM7XG4gICAgICAgIHVzYWdlJDEgPSB1c2FnZSQxID8gdXNhZ2UkMS5yZXNldChsb2NhbExvb2t1cCkgOiB1c2FnZShzZWxmLCB5MThuLCBzaGltJDEpO1xuICAgICAgICB2YWxpZGF0aW9uJDEgPSB2YWxpZGF0aW9uJDFcbiAgICAgICAgICAgID8gdmFsaWRhdGlvbiQxLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiB2YWxpZGF0aW9uKHNlbGYsIHVzYWdlJDEsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIGNvbW1hbmQkMSA9IGNvbW1hbmQkMVxuICAgICAgICAgICAgPyBjb21tYW5kJDEucmVzZXQoKVxuICAgICAgICAgICAgOiBjb21tYW5kKHNlbGYsIHVzYWdlJDEsIHZhbGlkYXRpb24kMSwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSQxKTtcbiAgICAgICAgaWYgKCFjb21wbGV0aW9uJDEpXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEgPSBjb21wbGV0aW9uKHNlbGYsIHVzYWdlJDEsIGNvbW1hbmQkMSwgc2hpbSQxKTtcbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBudWxsO1xuICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZXhpdEVycm9yID0gbnVsbDtcbiAgICAgICAgaGFzT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHNlbGYucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5yZXNldE9wdGlvbnMoKTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IG9wdGlvbnMuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UkMS5mcmVlemUoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEuZnJlZXplKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSQxKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgICh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cyxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgZXhpdEVycm9yLFxuICAgICAgICAgICAgaGFzT3V0cHV0LFxuICAgICAgICAgICAgcGFyc2VkOiBzZWxmLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdCxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gY29uZmlnT2JqZWN0cztcbiAgICAgICAgdXNhZ2UkMS51bmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEudW5mcmVlemUoKTtcbiAgICAgICAgY29tbWFuZCQxLnVuZnJlZXplKCk7XG4gICAgfVxuICAgIHNlbGYuYm9vbGVhbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2Jvb2xlYW4nLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFycmF5ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYXJyYXknLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm51bWJlciA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ251bWJlcicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubm9ybWFsaXplID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbm9ybWFsaXplJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb3VudCA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2NvdW50Jywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdzdHJpbmcnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVzQXJnID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZ3xvYmplY3Q+IFtudW1iZXJdJywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYucmVxdWlyZXNBcmcsICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuc2tpcFZhbGlkYXRpb24gPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludEFycmF5KHR5cGUsIGtleXMpIHtcbiAgICAgICAga2V5cyA9IFtdLmNvbmNhdChrZXlzKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxmLm5hcmdzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3R8YXJyYXk+IFtudW1iZXJdJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYubmFyZ3MsICduYXJnJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jaG9pY2VzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuY2hvaWNlcywgJ2Nob2ljZXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFsaWFzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuYWxpYXMsICdhbGlhcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVmYXVsdCA9IHNlbGYuZGVmYXVsdHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbKl0gW3N0cmluZ10nLCBba2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IHVzYWdlJDEuZnVuY3Rpb25EZXNjcmlwdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZWZhdWx0LCAnZGVmYXVsdCcsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiAoa2V5LCBkZXNjKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXksIGRlc2NdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc2V0S2V5KGtleSwgdHJ1ZSk7XG4gICAgICAgIHVzYWdlJDEuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBzZXRLZXkoa2V5LCBzZXQpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNldEtleSwgJ2tleScsIGtleSwgc2V0KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZW1hbmRPcHRpb24sICdkZW1hbmRlZE9wdGlvbnMnLCBrZXlzLCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgc2VsZi5kZW1hbmRPcHRpb24gPSBkZW1hbmRPcHRpb247XG4gICAgc2VsZi5jb2VyY2UgPSBmdW5jdGlvbiAoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYuY29lcmNlLCAnY29lcmNlJywga2V5cywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnNbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gKG9wdGlvbnNbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgc2FuaXRpemVLZXkoa2V5KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhbml0aXplS2V5KGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdChvcHRpb25LZXkpIHtcbiAgICAgICAgb2JqZWN0S2V5cyhvcHRpb25zKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gb3B0aW9uc1toaW50S2V5XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKH5oaW50LmluZGV4T2Yob3B0aW9uS2V5KSlcbiAgICAgICAgICAgICAgICAgICAgaGludC5zcGxpY2UoaGludC5pbmRleE9mKG9wdGlvbktleSksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhpbnRbb3B0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSB1c2FnZSQxLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIHNlbGYuY29uZmlnID0gZnVuY3Rpb24gY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdba10gPSBwYXJzZUZuIHx8IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZXhhbXBsZSA9IGZ1bmN0aW9uIChjbWQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgY21kLmZvckVhY2goZXhhbXBsZVBhcmFtcyA9PiBzZWxmLmV4YW1wbGUoLi4uZXhhbXBsZVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXNhZ2UkMS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb21tYW5kID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbW1hbmQkMS5hZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmREaXIgPSBmdW5jdGlvbiAoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBwYXJlbnRSZXF1aXJlIHx8IHNoaW0kMS5yZXF1aXJlO1xuICAgICAgICBjb21tYW5kJDEuYWRkRGlyZWN0b3J5KGRpciwgc2VsZi5nZXRDb250ZXh0KCksIHJlcSwgc2hpbSQxLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmQgPSBzZWxmLnJlcXVpcmVkID0gc2VsZi5yZXF1aXJlID0gZnVuY3Rpb24gZGVtYW5kKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1heCkpIHtcbiAgICAgICAgICAgIG1heC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICBzZWxmLmRlbWFuZENvbW1hbmQoa2V5cywgbWF4LCBtc2csIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnID09PSB0cnVlIHx8IHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmRDb21tYW5kID0gZnVuY3Rpb24gZGVtYW5kQ29tbWFuZChtaW4gPSAxLCBtYXgsIG1pbk1zZywgbWF4TXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tudW1iZXJdIFtudW1iZXJ8c3RyaW5nXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXScsIFttaW4sIG1heCwgbWluTXNnLCBtYXhNc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtaW5Nc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmdsb2JhbCgnXycsIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzLl8gPSB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBtaW5Nc2csXG4gICAgICAgICAgICBtYXhNc2csXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZW1hbmRlZE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkQ29tbWFuZHMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH07XG4gICAgc2VsZi5kZXByZWNhdGVPcHRpb24gPSBmdW5jdGlvbiBkZXByZWNhdGVPcHRpb24ob3B0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmd8Ym9vbGVhbl0nLCBbb3B0aW9uLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXByZWNhdGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlcHJlY2F0ZWRPcHRpb25zO1xuICAgIH07XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtudW1iZXJ8c3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29uZmxpY3RzID0gZnVuY3Rpb24gKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmNvbmZsaWN0cyhrZXkxLCBrZXkyKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVzYWdlID0gZnVuY3Rpb24gKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICgobXNnIHx8ICcnKS5tYXRjaCgvXlxcJDAoIHwkKS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZChtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy51c2FnZSgpIGRlc2NyaXB0aW9uIG11c3Qgc3RhcnQgd2l0aCAkMCBpZiBiZWluZyB1c2VkIGFzIGFsaWFzIGZvciAuY29tbWFuZCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLnVzYWdlKG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5lcGlsb2d1ZSA9IHNlbGYuZXBpbG9nID0gZnVuY3Rpb24gKG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFttc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5lcGlsb2cobXNnKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5mYWlsRm4oZik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5vbkZpbmlzaENvbW1hbmQgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQgPSBmO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0SGFuZGxlckZpbmlzaENvbW1hbmQgPSAoKSA9PiBoYW5kbGVyRmluaXNoQ29tbWFuZDtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gKGYsIF9nbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgX2dsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY2hlY2soZiwgX2dsb2JhbCAhPT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2xvYmFsID0gZnVuY3Rpb24gZ2xvYmFsKGdsb2JhbHMsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbYm9vbGVhbl0nLCBbZ2xvYmFscywgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGdsb2JhbHMgPSBbXS5jb25jYXQoZ2xvYmFscyk7XG4gICAgICAgIGlmIChnbG9iYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NhbC5pbmRleE9mKGcpID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnBrZ0NvbmYgPSBmdW5jdGlvbiBwa2dDb25mKGtleSwgcm9vdFBhdGgpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ10nLCBba2V5LCByb290UGF0aF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBsZXQgY29uZiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBrZ1VwKHJvb3RQYXRoIHx8IGN3ZCk7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25mID0gYXBwbHlFeHRlbmRzKG9ialtrZXldLCByb290UGF0aCB8fCBjd2QsIHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBzaGltJDEpO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gKG9wdGlvbnMuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGNvbmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgcGtncyA9IHt9O1xuICAgIGZ1bmN0aW9uIHBrZ1VwKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAocGtnc1tucGF0aF0pXG4gICAgICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzdGFydERpciA9IHJvb3RQYXRoIHx8IHNoaW0kMS5tYWluRmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAoIXJvb3RQYXRoICYmIHNoaW0kMS5wYXRoLmV4dG5hbWUoc3RhcnREaXIpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnREaXIgPSBzaGltJDEucGF0aC5kaXJuYW1lKHN0YXJ0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gc2hpbSQxLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShzaGltJDEucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX25vb3ApIHsgfVxuICAgICAgICBwa2dzW25wYXRoXSA9IG9iaiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHBrZ3NbbnBhdGhdO1xuICAgIH1cbiAgICBsZXQgcGFyc2VGbiA9IG51bGw7XG4gICAgbGV0IHBhcnNlQ29udGV4dCA9IG51bGw7XG4gICAgc2VsZi5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZnJlZXplKCk7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3YgPSBzZWxmLl9wYXJzZUFyZ3MocHJvY2Vzc0FyZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gc2VsZi5wYXJzZWQ7XG4gICAgICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCA9IHNob3J0Q2lyY3VpdDtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IF9wYXJzZUZuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG9ydENpcmN1aXQpXG4gICAgICAgICAgICBwcm9jZXNzQXJncyA9IGFyZ3M7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgZXhpdFByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2VsZi5fcGFyc2VBcmdzKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29tcGxldGlvbiQxLnNldFBhcnNlZChzZWxmLnBhcnNlZCk7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgcGFyc2VGbihleGl0RXJyb3IsIHBhcnNlZCwgb3V0cHV0KTtcbiAgICAgICAgdW5mcmVlemUoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9O1xuICAgIHNlbGYuX2dldFBhcnNlQ29udGV4dCA9ICgpID0+IHBhcnNlQ29udGV4dCB8fCB7fTtcbiAgICBzZWxmLl9oYXNQYXJzZUNhbGxiYWNrID0gKCkgPT4gISFwYXJzZUZuO1xuICAgIHNlbGYub3B0aW9uID0gc2VsZi5vcHRpb25zID0gZnVuY3Rpb24gb3B0aW9uKGtleSwgb3B0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbb2JqZWN0XScsIFtrZXksIG9wdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgc2VsZi5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlbGYuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBvcHQuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5za2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2tpcFZhbGlkYXRpb24oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBvcHQuZGVzY3JpYmUgfHwgb3B0LmRlc2NyaXB0aW9uIHx8IG9wdC5kZXNjO1xuICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICAgICAgaWYgKG9wdC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhpZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQucmVxdWlyZXNBcmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlcXVpcmVzQXJnKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldE9wdGlvbnMgPSAoKSA9PiBvcHRpb25zO1xuICAgIHNlbGYucG9zaXRpb25hbCA9IGZ1bmN0aW9uIChrZXksIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gPG9iamVjdD4nLCBba2V5LCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChjb250ZXh0LnJlc2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIi5wb3NpdGlvbmFsKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGluIGEgY29tbWFuZCdzIGJ1aWxkZXIgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkT3B0cyA9IFtcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2ltcGxpZXMnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnY29uZmxpY3RzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgJ2Rlc2NyaWJlJyxcbiAgICAgICAgICAgICdkZXNjJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICBdO1xuICAgICAgICBvcHRzID0gb2JqRmlsdGVyKG9wdHMsIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBsZXQgYWNjZXB0ID0gc3VwcG9ydGVkT3B0cy5pbmRleE9mKGspICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHYpID09PSAtMSlcbiAgICAgICAgICAgICAgICBhY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IGNvbnRleHQuZnVsbENvbW1hbmRzW2NvbnRleHQuZnVsbENvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSBmdWxsQ29tbWFuZFxuICAgICAgICAgICAgPyBjb21tYW5kJDEuY21kVG9QYXJzZU9wdGlvbnMoZnVsbENvbW1hbmQpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICBvYmplY3RLZXlzKHBhcnNlT3B0aW9ucykuZm9yRWFjaChwayA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZU9wdGlvbiA9IHBhcnNlT3B0aW9uc1twa107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZU9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb24uaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uW2tleV0gJiYgIShwayBpbiBvcHRzKSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSBwYXJzZU9wdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ncm91cChrZXksIHVzYWdlJDEuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfTtcbiAgICBzZWxmLmdyb3VwID0gZnVuY3Rpb24gZ3JvdXAob3B0cywgZ3JvdXBOYW1lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IDxzdHJpbmc+JywgW29wdHMsIGdyb3VwTmFtZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdIHx8IGdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICBpZiAocHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0ge307XG4gICAgICAgIGdyb3Vwc1tncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0R3JvdXBzID0gKCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZ3JvdXBzLCBwcmVzZXJ2ZWRHcm91cHMpO1xuICAgIHNlbGYuZW52ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dJywgW3ByZWZpeF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAocHJlZml4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0aW9ucy5lbnZQcmVmaXggPSBwcmVmaXggfHwgJyc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi53cmFwID0gZnVuY3Rpb24gKGNvbHMpIHtcbiAgICAgICAgYXJnc2VydCgnPG51bWJlcnxudWxsfHVuZGVmaW5lZD4nLCBbY29sc10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHN0cmljdCA9IGZhbHNlO1xuICAgIHNlbGYuc3RyaWN0ID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0ID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3QgPSAoKSA9PiBzdHJpY3Q7XG4gICAgbGV0IHN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RDb21tYW5kcyA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHN0cmljdENvbW1hbmRzID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RDb21tYW5kcyA9ICgpID0+IHN0cmljdENvbW1hbmRzO1xuICAgIGxldCBzdHJpY3RPcHRpb25zID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RPcHRpb25zID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0T3B0aW9ucyA9IGVuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0U3RyaWN0T3B0aW9ucyA9ICgpID0+IHN0cmljdE9wdGlvbnM7XG4gICAgbGV0IHBhcnNlckNvbmZpZyA9IHt9O1xuICAgIHNlbGYucGFyc2VyQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlckNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwYXJzZXJDb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uID0gKCkgPT4gcGFyc2VyQ29uZmlnO1xuICAgIHNlbGYuc2hvd0hlbHAgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFzZWxmLnBhcnNlZClcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXNldHMrKztcbiAgICAgICAgICAgIGNvbW1hbmQkMS5ydW5EZWZhdWx0QnVpbGRlck9uKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uT3B0ID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSBmdW5jdGlvbiB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodmVyc2lvbk9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QodmVyc2lvbk9wdCk7XG4gICAgICAgICAgICB1c2FnZSQxLnZlcnNpb24odW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHZlcnNpb25PcHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2ZXIgPSBndWVzc1ZlcnNpb24oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmVyc2lvbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIG1zZyA9IG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyB2ZXJzaW9uIG51bWJlcicpO1xuICAgICAgICB1c2FnZSQxLnZlcnNpb24odmVyIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIHNlbGYuYm9vbGVhbih2ZXJzaW9uT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZSh2ZXJzaW9uT3B0LCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzVmVyc2lvbigpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAoKTtcbiAgICAgICAgcmV0dXJuIG9iai52ZXJzaW9uIHx8ICd1bmtub3duJztcbiAgICB9XG4gICAgbGV0IGhlbHBPcHQgPSBudWxsO1xuICAgIHNlbGYuYWRkSGVscE9wdCA9IHNlbGYuaGVscCA9IGZ1bmN0aW9uIGFkZEhlbHBPcHQob3B0LCBtc2cpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhlbHBPcHQgPSAnaGVscCc7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KGhlbHBPcHQpO1xuICAgICAgICAgICAgaGVscE9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGhlbHBPcHQgPSB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRIZWxwT3B0O1xuICAgICAgICBzZWxmLmJvb2xlYW4oaGVscE9wdCk7XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoaGVscE9wdCwgbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IGhlbHAnKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFNob3dIaWRkZW5PcHQgPSAnc2hvdy1oaWRkZW4nO1xuICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IGRlZmF1bHRTaG93SGlkZGVuT3B0O1xuICAgIHNlbGYuYWRkU2hvd0hpZGRlbk9wdCA9IHNlbGYuc2hvd0hpZGRlbiA9IGZ1bmN0aW9uIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvd0hpZGRlbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGlkZGVuIG9wdGlvbnMnKSk7XG4gICAgICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5oaWRlID0gZnVuY3Rpb24gaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuaGlkZGVuT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGV4aXRQcm9jZXNzID0gdHJ1ZTtcbiAgICBzZWxmLmV4aXRQcm9jZXNzID0gZnVuY3Rpb24gKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGV4aXRQcm9jZXNzID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldEV4aXRQcm9jZXNzID0gKCkgPT4gZXhpdFByb2Nlc3M7XG4gICAgc2VsZi5zaG93Q29tcGxldGlvblNjcmlwdCA9IGZ1bmN0aW9uICgkMCwgY21kKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmddJywgWyQwLCBjbWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgJDAgPSAkMCB8fCBzZWxmLiQwO1xuICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uJDEuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21wbGV0aW9uID0gZnVuY3Rpb24gKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiA8ZnVuY3Rpb24+JywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcGxldGlvbiQxLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgfTtcbiAgICBzZWxmLmxvY2FsZSA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10nLCBbbG9jYWxlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICghbG9jYWxlKSB7XG4gICAgICAgICAgICBndWVzc0xvY2FsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHkxOG4uZ2V0TG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0TG9jYWxlID0gZmFsc2U7XG4gICAgICAgIHkxOG4uc2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi51cGRhdGVTdHJpbmdzID0gc2VsZi51cGRhdGVMb2NhbGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZGV0ZWN0TG9jYWxlID0gdHJ1ZTtcbiAgICBzZWxmLmRldGVjdExvY2FsZSA9IGZ1bmN0aW9uIChkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBkZXRlY3Q7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXRlY3RMb2NhbGUgPSAoKSA9PiBkZXRlY3RMb2NhbGU7XG4gICAgY29uc3QgX2xvZ2dlciA9IHtcbiAgICAgICAgbG9nKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5faGFzUGFyc2VDYWxsYmFjaygpKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xcbic7XG4gICAgICAgICAgICBvdXRwdXQgKz0gYXJncy5qb2luKCcgJyk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBzZWxmLl9nZXRMb2dnZXJJbnN0YW5jZSA9ICgpID0+IF9sb2dnZXI7XG4gICAgc2VsZi5faGFzT3V0cHV0ID0gKCkgPT4gaGFzT3V0cHV0O1xuICAgIHNlbGYuX3NldEhhc091dHB1dCA9ICgpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGxldCByZWNvbW1lbmRDb21tYW5kcztcbiAgICBzZWxmLnJlY29tbWVuZENvbW1hbmRzID0gZnVuY3Rpb24gKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICByZWNvbW1lbmRDb21tYW5kcyA9IHJlY29tbWVuZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlSW5zdGFuY2UgPSAoKSA9PiB1c2FnZSQxO1xuICAgIHNlbGYuZ2V0VmFsaWRhdGlvbkluc3RhbmNlID0gKCkgPT4gdmFsaWRhdGlvbiQxO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEluc3RhbmNlID0gKCkgPT4gY29tbWFuZCQxO1xuICAgIHNlbGYudGVybWluYWxXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBzaGltJDEucHJvY2Vzcy5zdGRDb2x1bW5zO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICdhcmd2Jywge1xuICAgICAgICBnZXQ6ICgpID0+IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgc2VsZi5fcGFyc2VBcmdzID0gZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX2NhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFfY2FsbGVkRnJvbUNvbW1hbmQ7XG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IHByb2Nlc3NBcmdzO1xuICAgICAgICBvcHRpb25zLl9fID0geTE4bi5fXztcbiAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbSQxLlBhcnNlci5kZXRhaWxlZChhcmdzLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBPYmplY3QuYXNzaWduKHsgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IGZhbHNlIH0sIGNvbmZpZyksXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgaWYgKHBhcnNlQ29udGV4dClcbiAgICAgICAgICAgIGFyZ3YgPSBPYmplY3QuYXNzaWduKHt9LCBhcmd2LCBwYXJzZUNvbnRleHQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGFyZ3YuJDAgPSBzZWxmLiQwO1xuICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICBpZiAoc2hvcnRDaXJjdWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWxwT3B0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbaGVscE9wdF1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhbGlhc2VzW2hlbHBPcHRdIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5sZW5ndGggPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAofmhlbHBDbWRzLmluZGV4T2YoJycgKyBhcmd2Ll9bYXJndi5fLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3ZbaGVscE9wdF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJLZXlzID0gY29tbWFuZCQxLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSBjb21wbGV0aW9uJDEuY29tcGxldGlvbktleSBpbiBhcmd2O1xuICAgICAgICAgICAgY29uc3Qgc2tpcFJlY29tbWVuZGF0aW9uID0gYXJndltoZWxwT3B0XSB8fCByZXF1ZXN0Q29tcGxldGlvbnM7XG4gICAgICAgICAgICBjb25zdCBza2lwRGVmYXVsdENvbW1hbmQgPSBza2lwUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICAgICAgICAoaGFuZGxlcktleXMubGVuZ3RoID4gMSB8fCBoYW5kbGVyS2V5c1swXSAhPT0gJyQwJyk7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0VW5rbm93bkNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tYW5kSW5kZXggfHwgMCwgY21kOyBhcmd2Ll9baV0gIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBTdHJpbmcoYXJndi5fW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+aGFuZGxlcktleXMuaW5kZXhPZihjbWQpICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChjbWQsIHNlbGYsIHBhcnNlZCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RVbmtub3duQ29tbWFuZCAmJiBjbWQgIT09IGNvbXBsZXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCQxLmhhc0RlZmF1bHRDb21tYW5kKCkgJiYgIXNraXBEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29tbWVuZENvbW1hbmRzICYmIGZpcnN0VW5rbm93bkNvbW1hbmQgJiYgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGlvbkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgfmFyZ3YuXy5pbmRleE9mKGNvbXBsZXRpb25Db21tYW5kKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uQXJncyA9IGFyZ3Muc2xpY2UoYXJncy5pbmRleE9mKGAtLSR7Y29tcGxldGlvbiQxLmNvbXBsZXRpb25LZXl9YCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgIXBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoZWxwT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93SGVscCgnbG9nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSB2ZXJzaW9uT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UkMS5zaG93VmVyc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIG9wdGlvbnMuc2tpcFZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gT2JqZWN0LmtleXMoYXJndikuc29tZShrZXkgPT4gb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywge30sIHBhcnNlZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgdXNhZ2UkMS5mYWlsKGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgIH07XG4gICAgc2VsZi5fcG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBjYWxsZWRGcm9tQ29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmICghcG9wdWxhdGVEb3VibGVEYXNoKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fY29weURvdWJsZURhc2goYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSB8fFxuICAgICAgICAgICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZVBvc2l0aW9uYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fcGFyc2VQb3NpdGlvbmFsTnVtYmVycyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX2NvcHlEb3VibGVEYXNoID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfTtcbiAgICBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddIDogYXJndi5fO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyAoYXJnID0gYXJnc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpbSQxLlBhcnNlci5sb29rc0xpa2VOdW1iZXIoYXJnKSAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHthcmd9YCkpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBOdW1iZXIoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3J1blZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5WYWxpZGF0aW9uKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHBhcnNlRXJyb3JzLCBpc0RlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHBhcnNlRXJyb3JzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEucmVxdWlyZWRBcmd1bWVudHMoYXJndik7XG4gICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyaWN0Q29tbWFuZHMpIHtcbiAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gdmFsaWRhdGlvbiQxLnVua25vd25Db21tYW5kcyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmICFmYWlsZWRTdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RyaWN0T3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywge30sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGlvbiQxLmN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmxpbWl0ZWRDaG9pY2VzKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuaW1wbGljYXRpb25zKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RpbmcoYXJndik7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBndWVzc0xvY2FsZSgpIHtcbiAgICAgICAgaWYgKCFkZXRlY3RMb2NhbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHNoaW0kMS5nZXRFbnYoJ0xDX0FMTCcpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQ19NRVNTQUdFUycpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkdVQUdFJykgfHxcbiAgICAgICAgICAgICdlbl9VUyc7XG4gICAgICAgIHNlbGYubG9jYWxlKGxvY2FsZS5yZXBsYWNlKC9bLjpdLiovLCAnJykpO1xuICAgIH1cbiAgICBzZWxmLmhlbHAoKTtcbiAgICBzZWxmLnZlcnNpb24oKTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmNvbnN0IHJlYmFzZSA9IChiYXNlLCBkaXIpID0+IHNoaW0kMS5wYXRoLnJlbGF0aXZlKGJhc2UsIGRpcik7XG5mdW5jdGlvbiBpc1lhcmdzSW5zdGFuY2UoeSkge1xuICAgIHJldHVybiAhIXkgJiYgdHlwZW9mIHkuX3BhcnNlQXJncyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9hLCBfYjtcbmNvbnN0IHsgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHkxOG4gPSByZXF1aXJlKCd5MThuJyk7XG5jb25zdCBQYXJzZXIgPSByZXF1aXJlKCd5YXJncy1wYXJzZXInKTtcbnZhciBjanNQbGF0Zm9ybVNoaW0gPSB7XG4gICAgYXNzZXJ0OiB7XG4gICAgICAgIG5vdFN0cmljdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gICAgICAgIHN0cmljdEVxdWFsOiBhc3NlcnQuc3RyaWN0RXF1YWwsXG4gICAgfSxcbiAgICBjbGl1aTogcmVxdWlyZSgnY2xpdWknKSxcbiAgICBmaW5kVXA6IHJlcXVpcmUoJ2VzY2FsYWRlL3N5bmMnKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG4gICAgfSxcbiAgICBnZXRDYWxsZXJGaWxlOiByZXF1aXJlKCdnZXQtY2FsbGVyLWZpbGUnKSxcbiAgICBnZXRQcm9jZXNzQXJndkJpbjogZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gICAgaW5zcGVjdCxcbiAgICBtYWluRmlsZW5hbWU6IChfYiA9IChfYSA9IHJlcXVpcmUgPT09IG51bGwgfHwgcmVxdWlyZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWlyZS5tYWluKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZW5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuY3dkKCksXG4gICAgUGFyc2VyLFxuICAgIHBhdGg6IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBwcm9jZXNzOiB7XG4gICAgICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICAgICAgZXhlY1BhdGg6ICgpID0+IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgIGV4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRUaWNrOiBwcm9jZXNzLm5leHRUaWNrLFxuICAgICAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1uc1xuICAgICAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gICAgcmVhZEZpbGVTeW5jLFxuICAgIHJlcXVpcmU6IHJlcXVpcmUsXG4gICAgcmVxdWlyZURpcmVjdG9yeTogcmVxdWlyZSgncmVxdWlyZS1kaXJlY3RvcnknKSxcbiAgICBzdHJpbmdXaWR0aDogcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyksXG4gICAgeTE4bjogeTE4bih7XG4gICAgICAgIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9sb2NhbGVzJyksXG4gICAgICAgIHVwZGF0ZUZpbGVzOiBmYWxzZSxcbiAgICB9KSxcbn07XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gcHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OXG4gICAgPyBOdW1iZXIocHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA6IDEwO1xuaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9uKSB7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIocHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC92KFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3Mgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBQYXJzZXIkMSA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xuY29uc3QgWWFyZ3MkMSA9IFlhcmdzV2l0aFNoaW0oY2pzUGxhdGZvcm1TaGltKTtcbnZhciBjanMgPSB7XG4gICAgYXBwbHlFeHRlbmRzLFxuICAgIGNqc1BsYXRmb3JtU2hpbSxcbiAgICBZYXJnczogWWFyZ3MkMSxcbiAgICBhcmdzZXJ0LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5LFxuICAgIGlzUHJvbWlzZSxcbiAgICBvYmpGaWx0ZXIsXG4gICAgcGFyc2VDb21tYW5kLFxuICAgIFBhcnNlcjogUGFyc2VyJDEsXG4gICAgcHJvY2Vzc0FyZ3YsXG4gICAgcmViYXNlLFxuICAgIFlFcnJvcixcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2pzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGNsYXNzaWMgc2luZ2xldG9uIHlhcmdzIEFQSSwgdG8gdXNlIHlhcmdzXG4vLyB3aXRob3V0IHJ1bm5pbmcgYXMgYSBzaW5nbGV0b24gZG86XG4vLyByZXF1aXJlKCd5YXJncy95YXJncycpKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbmNvbnN0IHtZYXJncywgcHJvY2Vzc0FyZ3Z9ID0gcmVxdWlyZSgnLi9idWlsZC9pbmRleC5janMnKTtcblxuQXJndihwcm9jZXNzQXJndi5oaWRlQmluKHByb2Nlc3MuYXJndikpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFyZ3Y7XG5cbmZ1bmN0aW9uIEFyZ3YocHJvY2Vzc0FyZ3MsIGN3ZCkge1xuICBjb25zdCBhcmd2ID0gWWFyZ3MocHJvY2Vzc0FyZ3MsIGN3ZCwgcmVxdWlyZSk7XG4gIHNpbmdsZXRvbmlmeShhcmd2KTtcbiAgcmV0dXJuIGFyZ3Y7XG59XG5cbi8qICBIYWNrIGFuIGluc3RhbmNlIG9mIEFyZ3Ygd2l0aCBwcm9jZXNzLmFyZ3YgaW50byBBcmd2XG4gICAgc28gcGVvcGxlIGNhbiBkb1xuICAgIHJlcXVpcmUoJ3lhcmdzJykoWyctLWJlZWJsZT0xJywnLXonLCd6aXp6bGUnXSkuYXJndlxuICAgIHRvIHBhcnNlIGEgbGlzdCBvZiBhcmdzIGFuZFxuICAgIHJlcXVpcmUoJ3lhcmdzJykuYXJndlxuICAgIHRvIGdldCBhIHBhcnNlZCB2ZXJzaW9uIG9mIHByb2Nlc3MuYXJndi5cbiovXG5mdW5jdGlvbiBzaW5nbGV0b25pZnkoaW5zdCkge1xuICBPYmplY3Qua2V5cyhpbnN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2FyZ3YnKSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oa2V5LCBpbnN0Ll9fbG9va3VwR2V0dGVyX18oa2V5KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBBcmd2W2tleV0gPSBpbnN0W2tleV0uYmluZChpbnN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCckMCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc3QuJDA7XG4gICAgICB9KTtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXygncGFyc2VkJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC5wYXJzZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEludGVncmF0aW9uVGVzdHMsIEludGVnVGVzdEluZm8sIEludGVnVGVzdCB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IHJ1blNuYXBzaG90VGVzdHMsIHJ1bkludGVncmF0aW9uVGVzdHMsIEludGVnUnVubmVyTWV0cmljcywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4vd29ya2Vycyc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvMTkyOVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2VzYnVpbGQvaXNzdWVzLzE0OTJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCB5YXJncyA9IHJlcXVpcmUoJ3lhcmdzJyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignbGlzdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0xpc3QgdGVzdHMgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0nIH0pXG4gICAgLm9wdGlvbignY2xlYW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ1NraXBzIHN0YWNrIGNsZWFuIHVwIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnbWF4LXdvcmtlcnMnLCB7IHR5cGU6ICdudW1iZXInLCBkZXNjOiAnVGhlIG1heCBudW1iZXIgb2Ygd29ya2VycG9vbCB3b3JrZXJzIHRvIHVzZSB3aGVuIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwnLCBkZWZhdWx0OiAxNiB9KVxuICAgIC5vcHRpb25zKCdleGNsdWRlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdSdW4gYWxsIHRlc3RzIGluIHRoZSBkaXJlY3RvcnksIGV4Y2VwdCB0aGUgc3BlY2lmaWVkIFRFU1RzJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9ucygnZnJvbS1maWxlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1JlYWQgVEVTVCBuYW1lcyBmcm9tIGEgZmlsZSAob25lIFRFU1QgcGVyIGxpbmUpJyB9KVxuICAgIC5vcHRpb24oJ2luc3BlY3QtZmFpbHVyZXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ0tlZXAgdGhlIGludGVnIHRlc3QgY2xvdWQgYXNzZW1ibHkgaWYgYSBmYWlsdXJlIG9jY3VycyBmb3IgaW5zcGVjdGlvbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdJZiB0aGlzIGlzIFwidHJ1ZVwiIHRoZW4gdGhlIHN0YWNrIHVwZGF0ZSB3b3JrZmxvdyB3aWxsIGJlIGRpc2FibGVkJyB9KVxuICAgIC5zdHJpY3QoKVxuICAgIC5hcmd2O1xuXG4gIGNvbnN0IHBvb2wgPSB3b3JrZXJwb29sLnBvb2wocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xpYi93b3JrZXJzL2V4dHJhY3QvaW5kZXguanMnKSwge1xuICAgIG1heFdvcmtlcnM6IGFyZ3ZbJ21heC13b3JrZXJzJ10sXG4gIH0pO1xuXG4gIC8vIGxpc3Qgb2YgaW50ZWdyYXRpb24gdGVzdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkXG4gIGNvbnN0IHRlc3RzVG9SdW46IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSA9IFtdO1xuICBjb25zdCB0ZXN0c0Zyb21BcmdzOiBJbnRlZ1Rlc3RbXSA9IFtdO1xuICBjb25zdCBwYXJhbGxlbFJlZ2lvbnMgPSBhcnJheUZyb21ZYXJncyhhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10pO1xuICBjb25zdCB0ZXN0UmVnaW9uczogc3RyaW5nW10gPSBwYXJhbGxlbFJlZ2lvbnMgPz8gWyd1cy1lYXN0LTEnLCAndXMtZWFzdC0yJywgJ3VzLXdlc3QtMiddO1xuICBjb25zdCBwcm9maWxlcyA9IGFycmF5RnJvbVlhcmdzKGFyZ3YucHJvZmlsZXMpO1xuICBjb25zdCBydW5VcGRhdGVPbkZhaWxlZCA9IGFyZ3ZbJ3VwZGF0ZS1vbi1mYWlsZWQnXSA/PyBmYWxzZTtcbiAgY29uc3QgZnJvbUZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ2Zyb20tZmlsZSddO1xuICBjb25zdCBleGNsdWRlOiBib29sZWFuID0gYXJndi5leGNsdWRlO1xuXG4gIGxldCBmYWlsZWRTbmFwc2hvdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGlmIChhcmd2WydtYXgtd29ya2VycyddIDwgdGVzdFJlZ2lvbnMubGVuZ3RoICogKHByb2ZpbGVzID8/IFsxXSkubGVuZ3RoKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gJXMgdGVzdHMgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGhhdmUgJXMgd29ya2Vycy4gTm90IGFsbCBvZiB5b3VyIHByb2ZpbGVzK3JlZ2lvbnMgd2lsbCBiZSB1dGlsaXplZCcsIGFyZ3YucHJvZmlsZXMgKiBhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10sIGFyZ3ZbJ21heC13b3JrZXJzJ10pO1xuICB9XG5cbiAgbGV0IHRlc3RzU3VjY2VlZGVkID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgaWYgKGFyZ3YubGlzdCkge1xuICAgICAgY29uc3QgdGVzdHMgPSBhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhhcmd2LmRpcmVjdG9yeSkuZnJvbUNsaUFyZ3MoKTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignXFxuJykgKyAnXFxuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YuXy5sZW5ndGggPiAwICYmIGZyb21GaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgbGlzdCBvZiB0ZXN0cyBjYW5ub3QgYmUgcHJvdmlkZWQgaWYgXCItLWZyb20tZmlsZVwiIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICAgID8gKGF3YWl0IGZzLnJlYWRGaWxlKGZyb21GaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSkpLnNwbGl0KCdcXG4nKS5maWx0ZXIoeCA9PiB4KVxuICAgICAgOiAoYXJndi5fLmxlbmd0aCA+IDAgPyBhcmd2Ll8gOiB1bmRlZmluZWQpOyAvLyAndW5kZWZpbmVkJyBtZWFucyBubyByZXF1ZXN0XG5cbiAgICB0ZXN0c0Zyb21BcmdzLnB1c2goLi4uKGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKHBhdGgucmVzb2x2ZShhcmd2LmRpcmVjdG9yeSkpLmZyb21DbGlBcmdzKHJlcXVlc3RlZFRlc3RzLCBleGNsdWRlKSkpO1xuXG4gICAgLy8gYWx3YXlzIHJ1biBzbmFwc2hvdCB0ZXN0cywgYnV0IGlmICctLWZvcmNlJyBpcyBwYXNzZWQgdGhlblxuICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBvbiBhbGwgZmFpbGVkIHRlc3RzLCBub3QganVzdCB0aG9zZSB0aGF0XG4gICAgLy8gZmFpbGVkIHNuYXBzaG90IHRlc3RzXG4gICAgZmFpbGVkU25hcHNob3RzID0gYXdhaXQgcnVuU25hcHNob3RUZXN0cyhwb29sLCB0ZXN0c0Zyb21BcmdzLCB7XG4gICAgICByZXRhaW46IGFyZ3ZbJ2luc3BlY3QtZmFpbHVyZXMnXSxcbiAgICAgIHZlcmJvc2U6IEJvb2xlYW4oYXJndi52ZXJib3NlKSxcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICBkZXN0cnVjdGl2ZUNoYW5nZXMucHVzaCguLi5mYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyA/PyBbXSk7XG4gICAgfVxuICAgIGlmICghYXJndi5mb3JjZSkge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLmZhaWxlZFNuYXBzaG90cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGFueSBvZiB0aGUgdGVzdCBmYWlsZWQgc25hcHNob3QgdGVzdHMsIGtlZXAgdGhvc2UgcmVzdWx0c1xuICAgICAgLy8gYW5kIG1lcmdlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlc3RzIGZyb20gYXJnc1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICB9XG5cbiAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgaWYgYC0tdXBkYXRlLW9uLWZhaWxlZGAgT1IgYC0tZm9yY2VgIGlzIHVzZWRcbiAgICBpZiAocnVuVXBkYXRlT25GYWlsZWQgfHwgYXJndi5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IHRlc3RSZWdpb25zLFxuICAgICAgICBwcm9maWxlcyxcbiAgICAgICAgY2xlYW46IGFyZ3YuY2xlYW4sXG4gICAgICAgIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddLFxuICAgICAgICB2ZXJib3NpdHk6IGFyZ3YudmVyYm9zZSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6ICFhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddLFxuICAgICAgfSk7XG4gICAgICB0ZXN0c1N1Y2NlZWRlZCA9IHN1Y2Nlc3M7XG5cblxuICAgICAgaWYgKGFyZ3YuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKGFyZ3YudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdm9pZCBwb29sLnRlcm1pbmF0ZSgpO1xuICB9XG5cbiAgaWYgKGRlc3RydWN0aXZlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoZGVzdHJ1Y3RpdmVDaGFuZ2VzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFydW5VcGRhdGVPbkZhaWxlZCkge1xuICAgICAgbWVzc2FnZSA9ICdUbyByZS1ydW4gZmFpbGVkIHRlc3RzIHJ1bjogeWFybiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKCkge1xuICBtYWluKCkudGhlbigpLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuIiwgImV4cG9ydCB7IGNsaSB9IGZyb20gJy4vY2xpJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw4Q0FBQUEsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM5QixRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNwQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxNQUNqQixrQkFBa0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ2hDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ2xCLGNBQWMsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzNCLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQ3JCLGFBQWEsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzNCLGFBQWEsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzFCLGNBQWMsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQzFCLGFBQWEsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQzFCLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUFBLE1BQ3RCLGtCQUFrQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDaEMsWUFBWSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDMUIsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQUEsTUFDdkIsUUFBUSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDcEIsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDdEIsWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDeEIsaUJBQWlCLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUM5QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxNQUN2QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixlQUFlLENBQUMsS0FBSyxHQUFHLEdBQUc7QUFBQSxNQUMzQixrQkFBa0IsQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUFBLE1BQzlCLGNBQWMsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQzFCLGNBQWMsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzNCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQ3JCLGNBQWMsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQzVCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEdBQUc7QUFBQSxNQUM3QixpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUFBLE1BQzVCLGlCQUFpQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQUEsTUFDNUIsaUJBQWlCLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUM3QixjQUFjLENBQUMsS0FBSyxHQUFHLEdBQUc7QUFBQSxNQUMxQixZQUFZLENBQUMsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUN6QixlQUFlLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUMzQixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixjQUFjLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN6QixlQUFlLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM3QixlQUFlLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFBQSxNQUMzQixXQUFXLENBQUMsS0FBSyxHQUFHLEdBQUc7QUFBQSxNQUN2QixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixRQUFRLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQSxNQUNwQixhQUFhLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUMxQixRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QixTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxNQUNuQixlQUFlLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUM1QixRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN6QixVQUFVLENBQUMsSUFBSSxHQUFHLEdBQUc7QUFBQSxNQUNyQixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixpQkFBaUIsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQy9CLGFBQWEsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLE1BQ3pCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0Isd0JBQXdCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QyxhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixlQUFlLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM3QixpQkFBaUIsQ0FBQyxJQUFJLEtBQUssR0FBRztBQUFBLE1BQzlCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsa0JBQWtCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNoQyxrQkFBa0IsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ2hDLGtCQUFrQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDaEMsZUFBZSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDN0IsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsTUFDbEIsYUFBYSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQUEsTUFDekIsU0FBUyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdkIsV0FBVyxDQUFDLEtBQUssR0FBRyxHQUFHO0FBQUEsTUFDdkIsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDcEIsb0JBQW9CLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNsQyxjQUFjLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN4QixnQkFBZ0IsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQzdCLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsa0JBQWtCLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMvQixtQkFBbUIsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ2pDLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDakMsbUJBQW1CLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUNoQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksR0FBRztBQUFBLE1BQ2hDLGdCQUFnQixDQUFDLElBQUksSUFBSSxHQUFHO0FBQUEsTUFDNUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsWUFBWSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDMUIsZUFBZSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDN0IsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDbEIsV0FBVyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDekIsU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDckIsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDMUIsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsTUFDdEIsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQUEsTUFDeEIsVUFBVSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDeEIsaUJBQWlCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMvQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixpQkFBaUIsQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQy9CLGlCQUFpQixDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDL0IsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDckIsUUFBUSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdEIsUUFBUSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDdEIsY0FBYyxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDNUIsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHO0FBQUEsTUFDdEIsaUJBQWlCLENBQUMsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUM5QixPQUFPLENBQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUNqQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMxQixlQUFlLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUMzQixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixjQUFjLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxNQUMzQixZQUFZLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFBQSxNQUN4QixZQUFZLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMxQixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN0QixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixhQUFhLENBQUMsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUMxQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUMzQixRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN0QixlQUFlLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUMzQixhQUFhLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMxQixPQUFPLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUNyQixRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNwQixXQUFXLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN6QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFBQSxNQUN0QixhQUFhLENBQUMsSUFBSSxLQUFLLEdBQUc7QUFBQSxNQUMxQixVQUFVLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN4QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixVQUFVLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQSxNQUN0QixlQUFlLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFBQSxJQUM3QjtBQUFBO0FBQUE7OztBQ3ZKQTtBQUFBLHVEQUFBQyxVQUFBQyxTQUFBO0FBRUEsUUFBTSxjQUFjO0FBTXBCLFFBQU0sa0JBQWtCLENBQUM7QUFDekIsZUFBVyxPQUFPLE9BQU8sS0FBSyxXQUFXLEdBQUc7QUFDM0Msc0JBQWdCLFlBQVksUUFBUTtBQUFBLElBQ3JDO0FBRUEsUUFBTSxVQUFVO0FBQUEsTUFDZixLQUFLLEVBQUMsVUFBVSxHQUFHLFFBQVEsTUFBSztBQUFBLE1BQ2hDLEtBQUssRUFBQyxVQUFVLEdBQUcsUUFBUSxNQUFLO0FBQUEsTUFDaEMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLE1BQUs7QUFBQSxNQUNoQyxLQUFLLEVBQUMsVUFBVSxHQUFHLFFBQVEsTUFBSztBQUFBLE1BQ2hDLE1BQU0sRUFBQyxVQUFVLEdBQUcsUUFBUSxPQUFNO0FBQUEsTUFDbEMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLE1BQUs7QUFBQSxNQUNoQyxLQUFLLEVBQUMsVUFBVSxHQUFHLFFBQVEsTUFBSztBQUFBLE1BQ2hDLEtBQUssRUFBQyxVQUFVLEdBQUcsUUFBUSxNQUFLO0FBQUEsTUFDaEMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFDO0FBQUEsTUFDbEMsU0FBUyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFDO0FBQUEsTUFDMUMsUUFBUSxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFDO0FBQUEsTUFDeEMsU0FBUyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFDO0FBQUEsTUFDMUMsS0FBSyxFQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBQztBQUFBLE1BQzFDLE9BQU8sRUFBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sT0FBTyxLQUFLLEVBQUM7QUFBQSxNQUNsRCxNQUFNLEVBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUM7QUFBQSxJQUNyQztBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUdqQixlQUFXLFNBQVMsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN6QyxVQUFJLEVBQUUsY0FBYyxRQUFRLFNBQVM7QUFDcEMsY0FBTSxJQUFJLE1BQU0sZ0NBQWdDLEtBQUs7QUFBQSxNQUN0RDtBQUVBLFVBQUksRUFBRSxZQUFZLFFBQVEsU0FBUztBQUNsQyxjQUFNLElBQUksTUFBTSxzQ0FBc0MsS0FBSztBQUFBLE1BQzVEO0FBRUEsVUFBSSxRQUFRLE9BQU8sT0FBTyxXQUFXLFFBQVEsT0FBTyxVQUFVO0FBQzdELGNBQU0sSUFBSSxNQUFNLHdDQUF3QyxLQUFLO0FBQUEsTUFDOUQ7QUFFQSxZQUFNLEVBQUMsVUFBVSxPQUFNLElBQUksUUFBUTtBQUNuQyxhQUFPLFFBQVEsT0FBTztBQUN0QixhQUFPLFFBQVEsT0FBTztBQUN0QixhQUFPLGVBQWUsUUFBUSxRQUFRLFlBQVksRUFBQyxPQUFPLFNBQVEsQ0FBQztBQUNuRSxhQUFPLGVBQWUsUUFBUSxRQUFRLFVBQVUsRUFBQyxPQUFPLE9BQU0sQ0FBQztBQUFBLElBQ2hFO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sTUFBTSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUM7QUFDNUIsWUFBTSxNQUFNLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUM1QixZQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFJO0FBQ0osVUFBSTtBQUVKLFVBQUksUUFBUSxLQUFLO0FBQ2hCLFlBQUk7QUFBQSxNQUNMLFdBQVcsTUFBTSxLQUFLO0FBQ3JCLGFBQUssSUFBSSxLQUFLO0FBQUEsTUFDZixXQUFXLE1BQU0sS0FBSztBQUNyQixZQUFJLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDbkIsV0FBVyxNQUFNLEtBQUs7QUFDckIsWUFBSSxLQUFLLElBQUksS0FBSztBQUFBLE1BQ25CO0FBRUEsVUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUc7QUFFeEIsVUFBSSxJQUFJLEdBQUc7QUFDVixhQUFLO0FBQUEsTUFDTjtBQUVBLFlBQU0sS0FBSyxNQUFNLE9BQU87QUFFeEIsVUFBSSxRQUFRLEtBQUs7QUFDaEIsWUFBSTtBQUFBLE1BQ0wsV0FBVyxLQUFLLEtBQUs7QUFDcEIsWUFBSSxTQUFTLE1BQU07QUFBQSxNQUNwQixPQUFPO0FBQ04sWUFBSSxTQUFTLElBQUksTUFBTTtBQUFBLE1BQ3hCO0FBRUEsYUFBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQzVCO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFVBQUk7QUFDSixVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFDSixVQUFJO0FBRUosWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMxQixZQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakMsWUFBTSxRQUFRLFNBQVUsR0FBRztBQUMxQixnQkFBUSxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUk7QUFBQSxNQUNqQztBQUVBLFVBQUksU0FBUyxHQUFHO0FBQ2YsWUFBSTtBQUNKLFlBQUk7QUFBQSxNQUNMLE9BQU87QUFDTixZQUFJLE9BQU87QUFDWCxlQUFPLE1BQU0sQ0FBQztBQUNkLGVBQU8sTUFBTSxDQUFDO0FBQ2QsZUFBTyxNQUFNLENBQUM7QUFFZCxZQUFJLE1BQU0sR0FBRztBQUNaLGNBQUksT0FBTztBQUFBLFFBQ1osV0FBVyxNQUFNLEdBQUc7QUFDbkIsY0FBSyxJQUFJLElBQUssT0FBTztBQUFBLFFBQ3RCLFdBQVcsTUFBTSxHQUFHO0FBQ25CLGNBQUssSUFBSSxJQUFLLE9BQU87QUFBQSxRQUN0QjtBQUVBLFlBQUksSUFBSSxHQUFHO0FBQ1YsZUFBSztBQUFBLFFBQ04sV0FBVyxJQUFJLEdBQUc7QUFDakIsZUFBSztBQUFBLFFBQ047QUFBQSxNQUNEO0FBRUEsYUFBTztBQUFBLFFBQ04sSUFBSTtBQUFBLFFBQ0osSUFBSTtBQUFBLFFBQ0osSUFBSTtBQUFBLE1BQ0w7QUFBQSxJQUNEO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJLElBQUksSUFBSTtBQUNaLFlBQU0sSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDL0IsWUFBTSxJQUFJLElBQUksTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFFOUMsVUFBSSxJQUFJLElBQUksTUFBTSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7QUFFNUMsYUFBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQzVCO0FBRUEsWUFBUSxJQUFJLE9BQU8sU0FBVSxLQUFLO0FBQ2pDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBRW5CLFlBQU0sSUFBSSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdEMsWUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLElBQUksTUFBTTtBQUNuQyxZQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxNQUFNO0FBQ25DLFlBQU0sS0FBSyxJQUFJLElBQUksTUFBTSxJQUFJLE1BQU07QUFFbkMsYUFBTyxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQzNDO0FBRUEsYUFBUyxvQkFBb0IsR0FBRyxHQUFHO0FBSWxDLGNBQ0csRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUNoQixFQUFFLEtBQUssRUFBRSxPQUFPLEtBQ2hCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFBQSxJQUVwQjtBQUVBLFlBQVEsSUFBSSxVQUFVLFNBQVUsS0FBSztBQUNwQyxZQUFNLFdBQVcsZ0JBQWdCO0FBQ2pDLFVBQUksVUFBVTtBQUNiLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSx5QkFBeUI7QUFDN0IsVUFBSTtBQUVKLGlCQUFXLFdBQVcsT0FBTyxLQUFLLFdBQVcsR0FBRztBQUMvQyxjQUFNLFFBQVEsWUFBWTtBQUcxQixjQUFNLFdBQVcsb0JBQW9CLEtBQUssS0FBSztBQUcvQyxZQUFJLFdBQVcsd0JBQXdCO0FBQ3RDLG1DQUF5QjtBQUN6QixrQ0FBd0I7QUFBQSxRQUN6QjtBQUFBLE1BQ0Q7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUVBLFlBQVEsUUFBUSxNQUFNLFNBQVUsU0FBUztBQUN4QyxhQUFPLFlBQVk7QUFBQSxJQUNwQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxVQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pCLFVBQUksSUFBSSxJQUFJLEtBQUs7QUFDakIsVUFBSSxJQUFJLElBQUksS0FBSztBQUdqQixVQUFJLElBQUksWUFBYSxJQUFJLFNBQVMsVUFBVSxNQUFRLElBQUk7QUFDeEQsVUFBSSxJQUFJLFlBQWEsSUFBSSxTQUFTLFVBQVUsTUFBUSxJQUFJO0FBQ3hELFVBQUksSUFBSSxZQUFhLElBQUksU0FBUyxVQUFVLE1BQVEsSUFBSTtBQUV4RCxZQUFNLElBQUssSUFBSSxTQUFXLElBQUksU0FBVyxJQUFJO0FBQzdDLFlBQU0sSUFBSyxJQUFJLFNBQVcsSUFBSSxTQUFXLElBQUk7QUFDN0MsWUFBTSxJQUFLLElBQUksU0FBVyxJQUFJLFNBQVcsSUFBSTtBQUU3QyxhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLE1BQU0sUUFBUSxJQUFJLElBQUksR0FBRztBQUMvQixVQUFJLElBQUksSUFBSTtBQUNaLFVBQUksSUFBSSxJQUFJO0FBQ1osVUFBSSxJQUFJLElBQUk7QUFFWixXQUFLO0FBQ0wsV0FBSztBQUNMLFdBQUs7QUFFTCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUV4RCxZQUFNLElBQUssTUFBTSxJQUFLO0FBQ3RCLFlBQU0sSUFBSSxPQUFPLElBQUk7QUFDckIsWUFBTSxJQUFJLE9BQU8sSUFBSTtBQUVyQixhQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNoQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJLE1BQU0sR0FBRztBQUNaLGNBQU0sSUFBSTtBQUNWLGVBQU8sQ0FBQyxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3RCO0FBRUEsVUFBSSxJQUFJLEtBQUs7QUFDWixhQUFLLEtBQUssSUFBSTtBQUFBLE1BQ2YsT0FBTztBQUNOLGFBQUssSUFBSSxJQUFJLElBQUk7QUFBQSxNQUNsQjtBQUVBLFlBQU0sS0FBSyxJQUFJLElBQUk7QUFFbkIsWUFBTSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEIsZUFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDM0IsYUFBSyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUk7QUFDdkIsWUFBSSxLQUFLLEdBQUc7QUFDWDtBQUFBLFFBQ0Q7QUFFQSxZQUFJLEtBQUssR0FBRztBQUNYO0FBQUEsUUFDRDtBQUVBLFlBQUksSUFBSSxLQUFLLEdBQUc7QUFDZixnQkFBTSxNQUFNLEtBQUssTUFBTSxJQUFJO0FBQUEsUUFDNUIsV0FBVyxJQUFJLEtBQUssR0FBRztBQUN0QixnQkFBTTtBQUFBLFFBQ1AsV0FBVyxJQUFJLEtBQUssR0FBRztBQUN0QixnQkFBTSxNQUFNLEtBQUssT0FBTyxJQUFJLElBQUksTUFBTTtBQUFBLFFBQ3ZDLE9BQU87QUFDTixnQkFBTTtBQUFBLFFBQ1A7QUFFQSxZQUFJLEtBQUssTUFBTTtBQUFBLE1BQ2hCO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pCLFVBQUksSUFBSSxJQUFJLEtBQUs7QUFDakIsVUFBSSxPQUFPO0FBQ1gsWUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHLElBQUk7QUFFN0IsV0FBSztBQUNMLFdBQU0sS0FBSyxJQUFLLElBQUksSUFBSTtBQUN4QixjQUFRLFFBQVEsSUFBSSxPQUFPLElBQUk7QUFDL0IsWUFBTSxLQUFLLElBQUksS0FBSztBQUNwQixZQUFNLEtBQUssTUFBTSxJQUFLLElBQUksUUFBUyxPQUFPLFFBQVMsSUFBSSxLQUFNLElBQUk7QUFFakUsYUFBTyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRztBQUFBLElBQzdCO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixVQUFJLElBQUksSUFBSSxLQUFLO0FBQ2pCLFlBQU0sS0FBSyxLQUFLLE1BQU0sQ0FBQyxJQUFJO0FBRTNCLFlBQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDO0FBQzFCLFlBQU0sSUFBSSxNQUFNLEtBQUssSUFBSTtBQUN6QixZQUFNLElBQUksTUFBTSxLQUFLLElBQUssSUFBSTtBQUM5QixZQUFNLElBQUksTUFBTSxLQUFLLElBQUssS0FBSyxJQUFJO0FBQ25DLFdBQUs7QUFFTCxjQUFRLElBQUk7QUFBQSxRQUNYLEtBQUs7QUFDSixpQkFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsUUFDaEIsS0FBSztBQUNKLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUNoQixLQUFLO0FBQ0osaUJBQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLFFBQ2hCLEtBQUs7QUFDSixpQkFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsUUFDaEIsS0FBSztBQUNKLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxRQUNoQixLQUFLO0FBQ0osaUJBQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ2pCO0FBQUEsSUFDRDtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUM3QixVQUFJO0FBQ0osVUFBSTtBQUVKLFdBQUssSUFBSSxLQUFLO0FBQ2QsWUFBTSxRQUFRLElBQUksS0FBSztBQUN2QixXQUFLLElBQUk7QUFDVCxZQUFPLFFBQVEsSUFBSyxPQUFPLElBQUk7QUFDL0IsV0FBSyxNQUFNO0FBQ1gsV0FBSztBQUVMLGFBQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUM3QjtBQUdBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFVBQUksS0FBSyxJQUFJLEtBQUs7QUFDbEIsVUFBSSxLQUFLLElBQUksS0FBSztBQUNsQixZQUFNLFFBQVEsS0FBSztBQUNuQixVQUFJO0FBR0osVUFBSSxRQUFRLEdBQUc7QUFDZCxjQUFNO0FBQ04sY0FBTTtBQUFBLE1BQ1A7QUFFQSxZQUFNLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQztBQUMxQixZQUFNLElBQUksSUFBSTtBQUNkLFVBQUksSUFBSSxJQUFJO0FBRVosV0FBSyxJQUFJLE9BQVUsR0FBRztBQUNyQixZQUFJLElBQUk7QUFBQSxNQUNUO0FBRUEsWUFBTSxJQUFJLEtBQUssS0FBSyxJQUFJO0FBRXhCLFVBQUk7QUFDSixVQUFJO0FBQ0osVUFBSTtBQUVKLGNBQVEsR0FBRztBQUFBLFFBQ1Y7QUFBQSxRQUNBLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBSTtBQUFBLFFBQ2hDLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBSTtBQUFBLFFBQ2hDLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLFFBQy9CLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLFFBQy9CLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLFFBQy9CLEtBQUs7QUFBRyxjQUFJO0FBQUksY0FBSTtBQUFJLGNBQUk7QUFBRztBQUFBLE1BQ2hDO0FBR0EsYUFBTyxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDbEM7QUFFQSxZQUFRLEtBQUssTUFBTSxTQUFVLE1BQU07QUFDbEMsWUFBTSxJQUFJLEtBQUssS0FBSztBQUNwQixZQUFNLElBQUksS0FBSyxLQUFLO0FBQ3BCLFlBQU0sSUFBSSxLQUFLLEtBQUs7QUFDcEIsWUFBTSxJQUFJLEtBQUssS0FBSztBQUVwQixZQUFNLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ3pDLFlBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDekMsWUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUV6QyxhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFLLElBQUksU0FBVyxJQUFJLFVBQVksSUFBSTtBQUN4QyxVQUFLLElBQUksVUFBWSxJQUFJLFNBQVcsSUFBSTtBQUN4QyxVQUFLLElBQUksU0FBVyxJQUFJLFNBQVksSUFBSTtBQUd4QyxVQUFJLElBQUksV0FDSCxRQUFTLE1BQU0sSUFBTSxPQUFTLFFBQ2hDLElBQUk7QUFFUCxVQUFJLElBQUksV0FDSCxRQUFTLE1BQU0sSUFBTSxPQUFTLFFBQ2hDLElBQUk7QUFFUCxVQUFJLElBQUksV0FDSCxRQUFTLE1BQU0sSUFBTSxPQUFTLFFBQ2hDLElBQUk7QUFFUCxVQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUM5QixVQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUM5QixVQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUU5QixhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNsQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxVQUFJLElBQUksSUFBSTtBQUNaLFVBQUksSUFBSSxJQUFJO0FBQ1osVUFBSSxJQUFJLElBQUk7QUFFWixXQUFLO0FBQ0wsV0FBSztBQUNMLFdBQUs7QUFFTCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUN4RCxVQUFJLElBQUksVUFBWSxNQUFNLElBQUksS0FBTyxRQUFRLElBQU0sS0FBSztBQUV4RCxZQUFNLElBQUssTUFBTSxJQUFLO0FBQ3RCLFlBQU0sSUFBSSxPQUFPLElBQUk7QUFDckIsWUFBTSxJQUFJLE9BQU8sSUFBSTtBQUVyQixhQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNoQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixXQUFLLElBQUksTUFBTTtBQUNmLFVBQUksSUFBSSxNQUFNO0FBQ2QsVUFBSSxJQUFJLElBQUk7QUFFWixZQUFNLEtBQUssS0FBSztBQUNoQixZQUFNLEtBQUssS0FBSztBQUNoQixZQUFNLEtBQUssS0FBSztBQUNoQixVQUFJLEtBQUssVUFBVyxNQUFNLElBQUksS0FBSyxPQUFPO0FBQzFDLFVBQUksS0FBSyxVQUFXLE1BQU0sSUFBSSxLQUFLLE9BQU87QUFDMUMsVUFBSSxLQUFLLFVBQVcsTUFBTSxJQUFJLEtBQUssT0FBTztBQUUxQyxXQUFLO0FBQ0wsV0FBSztBQUNMLFdBQUs7QUFFTCxhQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxJQUNoQjtBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJO0FBRUosWUFBTSxLQUFLLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDMUIsVUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLO0FBRXhCLFVBQUksSUFBSSxHQUFHO0FBQ1YsYUFBSztBQUFBLE1BQ047QUFFQSxZQUFNLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUM7QUFFakMsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUk7QUFDZCxZQUFNLElBQUksSUFBSTtBQUNkLFlBQU0sSUFBSSxJQUFJO0FBRWQsWUFBTSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUs7QUFDOUIsWUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDekIsWUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFFekIsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksU0FBUyxTQUFVLE1BQU0sYUFBYSxNQUFNO0FBQ3ZELFlBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJO0FBQ2xCLFVBQUksUUFBUSxlQUFlLE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLEtBQUs7QUFFN0QsY0FBUSxLQUFLLE1BQU0sUUFBUSxFQUFFO0FBRTdCLFVBQUksVUFBVSxHQUFHO0FBQ2hCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxPQUFPLE1BQ04sS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLElBQ3hCLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUN4QixLQUFLLE1BQU0sSUFBSSxHQUFHO0FBRXJCLFVBQUksVUFBVSxHQUFHO0FBQ2hCLGdCQUFRO0FBQUEsTUFDVDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUSxJQUFJLFNBQVMsU0FBVSxNQUFNO0FBR3BDLGFBQU8sUUFBUSxJQUFJLE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRTtBQUFBLElBQ3pEO0FBRUEsWUFBUSxJQUFJLFVBQVUsU0FBVSxNQUFNO0FBQ3JDLFlBQU0sSUFBSSxLQUFLO0FBQ2YsWUFBTSxJQUFJLEtBQUs7QUFDZixZQUFNLElBQUksS0FBSztBQUlmLFVBQUksTUFBTSxLQUFLLE1BQU0sR0FBRztBQUN2QixZQUFJLElBQUksR0FBRztBQUNWLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksSUFBSSxLQUFLO0FBQ1osaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTyxLQUFLLE9BQVEsSUFBSSxLQUFLLE1BQU8sRUFBRSxJQUFJO0FBQUEsTUFDM0M7QUFFQSxZQUFNLE9BQU8sS0FDVCxLQUFLLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUMzQixJQUFJLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUMzQixLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFFekIsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRLE9BQU8sTUFBTSxTQUFVLE1BQU07QUFDcEMsVUFBSSxRQUFRLE9BQU87QUFHbkIsVUFBSSxVQUFVLEtBQUssVUFBVSxHQUFHO0FBQy9CLFlBQUksT0FBTyxJQUFJO0FBQ2QsbUJBQVM7QUFBQSxRQUNWO0FBRUEsZ0JBQVEsUUFBUSxPQUFPO0FBRXZCLGVBQU8sQ0FBQyxPQUFPLE9BQU8sS0FBSztBQUFBLE1BQzVCO0FBRUEsWUFBTSxRQUFRLENBQUMsRUFBRSxPQUFPLE1BQU0sS0FBSztBQUNuQyxZQUFNLEtBQU0sUUFBUSxLQUFLLE9BQVE7QUFDakMsWUFBTSxLQUFPLFNBQVMsSUFBSyxLQUFLLE9BQVE7QUFDeEMsWUFBTSxLQUFPLFNBQVMsSUFBSyxLQUFLLE9BQVE7QUFFeEMsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLFFBQVEsTUFBTSxTQUFVLE1BQU07QUFFckMsVUFBSSxRQUFRLEtBQUs7QUFDaEIsY0FBTSxLQUFLLE9BQU8sT0FBTyxLQUFLO0FBQzlCLGVBQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUFBLE1BQ2hCO0FBRUEsY0FBUTtBQUVSLFVBQUk7QUFDSixZQUFNLElBQUksS0FBSyxNQUFNLE9BQU8sRUFBRSxJQUFJLElBQUk7QUFDdEMsWUFBTSxJQUFJLEtBQUssT0FBTyxNQUFNLE9BQU8sTUFBTSxDQUFDLElBQUksSUFBSTtBQUNsRCxZQUFNLElBQUssTUFBTSxJQUFLLElBQUk7QUFFMUIsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLE1BQU07QUFDakMsWUFBTSxZQUFZLEtBQUssTUFBTSxLQUFLLEVBQUUsSUFBSSxRQUFTLFFBQzVDLEtBQUssTUFBTSxLQUFLLEVBQUUsSUFBSSxRQUFTLE1BQ2hDLEtBQUssTUFBTSxLQUFLLEVBQUUsSUFBSTtBQUUxQixZQUFNLFNBQVMsUUFBUSxTQUFTLEVBQUUsRUFBRSxZQUFZO0FBQ2hELGFBQU8sU0FBUyxVQUFVLE9BQU8sTUFBTSxJQUFJO0FBQUEsSUFDNUM7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLE1BQU07QUFDakMsWUFBTSxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsTUFBTSwwQkFBMEI7QUFDaEUsVUFBSSxDQUFDLE9BQU87QUFDWCxlQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFBQSxNQUNoQjtBQUVBLFVBQUksY0FBYyxNQUFNO0FBRXhCLFVBQUksTUFBTSxHQUFHLFdBQVcsR0FBRztBQUMxQixzQkFBYyxZQUFZLE1BQU0sRUFBRSxFQUFFLElBQUksVUFBUTtBQUMvQyxpQkFBTyxPQUFPO0FBQUEsUUFDZixDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQUEsTUFDWDtBQUVBLFlBQU0sVUFBVSxTQUFTLGFBQWEsRUFBRTtBQUN4QyxZQUFNLElBQUssV0FBVyxLQUFNO0FBQzVCLFlBQU0sSUFBSyxXQUFXLElBQUs7QUFDM0IsWUFBTSxJQUFJLFVBQVU7QUFFcEIsYUFBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDaEI7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxNQUFNLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUN0QyxZQUFNLE1BQU0sS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3RDLFlBQU0sU0FBVSxNQUFNO0FBQ3RCLFVBQUk7QUFDSixVQUFJO0FBRUosVUFBSSxTQUFTLEdBQUc7QUFDZixvQkFBWSxPQUFPLElBQUk7QUFBQSxNQUN4QixPQUFPO0FBQ04sb0JBQVk7QUFBQSxNQUNiO0FBRUEsVUFBSSxVQUFVLEdBQUc7QUFDaEIsY0FBTTtBQUFBLE1BQ1AsV0FDSSxRQUFRLEdBQUc7QUFDZCxlQUFRLElBQUksS0FBSyxTQUFVO0FBQUEsTUFDNUIsV0FDSSxRQUFRLEdBQUc7QUFDZCxjQUFNLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDckIsT0FBTztBQUNOLGNBQU0sS0FBSyxJQUFJLEtBQUs7QUFBQSxNQUNyQjtBQUVBLGFBQU87QUFDUCxhQUFPO0FBRVAsYUFBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEtBQUssWUFBWSxHQUFHO0FBQUEsSUFDakQ7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBRW5CLFlBQU0sSUFBSSxJQUFJLE1BQU8sSUFBTSxJQUFJLElBQU0sSUFBTSxLQUFLLElBQU07QUFFdEQsVUFBSSxJQUFJO0FBQ1IsVUFBSSxJQUFJLEdBQUs7QUFDWixhQUFLLElBQUksTUFBTSxNQUFNLElBQU07QUFBQSxNQUM1QjtBQUVBLGFBQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQ2pDO0FBRUEsWUFBUSxJQUFJLE1BQU0sU0FBVSxLQUFLO0FBQ2hDLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFDbkIsWUFBTSxJQUFJLElBQUksS0FBSztBQUVuQixZQUFNLElBQUksSUFBSTtBQUNkLFVBQUksSUFBSTtBQUVSLFVBQUksSUFBSSxHQUFLO0FBQ1osYUFBSyxJQUFJLE1BQU0sSUFBSTtBQUFBLE1BQ3BCO0FBRUEsYUFBTyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDakM7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFFbkIsVUFBSSxNQUFNLEdBQUs7QUFDZCxlQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUNsQztBQUVBLFlBQU0sT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLFlBQU0sS0FBTSxJQUFJLElBQUs7QUFDckIsWUFBTSxJQUFJLEtBQUs7QUFDZixZQUFNLElBQUksSUFBSTtBQUNkLFVBQUksS0FBSztBQUdULGNBQVEsS0FBSyxNQUFNLEVBQUUsR0FBRztBQUFBLFFBQ3ZCLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDLEtBQUs7QUFDSixlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRyxlQUFLLEtBQUs7QUFBRztBQUFBLFFBQ3hDO0FBQ0MsZUFBSyxLQUFLO0FBQUcsZUFBSyxLQUFLO0FBQUcsZUFBSyxLQUFLO0FBQUEsTUFDdEM7QUFHQSxZQUFNLElBQU0sS0FBSztBQUVqQixhQUFPO0FBQUEsU0FDTCxJQUFJLEtBQUssS0FBSyxNQUFNO0FBQUEsU0FDcEIsSUFBSSxLQUFLLEtBQUssTUFBTTtBQUFBLFNBQ3BCLElBQUksS0FBSyxLQUFLLE1BQU07QUFBQSxNQUN0QjtBQUFBLElBQ0Q7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBRW5CLFlBQU0sSUFBSSxJQUFJLEtBQUssSUFBTTtBQUN6QixVQUFJLElBQUk7QUFFUixVQUFJLElBQUksR0FBSztBQUNaLFlBQUksSUFBSTtBQUFBLE1BQ1Q7QUFFQSxhQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUc7QUFBQSxJQUNqQztBQUVBLFlBQVEsSUFBSSxNQUFNLFNBQVUsS0FBSztBQUNoQyxZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUs7QUFFbkIsWUFBTSxJQUFJLEtBQUssSUFBTSxLQUFLLE1BQU07QUFDaEMsVUFBSSxJQUFJO0FBRVIsVUFBSSxJQUFJLEtBQU8sSUFBSSxLQUFLO0FBQ3ZCLFlBQUksS0FBSyxJQUFJO0FBQUEsTUFDZCxXQUNJLEtBQUssT0FBTyxJQUFJLEdBQUs7QUFDeEIsWUFBSSxLQUFLLEtBQUssSUFBSTtBQUFBLE1BQ25CO0FBRUEsYUFBTyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHO0FBQUEsSUFDakM7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJLEtBQUssSUFBTTtBQUN6QixhQUFPLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxHQUFHO0FBQUEsSUFDN0M7QUFFQSxZQUFRLElBQUksTUFBTSxTQUFVLEtBQUs7QUFDaEMsWUFBTSxJQUFJLElBQUksS0FBSztBQUNuQixZQUFNLElBQUksSUFBSSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxJQUFJO0FBQ2QsWUFBTSxJQUFJLElBQUk7QUFDZCxVQUFJLElBQUk7QUFFUixVQUFJLElBQUksR0FBRztBQUNWLGFBQUssSUFBSSxNQUFNLElBQUk7QUFBQSxNQUNwQjtBQUVBLGFBQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksR0FBRztBQUFBLElBQ2pDO0FBRUEsWUFBUSxNQUFNLE1BQU0sU0FBVSxPQUFPO0FBQ3BDLGFBQU8sQ0FBRSxNQUFNLEtBQUssUUFBUyxLQUFNLE1BQU0sS0FBSyxRQUFTLEtBQU0sTUFBTSxLQUFLLFFBQVMsR0FBRztBQUFBLElBQ3JGO0FBRUEsWUFBUSxJQUFJLFFBQVEsU0FBVSxLQUFLO0FBQ2xDLGFBQU8sQ0FBRSxJQUFJLEtBQUssTUFBTyxPQUFRLElBQUksS0FBSyxNQUFPLE9BQVEsSUFBSSxLQUFLLE1BQU8sS0FBSztBQUFBLElBQy9FO0FBRUEsWUFBUSxLQUFLLE1BQU0sU0FBVSxNQUFNO0FBQ2xDLGFBQU8sQ0FBQyxLQUFLLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssS0FBSyxLQUFLLE1BQU0sR0FBRztBQUFBLElBQ3RFO0FBRUEsWUFBUSxLQUFLLE1BQU0sU0FBVSxNQUFNO0FBQ2xDLGFBQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFO0FBQUEsSUFDdEI7QUFFQSxZQUFRLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFFaEMsWUFBUSxLQUFLLE1BQU0sU0FBVUMsT0FBTTtBQUNsQyxhQUFPLENBQUMsR0FBRyxLQUFLQSxNQUFLLEVBQUU7QUFBQSxJQUN4QjtBQUVBLFlBQVEsS0FBSyxPQUFPLFNBQVVBLE9BQU07QUFDbkMsYUFBTyxDQUFDLEdBQUcsR0FBRyxHQUFHQSxNQUFLLEVBQUU7QUFBQSxJQUN6QjtBQUVBLFlBQVEsS0FBSyxNQUFNLFNBQVVBLE9BQU07QUFDbEMsYUFBTyxDQUFDQSxNQUFLLElBQUksR0FBRyxDQUFDO0FBQUEsSUFDdEI7QUFFQSxZQUFRLEtBQUssTUFBTSxTQUFVQSxPQUFNO0FBQ2xDLFlBQU0sTUFBTSxLQUFLLE1BQU1BLE1BQUssS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUM5QyxZQUFNLFdBQVcsT0FBTyxPQUFPLE9BQU8sS0FBSztBQUUzQyxZQUFNLFNBQVMsUUFBUSxTQUFTLEVBQUUsRUFBRSxZQUFZO0FBQ2hELGFBQU8sU0FBUyxVQUFVLE9BQU8sTUFBTSxJQUFJO0FBQUEsSUFDNUM7QUFFQSxZQUFRLElBQUksT0FBTyxTQUFVLEtBQUs7QUFDakMsWUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNO0FBQ3pDLGFBQU8sQ0FBQyxNQUFNLE1BQU0sR0FBRztBQUFBLElBQ3hCO0FBQUE7QUFBQTs7O0FDdDBCQTtBQUFBLGlEQUFBQyxVQUFBQyxTQUFBO0FBQUEsUUFBTSxjQUFjO0FBYXBCLGFBQVMsYUFBYTtBQUNyQixZQUFNLFFBQVEsQ0FBQztBQUVmLFlBQU0sU0FBUyxPQUFPLEtBQUssV0FBVztBQUV0QyxlQUFTLE1BQU0sT0FBTyxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUNsRCxjQUFNLE9BQU8sTUFBTTtBQUFBLFVBR2xCLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBR0EsYUFBUyxVQUFVLFdBQVc7QUFDN0IsWUFBTSxRQUFRLFdBQVc7QUFDekIsWUFBTSxRQUFRLENBQUMsU0FBUztBQUV4QixZQUFNLFdBQVcsV0FBVztBQUU1QixhQUFPLE1BQU0sUUFBUTtBQUNwQixjQUFNLFVBQVUsTUFBTSxJQUFJO0FBQzFCLGNBQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxRQUFRO0FBRWxELGlCQUFTLE1BQU0sVUFBVSxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUNyRCxnQkFBTSxXQUFXLFVBQVU7QUFDM0IsZ0JBQU0sT0FBTyxNQUFNO0FBRW5CLGNBQUksS0FBSyxhQUFhLElBQUk7QUFDekIsaUJBQUssV0FBVyxNQUFNLFNBQVMsV0FBVztBQUMxQyxpQkFBSyxTQUFTO0FBQ2Qsa0JBQU0sUUFBUSxRQUFRO0FBQUEsVUFDdkI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsYUFBUyxLQUFLLE1BQU0sSUFBSTtBQUN2QixhQUFPLFNBQVUsTUFBTTtBQUN0QixlQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUNyQjtBQUFBLElBQ0Q7QUFFQSxhQUFTLGVBQWUsU0FBUyxPQUFPO0FBQ3ZDLFlBQU1DLFFBQU8sQ0FBQyxNQUFNLFNBQVMsUUFBUSxPQUFPO0FBQzVDLFVBQUksS0FBSyxZQUFZLE1BQU0sU0FBUyxRQUFRO0FBRTVDLFVBQUksTUFBTSxNQUFNLFNBQVM7QUFDekIsYUFBTyxNQUFNLEtBQUssUUFBUTtBQUN6QixRQUFBQSxNQUFLLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFDOUIsYUFBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFFBQVEsTUFBTSxFQUFFO0FBQ2pELGNBQU0sTUFBTSxLQUFLO0FBQUEsTUFDbEI7QUFFQSxTQUFHLGFBQWFBO0FBQ2hCLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUQsUUFBTyxVQUFVLFNBQVUsV0FBVztBQUNyQyxZQUFNLFFBQVEsVUFBVSxTQUFTO0FBQ2pDLFlBQU0sYUFBYSxDQUFDO0FBRXBCLFlBQU0sU0FBUyxPQUFPLEtBQUssS0FBSztBQUNoQyxlQUFTLE1BQU0sT0FBTyxRQUFRLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUNsRCxjQUFNLFVBQVUsT0FBTztBQUN2QixjQUFNLE9BQU8sTUFBTTtBQUVuQixZQUFJLEtBQUssV0FBVyxNQUFNO0FBRXpCO0FBQUEsUUFDRDtBQUVBLG1CQUFXLFdBQVcsZUFBZSxTQUFTLEtBQUs7QUFBQSxNQUNwRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBQUE7QUFBQTs7O0FDL0ZBO0FBQUEsaURBQUFFLFVBQUFDLFNBQUE7QUFBQSxRQUFNLGNBQWM7QUFDcEIsUUFBTSxRQUFRO0FBRWQsUUFBTSxVQUFVLENBQUM7QUFFakIsUUFBTSxTQUFTLE9BQU8sS0FBSyxXQUFXO0FBRXRDLGFBQVMsUUFBUSxJQUFJO0FBQ3BCLFlBQU0sWUFBWSxZQUFhLE1BQU07QUFDcEMsY0FBTSxPQUFPLEtBQUs7QUFDbEIsWUFBSSxTQUFTLFVBQWEsU0FBUyxNQUFNO0FBQ3hDLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUksS0FBSyxTQUFTLEdBQUc7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTyxHQUFHLElBQUk7QUFBQSxNQUNmO0FBR0EsVUFBSSxnQkFBZ0IsSUFBSTtBQUN2QixrQkFBVSxhQUFhLEdBQUc7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsYUFBUyxZQUFZLElBQUk7QUFDeEIsWUFBTSxZQUFZLFlBQWEsTUFBTTtBQUNwQyxjQUFNLE9BQU8sS0FBSztBQUVsQixZQUFJLFNBQVMsVUFBYSxTQUFTLE1BQU07QUFDeEMsaUJBQU87QUFBQSxRQUNSO0FBRUEsWUFBSSxLQUFLLFNBQVMsR0FBRztBQUNwQixpQkFBTztBQUFBLFFBQ1I7QUFFQSxjQUFNLFNBQVMsR0FBRyxJQUFJO0FBS3RCLFlBQUksT0FBTyxXQUFXLFVBQVU7QUFDL0IsbUJBQVMsTUFBTSxPQUFPLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLO0FBQ2xELG1CQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sRUFBRTtBQUFBLFVBQ2pDO0FBQUEsUUFDRDtBQUVBLGVBQU87QUFBQSxNQUNSO0FBR0EsVUFBSSxnQkFBZ0IsSUFBSTtBQUN2QixrQkFBVSxhQUFhLEdBQUc7QUFBQSxNQUMzQjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTyxRQUFRLGVBQWE7QUFDM0IsY0FBUSxhQUFhLENBQUM7QUFFdEIsYUFBTyxlQUFlLFFBQVEsWUFBWSxZQUFZLEVBQUMsT0FBTyxZQUFZLFdBQVcsU0FBUSxDQUFDO0FBQzlGLGFBQU8sZUFBZSxRQUFRLFlBQVksVUFBVSxFQUFDLE9BQU8sWUFBWSxXQUFXLE9BQU0sQ0FBQztBQUUxRixZQUFNLFNBQVMsTUFBTSxTQUFTO0FBQzlCLFlBQU0sY0FBYyxPQUFPLEtBQUssTUFBTTtBQUV0QyxrQkFBWSxRQUFRLGFBQVc7QUFDOUIsY0FBTSxLQUFLLE9BQU87QUFFbEIsZ0JBQVEsV0FBVyxXQUFXLFlBQVksRUFBRTtBQUM1QyxnQkFBUSxXQUFXLFNBQVMsTUFBTSxRQUFRLEVBQUU7QUFBQSxNQUM3QyxDQUFDO0FBQUEsSUFDRixDQUFDO0FBRUQsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDaEZqQjtBQUFBLCtDQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLGFBQWEsQ0FBQyxJQUFJLFdBQVcsSUFBSSxTQUFTO0FBQy9DLFlBQU0sT0FBTyxHQUFHLEdBQUcsSUFBSTtBQUN2QixhQUFPLFFBQVUsT0FBTztBQUFBLElBQ3pCO0FBRUEsUUFBTSxjQUFjLENBQUMsSUFBSSxXQUFXLElBQUksU0FBUztBQUNoRCxZQUFNLE9BQU8sR0FBRyxHQUFHLElBQUk7QUFDdkIsYUFBTyxRQUFVLEtBQUssWUFBWTtBQUFBLElBQ25DO0FBRUEsUUFBTSxjQUFjLENBQUMsSUFBSSxXQUFXLElBQUksU0FBUztBQUNoRCxZQUFNLE1BQU0sR0FBRyxHQUFHLElBQUk7QUFDdEIsYUFBTyxRQUFVLEtBQUssWUFBWSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUk7QUFBQSxJQUMzRDtBQUVBLFFBQU0sWUFBWSxPQUFLO0FBQ3ZCLFFBQU0sVUFBVSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFFckMsUUFBTSxrQkFBa0IsQ0FBQyxRQUFRLFVBQVUsUUFBUTtBQUNsRCxhQUFPLGVBQWUsUUFBUSxVQUFVO0FBQUEsUUFDdkMsS0FBSyxNQUFNO0FBQ1YsZ0JBQU0sUUFBUSxJQUFJO0FBRWxCLGlCQUFPLGVBQWUsUUFBUSxVQUFVO0FBQUEsWUFDdkM7QUFBQSxZQUNBLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxVQUNmLENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNGO0FBR0EsUUFBSTtBQUNKLFFBQU0sb0JBQW9CLENBQUMsTUFBTSxhQUFhLFVBQVUsaUJBQWlCO0FBQ3hFLFVBQUksaUJBQWlCLFFBQVc7QUFDL0IsdUJBQWU7QUFBQSxNQUNoQjtBQUVBLFlBQU0sU0FBUyxlQUFlLEtBQUs7QUFDbkMsWUFBTSxTQUFTLENBQUM7QUFFaEIsaUJBQVcsQ0FBQyxhQUFhLEtBQUssS0FBSyxPQUFPLFFBQVEsWUFBWSxHQUFHO0FBQ2hFLGNBQU0sT0FBTyxnQkFBZ0IsV0FBVyxTQUFTO0FBQ2pELFlBQUksZ0JBQWdCLGFBQWE7QUFDaEMsaUJBQU8sUUFBUSxLQUFLLFVBQVUsTUFBTTtBQUFBLFFBQ3JDLFdBQVcsT0FBTyxVQUFVLFVBQVU7QUFDckMsaUJBQU8sUUFBUSxLQUFLLE1BQU0sY0FBYyxNQUFNO0FBQUEsUUFDL0M7QUFBQSxNQUNEO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxhQUFTLGlCQUFpQjtBQUN6QixZQUFNLFFBQVEsb0JBQUksSUFBSTtBQUN0QixZQUFNLFNBQVM7QUFBQSxRQUNkLFVBQVU7QUFBQSxVQUNULE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFBQSxVQUVaLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNaLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNYLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNkLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFBQSxVQUNqQixTQUFTLENBQUMsR0FBRyxFQUFFO0FBQUEsVUFDZixRQUFRLENBQUMsR0FBRyxFQUFFO0FBQUEsVUFDZCxlQUFlLENBQUMsR0FBRyxFQUFFO0FBQUEsUUFDdEI7QUFBQSxRQUNBLE9BQU87QUFBQSxVQUNOLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNaLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNkLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNmLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNiLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNoQixNQUFNLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDYixPQUFPLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFHZCxhQUFhLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDcEIsV0FBVyxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2xCLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNwQixjQUFjLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDckIsWUFBWSxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ25CLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUN0QixZQUFZLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDbkIsYUFBYSxDQUFDLElBQUksRUFBRTtBQUFBLFFBQ3JCO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUixTQUFTLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDaEIsT0FBTyxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2QsU0FBUyxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2hCLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFBQSxVQUNqQixRQUFRLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDZixXQUFXLENBQUMsSUFBSSxFQUFFO0FBQUEsVUFDbEIsUUFBUSxDQUFDLElBQUksRUFBRTtBQUFBLFVBQ2YsU0FBUyxDQUFDLElBQUksRUFBRTtBQUFBLFVBR2hCLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFBQSxVQUN2QixhQUFhLENBQUMsS0FBSyxFQUFFO0FBQUEsVUFDckIsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUFBLFVBQ3ZCLGdCQUFnQixDQUFDLEtBQUssRUFBRTtBQUFBLFVBQ3hCLGNBQWMsQ0FBQyxLQUFLLEVBQUU7QUFBQSxVQUN0QixpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFBQSxVQUN6QixjQUFjLENBQUMsS0FBSyxFQUFFO0FBQUEsVUFDdEIsZUFBZSxDQUFDLEtBQUssRUFBRTtBQUFBLFFBQ3hCO0FBQUEsTUFDRDtBQUdBLGFBQU8sTUFBTSxPQUFPLE9BQU8sTUFBTTtBQUNqQyxhQUFPLFFBQVEsU0FBUyxPQUFPLFFBQVE7QUFDdkMsYUFBTyxNQUFNLE9BQU8sT0FBTyxNQUFNO0FBQ2pDLGFBQU8sUUFBUSxTQUFTLE9BQU8sUUFBUTtBQUV2QyxpQkFBVyxDQUFDLFdBQVcsS0FBSyxLQUFLLE9BQU8sUUFBUSxNQUFNLEdBQUc7QUFDeEQsbUJBQVcsQ0FBQyxXQUFXLEtBQUssS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQ3ZELGlCQUFPLGFBQWE7QUFBQSxZQUNuQixNQUFNLFFBQVUsTUFBTTtBQUFBLFlBQ3RCLE9BQU8sUUFBVSxNQUFNO0FBQUEsVUFDeEI7QUFFQSxnQkFBTSxhQUFhLE9BQU87QUFFMUIsZ0JBQU0sSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO0FBQUEsUUFDN0I7QUFFQSxlQUFPLGVBQWUsUUFBUSxXQUFXO0FBQUEsVUFDeEMsT0FBTztBQUFBLFVBQ1AsWUFBWTtBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0Y7QUFFQSxhQUFPLGVBQWUsUUFBUSxTQUFTO0FBQUEsUUFDdEMsT0FBTztBQUFBLFFBQ1AsWUFBWTtBQUFBLE1BQ2IsQ0FBQztBQUVELGFBQU8sTUFBTSxRQUFRO0FBQ3JCLGFBQU8sUUFBUSxRQUFRO0FBRXZCLHNCQUFnQixPQUFPLE9BQU8sUUFBUSxNQUFNLGtCQUFrQixZQUFZLFVBQVUsV0FBVyxLQUFLLENBQUM7QUFDckcsc0JBQWdCLE9BQU8sT0FBTyxXQUFXLE1BQU0sa0JBQWtCLGFBQWEsV0FBVyxXQUFXLEtBQUssQ0FBQztBQUMxRyxzQkFBZ0IsT0FBTyxPQUFPLFdBQVcsTUFBTSxrQkFBa0IsYUFBYSxPQUFPLFNBQVMsS0FBSyxDQUFDO0FBQ3BHLHNCQUFnQixPQUFPLFNBQVMsUUFBUSxNQUFNLGtCQUFrQixZQUFZLFVBQVUsV0FBVyxJQUFJLENBQUM7QUFDdEcsc0JBQWdCLE9BQU8sU0FBUyxXQUFXLE1BQU0sa0JBQWtCLGFBQWEsV0FBVyxXQUFXLElBQUksQ0FBQztBQUMzRyxzQkFBZ0IsT0FBTyxTQUFTLFdBQVcsTUFBTSxrQkFBa0IsYUFBYSxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBRXJHLGFBQU87QUFBQSxJQUNSO0FBR0EsV0FBTyxlQUFlQSxTQUFRLFdBQVc7QUFBQSxNQUN4QyxZQUFZO0FBQUEsTUFDWixLQUFLO0FBQUEsSUFDTixDQUFDO0FBQUE7QUFBQTs7O0FDbEtEO0FBQUEsNENBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sT0FBTyxRQUFRLFNBQVM7QUFDL0MsWUFBTSxTQUFTLEtBQUssV0FBVyxHQUFHLElBQUksS0FBTSxLQUFLLFdBQVcsSUFBSSxNQUFNO0FBQ3RFLFlBQU0sV0FBVyxLQUFLLFFBQVEsU0FBUyxJQUFJO0FBQzNDLFlBQU0scUJBQXFCLEtBQUssUUFBUSxJQUFJO0FBQzVDLGFBQU8sYUFBYSxPQUFPLHVCQUF1QixNQUFNLFdBQVc7QUFBQSxJQUNwRTtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsa0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sS0FBSyxRQUFRO0FBQ25CLFFBQU0sTUFBTSxRQUFRO0FBQ3BCLFFBQU0sVUFBVTtBQUVoQixRQUFNLEVBQUMsSUFBRyxJQUFJO0FBRWQsUUFBSTtBQUNKLFFBQUksUUFBUSxVQUFVLEtBQ3JCLFFBQVEsV0FBVyxLQUNuQixRQUFRLGFBQWEsS0FDckIsUUFBUSxhQUFhLEdBQUc7QUFDeEIsbUJBQWE7QUFBQSxJQUNkLFdBQVcsUUFBUSxPQUFPLEtBQ3pCLFFBQVEsUUFBUSxLQUNoQixRQUFRLFlBQVksS0FDcEIsUUFBUSxjQUFjLEdBQUc7QUFDekIsbUJBQWE7QUFBQSxJQUNkO0FBRUEsUUFBSSxpQkFBaUIsS0FBSztBQUN6QixVQUFJLElBQUksZ0JBQWdCLFFBQVE7QUFDL0IscUJBQWE7QUFBQSxNQUNkLFdBQVcsSUFBSSxnQkFBZ0IsU0FBUztBQUN2QyxxQkFBYTtBQUFBLE1BQ2QsT0FBTztBQUNOLHFCQUFhLElBQUksWUFBWSxXQUFXLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRSxHQUFHLENBQUM7QUFBQSxNQUMxRjtBQUFBLElBQ0Q7QUFFQSxhQUFTLGVBQWUsT0FBTztBQUM5QixVQUFJLFVBQVUsR0FBRztBQUNoQixlQUFPO0FBQUEsTUFDUjtBQUVBLGFBQU87QUFBQSxRQUNOO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixRQUFRLFNBQVM7QUFBQSxRQUNqQixRQUFRLFNBQVM7QUFBQSxNQUNsQjtBQUFBLElBQ0Q7QUFFQSxhQUFTLGNBQWMsWUFBWSxhQUFhO0FBQy9DLFVBQUksZUFBZSxHQUFHO0FBQ3JCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxRQUFRLFdBQVcsS0FDdEIsUUFBUSxZQUFZLEtBQ3BCLFFBQVEsaUJBQWlCLEdBQUc7QUFDNUIsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3pCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxjQUFjLENBQUMsZUFBZSxlQUFlLFFBQVc7QUFDM0QsZUFBTztBQUFBLE1BQ1I7QUFFQSxZQUFNLE1BQU0sY0FBYztBQUUxQixVQUFJLElBQUksU0FBUyxRQUFRO0FBQ3hCLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxRQUFRLGFBQWEsU0FBUztBQUdqQyxjQUFNLFlBQVksR0FBRyxRQUFRLEVBQUUsTUFBTSxHQUFHO0FBQ3hDLFlBQ0MsT0FBTyxVQUFVLEVBQUUsS0FBSyxNQUN4QixPQUFPLFVBQVUsRUFBRSxLQUFLLE9BQ3ZCO0FBQ0QsaUJBQU8sT0FBTyxVQUFVLEVBQUUsS0FBSyxRQUFRLElBQUk7QUFBQSxRQUM1QztBQUVBLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxRQUFRLEtBQUs7QUFDaEIsWUFBSSxDQUFDLFVBQVUsWUFBWSxZQUFZLGFBQWEsa0JBQWtCLFdBQVcsRUFBRSxLQUFLLFVBQVEsUUFBUSxHQUFHLEtBQUssSUFBSSxZQUFZLFlBQVk7QUFDM0ksaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLHNCQUFzQixLQUFLO0FBQzlCLGVBQU8sZ0NBQWdDLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxJQUFJO0FBQUEsTUFDekU7QUFFQSxVQUFJLElBQUksY0FBYyxhQUFhO0FBQ2xDLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxrQkFBa0IsS0FBSztBQUMxQixjQUFNLFVBQVUsVUFBVSxJQUFJLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRTtBQUUzRSxnQkFBUSxJQUFJLGNBQWM7QUFBQSxVQUN6QixLQUFLO0FBQ0osbUJBQU8sV0FBVyxJQUFJLElBQUk7QUFBQSxVQUMzQixLQUFLO0FBQ0osbUJBQU87QUFBQSxRQUVUO0FBQUEsTUFDRDtBQUVBLFVBQUksaUJBQWlCLEtBQUssSUFBSSxJQUFJLEdBQUc7QUFDcEMsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJLDhEQUE4RCxLQUFLLElBQUksSUFBSSxHQUFHO0FBQ2pGLGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxlQUFlLEtBQUs7QUFDdkIsZUFBTztBQUFBLE1BQ1I7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUVBLGFBQVMsZ0JBQWdCLFFBQVE7QUFDaEMsWUFBTSxRQUFRLGNBQWMsUUFBUSxVQUFVLE9BQU8sS0FBSztBQUMxRCxhQUFPLGVBQWUsS0FBSztBQUFBLElBQzVCO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEIsZUFBZTtBQUFBLE1BQ2YsUUFBUSxlQUFlLGNBQWMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUN6RCxRQUFRLGVBQWUsY0FBYyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBLElBQzFEO0FBQUE7QUFBQTs7O0FDdElBO0FBQUEsK0NBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sbUJBQW1CLENBQUMsUUFBUSxXQUFXLGFBQWE7QUFDekQsVUFBSSxRQUFRLE9BQU8sUUFBUSxTQUFTO0FBQ3BDLFVBQUksVUFBVSxJQUFJO0FBQ2pCLGVBQU87QUFBQSxNQUNSO0FBRUEsWUFBTSxrQkFBa0IsVUFBVTtBQUNsQyxVQUFJLFdBQVc7QUFDZixVQUFJLGNBQWM7QUFDbEIsU0FBRztBQUNGLHVCQUFlLE9BQU8sT0FBTyxVQUFVLFFBQVEsUUFBUSxJQUFJLFlBQVk7QUFDdkUsbUJBQVcsUUFBUTtBQUNuQixnQkFBUSxPQUFPLFFBQVEsV0FBVyxRQUFRO0FBQUEsTUFDM0MsU0FBUyxVQUFVO0FBRW5CLHFCQUFlLE9BQU8sT0FBTyxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBTSxpQ0FBaUMsQ0FBQyxRQUFRLFFBQVEsU0FBUyxVQUFVO0FBQzFFLFVBQUksV0FBVztBQUNmLFVBQUksY0FBYztBQUNsQixTQUFHO0FBQ0YsY0FBTSxRQUFRLE9BQU8sUUFBUSxPQUFPO0FBQ3BDLHVCQUFlLE9BQU8sT0FBTyxXQUFXLFFBQVEsUUFBUSxJQUFJLFNBQVMsUUFBUSxJQUFJLFVBQVUsUUFBUSxTQUFTLFFBQVE7QUFDcEgsbUJBQVcsUUFBUTtBQUNuQixnQkFBUSxPQUFPLFFBQVEsTUFBTSxRQUFRO0FBQUEsTUFDdEMsU0FBUyxVQUFVO0FBRW5CLHFCQUFlLE9BQU8sT0FBTyxRQUFRO0FBQ3JDLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUFBO0FBQUE7OztBQ3RDQTtBQUFBLG9EQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLGlCQUFpQjtBQUN2QixRQUFNLGNBQWM7QUFDcEIsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sZUFBZTtBQUVyQixRQUFNLFVBQVUsb0JBQUksSUFBSTtBQUFBLE1BQ3ZCLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDVixDQUFDLEtBQUssSUFBSTtBQUFBLE1BQ1YsQ0FBQyxLQUFLLEdBQUk7QUFBQSxNQUNWLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDVixDQUFDLEtBQUssSUFBSTtBQUFBLE1BQ1YsQ0FBQyxLQUFLLElBQUk7QUFBQSxNQUNWLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDVixDQUFDLE1BQU0sSUFBSTtBQUFBLE1BQ1gsQ0FBQyxLQUFLLE1BQVE7QUFBQSxNQUNkLENBQUMsS0FBSyxNQUFRO0FBQUEsSUFDZixDQUFDO0FBRUQsYUFBUyxTQUFTLEdBQUc7QUFDcEIsWUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixZQUFNLFVBQVUsRUFBRSxPQUFPO0FBRXpCLFVBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLEtBQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxXQUFXLEdBQUk7QUFDMUUsZUFBTyxPQUFPLGFBQWEsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUFBLE1BQ3BEO0FBRUEsVUFBSSxLQUFLLFNBQVM7QUFDakIsZUFBTyxPQUFPLGNBQWMsU0FBUyxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQUEsTUFDekQ7QUFFQSxhQUFPLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFBQSxJQUMxQjtBQUVBLGFBQVMsZUFBZSxNQUFNLFlBQVk7QUFDekMsWUFBTSxVQUFVLENBQUM7QUFDakIsWUFBTSxTQUFTLFdBQVcsS0FBSyxFQUFFLE1BQU0sVUFBVTtBQUNqRCxVQUFJO0FBRUosaUJBQVcsU0FBUyxRQUFRO0FBQzNCLGNBQU0sU0FBUyxPQUFPLEtBQUs7QUFDM0IsWUFBSSxDQUFDLE9BQU8sTUFBTSxNQUFNLEdBQUc7QUFDMUIsa0JBQVEsS0FBSyxNQUFNO0FBQUEsUUFDcEIsV0FBWSxVQUFVLE1BQU0sTUFBTSxZQUFZLEdBQUk7QUFDakQsa0JBQVEsS0FBSyxRQUFRLEdBQUcsUUFBUSxjQUFjLENBQUMsR0FBRyxRQUFRLGNBQWMsU0FBUyxTQUFTLE1BQU0sSUFBSSxTQUFTLENBQUM7QUFBQSxRQUMvRyxPQUFPO0FBQ04sZ0JBQU0sSUFBSSxNQUFNLDBDQUEwQyxvQkFBb0IsUUFBUTtBQUFBLFFBQ3ZGO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsYUFBUyxXQUFXLE9BQU87QUFDMUIsa0JBQVksWUFBWTtBQUV4QixZQUFNLFVBQVUsQ0FBQztBQUNqQixVQUFJO0FBRUosY0FBUSxVQUFVLFlBQVksS0FBSyxLQUFLLE9BQU8sTUFBTTtBQUNwRCxjQUFNLE9BQU8sUUFBUTtBQUVyQixZQUFJLFFBQVEsSUFBSTtBQUNmLGdCQUFNLE9BQU8sZUFBZSxNQUFNLFFBQVEsRUFBRTtBQUM1QyxrQkFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsUUFDakMsT0FBTztBQUNOLGtCQUFRLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFBQSxRQUNwQjtBQUFBLE1BQ0Q7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUVBLGFBQVMsV0FBV0MsUUFBTyxRQUFRO0FBQ2xDLFlBQU0sVUFBVSxDQUFDO0FBRWpCLGlCQUFXLFNBQVMsUUFBUTtBQUMzQixtQkFBVyxTQUFTLE1BQU0sUUFBUTtBQUNqQyxrQkFBUSxNQUFNLE1BQU0sTUFBTSxVQUFVLE9BQU8sTUFBTSxNQUFNLENBQUM7QUFBQSxRQUN6RDtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFVBQVVBO0FBQ2QsaUJBQVcsQ0FBQyxXQUFXQyxPQUFNLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRztBQUMxRCxZQUFJLENBQUMsTUFBTSxRQUFRQSxPQUFNLEdBQUc7QUFDM0I7QUFBQSxRQUNEO0FBRUEsWUFBSSxFQUFFLGFBQWEsVUFBVTtBQUM1QixnQkFBTSxJQUFJLE1BQU0sd0JBQXdCLFdBQVc7QUFBQSxRQUNwRDtBQUVBLGtCQUFVQSxRQUFPLFNBQVMsSUFBSSxRQUFRLFdBQVcsR0FBR0EsT0FBTSxJQUFJLFFBQVE7QUFBQSxNQUN2RTtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUYsUUFBTyxVQUFVLENBQUNDLFFBQU8sY0FBYztBQUN0QyxZQUFNLFNBQVMsQ0FBQztBQUNoQixZQUFNLFNBQVMsQ0FBQztBQUNoQixVQUFJLFFBQVEsQ0FBQztBQUdiLGdCQUFVLFFBQVEsZ0JBQWdCLENBQUMsR0FBRyxpQkFBaUIsU0FBUyxPQUFPLE9BQU8sY0FBYztBQUMzRixZQUFJLGlCQUFpQjtBQUNwQixnQkFBTSxLQUFLLFNBQVMsZUFBZSxDQUFDO0FBQUEsUUFDckMsV0FBVyxPQUFPO0FBQ2pCLGdCQUFNLFNBQVMsTUFBTSxLQUFLLEVBQUU7QUFDNUIsa0JBQVEsQ0FBQztBQUNULGlCQUFPLEtBQUssT0FBTyxXQUFXLElBQUksU0FBUyxXQUFXQSxRQUFPLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDNUUsaUJBQU8sS0FBSyxFQUFDLFNBQVMsUUFBUSxXQUFXLEtBQUssRUFBQyxDQUFDO0FBQUEsUUFDakQsV0FBVyxPQUFPO0FBQ2pCLGNBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEIsa0JBQU0sSUFBSSxNQUFNLDhDQUE4QztBQUFBLFVBQy9EO0FBRUEsaUJBQU8sS0FBSyxXQUFXQSxRQUFPLE1BQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDckQsa0JBQVEsQ0FBQztBQUNULGlCQUFPLElBQUk7QUFBQSxRQUNaLE9BQU87QUFDTixnQkFBTSxLQUFLLFNBQVM7QUFBQSxRQUNyQjtBQUFBLE1BQ0QsQ0FBQztBQUVELGFBQU8sS0FBSyxNQUFNLEtBQUssRUFBRSxDQUFDO0FBRTFCLFVBQUksT0FBTyxTQUFTLEdBQUc7QUFDdEIsY0FBTSxhQUFhLHFDQUFxQyxPQUFPLHlCQUF5QixPQUFPLFdBQVcsSUFBSSxLQUFLO0FBQ25ILGNBQU0sSUFBSSxNQUFNLFVBQVU7QUFBQSxNQUMzQjtBQUVBLGFBQU8sT0FBTyxLQUFLLEVBQUU7QUFBQSxJQUN0QjtBQUFBO0FBQUE7OztBQ3JJQTtBQUFBLGdEQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLGFBQWE7QUFDbkIsUUFBTSxFQUFDLFFBQVEsYUFBYSxRQUFRLFlBQVcsSUFBSTtBQUNuRCxRQUFNO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNELElBQUk7QUFFSixRQUFNLEVBQUMsUUFBTyxJQUFJO0FBR2xCLFFBQU0sZUFBZTtBQUFBLE1BQ3BCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUVBLFFBQU0sU0FBUyx1QkFBTyxPQUFPLElBQUk7QUFFakMsUUFBTSxlQUFlLENBQUMsUUFBUSxVQUFVLENBQUMsTUFBTTtBQUM5QyxVQUFJLFFBQVEsU0FBUyxFQUFFLE9BQU8sVUFBVSxRQUFRLEtBQUssS0FBSyxRQUFRLFNBQVMsS0FBSyxRQUFRLFNBQVMsSUFBSTtBQUNwRyxjQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxNQUN0RTtBQUdBLFlBQU0sYUFBYSxjQUFjLFlBQVksUUFBUTtBQUNyRCxhQUFPLFFBQVEsUUFBUSxVQUFVLFNBQVksYUFBYSxRQUFRO0FBQUEsSUFDbkU7QUFFQSxRQUFNLGFBQU4sTUFBaUI7QUFBQSxNQUNoQixZQUFZLFNBQVM7QUFFcEIsZUFBTyxhQUFhLE9BQU87QUFBQSxNQUM1QjtBQUFBLElBQ0Q7QUFFQSxRQUFNLGVBQWUsYUFBVztBQUMvQixZQUFNQyxTQUFRLENBQUM7QUFDZixtQkFBYUEsUUFBTyxPQUFPO0FBRTNCLE1BQUFBLE9BQU0sV0FBVyxJQUFJLGVBQWUsU0FBU0EsT0FBTSxVQUFVLEdBQUcsVUFBVTtBQUUxRSxhQUFPLGVBQWVBLFFBQU8sTUFBTSxTQUFTO0FBQzVDLGFBQU8sZUFBZUEsT0FBTSxVQUFVQSxNQUFLO0FBRTNDLE1BQUFBLE9BQU0sU0FBUyxjQUFjLE1BQU07QUFDbEMsY0FBTSxJQUFJLE1BQU0sMEVBQTBFO0FBQUEsTUFDM0Y7QUFFQSxNQUFBQSxPQUFNLFNBQVMsV0FBVztBQUUxQixhQUFPQSxPQUFNO0FBQUEsSUFDZDtBQUVBLGFBQVMsTUFBTSxTQUFTO0FBQ3ZCLGFBQU8sYUFBYSxPQUFPO0FBQUEsSUFDNUI7QUFFQSxlQUFXLENBQUMsV0FBVyxLQUFLLEtBQUssT0FBTyxRQUFRLFVBQVUsR0FBRztBQUM1RCxhQUFPLGFBQWE7QUFBQSxRQUNuQixNQUFNO0FBQ0wsZ0JBQU0sVUFBVSxjQUFjLE1BQU0sYUFBYSxNQUFNLE1BQU0sTUFBTSxPQUFPLEtBQUssT0FBTyxHQUFHLEtBQUssUUFBUTtBQUN0RyxpQkFBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTyxVQUFVO0FBQUEsTUFDaEIsTUFBTTtBQUNMLGNBQU0sVUFBVSxjQUFjLE1BQU0sS0FBSyxTQUFTLElBQUk7QUFDdEQsZUFBTyxlQUFlLE1BQU0sV0FBVyxFQUFDLE9BQU8sUUFBTyxDQUFDO0FBQ3ZELGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFFBQU0sYUFBYSxDQUFDLE9BQU8sT0FBTyxXQUFXLE9BQU8sT0FBTyxPQUFPLFFBQVEsU0FBUztBQUVuRixlQUFXLFNBQVMsWUFBWTtBQUMvQixhQUFPLFNBQVM7QUFBQSxRQUNmLE1BQU07QUFDTCxnQkFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixpQkFBTyxZQUFhLFlBQVk7QUFDL0Isa0JBQU0sU0FBUyxhQUFhLFdBQVcsTUFBTSxhQUFhLFFBQVEsT0FBTyxHQUFHLFVBQVUsR0FBRyxXQUFXLE1BQU0sT0FBTyxLQUFLLE9BQU87QUFDN0gsbUJBQU8sY0FBYyxNQUFNLFFBQVEsS0FBSyxRQUFRO0FBQUEsVUFDakQ7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxlQUFXLFNBQVMsWUFBWTtBQUMvQixZQUFNLFVBQVUsT0FBTyxNQUFNLEdBQUcsWUFBWSxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdELGFBQU8sV0FBVztBQUFBLFFBQ2pCLE1BQU07QUFDTCxnQkFBTSxFQUFDLE1BQUssSUFBSTtBQUNoQixpQkFBTyxZQUFhLFlBQVk7QUFDL0Isa0JBQU0sU0FBUyxhQUFhLFdBQVcsUUFBUSxhQUFhLFFBQVEsT0FBTyxHQUFHLFVBQVUsR0FBRyxXQUFXLFFBQVEsT0FBTyxLQUFLLE9BQU87QUFDakksbUJBQU8sY0FBYyxNQUFNLFFBQVEsS0FBSyxRQUFRO0FBQUEsVUFDakQ7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxRQUFNLFFBQVEsT0FBTyxpQkFBaUIsTUFBTTtBQUFBLElBQUMsR0FBRztBQUFBLE1BQy9DLEdBQUc7QUFBQSxNQUNILE9BQU87QUFBQSxRQUNOLFlBQVk7QUFBQSxRQUNaLE1BQU07QUFDTCxpQkFBTyxLQUFLLFdBQVc7QUFBQSxRQUN4QjtBQUFBLFFBQ0EsSUFBSSxPQUFPO0FBQ1YsZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUN6QjtBQUFBLE1BQ0Q7QUFBQSxJQUNELENBQUM7QUFFRCxRQUFNLGVBQWUsQ0FBQyxNQUFNLE9BQU8sV0FBVztBQUM3QyxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUksV0FBVyxRQUFXO0FBQ3pCLGtCQUFVO0FBQ1YsbUJBQVc7QUFBQSxNQUNaLE9BQU87QUFDTixrQkFBVSxPQUFPLFVBQVU7QUFDM0IsbUJBQVcsUUFBUSxPQUFPO0FBQUEsTUFDM0I7QUFFQSxhQUFPO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQU0sZ0JBQWdCLENBQUNDLE9BQU0sU0FBUyxhQUFhO0FBQ2xELFlBQU0sVUFBVSxJQUFJLGVBQWU7QUFDbEMsWUFBSSxRQUFRLFdBQVcsRUFBRSxLQUFLLFFBQVEsV0FBVyxHQUFHLEdBQUcsR0FBRztBQUV6RCxpQkFBTyxXQUFXLFNBQVMsU0FBUyxTQUFTLEdBQUcsVUFBVSxDQUFDO0FBQUEsUUFDNUQ7QUFJQSxlQUFPLFdBQVcsU0FBVSxXQUFXLFdBQVcsSUFBTSxLQUFLLFdBQVcsS0FBTSxXQUFXLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDbkc7QUFJQSxhQUFPLGVBQWUsU0FBUyxLQUFLO0FBRXBDLGNBQVEsYUFBYUE7QUFDckIsY0FBUSxVQUFVO0FBQ2xCLGNBQVEsV0FBVztBQUVuQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQU0sYUFBYSxDQUFDQSxPQUFNLFdBQVc7QUFDcEMsVUFBSUEsTUFBSyxTQUFTLEtBQUssQ0FBQyxRQUFRO0FBQy9CLGVBQU9BLE1BQUssV0FBVyxLQUFLO0FBQUEsTUFDN0I7QUFFQSxVQUFJLFNBQVNBLE1BQUs7QUFFbEIsVUFBSSxXQUFXLFFBQVc7QUFDekIsZUFBTztBQUFBLE1BQ1I7QUFFQSxZQUFNLEVBQUMsU0FBUyxTQUFRLElBQUk7QUFDNUIsVUFBSSxPQUFPLFFBQVEsTUFBUSxNQUFNLElBQUk7QUFDcEMsZUFBTyxXQUFXLFFBQVc7QUFJNUIsbUJBQVMsaUJBQWlCLFFBQVEsT0FBTyxPQUFPLE9BQU8sSUFBSTtBQUUzRCxtQkFBUyxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUNEO0FBS0EsWUFBTSxVQUFVLE9BQU8sUUFBUSxJQUFJO0FBQ25DLFVBQUksWUFBWSxJQUFJO0FBQ25CLGlCQUFTLCtCQUErQixRQUFRLFVBQVUsU0FBUyxPQUFPO0FBQUEsTUFDM0U7QUFFQSxhQUFPLFVBQVUsU0FBUztBQUFBLElBQzNCO0FBRUEsUUFBSTtBQUNKLFFBQU0sV0FBVyxDQUFDRCxXQUFVLFlBQVk7QUFDdkMsWUFBTSxDQUFDLFdBQVcsSUFBSTtBQUV0QixVQUFJLENBQUMsUUFBUSxXQUFXLEtBQUssQ0FBQyxRQUFRLFlBQVksR0FBRyxHQUFHO0FBR3ZELGVBQU8sUUFBUSxLQUFLLEdBQUc7QUFBQSxNQUN4QjtBQUVBLFlBQU0sYUFBYSxRQUFRLE1BQU0sQ0FBQztBQUNsQyxZQUFNLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRTtBQUVqQyxlQUFTLElBQUksR0FBRyxJQUFJLFlBQVksUUFBUSxLQUFLO0FBQzVDLGNBQU07QUFBQSxVQUNMLE9BQU8sV0FBVyxJQUFJLEVBQUUsRUFBRSxRQUFRLFdBQVcsTUFBTTtBQUFBLFVBQ25ELE9BQU8sWUFBWSxJQUFJLEVBQUU7QUFBQSxRQUMxQjtBQUFBLE1BQ0Q7QUFFQSxVQUFJLGFBQWEsUUFBVztBQUMzQixtQkFBVztBQUFBLE1BQ1o7QUFFQSxhQUFPLFNBQVNBLFFBQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUFBLElBQ3RDO0FBRUEsV0FBTyxpQkFBaUIsTUFBTSxXQUFXLE1BQU07QUFFL0MsUUFBTUEsU0FBUSxNQUFNO0FBQ3BCLElBQUFBLE9BQU0sZ0JBQWdCO0FBQ3RCLElBQUFBLE9BQU0sU0FBUyxNQUFNLEVBQUMsT0FBTyxjQUFjLFlBQVksUUFBUSxFQUFDLENBQUM7QUFDakUsSUFBQUEsT0FBTSxPQUFPLGdCQUFnQjtBQUU3QixJQUFBRCxRQUFPLFVBQVVDO0FBQUE7QUFBQTs7O0FDcE9qQjtBQUFBO0FBQ0EsUUFBSSxxQkFBcUI7QUFBQSxNQUNyQjtBQUFBLElBR0o7QUFFQSxXQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNQakI7QUFBQSx3REFBQUUsVUFBQUMsU0FBQTtBQUFBLFFBQUlDLHNCQUFxQjtBQUd6QixRQUFJLFNBQVMsU0FBVSxhQUFhO0FBQ2xDLGFBQ0UsT0FBTyxnQkFBZ0IsZUFDdkIsWUFBWSxZQUFZLFFBQ3hCLFlBQVksU0FBUyxRQUFRO0FBQUEsSUFFakM7QUFDQSxJQUFBRCxRQUFPLFFBQVEsU0FBUztBQUd4QixJQUFBQSxRQUFPLFFBQVEsV0FBVyxPQUFPLFlBQVksZUFBZSxPQUFPLE9BQU8sSUFDdEUsU0FDQTtBQUlKLFFBQUksaUJBQWlCLHNCQUFzQixnQkFBZ0I7QUFDM0QsSUFBQUEsUUFBTyxRQUFRLGVBQWVBLFFBQU8sUUFBUSxhQUFhLFVBQ3BELENBQUMsa0JBQWtCLGVBQWUsaUJBQWlCLENBQUMsUUFBUSxZQUM5RCxPQUFPLFdBQVc7QUFHdEIsSUFBQUEsUUFBTyxRQUFRLE9BQU9BLFFBQU8sUUFBUSxhQUFhLFlBQzlDLEtBQUssVUFBVSxzQkFDZkMsb0JBQW1CLElBQUksRUFBRSxLQUFLLEVBQUU7QUFFcEMsYUFBUyxzQkFBdUJELFNBQVE7QUFDdEMsVUFBSTtBQUNGLGVBQU9DLG9CQUFtQkQsT0FBTTtBQUFBLE1BQ2xDLFNBQVEsS0FBTjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ25DQTtBQUFBLG9EQUFBRSxVQUFBQyxTQUFBO0FBQUE7QUFVQSxhQUFTQyxTQUFRLFNBQVMsUUFBUTtBQUNoQyxVQUFJLEtBQUs7QUFFVCxVQUFJLEVBQUUsZ0JBQWdCQSxXQUFVO0FBQzlCLGNBQU0sSUFBSSxZQUFZLGtEQUFrRDtBQUFBLE1BQzFFO0FBRUEsVUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxjQUFNLElBQUksWUFBWSxxREFBcUQ7QUFBQSxNQUM3RTtBQUVBLFVBQUksYUFBYSxDQUFDO0FBQ2xCLFVBQUksVUFBVSxDQUFDO0FBR2YsV0FBSyxXQUFXO0FBQ2hCLFdBQUssV0FBVztBQUNoQixXQUFLLFVBQVU7QUFTZixVQUFJLFdBQVcsU0FBVSxXQUFXLFFBQVE7QUFDMUMsbUJBQVcsS0FBSyxTQUFTO0FBQ3pCLGdCQUFRLEtBQUssTUFBTTtBQUFBLE1BQ3JCO0FBUUEsV0FBSyxPQUFPLFNBQVUsV0FBVyxRQUFRO0FBQ3ZDLGVBQU8sSUFBSUEsU0FBUSxTQUFVQyxVQUFTLFFBQVE7QUFDNUMsY0FBSSxJQUFJLFlBQVksTUFBTSxXQUFXQSxVQUFTLE1BQU0sSUFBSUE7QUFDeEQsY0FBSSxJQUFJLFNBQVksTUFBTSxRQUFXQSxVQUFTLE1BQU0sSUFBSTtBQUV4RCxtQkFBUyxHQUFHLENBQUM7QUFBQSxRQUNmLEdBQUcsRUFBRTtBQUFBLE1BQ1A7QUFPQSxVQUFJLFdBQVcsU0FBVSxRQUFRO0FBRS9CLFdBQUcsV0FBVztBQUNkLFdBQUcsV0FBVztBQUNkLFdBQUcsVUFBVTtBQUViLG1CQUFXLFFBQVEsU0FBVSxJQUFJO0FBQy9CLGFBQUcsTUFBTTtBQUFBLFFBQ1gsQ0FBQztBQUVELG1CQUFXLFNBQVUsV0FBVyxRQUFRO0FBQ3RDLG9CQUFVLE1BQU07QUFBQSxRQUNsQjtBQUVBLG1CQUFXLFVBQVUsV0FBWTtBQUFBLFFBQUU7QUFFbkMsZUFBTztBQUFBLE1BQ1Q7QUFPQSxVQUFJLFVBQVUsU0FBVUMsUUFBTztBQUU3QixXQUFHLFdBQVc7QUFDZCxXQUFHLFdBQVc7QUFDZCxXQUFHLFVBQVU7QUFFYixnQkFBUSxRQUFRLFNBQVUsSUFBSTtBQUM1QixhQUFHQSxNQUFLO0FBQUEsUUFDVixDQUFDO0FBRUQsbUJBQVcsU0FBVSxXQUFXLFFBQVE7QUFDdEMsaUJBQU9BLE1BQUs7QUFBQSxRQUNkO0FBRUEsbUJBQVcsVUFBVSxXQUFZO0FBQUEsUUFBRTtBQUVuQyxlQUFPO0FBQUEsTUFDVDtBQU1BLFdBQUssU0FBUyxXQUFZO0FBQ3hCLFlBQUksUUFBUTtBQUNWLGlCQUFPLE9BQU87QUFBQSxRQUNoQixPQUNLO0FBQ0gsa0JBQVEsSUFBSSxrQkFBa0IsQ0FBQztBQUFBLFFBQ2pDO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFTQSxXQUFLLFVBQVUsU0FBVSxPQUFPO0FBQzlCLFlBQUksUUFBUTtBQUNWLGlCQUFPLFFBQVEsS0FBSztBQUFBLFFBQ3RCLE9BQ0s7QUFDSCxjQUFJLFFBQVEsV0FBVyxXQUFZO0FBQ2pDLG9CQUFRLElBQUksYUFBYSw2QkFBNkIsUUFBUSxLQUFLLENBQUM7QUFBQSxVQUN0RSxHQUFHLEtBQUs7QUFFUixhQUFHLE9BQU8sV0FBWTtBQUNwQix5QkFBYSxLQUFLO0FBQUEsVUFDcEIsQ0FBQztBQUFBLFFBQ0g7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUdBLGNBQVEsU0FBVSxRQUFRO0FBQ3hCLGlCQUFTLE1BQU07QUFBQSxNQUNqQixHQUFHLFNBQVVBLFFBQU87QUFDbEIsZ0JBQVFBLE1BQUs7QUFBQSxNQUNmLENBQUM7QUFBQSxJQUNIO0FBVUEsYUFBUyxNQUFNLFVBQVVELFVBQVMsUUFBUTtBQUN4QyxhQUFPLFNBQVUsUUFBUTtBQUN2QixZQUFJO0FBQ0YsY0FBSSxNQUFNLFNBQVMsTUFBTTtBQUN6QixjQUFJLE9BQU8sT0FBTyxJQUFJLFNBQVMsY0FBYyxPQUFPLElBQUksYUFBYSxZQUFZO0FBRS9FLGdCQUFJLEtBQUtBLFVBQVMsTUFBTTtBQUFBLFVBQzFCLE9BQ0s7QUFDSCxZQUFBQSxTQUFRLEdBQUc7QUFBQSxVQUNiO0FBQUEsUUFDRixTQUNPQyxRQUFQO0FBQ0UsaUJBQU9BLE1BQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFPQSxJQUFBRixTQUFRLFVBQVUsV0FBVyxTQUFVLFFBQVE7QUFDN0MsYUFBTyxLQUFLLEtBQUssTUFBTSxNQUFNO0FBQUEsSUFDL0I7QUFVQSxJQUFBQSxTQUFRLFVBQVUsU0FBUyxTQUFVLElBQUk7QUFDdkMsYUFBTyxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQUEsSUFDekI7QUFRQSxJQUFBQSxTQUFRLE1BQU0sU0FBVSxVQUFTO0FBQy9CLGFBQU8sSUFBSUEsU0FBUSxTQUFVQyxVQUFTLFFBQVE7QUFDNUMsWUFBSSxZQUFZLFNBQVMsUUFDckIsVUFBVSxDQUFDO0FBRWYsWUFBSSxXQUFXO0FBQ2IsbUJBQVMsUUFBUSxTQUFVLEdBQUcsR0FBRztBQUMvQixjQUFFLEtBQUssU0FBVSxRQUFRO0FBQ3ZCLHNCQUFRLEtBQUs7QUFDYjtBQUNBLGtCQUFJLGFBQWEsR0FBRztBQUNsQixnQkFBQUEsU0FBUSxPQUFPO0FBQUEsY0FDakI7QUFBQSxZQUNGLEdBQUcsU0FBVUMsUUFBTztBQUNsQiwwQkFBWTtBQUNaLHFCQUFPQSxNQUFLO0FBQUEsWUFDZCxDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSCxPQUNLO0FBQ0gsVUFBQUQsU0FBUSxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBTUEsSUFBQUQsU0FBUSxRQUFRLFdBQVk7QUFDMUIsVUFBSSxXQUFXLENBQUM7QUFFaEIsZUFBUyxVQUFVLElBQUlBLFNBQVEsU0FBVUMsVUFBUyxRQUFRO0FBQ3hELGlCQUFTLFVBQVVBO0FBQ25CLGlCQUFTLFNBQVM7QUFBQSxNQUNwQixDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFPQSxhQUFTLGtCQUFrQixTQUFTO0FBQ2xDLFdBQUssVUFBVSxXQUFXO0FBQzFCLFdBQUssUUFBUyxJQUFJLE1BQU0sRUFBRztBQUFBLElBQzdCO0FBRUEsc0JBQWtCLFlBQVksSUFBSSxNQUFNO0FBQ3hDLHNCQUFrQixVQUFVLGNBQWM7QUFDMUMsc0JBQWtCLFVBQVUsT0FBTztBQUVuQyxJQUFBRCxTQUFRLG9CQUFvQjtBQVE1QixhQUFTLGFBQWEsU0FBUztBQUM3QixXQUFLLFVBQVUsV0FBVztBQUMxQixXQUFLLFFBQVMsSUFBSSxNQUFNLEVBQUc7QUFBQSxJQUM3QjtBQUVBLGlCQUFhLFlBQVksSUFBSSxNQUFNO0FBQ25DLGlCQUFhLFVBQVUsY0FBYztBQUNyQyxpQkFBYSxVQUFVLE9BQU87QUFFOUIsSUFBQUEsU0FBUSxlQUFlO0FBR3ZCLElBQUFELFFBQU8sVUFBVUM7QUFBQTtBQUFBOzs7QUN0UmpCO0FBQUEscUVBQUFHLFVBQUFDLFNBQUE7QUFLQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNMakI7QUFBQSwwREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSUMsV0FBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJQyxzQkFBcUI7QUFNekIsUUFBSUMsdUJBQXNCO0FBTTFCLFFBQUksNkJBQTZCO0FBRWpDLGFBQVMsc0JBQXNCO0FBQzdCLFVBQUlDLGlCQUFnQix3QkFBd0I7QUFDNUMsVUFBSSxDQUFDQSxnQkFBZTtBQUNsQixjQUFNLElBQUksTUFBTSw2RUFBK0U7QUFBQSxNQUNqRztBQUVBLGFBQU9BO0FBQUEsSUFDVDtBQUdBLGFBQVMsa0JBQWtCO0FBRXpCLFVBQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxXQUFXLFlBQVksT0FBTyxPQUFPLFVBQVUsZ0JBQWdCLGFBQWE7QUFDdEgsY0FBTSxJQUFJLE1BQU0sdUNBQXVDO0FBQUEsTUFDekQ7QUFBQSxJQUNGO0FBRUEsYUFBUywwQkFBMEI7QUFDakMsVUFBSTtBQUNGLGVBQU9GLG9CQUFtQixnQkFBZ0I7QUFBQSxNQUM1QyxTQUFRRyxRQUFOO0FBQ0EsWUFBSSxPQUFPQSxXQUFVLFlBQVlBLFdBQVUsUUFBUUEsT0FBTSxTQUFTLG9CQUFvQjtBQUVwRixpQkFBTztBQUFBLFFBQ1QsT0FBTztBQUNMLGdCQUFNQTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUdBLGFBQVMsbUJBQW1CO0FBQzFCLFVBQUksWUFBWSxhQUFhLFdBQVc7QUFFdEMsWUFBSSxPQUFPLFNBQVMsYUFBYTtBQUMvQixnQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsUUFDckQ7QUFDQSxZQUFJLENBQUMsT0FBTyxPQUFPLE9BQU8sT0FBTyxJQUFJLG9CQUFvQixZQUFZO0FBQ25FLGdCQUFNLElBQUksTUFBTSxrREFBa0Q7QUFBQSxRQUNwRTtBQUdBLFlBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyx3QkFBcUMsR0FBRyxFQUFDLE1BQU0sa0JBQWlCLENBQUM7QUFDdEYsZUFBTyxPQUFPLElBQUksZ0JBQWdCLElBQUk7QUFBQSxNQUN4QyxPQUNLO0FBRUgsZUFBTyxZQUFZO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBRUEsYUFBUyxZQUFZLFFBQVEsU0FBUztBQUNwQyxVQUFJLFFBQVEsZUFBZSxPQUFPO0FBQ2hDLHdCQUFnQjtBQUNoQixlQUFPLG1CQUFtQixRQUFRLE1BQU07QUFBQSxNQUMxQyxXQUFXLFFBQVEsZUFBZSxVQUFVO0FBQzFDLFFBQUFELGlCQUFnQixvQkFBb0I7QUFDcEMsZUFBTyx3QkFBd0IsUUFBUUEsY0FBYTtBQUFBLE1BQ3RELFdBQVcsUUFBUSxlQUFlLGFBQWEsQ0FBQyxRQUFRLFlBQVk7QUFDbEUsZUFBTyxtQkFBbUIsUUFBUSxtQkFBbUIsT0FBTyxHQUFHRixvQkFBbUIsZUFBZSxDQUFDO0FBQUEsTUFDcEcsT0FBTztBQUNMLFlBQUksWUFBWSxhQUFhLFdBQVc7QUFDdEMsMEJBQWdCO0FBQ2hCLGlCQUFPLG1CQUFtQixRQUFRLE1BQU07QUFBQSxRQUMxQyxPQUNLO0FBQ0gsY0FBSUUsaUJBQWdCLHdCQUF3QjtBQUM1QyxjQUFJQSxnQkFBZTtBQUNqQixtQkFBTyx3QkFBd0IsUUFBUUEsY0FBYTtBQUFBLFVBQ3RELE9BQU87QUFDTCxtQkFBTyxtQkFBbUIsUUFBUSxtQkFBbUIsT0FBTyxHQUFHRixvQkFBbUIsZUFBZSxDQUFDO0FBQUEsVUFDcEc7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLG1CQUFtQixRQUFRSSxTQUFRO0FBRTFDLFVBQUlDLFVBQVMsSUFBSUQsUUFBTyxNQUFNO0FBRTlCLE1BQUFDLFFBQU8sa0JBQWtCO0FBRXpCLE1BQUFBLFFBQU8sS0FBSyxTQUFVLE9BQU8sVUFBVTtBQUNyQyxhQUFLLGlCQUFpQixPQUFPLFNBQVUsU0FBUztBQUM5QyxtQkFBUyxRQUFRLElBQUk7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDSDtBQUNBLE1BQUFBLFFBQU8sT0FBTyxTQUFVLFNBQVM7QUFDL0IsYUFBSyxZQUFZLE9BQU87QUFBQSxNQUMxQjtBQUNBLGFBQU9BO0FBQUEsSUFDVDtBQUVBLGFBQVMsd0JBQXdCLFFBQVFILGdCQUFlO0FBQ3RELFVBQUlHLFVBQVMsSUFBSUgsZUFBYyxPQUFPLFFBQVE7QUFBQSxRQUM1QyxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDVixDQUFDO0FBQ0QsTUFBQUcsUUFBTyxpQkFBaUI7QUFFeEIsTUFBQUEsUUFBTyxPQUFPLFNBQVMsU0FBUztBQUM5QixhQUFLLFlBQVksT0FBTztBQUFBLE1BQzFCO0FBRUEsTUFBQUEsUUFBTyxPQUFPLFdBQVc7QUFDdkIsYUFBSyxVQUFVO0FBQ2YsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBQSxRQUFPLGFBQWEsV0FBVztBQUM3QixhQUFLLFVBQVU7QUFBQSxNQUNqQjtBQUVBLGFBQU9BO0FBQUEsSUFDVDtBQUVBLGFBQVMsbUJBQW1CLFFBQVEsU0FBUyxlQUFlO0FBRTFELFVBQUlBLFVBQVMsY0FBYztBQUFBLFFBQ3pCO0FBQUEsUUFDQSxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDVjtBQUVBLE1BQUFBLFFBQU8saUJBQWlCO0FBQ3hCLGFBQU9BO0FBQUEsSUFDVDtBQUdBLGFBQVMsbUJBQW1CLE1BQU07QUFDaEMsYUFBTyxRQUFRLENBQUM7QUFFaEIsVUFBSSxrQkFBa0IsUUFBUSxTQUFTLEtBQUssR0FBRztBQUMvQyxVQUFJLGtCQUFrQixnQkFBZ0IsUUFBUSxXQUFXLE1BQU07QUFDL0QsVUFBSSxXQUFXLGdCQUFnQixRQUFRLGFBQWEsTUFBTTtBQUUxRCxVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFJLGlCQUFpQjtBQUNuQixpQkFBUyxLQUFLLGVBQWUsS0FBSyxTQUFTO0FBRTNDLFlBQUksVUFBVTtBQUNaLG1CQUFTLEtBQUssYUFBYTtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUVBLGNBQVEsU0FBUyxRQUFRLFNBQVMsS0FBSztBQUNyQyxZQUFJLElBQUksUUFBUSxzQkFBc0IsSUFBSSxJQUFJO0FBQzVDLG1CQUFTLEtBQUssR0FBRztBQUFBLFFBQ25CO0FBQUEsTUFDRixDQUFDO0FBRUQsYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU07QUFBQSxRQUM3QixVQUFVLEtBQUs7QUFBQSxRQUNmLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxLQUFLLFVBQVU7QUFBQSxVQUN6QyxXQUFXLEtBQUssWUFBWSxLQUFLLFNBQVMsWUFBWSxDQUFDLEdBQ3RELE9BQU8sUUFBUTtBQUFBLFFBQ2xCLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBT0EsYUFBUyxjQUFlLEtBQUs7QUFDM0IsVUFBSSxPQUFPLElBQUksTUFBTSxFQUFFO0FBQ3ZCLFVBQUksUUFBUSxPQUFPLEtBQUssR0FBRztBQUUzQixlQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQ3JDLGFBQUssTUFBTSxNQUFNLElBQUksTUFBTTtBQUFBLE1BQzdCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFVQSxhQUFTLGNBQWMsUUFBUSxVQUFVO0FBQ3ZDLFVBQUksS0FBSztBQUNULFVBQUksVUFBVSxZQUFZLENBQUM7QUFFM0IsV0FBSyxTQUFTLFVBQVUsaUJBQWlCO0FBQ3pDLFdBQUssU0FBUyxZQUFZLEtBQUssUUFBUSxPQUFPO0FBQzlDLFdBQUssWUFBWSxRQUFRO0FBQ3pCLFdBQUssV0FBVyxRQUFRO0FBQ3hCLFdBQUssV0FBVyxRQUFRO0FBR3hCLFVBQUksQ0FBQyxRQUFRO0FBQ1gsYUFBSyxPQUFPLFFBQVE7QUFBQSxNQUN0QjtBQUdBLFdBQUssZUFBZSxDQUFDO0FBQ3JCLFdBQUssT0FBTyxHQUFHLFdBQVcsU0FBVSxVQUFVO0FBQzVDLFlBQUksR0FBRyxZQUFZO0FBQ2pCO0FBQUEsUUFDRjtBQUNBLFlBQUksT0FBTyxhQUFhLFlBQVksYUFBYSxTQUFTO0FBQ3hELGFBQUcsT0FBTyxRQUFRO0FBQ2xCLGlDQUF1QjtBQUFBLFFBQ3pCLE9BQU87QUFFTCxjQUFJLEtBQUssU0FBUztBQUNsQixjQUFJLE9BQU8sR0FBRyxXQUFXO0FBQ3pCLGNBQUksU0FBUyxRQUFXO0FBQ3RCLGdCQUFJLFNBQVMsU0FBUztBQUNwQixrQkFBSSxLQUFLLFdBQVcsT0FBTyxLQUFLLFFBQVEsT0FBTyxZQUFZO0FBQ3pELHFCQUFLLFFBQVEsR0FBRyxTQUFTLE9BQU87QUFBQSxjQUNsQztBQUFBLFlBQ0YsT0FBTztBQUVMLHFCQUFPLEdBQUcsV0FBVztBQUdyQixrQkFBSSxHQUFHLGdCQUFnQixNQUFNO0FBRTNCLG1CQUFHLFVBQVU7QUFBQSxjQUNmO0FBR0Esa0JBQUksU0FBUyxPQUFPO0FBQ2xCLHFCQUFLLFNBQVMsT0FBTyxjQUFjLFNBQVMsS0FBSyxDQUFDO0FBQUEsY0FDcEQsT0FDSztBQUNILHFCQUFLLFNBQVMsUUFBUSxTQUFTLE1BQU07QUFBQSxjQUN2QztBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUdELGVBQVMsUUFBUUYsUUFBTztBQUN0QixXQUFHLGFBQWE7QUFFaEIsaUJBQVMsTUFBTSxHQUFHLFlBQVk7QUFDNUIsY0FBSSxHQUFHLFdBQVcsUUFBUSxRQUFXO0FBQ25DLGVBQUcsV0FBVyxJQUFJLFNBQVMsT0FBT0EsTUFBSztBQUFBLFVBQ3pDO0FBQUEsUUFDRjtBQUNBLFdBQUcsYUFBYSx1QkFBTyxPQUFPLElBQUk7QUFBQSxNQUNwQztBQUdBLGVBQVMseUJBQ1Q7QUFDRSxtQkFBVSxXQUFXLEdBQUcsYUFBYSxPQUFPLENBQUMsR0FBRztBQUM5QyxhQUFHLE9BQU8sS0FBSyxPQUFPO0FBQUEsUUFDeEI7QUFBQSxNQUNGO0FBRUEsVUFBSUUsVUFBUyxLQUFLO0FBRWxCLFdBQUssT0FBTyxHQUFHLFNBQVMsT0FBTztBQUMvQixXQUFLLE9BQU8sR0FBRyxRQUFRLFNBQVUsVUFBVSxZQUFZO0FBQ3JELFlBQUksVUFBVTtBQUVkLG1CQUFXLG9CQUFvQixXQUFXO0FBQzFDLG1CQUFXLHNCQUFzQixhQUFhO0FBRTlDLG1CQUFXLDZCQUE4QixHQUFHLFNBQVM7QUFDckQsbUJBQVcscUJBQXNCQSxRQUFPLFlBQVk7QUFDcEQsbUJBQVcscUJBQXFCQSxRQUFPLFlBQVk7QUFFbkQsbUJBQVcsa0JBQWtCQSxRQUFPLFNBQVM7QUFDN0MsbUJBQVcsa0JBQWtCQSxRQUFPLFNBQVM7QUFFN0MsZ0JBQVEsSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUFBLE1BQzVCLENBQUM7QUFFRCxXQUFLLGFBQWEsdUJBQU8sT0FBTyxJQUFJO0FBRXBDLFdBQUssY0FBYztBQUNuQixXQUFLLGFBQWE7QUFDbEIsV0FBSyxxQkFBcUI7QUFDMUIsV0FBSyxTQUFTO0FBQUEsSUFDaEI7QUFNQSxrQkFBYyxVQUFVLFVBQVUsV0FBWTtBQUM1QyxhQUFPLEtBQUssS0FBSyxTQUFTO0FBQUEsSUFDNUI7QUFVQSxrQkFBYyxVQUFVLE9BQU8sU0FBUyxRQUFRLFFBQVEsVUFBVSxTQUFTO0FBQ3pFLFVBQUksQ0FBQyxVQUFVO0FBQ2IsbUJBQVdOLFNBQVEsTUFBTTtBQUFBLE1BQzNCO0FBR0EsVUFBSSxLQUFLLEVBQUUsS0FBSztBQUdoQixXQUFLLFdBQVcsTUFBTTtBQUFBLFFBQ3BCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBR0EsVUFBSSxVQUFVO0FBQUEsUUFDWjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUVBLFVBQUksS0FBSyxZQUFZO0FBQ25CLGlCQUFTLE9BQU8sSUFBSSxNQUFNLHNCQUFzQixDQUFDO0FBQUEsTUFDbkQsV0FBVyxLQUFLLE9BQU8sT0FBTztBQUU1QixhQUFLLE9BQU8sS0FBSyxPQUFPO0FBQUEsTUFDMUIsT0FBTztBQUNMLGFBQUssYUFBYSxLQUFLLE9BQU87QUFBQSxNQUNoQztBQUdBLFVBQUksS0FBSztBQUNULGFBQU8sU0FBUyxRQUFRLE1BQU0sU0FBVUksUUFBTztBQUM3QyxZQUFJQSxrQkFBaUJKLFNBQVEscUJBQXFCSSxrQkFBaUJKLFNBQVEsY0FBYztBQUd2RixpQkFBTyxHQUFHLFdBQVc7QUFHckIsaUJBQU8sR0FBRyxtQkFBbUIsSUFBSSxFQUM5QixLQUFLLFdBQVc7QUFDZixrQkFBTUk7QUFBQSxVQUNSLEdBQUcsU0FBUyxLQUFLO0FBQ2Ysa0JBQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNMLE9BQU87QUFDTCxnQkFBTUE7QUFBQSxRQUNSO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQU1BLGtCQUFjLFVBQVUsT0FBTyxXQUFZO0FBQ3pDLGFBQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLFNBQVM7QUFBQSxJQUMvQztBQVVBLGtCQUFjLFVBQVUsWUFBWSxTQUFVLE9BQU8sVUFBVTtBQUM3RCxVQUFJLEtBQUs7QUFDVCxVQUFJLE9BQU87QUFFVCxpQkFBUyxNQUFNLEtBQUssWUFBWTtBQUM5QixjQUFJLEtBQUssV0FBVyxRQUFRLFFBQVc7QUFDckMsaUJBQUssV0FBVyxJQUFJLFNBQVMsT0FBTyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFBQSxVQUNwRTtBQUFBLFFBQ0Y7QUFDQSxhQUFLLGFBQWEsdUJBQU8sT0FBTyxJQUFJO0FBQUEsTUFDdEM7QUFFQSxVQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGFBQUsscUJBQXFCO0FBQUEsTUFDNUI7QUFDQSxVQUFJLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFFaEIsWUFBSSxVQUFVLFNBQVMsS0FBSztBQUMxQixhQUFHLGFBQWE7QUFDaEIsY0FBSSxHQUFHLFVBQVUsUUFBUSxHQUFHLE9BQU8sb0JBQW9CO0FBRXJELGVBQUcsT0FBTyxtQkFBbUIsU0FBUztBQUFBLFVBQ3hDO0FBQ0EsYUFBRyxTQUFTO0FBQ1osYUFBRyxjQUFjO0FBQ2pCLGNBQUksR0FBRyxvQkFBb0I7QUFDekIsZUFBRyxtQkFBbUIsS0FBSyxFQUFFO0FBQUEsVUFDL0IsV0FBVyxLQUFLO0FBQ2Qsa0JBQU07QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUVBLFlBQUksS0FBSyxRQUFRO0FBQ2YsY0FBSSxPQUFPLEtBQUssT0FBTyxTQUFTLFlBQVk7QUFDMUMsZ0JBQUksS0FBSyxPQUFPLFFBQVE7QUFDdEIsc0JBQVEsSUFBSSxNQUFNLHdCQUF3QixDQUFDO0FBQzNDO0FBQUEsWUFDRjtBQUVBLGdCQUFJLEtBQUssT0FBTyxnQkFBZ0I7QUFDOUIsa0JBQUksbUJBQW1CLFdBQVcsV0FBVztBQUMzQyxvQkFBSSxHQUFHLFFBQVE7QUFDYixxQkFBRyxPQUFPLEtBQUs7QUFBQSxnQkFDakI7QUFBQSxjQUNGLEdBQUcsMEJBQTBCO0FBRTdCLG1CQUFLLE9BQU8sS0FBSyxRQUFRLFdBQVc7QUFDbEMsNkJBQWEsZ0JBQWdCO0FBQzdCLG9CQUFJLEdBQUcsUUFBUTtBQUNiLHFCQUFHLE9BQU8sU0FBUztBQUFBLGdCQUNyQjtBQUNBLHdCQUFRO0FBQUEsY0FDVixDQUFDO0FBRUQsa0JBQUksS0FBSyxPQUFPLE9BQU87QUFDckIscUJBQUssT0FBTyxLQUFLRixvQkFBbUI7QUFBQSxjQUN0QyxPQUFPO0FBQ0wscUJBQUssYUFBYSxLQUFLQSxvQkFBbUI7QUFBQSxjQUM1QztBQUFBLFlBQ0YsT0FBTztBQUVMLG1CQUFLLE9BQU8sS0FBSztBQUNqQixtQkFBSyxPQUFPLFNBQVM7QUFDckIsc0JBQVE7QUFBQSxZQUNWO0FBQ0E7QUFBQSxVQUNGLFdBQ1MsT0FBTyxLQUFLLE9BQU8sY0FBYyxZQUFZO0FBQ3BELGlCQUFLLE9BQU8sVUFBVTtBQUN0QixpQkFBSyxPQUFPLFNBQVM7QUFBQSxVQUN2QixPQUNLO0FBQ0gsa0JBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUFBLFVBQzlDO0FBQUEsUUFDRjtBQUNBLGdCQUFRO0FBQUEsTUFDVixPQUNLO0FBRUgsYUFBSyxjQUFjO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBWUEsa0JBQWMsVUFBVSxxQkFBcUIsU0FBVSxPQUFPLFNBQVM7QUFDckUsVUFBSSxXQUFXRixTQUFRLE1BQU07QUFDN0IsVUFBSSxTQUFTO0FBQ1gsaUJBQVMsUUFBUSxVQUFVO0FBQUEsTUFDN0I7QUFDQSxXQUFLLFVBQVUsT0FBTyxTQUFTLEtBQUtNLFNBQVE7QUFDMUMsWUFBSSxLQUFLO0FBQ1AsbUJBQVMsT0FBTyxHQUFHO0FBQUEsUUFDckIsT0FBTztBQUNMLG1CQUFTLFFBQVFBLE9BQU07QUFBQSxRQUN6QjtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU8sU0FBUztBQUFBLElBQ2xCO0FBRUEsSUFBQVAsUUFBTyxVQUFVO0FBQ2pCLElBQUFBLFFBQU8sUUFBUSwyQkFBMkI7QUFDMUMsSUFBQUEsUUFBTyxRQUFRLHNCQUFzQjtBQUNyQyxJQUFBQSxRQUFPLFFBQVEsc0JBQXNCO0FBQ3JDLElBQUFBLFFBQU8sUUFBUSwyQkFBMkI7QUFDMUMsSUFBQUEsUUFBTyxRQUFRLHNCQUFzQjtBQUFBO0FBQUE7OztBQ3JmckM7QUFBQSxpRUFBQVEsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxZQUFZO0FBQ2hCLElBQUFBLFFBQU8sVUFBVTtBQUNqQixhQUFTLHFCQUFxQjtBQUM1QixXQUFLLFFBQVEsdUJBQU8sT0FBTyxJQUFJO0FBQy9CLFdBQUssU0FBUztBQUFBLElBQ2hCO0FBRUEsdUJBQW1CLFVBQVUsMEJBQTBCLFNBQVMsVUFBVTtBQUN4RSxhQUFPLEtBQUssTUFBTSxjQUFjLE1BQU07QUFDcEM7QUFBQSxNQUNGO0FBRUEsVUFBSSxZQUFZLFdBQVc7QUFDekIsY0FBTSxJQUFJLE1BQU0sMENBQTBDLFdBQVcsUUFBUSxTQUFVO0FBQUEsTUFDekY7QUFFQSxXQUFLLE1BQU0sWUFBWTtBQUN2QixXQUFLO0FBQ0wsYUFBTztBQUFBLElBQ1Q7QUFFQSx1QkFBbUIsVUFBVSxjQUFjLFNBQVMsTUFBTTtBQUN4RCxhQUFPLEtBQUssTUFBTTtBQUNsQixXQUFLO0FBQUEsSUFDUDtBQUFBO0FBQUE7OztBQzFCQTtBQUFBLGlEQUFBQyxVQUFBQyxTQUFBO0FBQUEsUUFBSUMsV0FBVTtBQUNkLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksY0FBYztBQUNsQixRQUFJLHFCQUFxQjtBQUN6QixRQUFJLHVCQUF1QixJQUFJLG1CQUFtQjtBQU9sRCxhQUFTLEtBQUssUUFBUSxTQUFTO0FBQzdCLFVBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsYUFBSyxTQUFTLFVBQVU7QUFBQSxNQUMxQixPQUNLO0FBQ0gsYUFBSyxTQUFTO0FBQ2Qsa0JBQVU7QUFBQSxNQUNaO0FBRUEsV0FBSyxVQUFVLENBQUM7QUFDaEIsV0FBSyxRQUFRLENBQUM7QUFFZCxnQkFBVSxXQUFXLENBQUM7QUFFdEIsV0FBSyxXQUFXLE9BQU8sT0FBTyxRQUFRLFlBQVksQ0FBQyxDQUFDO0FBQ3BELFdBQUssV0FBVyxPQUFPLE9BQU8sUUFBUSxZQUFZLENBQUMsQ0FBQztBQUNwRCxXQUFLLGlCQUFrQixRQUFRLGtCQUFrQjtBQUNqRCxXQUFLLGFBQWEsUUFBUTtBQUMxQixXQUFLLGFBQWEsUUFBUSxjQUFjLFFBQVEsY0FBYztBQUM5RCxXQUFLLGVBQWUsUUFBUSxnQkFBZ0I7QUFFNUMsV0FBSyxpQkFBaUIsUUFBUSxtQkFBbUIsTUFBTTtBQUN2RCxXQUFLLG9CQUFvQixRQUFRLHNCQUFzQixNQUFNO0FBRzdELFVBQUksV0FBVyxnQkFBZ0IsU0FBUztBQUN0QywyQkFBbUIsUUFBUSxVQUFVO0FBQ3JDLGFBQUssYUFBYSxRQUFRO0FBQUEsTUFDNUIsT0FDSztBQUNILGFBQUssYUFBYSxLQUFLLEtBQUssWUFBWSxRQUFRLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDM0Q7QUFFQSxVQUFJLFdBQVcsZ0JBQWdCLFNBQVM7QUFDdEMsWUFBRyxRQUFRLGVBQWUsT0FBTztBQUMvQixlQUFLLGFBQWEsS0FBSztBQUFBLFFBQ3pCLE9BQU87QUFDTCw2QkFBbUIsUUFBUSxVQUFVO0FBQ3JDLGVBQUssYUFBYSxRQUFRO0FBQzFCLGVBQUssYUFBYSxLQUFLLElBQUksS0FBSyxZQUFZLEtBQUssVUFBVTtBQUFBLFFBQzdEO0FBQ0EsYUFBSyxrQkFBa0I7QUFBQSxNQUN6QjtBQUVBLFdBQUssYUFBYSxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBR3RDLFVBQUksS0FBSyxlQUFlLFVBQVU7QUFDaEMsc0JBQWMsb0JBQW9CO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBbUNBLFNBQUssVUFBVSxPQUFPLFNBQVUsUUFBUSxRQUFRLFNBQVM7QUFFdkQsVUFBSSxVQUFVLENBQUMsTUFBTSxRQUFRLE1BQU0sR0FBRztBQUNwQyxjQUFNLElBQUksVUFBVSxxQ0FBcUM7QUFBQSxNQUMzRDtBQUVBLFVBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsWUFBSSxXQUFXQSxTQUFRLE1BQU07QUFFN0IsWUFBSSxLQUFLLE1BQU0sVUFBVSxLQUFLLGNBQWM7QUFDMUMsZ0JBQU0sSUFBSSxNQUFNLHVCQUF1QixLQUFLLGVBQWUsVUFBVTtBQUFBLFFBQ3ZFO0FBR0EsWUFBSSxRQUFRLEtBQUs7QUFDakIsWUFBSSxPQUFPO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVDtBQUFBLFFBQ0Y7QUFDQSxjQUFNLEtBQUssSUFBSTtBQUlmLFlBQUksa0JBQWtCLFNBQVMsUUFBUTtBQUN2QyxpQkFBUyxRQUFRLFVBQVUsU0FBUyxRQUFTLE9BQU87QUFDbEQsY0FBSSxNQUFNLFFBQVEsSUFBSSxNQUFNLElBQUk7QUFFOUIsaUJBQUssVUFBVTtBQUNmLG1CQUFPLFNBQVM7QUFBQSxVQUNsQixPQUNLO0FBRUgsbUJBQU8sZ0JBQWdCLEtBQUssU0FBUyxTQUFTLEtBQUs7QUFBQSxVQUNyRDtBQUFBLFFBQ0Y7QUFHQSxhQUFLLE1BQU07QUFFWCxlQUFPLFNBQVM7QUFBQSxNQUNsQixXQUNTLE9BQU8sV0FBVyxZQUFZO0FBRXJDLGVBQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFBQSxNQUNsRCxPQUNLO0FBQ0gsY0FBTSxJQUFJLFVBQVUsa0RBQWtEO0FBQUEsTUFDeEU7QUFBQSxJQUNGO0FBUUEsU0FBSyxVQUFVLFFBQVEsV0FBWTtBQUNqQyxVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGNBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLE1BQ3pDO0FBRUEsVUFBSUMsUUFBTztBQUNYLGFBQU8sS0FBSyxLQUFLLFNBQVMsRUFDckIsS0FBSyxTQUFVLFNBQVM7QUFDdkIsWUFBSSxRQUFRLENBQUM7QUFFYixnQkFBUSxRQUFRLFNBQVUsUUFBUTtBQUNoQyxnQkFBTSxVQUFVLFdBQVk7QUFDMUIsbUJBQU9BLE1BQUssS0FBSyxRQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDaEU7QUFBQSxRQUNGLENBQUM7QUFFRCxlQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDUDtBQXNCQSxTQUFLLFVBQVUsUUFBUSxXQUFZO0FBQ2pDLFVBQUksS0FBSyxNQUFNLFNBQVMsR0FBRztBQUl6QixZQUFJQyxVQUFTLEtBQUssV0FBVztBQUM3QixZQUFJQSxTQUFRO0FBRVYsY0FBSSxLQUFLO0FBQ1QsY0FBSSxPQUFPLEtBQUssTUFBTSxNQUFNO0FBRzVCLGNBQUksS0FBSyxTQUFTLFFBQVEsU0FBUztBQUVqQyxnQkFBSSxVQUFVQSxRQUFPLEtBQUssS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLLFVBQVUsS0FBSyxPQUFPLEVBQzVFLEtBQUssR0FBRyxVQUFVLEVBQ2xCLE1BQU0sV0FBWTtBQUVqQixrQkFBSUEsUUFBTyxZQUFZO0FBQ3JCLHVCQUFPLEdBQUcsY0FBY0EsT0FBTTtBQUFBLGNBQ2hDO0FBQUEsWUFDRixDQUFDLEVBQUUsS0FBSyxXQUFXO0FBQ2pCLGlCQUFHLE1BQU07QUFBQSxZQUNYLENBQUM7QUFHSCxnQkFBSSxPQUFPLEtBQUssWUFBWSxVQUFVO0FBQ3BDLHNCQUFRLFFBQVEsS0FBSyxPQUFPO0FBQUEsWUFDOUI7QUFBQSxVQUNGLE9BQU87QUFFTCxlQUFHLE1BQU07QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBV0EsU0FBSyxVQUFVLGFBQWEsV0FBVztBQUVyQyxVQUFJLFVBQVUsS0FBSztBQUNuQixlQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3ZDLFlBQUlBLFVBQVMsUUFBUTtBQUNyQixZQUFJQSxRQUFPLEtBQUssTUFBTSxPQUFPO0FBQzNCLGlCQUFPQTtBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBRUEsVUFBSSxRQUFRLFNBQVMsS0FBSyxZQUFZO0FBRXBDLFFBQUFBLFVBQVMsS0FBSyxxQkFBcUI7QUFDbkMsZ0JBQVEsS0FBS0EsT0FBTTtBQUNuQixlQUFPQTtBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQVVBLFNBQUssVUFBVSxnQkFBZ0IsU0FBU0EsU0FBUTtBQUM5QyxVQUFJLEtBQUs7QUFFVCwyQkFBcUIsWUFBWUEsUUFBTyxTQUFTO0FBRWpELFdBQUssc0JBQXNCQSxPQUFNO0FBRWpDLFdBQUssa0JBQWtCO0FBRXZCLGFBQU8sSUFBSUYsU0FBUSxTQUFTRyxVQUFTLFFBQVE7QUFDM0MsUUFBQUQsUUFBTyxVQUFVLE9BQU8sU0FBUyxLQUFLO0FBQ3BDLGFBQUcsa0JBQWtCO0FBQUEsWUFDbkIsVUFBVUEsUUFBTztBQUFBLFlBQ2pCLFVBQVVBLFFBQU87QUFBQSxZQUNqQixRQUFRQSxRQUFPO0FBQUEsVUFDakIsQ0FBQztBQUNELGNBQUksS0FBSztBQUNQLG1CQUFPLEdBQUc7QUFBQSxVQUNaLE9BQU87QUFDTCxZQUFBQyxTQUFRRCxPQUFNO0FBQUEsVUFDaEI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBT0EsU0FBSyxVQUFVLHdCQUF3QixTQUFTQSxTQUFRO0FBRXRELFVBQUksUUFBUSxLQUFLLFFBQVEsUUFBUUEsT0FBTTtBQUN2QyxVQUFJLFVBQVUsSUFBSTtBQUNoQixhQUFLLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFZQSxTQUFLLFVBQVUsWUFBWSxTQUFVLE9BQU8sU0FBUztBQUNuRCxVQUFJLEtBQUs7QUFHVCxXQUFLLE1BQU0sUUFBUSxTQUFVLE1BQU07QUFDakMsYUFBSyxTQUFTLE9BQU8sSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQUEsTUFDbkQsQ0FBQztBQUNELFdBQUssTUFBTSxTQUFTO0FBRXBCLFVBQUksSUFBSSxTQUFVQSxTQUFRO0FBQ3hCLGFBQUssc0JBQXNCQSxPQUFNO0FBQUEsTUFDbkM7QUFDQSxVQUFJLGVBQWUsRUFBRSxLQUFLLElBQUk7QUFFOUIsVUFBSSxXQUFXLENBQUM7QUFDaEIsVUFBSSxVQUFVLEtBQUssUUFBUSxNQUFNO0FBQ2pDLGNBQVEsUUFBUSxTQUFVQSxTQUFRO0FBQ2hDLFlBQUksY0FBY0EsUUFBTyxtQkFBbUIsT0FBTyxPQUFPLEVBQ3ZELEtBQUssWUFBWSxFQUNqQixPQUFPLFdBQVc7QUFDakIsYUFBRyxrQkFBa0I7QUFBQSxZQUNuQixVQUFVQSxRQUFPO0FBQUEsWUFDakIsVUFBVUEsUUFBTztBQUFBLFlBQ2pCLFFBQVFBLFFBQU87QUFBQSxVQUNqQixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQ0gsaUJBQVMsS0FBSyxXQUFXO0FBQUEsTUFDM0IsQ0FBQztBQUNELGFBQU9GLFNBQVEsSUFBSSxRQUFRO0FBQUEsSUFDN0I7QUFNQSxTQUFLLFVBQVUsUUFBUSxXQUFZO0FBQ2pDLFVBQUksZUFBZSxLQUFLLFFBQVE7QUFDaEMsVUFBSSxjQUFjLEtBQUssUUFBUSxPQUFPLFNBQVVFLFNBQVE7QUFDdEQsZUFBT0EsUUFBTyxLQUFLO0FBQUEsTUFDckIsQ0FBQyxFQUFFO0FBRUgsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFlLGVBQWU7QUFBQSxRQUU5QixjQUFlLEtBQUssTUFBTTtBQUFBLFFBQzFCLGFBQWU7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFNQSxTQUFLLFVBQVUsb0JBQW9CLFdBQVc7QUFDNUMsVUFBSSxLQUFLLFlBQVk7QUFDbkIsaUJBQVEsSUFBSSxLQUFLLFFBQVEsUUFBUSxJQUFJLEtBQUssWUFBWSxLQUFLO0FBQ3pELGVBQUssUUFBUSxLQUFLLEtBQUsscUJBQXFCLENBQUM7QUFBQSxRQUMvQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBT0EsU0FBSyxVQUFVLHVCQUF1QixXQUFZO0FBQ2hELFlBQU0sa0JBQWtCLEtBQUssZUFBZTtBQUFBLFFBQzFDLFVBQVUsS0FBSztBQUFBLFFBQ2YsVUFBVSxLQUFLO0FBQUEsUUFDZixRQUFRLEtBQUs7QUFBQSxNQUNmLENBQUMsS0FBSyxDQUFDO0FBRVAsYUFBTyxJQUFJLGNBQWMsZ0JBQWdCLFVBQVUsS0FBSyxRQUFRO0FBQUEsUUFDOUQsVUFBVSxnQkFBZ0IsWUFBWSxLQUFLO0FBQUEsUUFDM0MsVUFBVSxnQkFBZ0IsWUFBWSxLQUFLO0FBQUEsUUFDM0MsV0FBVyxxQkFBcUIsd0JBQXdCLEtBQUssY0FBYztBQUFBLFFBQzNFLFlBQVksS0FBSztBQUFBLE1BQ25CLENBQUM7QUFBQSxJQUNIO0FBT0EsYUFBUyxtQkFBbUIsWUFBWTtBQUN0QyxVQUFJLENBQUMsU0FBUyxVQUFVLEtBQUssQ0FBQyxVQUFVLFVBQVUsS0FBSyxhQUFhLEdBQUc7QUFDckUsY0FBTSxJQUFJLFVBQVUsa0RBQWtEO0FBQUEsTUFDeEU7QUFBQSxJQUNGO0FBT0EsYUFBUyxtQkFBbUIsWUFBWTtBQUN0QyxVQUFJLENBQUMsU0FBUyxVQUFVLEtBQUssQ0FBQyxVQUFVLFVBQVUsS0FBSyxhQUFhLEdBQUc7QUFDckUsY0FBTSxJQUFJLFVBQVUsa0RBQWtEO0FBQUEsTUFDeEU7QUFBQSxJQUNGO0FBT0EsYUFBUyxTQUFTLE9BQU87QUFDdkIsYUFBTyxPQUFPLFVBQVU7QUFBQSxJQUMxQjtBQU9BLGFBQVMsVUFBVSxPQUFPO0FBQ3hCLGFBQU8sS0FBSyxNQUFNLEtBQUssS0FBSztBQUFBLElBQzlCO0FBRUEsSUFBQUgsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDeGJqQjtBQUFBO0FBTUEsUUFBSSxxQkFBcUI7QUFBQSxNQUNyQjtBQUFBLElBR0o7QUFNQSxRQUFJLHNCQUFzQjtBQU0xQixRQUFJLFNBQVM7QUFBQSxNQUNYLE1BQU0sV0FBVztBQUFBLE1BQUM7QUFBQSxJQUNwQjtBQUNBLFFBQUksT0FBTyxTQUFTLGVBQWUsT0FBTyxnQkFBZ0IsY0FBYyxPQUFPLHFCQUFxQixZQUFZO0FBRTlHLGFBQU8sS0FBSyxTQUFVLE9BQU8sVUFBVTtBQUNyQyx5QkFBaUIsT0FBTyxTQUFVLFNBQVM7QUFDekMsbUJBQVMsUUFBUSxJQUFJO0FBQUEsUUFDdkIsQ0FBQztBQUFBLE1BQ0g7QUFDQSxhQUFPLE9BQU8sU0FBVSxTQUFTO0FBQy9CLG9CQUFZLE9BQU87QUFBQSxNQUNyQjtBQUFBLElBQ0YsV0FDUyxPQUFPLFlBQVksYUFBYTtBQUl2QyxVQUFJO0FBQ0Ysd0JBQWdCLG1CQUFtQixnQkFBZ0I7QUFBQSxNQUNyRCxTQUFRSyxRQUFOO0FBQ0EsWUFBSSxPQUFPQSxXQUFVLFlBQVlBLFdBQVUsUUFBUUEsT0FBTSxTQUFTLG9CQUFvQjtBQUFBLFFBRXRGLE9BQU87QUFDTCxnQkFBTUE7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUVBLFVBQUksaUJBRUYsY0FBYyxlQUFlLE1BQU07QUFDL0IscUJBQWMsY0FBYztBQUNoQyxlQUFPLE9BQU8sV0FBVyxZQUFZLEtBQUssVUFBVTtBQUNwRCxlQUFPLEtBQUssV0FBVyxHQUFHLEtBQUssVUFBVTtBQUFBLE1BQzNDLE9BQU87QUFDTCxlQUFPLEtBQUssUUFBUSxHQUFHLEtBQUssT0FBTztBQUNuQyxlQUFPLE9BQU8sUUFBUSxLQUFLLEtBQUssT0FBTztBQUV2QyxlQUFPLEdBQUcsY0FBYyxXQUFZO0FBQ2xDLGtCQUFRLEtBQUssQ0FBQztBQUFBLFFBQ2hCLENBQUM7QUFDRCxlQUFPLE9BQU8sUUFBUSxLQUFLLEtBQUssT0FBTztBQUFBLE1BQ3pDO0FBQUEsSUFDRixPQUNLO0FBQ0gsWUFBTSxJQUFJLE1BQU0scUNBQXFDO0FBQUEsSUFDdkQ7QUE3Qk07QUFjRTtBQWlCUixhQUFTLGFBQWFBLFFBQU87QUFDM0IsYUFBTyxPQUFPLG9CQUFvQkEsTUFBSyxFQUFFLE9BQU8sU0FBUyxTQUFTLE1BQU07QUFDdEUsZUFBTyxPQUFPLGVBQWUsU0FBUyxNQUFNO0FBQUEsVUFDL0MsT0FBT0EsT0FBTTtBQUFBLFVBQ2IsWUFBWTtBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0gsR0FBRyxDQUFDLENBQUM7QUFBQSxJQUNQO0FBUUEsYUFBUyxVQUFVLE9BQU87QUFDeEIsYUFBTyxTQUFVLE9BQU8sTUFBTSxTQUFTLGNBQWdCLE9BQU8sTUFBTSxVQUFVO0FBQUEsSUFDaEY7QUFHQSxXQUFPLFVBQVUsQ0FBQztBQVFsQixXQUFPLFFBQVEsTUFBTSxTQUFTLElBQUksSUFBSSxNQUFNO0FBQzFDLFVBQUksSUFBSSxJQUFJLFNBQVMsYUFBYSxLQUFLLDJCQUEyQjtBQUNsRSxhQUFPLEVBQUUsTUFBTSxHQUFHLElBQUk7QUFBQSxJQUN4QjtBQU1BLFdBQU8sUUFBUSxVQUFVLFNBQVMsVUFBVTtBQUMxQyxhQUFPLE9BQU8sS0FBSyxPQUFPLE9BQU87QUFBQSxJQUNuQztBQUVBLFFBQUksbUJBQW1CO0FBRXZCLFdBQU8sR0FBRyxXQUFXLFNBQVUsU0FBUztBQUN0QyxVQUFJLFlBQVkscUJBQXFCO0FBQ25DLGVBQU8sT0FBTyxLQUFLLENBQUM7QUFBQSxNQUN0QjtBQUNBLFVBQUk7QUFDRixZQUFJLFNBQVMsT0FBTyxRQUFRLFFBQVE7QUFFcEMsWUFBSSxRQUFRO0FBQ1YsNkJBQW1CLFFBQVE7QUFHM0IsY0FBSSxTQUFTLE9BQU8sTUFBTSxRQUFRLFFBQVEsTUFBTTtBQUVoRCxjQUFJLFVBQVUsTUFBTSxHQUFHO0FBRXJCLG1CQUNLLEtBQUssU0FBVUMsU0FBUTtBQUN0QixxQkFBTyxLQUFLO0FBQUEsZ0JBQ1YsSUFBSSxRQUFRO0FBQUEsZ0JBQ1osUUFBUUE7QUFBQSxnQkFDUixPQUFPO0FBQUEsY0FDVCxDQUFDO0FBQ0QsaUNBQW1CO0FBQUEsWUFDckIsQ0FBQyxFQUNBLE1BQU0sU0FBVSxLQUFLO0FBQ3BCLHFCQUFPLEtBQUs7QUFBQSxnQkFDVixJQUFJLFFBQVE7QUFBQSxnQkFDWixRQUFRO0FBQUEsZ0JBQ1IsT0FBTyxhQUFhLEdBQUc7QUFBQSxjQUN6QixDQUFDO0FBQ0QsaUNBQW1CO0FBQUEsWUFDckIsQ0FBQztBQUFBLFVBQ1AsT0FDSztBQUVILG1CQUFPLEtBQUs7QUFBQSxjQUNWLElBQUksUUFBUTtBQUFBLGNBQ1o7QUFBQSxjQUNBLE9BQU87QUFBQSxZQUNULENBQUM7QUFFRCwrQkFBbUI7QUFBQSxVQUNyQjtBQUFBLFFBQ0YsT0FDSztBQUNILGdCQUFNLElBQUksTUFBTSxxQkFBcUIsUUFBUSxTQUFTLEdBQUc7QUFBQSxRQUMzRDtBQUFBLE1BQ0YsU0FDTyxLQUFQO0FBQ0UsZUFBTyxLQUFLO0FBQUEsVUFDVixJQUFJLFFBQVE7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLE9BQU8sYUFBYSxHQUFHO0FBQUEsUUFDekIsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLENBQUM7QUFNRCxXQUFPLFdBQVcsU0FBVSxTQUFTO0FBRW5DLFVBQUksU0FBUztBQUNYLGlCQUFTLFFBQVEsU0FBUztBQUN4QixjQUFJLFFBQVEsZUFBZSxJQUFJLEdBQUc7QUFDaEMsbUJBQU8sUUFBUSxRQUFRLFFBQVE7QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTyxLQUFLLE9BQU87QUFBQSxJQUVyQjtBQUVBLFdBQU8sT0FBTyxTQUFVLFNBQVM7QUFDL0IsVUFBSSxrQkFBa0I7QUFDcEIsZUFBTyxLQUFLO0FBQUEsVUFDVixJQUFJO0FBQUEsVUFDSixTQUFTO0FBQUEsVUFDVDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLFlBQVksYUFBYTtBQUNsQyxjQUFRLE1BQU0sT0FBTztBQUNyQixjQUFRLE9BQU8sT0FBTztBQUFBLElBQ3hCO0FBQUE7QUFBQTs7O0FDek1BO0FBQUEsa0RBQUFDLFVBQUE7QUFBQSxRQUFJLGNBQWM7QUFRbEIsSUFBQUEsU0FBUSxPQUFPLFNBQVNDLE1BQUssUUFBUSxTQUFTO0FBQzVDLFVBQUksT0FBTztBQUVYLGFBQU8sSUFBSSxLQUFLLFFBQVEsT0FBTztBQUFBLElBQ2pDO0FBTUEsSUFBQUQsU0FBUSxTQUFTLFNBQVNFLFFBQU8sU0FBUztBQUN4QyxVQUFJQSxVQUFTO0FBQ2IsTUFBQUEsUUFBTyxJQUFJLE9BQU87QUFBQSxJQUNwQjtBQU1BLElBQUFGLFNBQVEsYUFBYSxTQUFTLFdBQVcsU0FBUztBQUNoRCxVQUFJRSxVQUFTO0FBQ2IsTUFBQUEsUUFBTyxLQUFLLE9BQU87QUFBQSxJQUNyQjtBQU1BLElBQUFGLFNBQVEsVUFBVTtBQUVsQixJQUFBQSxTQUFRLFdBQVcsWUFBWTtBQUMvQixJQUFBQSxTQUFRLGVBQWUsWUFBWTtBQUNuQyxJQUFBQSxTQUFRLE9BQU8sWUFBWTtBQUFBO0FBQUE7OztBQ3hDM0IsSUFDQSxNQUNBLE9BR1EsUUFFRixRQVFPLE9BQ0EsT0FDQSxTQUNBLFNBQ0E7QUFuQmI7QUFBQTtBQUFBO0FBQ0EsV0FBc0I7QUFDdEIsWUFBdUI7QUFHdkIsS0FBTSxFQUFFLFdBQVc7QUFFbkIsSUFBTSxTQUFTLENBQUMsUUFBa0IsV0FBdUIsQ0FBQyxRQUFnQixTQUFnQjtBQUN4RixVQUFJLE1BQVcsWUFBTyxLQUFLLEdBQUcsSUFBSTtBQUNsQyxVQUFJLFVBQVUsT0FBTyxRQUFRO0FBQzNCLGNBQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxHQUFHLEdBQUc7QUFBQSxNQUNqRDtBQUNBLGFBQU8sTUFBTSxNQUFNLElBQUk7QUFBQSxJQUN6QjtBQUVPLElBQU0sUUFBUSxPQUFPLE1BQU07QUFDM0IsSUFBTSxRQUFRLE9BQU8sUUFBUSxDQUFPLFNBQUcsQ0FBQztBQUN4QyxJQUFNLFVBQVUsT0FBTyxRQUFRLENBQU8sWUFBTSxDQUFDO0FBQzdDLElBQU0sVUFBVSxPQUFPLFFBQVEsQ0FBTyxXQUFLLENBQUM7QUFDNUMsSUFBTSxZQUFZLE9BQU8sUUFBUSxDQUFPLFVBQUksQ0FBQztBQUFBO0FBQUE7OztBQ25CcEQ7QUFBQSxnREFBQUcsVUFBQTtBQUFBO0FBRUEsSUFBQUEsU0FBUSxlQUFlLFNBQVUsSUFBSTtBQUNuQyxhQUFPLE9BQU8sZUFBZSxZQUFhLE1BQU07QUFDOUMsWUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLE9BQU87QUFBWSxhQUFHLE1BQU0sTUFBTSxJQUFJO0FBQUEsYUFDL0Q7QUFDSCxpQkFBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3RDLGVBQUc7QUFBQSxjQUNEO0FBQUEsY0FDQSxHQUFHO0FBQUEsY0FDSCxDQUFDLEtBQUssUUFBUyxPQUFPLE9BQVEsT0FBTyxHQUFHLElBQUlBLFNBQVEsR0FBRztBQUFBLFlBQ3pEO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsR0FBRyxRQUFRLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUFBLElBQy9CO0FBRUEsSUFBQUQsU0FBUSxjQUFjLFNBQVUsSUFBSTtBQUNsQyxhQUFPLE9BQU8sZUFBZSxZQUFhLE1BQU07QUFDOUMsY0FBTSxLQUFLLEtBQUssS0FBSyxTQUFTO0FBQzlCLFlBQUksT0FBTyxPQUFPO0FBQVksaUJBQU8sR0FBRyxNQUFNLE1BQU0sSUFBSTtBQUFBO0FBQ25ELGFBQUcsTUFBTSxNQUFNLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssT0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFBQSxNQUNsRSxHQUFHLFFBQVEsRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0I7QUFBQTtBQUFBOzs7QUN2QkE7QUFBQSxtREFBQUUsVUFBQUMsU0FBQTtBQUFBLFFBQUksWUFBWSxRQUFRO0FBRXhCLFFBQUksVUFBVSxRQUFRO0FBQ3RCLFFBQUksTUFBTTtBQUVWLFFBQUksV0FBVyxRQUFRLElBQUksd0JBQXdCLFFBQVE7QUFFM0QsWUFBUSxNQUFNLFdBQVc7QUFDdkIsVUFBSSxDQUFDO0FBQ0gsY0FBTSxRQUFRLEtBQUssT0FBTztBQUM1QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUk7QUFDRixjQUFRLElBQUk7QUFBQSxJQUNkLFNBQVMsSUFBUDtBQUFBLElBQVk7QUFHZCxRQUFJLE9BQU8sUUFBUSxVQUFVLFlBQVk7QUFDbkMsY0FBUSxRQUFRO0FBQ3BCLGNBQVEsUUFBUSxTQUFVLEdBQUc7QUFDM0IsY0FBTTtBQUNOLGNBQU0sS0FBSyxTQUFTLENBQUM7QUFBQSxNQUN2QjtBQUNBLFVBQUksT0FBTztBQUFnQixlQUFPLGVBQWUsUUFBUSxPQUFPLEtBQUs7QUFBQSxJQUN2RTtBQU5NO0FBUU4sSUFBQUEsUUFBTyxVQUFVO0FBRWpCLGFBQVMsTUFBT0MsS0FBSTtBQUtsQixVQUFJLFVBQVUsZUFBZSxXQUFXLEtBQ3BDLFFBQVEsUUFBUSxNQUFNLHdCQUF3QixHQUFHO0FBQ25ELG9CQUFZQSxHQUFFO0FBQUEsTUFDaEI7QUFHQSxVQUFJLENBQUNBLElBQUcsU0FBUztBQUNmLHFCQUFhQSxHQUFFO0FBQUEsTUFDakI7QUFPQSxNQUFBQSxJQUFHLFFBQVEsU0FBU0EsSUFBRyxLQUFLO0FBQzVCLE1BQUFBLElBQUcsU0FBUyxTQUFTQSxJQUFHLE1BQU07QUFDOUIsTUFBQUEsSUFBRyxTQUFTLFNBQVNBLElBQUcsTUFBTTtBQUU5QixNQUFBQSxJQUFHLFFBQVEsU0FBU0EsSUFBRyxLQUFLO0FBQzVCLE1BQUFBLElBQUcsU0FBUyxTQUFTQSxJQUFHLE1BQU07QUFDOUIsTUFBQUEsSUFBRyxTQUFTLFNBQVNBLElBQUcsTUFBTTtBQUU5QixNQUFBQSxJQUFHLFlBQVksYUFBYUEsSUFBRyxTQUFTO0FBQ3hDLE1BQUFBLElBQUcsYUFBYSxhQUFhQSxJQUFHLFVBQVU7QUFDMUMsTUFBQUEsSUFBRyxhQUFhLGFBQWFBLElBQUcsVUFBVTtBQUUxQyxNQUFBQSxJQUFHLFlBQVksYUFBYUEsSUFBRyxTQUFTO0FBQ3hDLE1BQUFBLElBQUcsYUFBYSxhQUFhQSxJQUFHLFVBQVU7QUFDMUMsTUFBQUEsSUFBRyxhQUFhLGFBQWFBLElBQUcsVUFBVTtBQUUxQyxNQUFBQSxJQUFHLE9BQU8sUUFBUUEsSUFBRyxJQUFJO0FBQ3pCLE1BQUFBLElBQUcsUUFBUSxRQUFRQSxJQUFHLEtBQUs7QUFDM0IsTUFBQUEsSUFBRyxRQUFRLFFBQVFBLElBQUcsS0FBSztBQUUzQixNQUFBQSxJQUFHLFdBQVcsWUFBWUEsSUFBRyxRQUFRO0FBQ3JDLE1BQUFBLElBQUcsWUFBWSxZQUFZQSxJQUFHLFNBQVM7QUFDdkMsTUFBQUEsSUFBRyxZQUFZLFlBQVlBLElBQUcsU0FBUztBQUd2QyxVQUFJQSxJQUFHLFNBQVMsQ0FBQ0EsSUFBRyxRQUFRO0FBQzFCLFFBQUFBLElBQUcsU0FBUyxTQUFVQyxPQUFNLE1BQU0sSUFBSTtBQUNwQyxjQUFJO0FBQUksb0JBQVEsU0FBUyxFQUFFO0FBQUEsUUFDN0I7QUFDQSxRQUFBRCxJQUFHLGFBQWEsV0FBWTtBQUFBLFFBQUM7QUFBQSxNQUMvQjtBQUNBLFVBQUlBLElBQUcsU0FBUyxDQUFDQSxJQUFHLFFBQVE7QUFDMUIsUUFBQUEsSUFBRyxTQUFTLFNBQVVDLE9BQU0sS0FBSyxLQUFLLElBQUk7QUFDeEMsY0FBSTtBQUFJLG9CQUFRLFNBQVMsRUFBRTtBQUFBLFFBQzdCO0FBQ0EsUUFBQUQsSUFBRyxhQUFhLFdBQVk7QUFBQSxRQUFDO0FBQUEsTUFDL0I7QUFXQSxVQUFJLGFBQWEsU0FBUztBQUN4QixRQUFBQSxJQUFHLFNBQVMsT0FBT0EsSUFBRyxXQUFXLGFBQWFBLElBQUcsU0FDOUMsU0FBVSxXQUFXO0FBQ3RCLG1CQUFTLE9BQVEsTUFBTSxJQUFJLElBQUk7QUFDN0IsZ0JBQUksUUFBUSxLQUFLLElBQUk7QUFDckIsZ0JBQUksVUFBVTtBQUNkLHNCQUFVLE1BQU0sSUFBSSxTQUFTLEdBQUksSUFBSTtBQUNuQyxrQkFBSSxPQUNJLEdBQUcsU0FBUyxZQUFZLEdBQUcsU0FBUyxZQUNyQyxLQUFLLElBQUksSUFBSSxRQUFRLEtBQU87QUFDakMsMkJBQVcsV0FBVztBQUNwQixrQkFBQUEsSUFBRyxLQUFLLElBQUksU0FBVSxRQUFRLElBQUk7QUFDaEMsd0JBQUksVUFBVSxPQUFPLFNBQVM7QUFDNUIsZ0NBQVUsTUFBTSxJQUFJLEVBQUU7QUFBQTtBQUV0Qix5QkFBRyxFQUFFO0FBQUEsa0JBQ1QsQ0FBQztBQUFBLGdCQUNILEdBQUcsT0FBTztBQUNWLG9CQUFJLFVBQVU7QUFDWiw2QkFBVztBQUNiO0FBQUEsY0FDRjtBQUNBLGtCQUFJO0FBQUksbUJBQUcsRUFBRTtBQUFBLFlBQ2YsQ0FBQztBQUFBLFVBQ0g7QUFDQSxjQUFJLE9BQU87QUFBZ0IsbUJBQU8sZUFBZSxRQUFRLFNBQVM7QUFDbEUsaUJBQU87QUFBQSxRQUNULEVBQUdBLElBQUcsTUFBTTtBQUFBLE1BQ2Q7QUFHQSxNQUFBQSxJQUFHLE9BQU8sT0FBT0EsSUFBRyxTQUFTLGFBQWFBLElBQUcsT0FDMUMsU0FBVSxTQUFTO0FBQ3BCLGlCQUFTLEtBQU0sSUFBSSxRQUFRLFFBQVEsUUFBUSxVQUFVLFdBQVc7QUFDOUQsY0FBSTtBQUNKLGNBQUksYUFBYSxPQUFPLGNBQWMsWUFBWTtBQUNoRCxnQkFBSSxhQUFhO0FBQ2pCLHVCQUFXLFNBQVUsSUFBSSxHQUFHLElBQUk7QUFDOUIsa0JBQUksTUFBTSxHQUFHLFNBQVMsWUFBWSxhQUFhLElBQUk7QUFDakQ7QUFDQSx1QkFBTyxRQUFRLEtBQUtBLEtBQUksSUFBSSxRQUFRLFFBQVEsUUFBUSxVQUFVLFFBQVE7QUFBQSxjQUN4RTtBQUNBLHdCQUFVLE1BQU0sTUFBTSxTQUFTO0FBQUEsWUFDakM7QUFBQSxVQUNGO0FBQ0EsaUJBQU8sUUFBUSxLQUFLQSxLQUFJLElBQUksUUFBUSxRQUFRLFFBQVEsVUFBVSxRQUFRO0FBQUEsUUFDeEU7QUFHQSxZQUFJLE9BQU87QUFBZ0IsaUJBQU8sZUFBZSxNQUFNLE9BQU87QUFDOUQsZUFBTztBQUFBLE1BQ1QsRUFBR0EsSUFBRyxJQUFJO0FBRVYsTUFBQUEsSUFBRyxXQUFXLE9BQU9BLElBQUcsYUFBYSxhQUFhQSxJQUFHLFdBQ2xELFNBQVUsYUFBYTtBQUFFLGVBQU8sU0FBVSxJQUFJLFFBQVEsUUFBUSxRQUFRLFVBQVU7QUFDakYsY0FBSSxhQUFhO0FBQ2pCLGlCQUFPLE1BQU07QUFDWCxnQkFBSTtBQUNGLHFCQUFPLFlBQVksS0FBS0EsS0FBSSxJQUFJLFFBQVEsUUFBUSxRQUFRLFFBQVE7QUFBQSxZQUNsRSxTQUFTLElBQVA7QUFDQSxrQkFBSSxHQUFHLFNBQVMsWUFBWSxhQUFhLElBQUk7QUFDM0M7QUFDQTtBQUFBLGNBQ0Y7QUFDQSxvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQUMsRUFBR0EsSUFBRyxRQUFRO0FBRWYsZUFBUyxZQUFhQSxLQUFJO0FBQ3hCLFFBQUFBLElBQUcsU0FBUyxTQUFVQyxPQUFNLE1BQU0sVUFBVTtBQUMxQyxVQUFBRCxJQUFHO0FBQUEsWUFBTUM7QUFBQSxZQUNBLFVBQVUsV0FBVyxVQUFVO0FBQUEsWUFDL0I7QUFBQSxZQUNBLFNBQVUsS0FBSyxJQUFJO0FBQzFCLGtCQUFJLEtBQUs7QUFDUCxvQkFBSTtBQUFVLDJCQUFTLEdBQUc7QUFDMUI7QUFBQSxjQUNGO0FBR0EsY0FBQUQsSUFBRyxPQUFPLElBQUksTUFBTSxTQUFVRSxNQUFLO0FBQ2pDLGdCQUFBRixJQUFHLE1BQU0sSUFBSSxTQUFTRyxPQUFNO0FBQzFCLHNCQUFJO0FBQVUsNkJBQVNELFFBQU9DLEtBQUk7QUFBQSxnQkFDcEMsQ0FBQztBQUFBLGNBQ0gsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUFDO0FBQUEsUUFDSDtBQUVBLFFBQUFILElBQUcsYUFBYSxTQUFVQyxPQUFNLE1BQU07QUFDcEMsY0FBSSxLQUFLRCxJQUFHLFNBQVNDLE9BQU0sVUFBVSxXQUFXLFVBQVUsV0FBVyxJQUFJO0FBSXpFLGNBQUksUUFBUTtBQUNaLGNBQUk7QUFDSixjQUFJO0FBQ0Ysa0JBQU1ELElBQUcsV0FBVyxJQUFJLElBQUk7QUFDNUIsb0JBQVE7QUFBQSxVQUNWLFVBQUU7QUFDQSxnQkFBSSxPQUFPO0FBQ1Qsa0JBQUk7QUFDRixnQkFBQUEsSUFBRyxVQUFVLEVBQUU7QUFBQSxjQUNqQixTQUFTLElBQVA7QUFBQSxjQUFZO0FBQUEsWUFDaEIsT0FBTztBQUNMLGNBQUFBLElBQUcsVUFBVSxFQUFFO0FBQUEsWUFDakI7QUFBQSxVQUNGO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGVBQVMsYUFBY0EsS0FBSTtBQUN6QixZQUFJLFVBQVUsZUFBZSxXQUFXLEtBQUtBLElBQUcsU0FBUztBQUN2RCxVQUFBQSxJQUFHLFVBQVUsU0FBVUMsT0FBTSxJQUFJLElBQUksSUFBSTtBQUN2QyxZQUFBRCxJQUFHLEtBQUtDLE9BQU0sVUFBVSxXQUFXLFNBQVUsSUFBSSxJQUFJO0FBQ25ELGtCQUFJLElBQUk7QUFDTixvQkFBSTtBQUFJLHFCQUFHLEVBQUU7QUFDYjtBQUFBLGNBQ0Y7QUFDQSxjQUFBRCxJQUFHLFFBQVEsSUFBSSxJQUFJLElBQUksU0FBVUksS0FBSTtBQUNuQyxnQkFBQUosSUFBRyxNQUFNLElBQUksU0FBVUssTUFBSztBQUMxQixzQkFBSTtBQUFJLHVCQUFHRCxPQUFNQyxJQUFHO0FBQUEsZ0JBQ3RCLENBQUM7QUFBQSxjQUNILENBQUM7QUFBQSxZQUNILENBQUM7QUFBQSxVQUNIO0FBRUEsVUFBQUwsSUFBRyxjQUFjLFNBQVVDLE9BQU0sSUFBSSxJQUFJO0FBQ3ZDLGdCQUFJLEtBQUtELElBQUcsU0FBU0MsT0FBTSxVQUFVLFNBQVM7QUFDOUMsZ0JBQUk7QUFDSixnQkFBSSxRQUFRO0FBQ1osZ0JBQUk7QUFDRixvQkFBTUQsSUFBRyxZQUFZLElBQUksSUFBSSxFQUFFO0FBQy9CLHNCQUFRO0FBQUEsWUFDVixVQUFFO0FBQ0Esa0JBQUksT0FBTztBQUNULG9CQUFJO0FBQ0Ysa0JBQUFBLElBQUcsVUFBVSxFQUFFO0FBQUEsZ0JBQ2pCLFNBQVMsSUFBUDtBQUFBLGdCQUFZO0FBQUEsY0FDaEIsT0FBTztBQUNMLGdCQUFBQSxJQUFHLFVBQVUsRUFBRTtBQUFBLGNBQ2pCO0FBQUEsWUFDRjtBQUNBLG1CQUFPO0FBQUEsVUFDVDtBQUFBLFFBRUYsV0FBV0EsSUFBRyxTQUFTO0FBQ3JCLFVBQUFBLElBQUcsVUFBVSxTQUFVLElBQUksSUFBSSxJQUFJLElBQUk7QUFBRSxnQkFBSTtBQUFJLHNCQUFRLFNBQVMsRUFBRTtBQUFBLFVBQUU7QUFDdEUsVUFBQUEsSUFBRyxjQUFjLFdBQVk7QUFBQSxVQUFDO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBRUEsZUFBUyxTQUFVLE1BQU07QUFDdkIsWUFBSSxDQUFDO0FBQU0saUJBQU87QUFDbEIsZUFBTyxTQUFVLFFBQVEsTUFBTSxJQUFJO0FBQ2pDLGlCQUFPLEtBQUssS0FBS0EsS0FBSSxRQUFRLE1BQU0sU0FBVSxJQUFJO0FBQy9DLGdCQUFJLFVBQVUsRUFBRTtBQUFHLG1CQUFLO0FBQ3hCLGdCQUFJO0FBQUksaUJBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQSxVQUNsQyxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxlQUFTLGFBQWMsTUFBTTtBQUMzQixZQUFJLENBQUM7QUFBTSxpQkFBTztBQUNsQixlQUFPLFNBQVUsUUFBUSxNQUFNO0FBQzdCLGNBQUk7QUFDRixtQkFBTyxLQUFLLEtBQUtBLEtBQUksUUFBUSxJQUFJO0FBQUEsVUFDbkMsU0FBUyxJQUFQO0FBQ0EsZ0JBQUksQ0FBQyxVQUFVLEVBQUU7QUFBRyxvQkFBTTtBQUFBLFVBQzVCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxlQUFTLFNBQVUsTUFBTTtBQUN2QixZQUFJLENBQUM7QUFBTSxpQkFBTztBQUNsQixlQUFPLFNBQVUsUUFBUSxLQUFLLEtBQUssSUFBSTtBQUNyQyxpQkFBTyxLQUFLLEtBQUtBLEtBQUksUUFBUSxLQUFLLEtBQUssU0FBVSxJQUFJO0FBQ25ELGdCQUFJLFVBQVUsRUFBRTtBQUFHLG1CQUFLO0FBQ3hCLGdCQUFJO0FBQUksaUJBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQSxVQUNsQyxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxlQUFTLGFBQWMsTUFBTTtBQUMzQixZQUFJLENBQUM7QUFBTSxpQkFBTztBQUNsQixlQUFPLFNBQVUsUUFBUSxLQUFLLEtBQUs7QUFDakMsY0FBSTtBQUNGLG1CQUFPLEtBQUssS0FBS0EsS0FBSSxRQUFRLEtBQUssR0FBRztBQUFBLFVBQ3ZDLFNBQVMsSUFBUDtBQUNBLGdCQUFJLENBQUMsVUFBVSxFQUFFO0FBQUcsb0JBQU07QUFBQSxVQUM1QjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsZUFBUyxRQUFTLE1BQU07QUFDdEIsWUFBSSxDQUFDO0FBQU0saUJBQU87QUFHbEIsZUFBTyxTQUFVLFFBQVEsU0FBUyxJQUFJO0FBQ3BDLGNBQUksT0FBTyxZQUFZLFlBQVk7QUFDakMsaUJBQUs7QUFDTCxzQkFBVTtBQUFBLFVBQ1o7QUFDQSxtQkFBUyxTQUFVLElBQUksT0FBTztBQUM1QixnQkFBSSxPQUFPO0FBQ1Qsa0JBQUksTUFBTSxNQUFNO0FBQUcsc0JBQU0sT0FBTztBQUNoQyxrQkFBSSxNQUFNLE1BQU07QUFBRyxzQkFBTSxPQUFPO0FBQUEsWUFDbEM7QUFDQSxnQkFBSTtBQUFJLGlCQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsVUFDbEM7QUFDQSxpQkFBTyxVQUFVLEtBQUssS0FBS0EsS0FBSSxRQUFRLFNBQVMsUUFBUSxJQUNwRCxLQUFLLEtBQUtBLEtBQUksUUFBUSxRQUFRO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBRUEsZUFBUyxZQUFhLE1BQU07QUFDMUIsWUFBSSxDQUFDO0FBQU0saUJBQU87QUFHbEIsZUFBTyxTQUFVLFFBQVEsU0FBUztBQUNoQyxjQUFJLFFBQVEsVUFBVSxLQUFLLEtBQUtBLEtBQUksUUFBUSxPQUFPLElBQy9DLEtBQUssS0FBS0EsS0FBSSxNQUFNO0FBQ3hCLGNBQUksT0FBTztBQUNULGdCQUFJLE1BQU0sTUFBTTtBQUFHLG9CQUFNLE9BQU87QUFDaEMsZ0JBQUksTUFBTSxNQUFNO0FBQUcsb0JBQU0sT0FBTztBQUFBLFVBQ2xDO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQWNBLGVBQVMsVUFBVyxJQUFJO0FBQ3RCLFlBQUksQ0FBQztBQUNILGlCQUFPO0FBRVQsWUFBSSxHQUFHLFNBQVM7QUFDZCxpQkFBTztBQUVULFlBQUksVUFBVSxDQUFDLFFBQVEsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUN0RCxZQUFJLFNBQVM7QUFDWCxjQUFJLEdBQUcsU0FBUyxZQUFZLEdBQUcsU0FBUztBQUN0QyxtQkFBTztBQUFBLFFBQ1g7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNsV0E7QUFBQSx3REFBQU0sVUFBQUMsU0FBQTtBQUFBLFFBQUksU0FBUyxRQUFRLFVBQVU7QUFFL0IsSUFBQUEsUUFBTyxVQUFVO0FBRWpCLGFBQVMsT0FBUUMsS0FBSTtBQUNuQixhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBRUEsZUFBUyxXQUFZQyxPQUFNLFNBQVM7QUFDbEMsWUFBSSxFQUFFLGdCQUFnQjtBQUFhLGlCQUFPLElBQUksV0FBV0EsT0FBTSxPQUFPO0FBRXRFLGVBQU8sS0FBSyxJQUFJO0FBRWhCLFlBQUlDLFFBQU87QUFFWCxhQUFLLE9BQU9EO0FBQ1osYUFBSyxLQUFLO0FBQ1YsYUFBSyxXQUFXO0FBQ2hCLGFBQUssU0FBUztBQUVkLGFBQUssUUFBUTtBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssYUFBYSxLQUFLO0FBRXZCLGtCQUFVLFdBQVcsQ0FBQztBQUd0QixZQUFJLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFDOUIsaUJBQVMsUUFBUSxHQUFHLFNBQVMsS0FBSyxRQUFRLFFBQVEsUUFBUSxTQUFTO0FBQ2pFLGNBQUksTUFBTSxLQUFLO0FBQ2YsZUFBSyxPQUFPLFFBQVE7QUFBQSxRQUN0QjtBQUVBLFlBQUksS0FBSztBQUFVLGVBQUssWUFBWSxLQUFLLFFBQVE7QUFFakQsWUFBSSxLQUFLLFVBQVUsUUFBVztBQUM1QixjQUFJLGFBQWEsT0FBTyxLQUFLLE9BQU87QUFDbEMsa0JBQU0sVUFBVSx3QkFBd0I7QUFBQSxVQUMxQztBQUNBLGNBQUksS0FBSyxRQUFRLFFBQVc7QUFDMUIsaUJBQUssTUFBTTtBQUFBLFVBQ2IsV0FBVyxhQUFhLE9BQU8sS0FBSyxLQUFLO0FBQ3ZDLGtCQUFNLFVBQVUsc0JBQXNCO0FBQUEsVUFDeEM7QUFFQSxjQUFJLEtBQUssUUFBUSxLQUFLLEtBQUs7QUFDekIsa0JBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLFVBQ3hDO0FBRUEsZUFBSyxNQUFNLEtBQUs7QUFBQSxRQUNsQjtBQUVBLFlBQUksS0FBSyxPQUFPLE1BQU07QUFDcEIsa0JBQVEsU0FBUyxXQUFXO0FBQzFCLFlBQUFDLE1BQUssTUFBTTtBQUFBLFVBQ2IsQ0FBQztBQUNEO0FBQUEsUUFDRjtBQUVBLFFBQUFGLElBQUcsS0FBSyxLQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUssTUFBTSxTQUFVLEtBQUssSUFBSTtBQUMzRCxjQUFJLEtBQUs7QUFDUCxZQUFBRSxNQUFLLEtBQUssU0FBUyxHQUFHO0FBQ3RCLFlBQUFBLE1BQUssV0FBVztBQUNoQjtBQUFBLFVBQ0Y7QUFFQSxVQUFBQSxNQUFLLEtBQUs7QUFDVixVQUFBQSxNQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3BCLFVBQUFBLE1BQUssTUFBTTtBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0g7QUFFQSxlQUFTLFlBQWFELE9BQU0sU0FBUztBQUNuQyxZQUFJLEVBQUUsZ0JBQWdCO0FBQWMsaUJBQU8sSUFBSSxZQUFZQSxPQUFNLE9BQU87QUFFeEUsZUFBTyxLQUFLLElBQUk7QUFFaEIsYUFBSyxPQUFPQTtBQUNaLGFBQUssS0FBSztBQUNWLGFBQUssV0FBVztBQUVoQixhQUFLLFFBQVE7QUFDYixhQUFLLFdBQVc7QUFDaEIsYUFBSyxPQUFPO0FBQ1osYUFBSyxlQUFlO0FBRXBCLGtCQUFVLFdBQVcsQ0FBQztBQUd0QixZQUFJLE9BQU8sT0FBTyxLQUFLLE9BQU87QUFDOUIsaUJBQVMsUUFBUSxHQUFHLFNBQVMsS0FBSyxRQUFRLFFBQVEsUUFBUSxTQUFTO0FBQ2pFLGNBQUksTUFBTSxLQUFLO0FBQ2YsZUFBSyxPQUFPLFFBQVE7QUFBQSxRQUN0QjtBQUVBLFlBQUksS0FBSyxVQUFVLFFBQVc7QUFDNUIsY0FBSSxhQUFhLE9BQU8sS0FBSyxPQUFPO0FBQ2xDLGtCQUFNLFVBQVUsd0JBQXdCO0FBQUEsVUFDMUM7QUFDQSxjQUFJLEtBQUssUUFBUSxHQUFHO0FBQ2xCLGtCQUFNLElBQUksTUFBTSx1QkFBdUI7QUFBQSxVQUN6QztBQUVBLGVBQUssTUFBTSxLQUFLO0FBQUEsUUFDbEI7QUFFQSxhQUFLLE9BQU87QUFDWixhQUFLLFNBQVMsQ0FBQztBQUVmLFlBQUksS0FBSyxPQUFPLE1BQU07QUFDcEIsZUFBSyxRQUFRRCxJQUFHO0FBQ2hCLGVBQUssT0FBTyxLQUFLLENBQUMsS0FBSyxPQUFPLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxNQUFNLE1BQVMsQ0FBQztBQUMxRSxlQUFLLE1BQU07QUFBQSxRQUNiO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNySEE7QUFBQSwrQ0FBQUcsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBRWpCLFFBQUksaUJBQWlCLE9BQU8sa0JBQWtCLFNBQVUsS0FBSztBQUMzRCxhQUFPLElBQUk7QUFBQSxJQUNiO0FBRUEsYUFBUyxNQUFPLEtBQUs7QUFDbkIsVUFBSSxRQUFRLFFBQVEsT0FBTyxRQUFRO0FBQ2pDLGVBQU87QUFFVCxVQUFJLGVBQWU7QUFDakIsWUFBSSxPQUFPLEVBQUUsV0FBVyxlQUFlLEdBQUcsRUFBRTtBQUFBO0FBRTVDLFlBQUksT0FBTyx1QkFBTyxPQUFPLElBQUk7QUFFL0IsYUFBTyxvQkFBb0IsR0FBRyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3JELGVBQU8sZUFBZSxNQUFNLEtBQUssT0FBTyx5QkFBeUIsS0FBSyxHQUFHLENBQUM7QUFBQSxNQUM1RSxDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQSxxREFBQUMsVUFBQUMsU0FBQTtBQUFBLFFBQUlDLE1BQUssUUFBUTtBQUNqQixRQUFJLFlBQVk7QUFDaEIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxRQUFRO0FBRVosUUFBSUMsUUFBTyxRQUFRO0FBR25CLFFBQUk7QUFDSixRQUFJO0FBR0osUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sUUFBUSxZQUFZO0FBQ3BFLHNCQUFnQixPQUFPLElBQUksbUJBQW1CO0FBRTlDLHVCQUFpQixPQUFPLElBQUksc0JBQXNCO0FBQUEsSUFDcEQsT0FBTztBQUNMLHNCQUFnQjtBQUNoQix1QkFBaUI7QUFBQSxJQUNuQjtBQUVBLGFBQVMsT0FBUTtBQUFBLElBQUM7QUFFbEIsYUFBUyxhQUFhLFNBQVNDLFFBQU87QUFDcEMsYUFBTyxlQUFlLFNBQVMsZUFBZTtBQUFBLFFBQzVDLEtBQUssV0FBVztBQUNkLGlCQUFPQTtBQUFBLFFBQ1Q7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxRQUFRO0FBQ1osUUFBSUQsTUFBSztBQUNQLGNBQVFBLE1BQUssU0FBUyxNQUFNO0FBQUEsYUFDckIsWUFBWSxLQUFLLFFBQVEsSUFBSSxjQUFjLEVBQUU7QUFDcEQsY0FBUSxXQUFXO0FBQ2pCLFlBQUksSUFBSUEsTUFBSyxPQUFPLE1BQU1BLE9BQU0sU0FBUztBQUN6QyxZQUFJLFdBQVcsRUFBRSxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVU7QUFDNUMsZ0JBQVEsTUFBTSxDQUFDO0FBQUEsTUFDakI7QUFHRixRQUFJLENBQUNELElBQUcsZ0JBQWdCO0FBRWxCLGNBQVEsT0FBTyxrQkFBa0IsQ0FBQztBQUN0QyxtQkFBYUEsS0FBSSxLQUFLO0FBTXRCLE1BQUFBLElBQUcsUUFBUyxTQUFVLFVBQVU7QUFDOUIsaUJBQVMsTUFBTyxJQUFJLElBQUk7QUFDdEIsaUJBQU8sU0FBUyxLQUFLQSxLQUFJLElBQUksU0FBVSxLQUFLO0FBRTFDLGdCQUFJLENBQUMsS0FBSztBQUNSLHlCQUFXO0FBQUEsWUFDYjtBQUVBLGdCQUFJLE9BQU8sT0FBTztBQUNoQixpQkFBRyxNQUFNLE1BQU0sU0FBUztBQUFBLFVBQzVCLENBQUM7QUFBQSxRQUNIO0FBRUEsZUFBTyxlQUFlLE9BQU8sZ0JBQWdCO0FBQUEsVUFDM0MsT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNULEVBQUdBLElBQUcsS0FBSztBQUVYLE1BQUFBLElBQUcsWUFBYSxTQUFVLGNBQWM7QUFDdEMsaUJBQVMsVUFBVyxJQUFJO0FBRXRCLHVCQUFhLE1BQU1BLEtBQUksU0FBUztBQUNoQyxxQkFBVztBQUFBLFFBQ2I7QUFFQSxlQUFPLGVBQWUsV0FBVyxnQkFBZ0I7QUFBQSxVQUMvQyxPQUFPO0FBQUEsUUFDVCxDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1QsRUFBR0EsSUFBRyxTQUFTO0FBRWYsVUFBSSxZQUFZLEtBQUssUUFBUSxJQUFJLGNBQWMsRUFBRSxHQUFHO0FBQ2xELGdCQUFRLEdBQUcsUUFBUSxXQUFXO0FBQzVCLGdCQUFNQSxJQUFHLGNBQWM7QUFDdkIsa0JBQVEsVUFBVSxNQUFNQSxJQUFHLGVBQWUsUUFBUSxDQUFDO0FBQUEsUUFDckQsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBN0NNO0FBK0NOLFFBQUksQ0FBQyxPQUFPLGdCQUFnQjtBQUMxQixtQkFBYSxRQUFRQSxJQUFHLGNBQWM7QUFBQSxJQUN4QztBQUVBLElBQUFELFFBQU8sVUFBVSxNQUFNLE1BQU1DLEdBQUUsQ0FBQztBQUNoQyxRQUFJLFFBQVEsSUFBSSxpQ0FBaUMsQ0FBQ0EsSUFBRyxXQUFXO0FBQzVELE1BQUFELFFBQU8sVUFBVSxNQUFNQyxHQUFFO0FBQ3pCLE1BQUFBLElBQUcsWUFBWTtBQUFBLElBQ25CO0FBRUEsYUFBUyxNQUFPQSxLQUFJO0FBRWxCLGdCQUFVQSxHQUFFO0FBQ1osTUFBQUEsSUFBRyxjQUFjO0FBRWpCLE1BQUFBLElBQUcsbUJBQW1CO0FBQ3RCLE1BQUFBLElBQUcsb0JBQW9CO0FBQ3ZCLFVBQUksY0FBY0EsSUFBRztBQUNyQixNQUFBQSxJQUFHLFdBQVc7QUFDZCxlQUFTLFNBQVVHLE9BQU0sU0FBUyxJQUFJO0FBQ3BDLFlBQUksT0FBTyxZQUFZO0FBQ3JCLGVBQUssU0FBUyxVQUFVO0FBRTFCLGVBQU8sWUFBWUEsT0FBTSxTQUFTLEVBQUU7QUFFcEMsaUJBQVMsWUFBYUEsT0FBTUMsVUFBU0MsS0FBSSxXQUFXO0FBQ2xELGlCQUFPLFlBQVlGLE9BQU1DLFVBQVMsU0FBVSxLQUFLO0FBQy9DLGdCQUFJLFFBQVEsSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQ2hELHNCQUFRLENBQUMsYUFBYSxDQUFDRCxPQUFNQyxVQUFTQyxHQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxpQkFDakY7QUFDSCxrQkFBSSxPQUFPQSxRQUFPO0FBQ2hCLGdCQUFBQSxJQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsWUFDNUI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLFVBQUksZUFBZUwsSUFBRztBQUN0QixNQUFBQSxJQUFHLFlBQVk7QUFDZixlQUFTLFVBQVdHLE9BQU0sTUFBTSxTQUFTLElBQUk7QUFDM0MsWUFBSSxPQUFPLFlBQVk7QUFDckIsZUFBSyxTQUFTLFVBQVU7QUFFMUIsZUFBTyxhQUFhQSxPQUFNLE1BQU0sU0FBUyxFQUFFO0FBRTNDLGlCQUFTLGFBQWNBLE9BQU1HLE9BQU1GLFVBQVNDLEtBQUksV0FBVztBQUN6RCxpQkFBTyxhQUFhRixPQUFNRyxPQUFNRixVQUFTLFNBQVUsS0FBSztBQUN0RCxnQkFBSSxRQUFRLElBQUksU0FBUyxZQUFZLElBQUksU0FBUztBQUNoRCxzQkFBUSxDQUFDLGNBQWMsQ0FBQ0QsT0FBTUcsT0FBTUYsVUFBU0MsR0FBRSxHQUFHLEtBQUssYUFBYSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQUEsaUJBQ3hGO0FBQ0gsa0JBQUksT0FBT0EsUUFBTztBQUNoQixnQkFBQUEsSUFBRyxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQzVCO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLGdCQUFnQkwsSUFBRztBQUN2QixVQUFJO0FBQ0YsUUFBQUEsSUFBRyxhQUFhO0FBQ2xCLGVBQVMsV0FBWUcsT0FBTSxNQUFNLFNBQVMsSUFBSTtBQUM1QyxZQUFJLE9BQU8sWUFBWTtBQUNyQixlQUFLLFNBQVMsVUFBVTtBQUUxQixlQUFPLGNBQWNBLE9BQU0sTUFBTSxTQUFTLEVBQUU7QUFFNUMsaUJBQVMsY0FBZUEsT0FBTUcsT0FBTUYsVUFBU0MsS0FBSSxXQUFXO0FBQzFELGlCQUFPLGNBQWNGLE9BQU1HLE9BQU1GLFVBQVMsU0FBVSxLQUFLO0FBQ3ZELGdCQUFJLFFBQVEsSUFBSSxTQUFTLFlBQVksSUFBSSxTQUFTO0FBQ2hELHNCQUFRLENBQUMsZUFBZSxDQUFDRCxPQUFNRyxPQUFNRixVQUFTQyxHQUFFLEdBQUcsS0FBSyxhQUFhLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxpQkFDekY7QUFDSCxrQkFBSSxPQUFPQSxRQUFPO0FBQ2hCLGdCQUFBQSxJQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsWUFDNUI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUVBLFVBQUksY0FBY0wsSUFBRztBQUNyQixVQUFJO0FBQ0YsUUFBQUEsSUFBRyxXQUFXO0FBQ2hCLGVBQVMsU0FBVSxLQUFLLE1BQU0sT0FBTyxJQUFJO0FBQ3ZDLFlBQUksT0FBTyxVQUFVLFlBQVk7QUFDL0IsZUFBSztBQUNMLGtCQUFRO0FBQUEsUUFDVjtBQUNBLGVBQU8sWUFBWSxLQUFLLE1BQU0sT0FBTyxFQUFFO0FBRXZDLGlCQUFTLFlBQWFPLE1BQUtDLE9BQU1DLFFBQU9KLEtBQUksV0FBVztBQUNyRCxpQkFBTyxZQUFZRSxNQUFLQyxPQUFNQyxRQUFPLFNBQVUsS0FBSztBQUNsRCxnQkFBSSxRQUFRLElBQUksU0FBUyxZQUFZLElBQUksU0FBUztBQUNoRCxzQkFBUSxDQUFDLGFBQWEsQ0FBQ0YsTUFBS0MsT0FBTUMsUUFBT0osR0FBRSxHQUFHLEtBQUssYUFBYSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQUEsaUJBQ3BGO0FBQ0gsa0JBQUksT0FBT0EsUUFBTztBQUNoQixnQkFBQUEsSUFBRyxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQzVCO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLGFBQWFMLElBQUc7QUFDcEIsTUFBQUEsSUFBRyxVQUFVVTtBQUNiLFVBQUksMEJBQTBCO0FBQzlCLGVBQVNBLFNBQVNQLE9BQU0sU0FBUyxJQUFJO0FBQ25DLFlBQUksT0FBTyxZQUFZO0FBQ3JCLGVBQUssU0FBUyxVQUFVO0FBRTFCLFlBQUksYUFBYSx3QkFBd0IsS0FBSyxRQUFRLE9BQU8sSUFDekQsU0FBU1EsWUFBWVIsT0FBTUMsVUFBU0MsS0FBSSxXQUFXO0FBQ25ELGlCQUFPLFdBQVdGLE9BQU07QUFBQSxZQUN0QkE7QUFBQSxZQUFNQztBQUFBLFlBQVNDO0FBQUEsWUFBSTtBQUFBLFVBQ3JCLENBQUM7QUFBQSxRQUNILElBQ0UsU0FBU00sWUFBWVIsT0FBTUMsVUFBU0MsS0FBSSxXQUFXO0FBQ25ELGlCQUFPLFdBQVdGLE9BQU1DLFVBQVM7QUFBQSxZQUMvQkQ7QUFBQSxZQUFNQztBQUFBLFlBQVNDO0FBQUEsWUFBSTtBQUFBLFVBQ3JCLENBQUM7QUFBQSxRQUNIO0FBRUYsZUFBTyxXQUFXRixPQUFNLFNBQVMsRUFBRTtBQUVuQyxpQkFBUyxtQkFBb0JBLE9BQU1DLFVBQVNDLEtBQUksV0FBVztBQUN6RCxpQkFBTyxTQUFVLEtBQUssT0FBTztBQUMzQixnQkFBSSxRQUFRLElBQUksU0FBUyxZQUFZLElBQUksU0FBUztBQUNoRCxzQkFBUTtBQUFBLGdCQUNOO0FBQUEsZ0JBQ0EsQ0FBQ0YsT0FBTUMsVUFBU0MsR0FBRTtBQUFBLGdCQUNsQjtBQUFBLGdCQUNBLGFBQWEsS0FBSyxJQUFJO0FBQUEsZ0JBQ3RCLEtBQUssSUFBSTtBQUFBLGNBQ1gsQ0FBQztBQUFBLGlCQUNFO0FBQ0gsa0JBQUksU0FBUyxNQUFNO0FBQ2pCLHNCQUFNLEtBQUs7QUFFYixrQkFBSSxPQUFPQSxRQUFPO0FBQ2hCLGdCQUFBQSxJQUFHLEtBQUssTUFBTSxLQUFLLEtBQUs7QUFBQSxZQUM1QjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksUUFBUSxRQUFRLE9BQU8sR0FBRyxDQUFDLE1BQU0sUUFBUTtBQUMzQyxZQUFJLGFBQWEsT0FBT0wsR0FBRTtBQUMxQixxQkFBYSxXQUFXO0FBQ3hCLHNCQUFjLFdBQVc7QUFBQSxNQUMzQjtBQUVBLFVBQUksZ0JBQWdCQSxJQUFHO0FBQ3ZCLFVBQUksZUFBZTtBQUNqQixtQkFBVyxZQUFZLE9BQU8sT0FBTyxjQUFjLFNBQVM7QUFDNUQsbUJBQVcsVUFBVSxPQUFPO0FBQUEsTUFDOUI7QUFFQSxVQUFJLGlCQUFpQkEsSUFBRztBQUN4QixVQUFJLGdCQUFnQjtBQUNsQixvQkFBWSxZQUFZLE9BQU8sT0FBTyxlQUFlLFNBQVM7QUFDOUQsb0JBQVksVUFBVSxPQUFPO0FBQUEsTUFDL0I7QUFFQSxhQUFPLGVBQWVBLEtBQUksY0FBYztBQUFBLFFBQ3RDLEtBQUssV0FBWTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBLFFBQ0EsS0FBSyxTQUFVLEtBQUs7QUFDbEIsdUJBQWE7QUFBQSxRQUNmO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsTUFDaEIsQ0FBQztBQUNELGFBQU8sZUFBZUEsS0FBSSxlQUFlO0FBQUEsUUFDdkMsS0FBSyxXQUFZO0FBQ2YsaUJBQU87QUFBQSxRQUNUO0FBQUEsUUFDQSxLQUFLLFNBQVUsS0FBSztBQUNsQix3QkFBYztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsTUFDaEIsQ0FBQztBQUdELFVBQUksaUJBQWlCO0FBQ3JCLGFBQU8sZUFBZUEsS0FBSSxrQkFBa0I7QUFBQSxRQUMxQyxLQUFLLFdBQVk7QUFDZixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBLEtBQUssU0FBVSxLQUFLO0FBQ2xCLDJCQUFpQjtBQUFBLFFBQ25CO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsTUFDaEIsQ0FBQztBQUNELFVBQUksa0JBQWtCO0FBQ3RCLGFBQU8sZUFBZUEsS0FBSSxtQkFBbUI7QUFBQSxRQUMzQyxLQUFLLFdBQVk7QUFDZixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBLEtBQUssU0FBVSxLQUFLO0FBQ2xCLDRCQUFrQjtBQUFBLFFBQ3BCO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsTUFDaEIsQ0FBQztBQUVELGVBQVMsV0FBWUcsT0FBTSxTQUFTO0FBQ2xDLFlBQUksZ0JBQWdCO0FBQ2xCLGlCQUFPLGNBQWMsTUFBTSxNQUFNLFNBQVMsR0FBRztBQUFBO0FBRTdDLGlCQUFPLFdBQVcsTUFBTSxPQUFPLE9BQU8sV0FBVyxTQUFTLEdBQUcsU0FBUztBQUFBLE1BQzFFO0FBRUEsZUFBUyxrQkFBbUI7QUFDMUIsWUFBSSxPQUFPO0FBQ1gsYUFBSyxLQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUssTUFBTSxTQUFVLEtBQUssSUFBSTtBQUN4RCxjQUFJLEtBQUs7QUFDUCxnQkFBSSxLQUFLO0FBQ1AsbUJBQUssUUFBUTtBQUVmLGlCQUFLLEtBQUssU0FBUyxHQUFHO0FBQUEsVUFDeEIsT0FBTztBQUNMLGlCQUFLLEtBQUs7QUFDVixpQkFBSyxLQUFLLFFBQVEsRUFBRTtBQUNwQixpQkFBSyxLQUFLO0FBQUEsVUFDWjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxlQUFTLFlBQWFBLE9BQU0sU0FBUztBQUNuQyxZQUFJLGdCQUFnQjtBQUNsQixpQkFBTyxlQUFlLE1BQU0sTUFBTSxTQUFTLEdBQUc7QUFBQTtBQUU5QyxpQkFBTyxZQUFZLE1BQU0sT0FBTyxPQUFPLFlBQVksU0FBUyxHQUFHLFNBQVM7QUFBQSxNQUM1RTtBQUVBLGVBQVMsbUJBQW9CO0FBQzNCLFlBQUksT0FBTztBQUNYLGFBQUssS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLE1BQU0sU0FBVSxLQUFLLElBQUk7QUFDeEQsY0FBSSxLQUFLO0FBQ1AsaUJBQUssUUFBUTtBQUNiLGlCQUFLLEtBQUssU0FBUyxHQUFHO0FBQUEsVUFDeEIsT0FBTztBQUNMLGlCQUFLLEtBQUs7QUFDVixpQkFBSyxLQUFLLFFBQVEsRUFBRTtBQUFBLFVBQ3RCO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUVBLGVBQVMsaUJBQWtCQSxPQUFNLFNBQVM7QUFDeEMsZUFBTyxJQUFJSCxJQUFHLFdBQVdHLE9BQU0sT0FBTztBQUFBLE1BQ3hDO0FBRUEsZUFBUyxrQkFBbUJBLE9BQU0sU0FBUztBQUN6QyxlQUFPLElBQUlILElBQUcsWUFBWUcsT0FBTSxPQUFPO0FBQUEsTUFDekM7QUFFQSxVQUFJLFVBQVVILElBQUc7QUFDakIsTUFBQUEsSUFBRyxPQUFPO0FBQ1YsZUFBUyxLQUFNRyxPQUFNLE9BQU8sTUFBTSxJQUFJO0FBQ3BDLFlBQUksT0FBTyxTQUFTO0FBQ2xCLGVBQUssTUFBTSxPQUFPO0FBRXBCLGVBQU8sUUFBUUEsT0FBTSxPQUFPLE1BQU0sRUFBRTtBQUVwQyxpQkFBUyxRQUFTQSxPQUFNTSxRQUFPRyxPQUFNUCxLQUFJLFdBQVc7QUFDbEQsaUJBQU8sUUFBUUYsT0FBTU0sUUFBT0csT0FBTSxTQUFVLEtBQUssSUFBSTtBQUNuRCxnQkFBSSxRQUFRLElBQUksU0FBUyxZQUFZLElBQUksU0FBUztBQUNoRCxzQkFBUSxDQUFDLFNBQVMsQ0FBQ1QsT0FBTU0sUUFBT0csT0FBTVAsR0FBRSxHQUFHLEtBQUssYUFBYSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQUEsaUJBQ2pGO0FBQ0gsa0JBQUksT0FBT0EsUUFBTztBQUNoQixnQkFBQUEsSUFBRyxNQUFNLE1BQU0sU0FBUztBQUFBLFlBQzVCO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxhQUFPTDtBQUFBLElBQ1Q7QUFFQSxhQUFTLFFBQVMsTUFBTTtBQUN0QixZQUFNLFdBQVcsS0FBSyxHQUFHLE1BQU0sS0FBSyxFQUFFO0FBQ3RDLE1BQUFBLElBQUcsZUFBZSxLQUFLLElBQUk7QUFDM0IsWUFBTTtBQUFBLElBQ1I7QUFHQSxRQUFJO0FBS0osYUFBUyxhQUFjO0FBQ3JCLFVBQUksTUFBTSxLQUFLLElBQUk7QUFDbkIsZUFBUyxJQUFJLEdBQUcsSUFBSUEsSUFBRyxlQUFlLFFBQVEsRUFBRSxHQUFHO0FBR2pELFlBQUlBLElBQUcsZUFBZSxHQUFHLFNBQVMsR0FBRztBQUNuQyxVQUFBQSxJQUFHLGVBQWUsR0FBRyxLQUFLO0FBQzFCLFVBQUFBLElBQUcsZUFBZSxHQUFHLEtBQUs7QUFBQSxRQUM1QjtBQUFBLE1BQ0Y7QUFFQSxZQUFNO0FBQUEsSUFDUjtBQUVBLGFBQVMsUUFBUztBQUVoQixtQkFBYSxVQUFVO0FBQ3ZCLG1CQUFhO0FBRWIsVUFBSUEsSUFBRyxlQUFlLFdBQVc7QUFDL0I7QUFFRixVQUFJLE9BQU9BLElBQUcsZUFBZSxNQUFNO0FBQ25DLFVBQUksS0FBSyxLQUFLO0FBQ2QsVUFBSSxPQUFPLEtBQUs7QUFFaEIsVUFBSSxNQUFNLEtBQUs7QUFDZixVQUFJLFlBQVksS0FBSztBQUNyQixVQUFJLFdBQVcsS0FBSztBQUlwQixVQUFJLGNBQWMsUUFBVztBQUMzQixjQUFNLFNBQVMsR0FBRyxNQUFNLElBQUk7QUFDNUIsV0FBRyxNQUFNLE1BQU0sSUFBSTtBQUFBLE1BQ3JCLFdBQVcsS0FBSyxJQUFJLElBQUksYUFBYSxLQUFPO0FBRTFDLGNBQU0sV0FBVyxHQUFHLE1BQU0sSUFBSTtBQUM5QixZQUFJLEtBQUssS0FBSyxJQUFJO0FBQ2xCLFlBQUksT0FBTyxPQUFPO0FBQ2hCLGFBQUcsS0FBSyxNQUFNLEdBQUc7QUFBQSxNQUNyQixPQUFPO0FBRUwsWUFBSSxlQUFlLEtBQUssSUFBSSxJQUFJO0FBR2hDLFlBQUksYUFBYSxLQUFLLElBQUksV0FBVyxXQUFXLENBQUM7QUFHakQsWUFBSSxlQUFlLEtBQUssSUFBSSxhQUFhLEtBQUssR0FBRztBQUVqRCxZQUFJLGdCQUFnQixjQUFjO0FBQ2hDLGdCQUFNLFNBQVMsR0FBRyxNQUFNLElBQUk7QUFDNUIsYUFBRyxNQUFNLE1BQU0sS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFBQSxRQUN6QyxPQUFPO0FBR0wsVUFBQUEsSUFBRyxlQUFlLEtBQUssSUFBSTtBQUFBLFFBQzdCO0FBQUEsTUFDRjtBQUdBLFVBQUksZUFBZSxRQUFXO0FBQzVCLHFCQUFhLFdBQVcsT0FBTyxDQUFDO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDL2JBO0FBQUEsbURBQUFhLFVBQUE7QUFBQTtBQUdBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsUUFBTUMsTUFBSztBQUVYLFFBQU0sTUFBTTtBQUFBLE1BQ1Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLEVBQUUsT0FBTyxTQUFPO0FBS2QsYUFBTyxPQUFPQSxJQUFHLFNBQVM7QUFBQSxJQUM1QixDQUFDO0FBR0QsV0FBTyxLQUFLQSxHQUFFLEVBQUUsUUFBUSxTQUFPO0FBQzdCLFVBQUksUUFBUSxZQUFZO0FBR3RCO0FBQUEsTUFDRjtBQUNBLE1BQUFELFNBQVEsT0FBT0MsSUFBRztBQUFBLElBQ3BCLENBQUM7QUFHRCxRQUFJLFFBQVEsWUFBVTtBQUNwQixNQUFBRCxTQUFRLFVBQVUsRUFBRUMsSUFBRyxPQUFPO0FBQUEsSUFDaEMsQ0FBQztBQUlELElBQUFELFNBQVEsU0FBUyxTQUFVLFVBQVUsVUFBVTtBQUM3QyxVQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLGVBQU9DLElBQUcsT0FBTyxVQUFVLFFBQVE7QUFBQSxNQUNyQztBQUNBLGFBQU8sSUFBSSxRQUFRLENBQUFDLGFBQVc7QUFDNUIsZUFBT0QsSUFBRyxPQUFPLFVBQVVDLFFBQU87QUFBQSxNQUNwQyxDQUFDO0FBQUEsSUFDSDtBQUlBLElBQUFGLFNBQVEsT0FBTyxTQUFVLElBQUksUUFBUSxRQUFRLFFBQVEsVUFBVSxVQUFVO0FBQ3ZFLFVBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsZUFBT0MsSUFBRyxLQUFLLElBQUksUUFBUSxRQUFRLFFBQVEsVUFBVSxRQUFRO0FBQUEsTUFDL0Q7QUFDQSxhQUFPLElBQUksUUFBUSxDQUFDQyxVQUFTLFdBQVc7QUFDdEMsUUFBQUQsSUFBRyxLQUFLLElBQUksUUFBUSxRQUFRLFFBQVEsVUFBVSxDQUFDLEtBQUssV0FBV0UsWUFBVztBQUN4RSxjQUFJO0FBQUssbUJBQU8sT0FBTyxHQUFHO0FBQzFCLFVBQUFELFNBQVEsRUFBRSxXQUFXLFFBQUFDLFFBQU8sQ0FBQztBQUFBLFFBQy9CLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBT0EsSUFBQUgsU0FBUSxRQUFRLFNBQVUsSUFBSSxXQUFXLE1BQU07QUFDN0MsVUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLE9BQU8sWUFBWTtBQUMvQyxlQUFPQyxJQUFHLE1BQU0sSUFBSSxRQUFRLEdBQUcsSUFBSTtBQUFBLE1BQ3JDO0FBRUEsYUFBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3RDLFFBQUFELElBQUcsTUFBTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxjQUFjRSxZQUFXO0FBQzNELGNBQUk7QUFBSyxtQkFBTyxPQUFPLEdBQUc7QUFDMUIsVUFBQUQsU0FBUSxFQUFFLGNBQWMsUUFBQUMsUUFBTyxDQUFDO0FBQUEsUUFDbEMsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFHQSxRQUFJLE9BQU9GLElBQUcsV0FBVyxZQUFZO0FBSW5DLE1BQUFELFNBQVEsU0FBUyxTQUFVLElBQUksWUFBWSxNQUFNO0FBQy9DLFlBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxPQUFPLFlBQVk7QUFDL0MsaUJBQU9DLElBQUcsT0FBTyxJQUFJLFNBQVMsR0FBRyxJQUFJO0FBQUEsUUFDdkM7QUFFQSxlQUFPLElBQUksUUFBUSxDQUFDQyxVQUFTLFdBQVc7QUFDdEMsVUFBQUQsSUFBRyxPQUFPLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLGNBQWNHLGFBQVk7QUFDOUQsZ0JBQUk7QUFBSyxxQkFBTyxPQUFPLEdBQUc7QUFDMUIsWUFBQUYsU0FBUSxFQUFFLGNBQWMsU0FBQUUsU0FBUSxDQUFDO0FBQUEsVUFDbkMsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBR0EsUUFBSSxPQUFPSCxJQUFHLFNBQVMsV0FBVyxZQUFZO0FBQzVDLE1BQUFELFNBQVEsU0FBUyxTQUFTLEVBQUVDLElBQUcsU0FBUyxNQUFNO0FBQUEsSUFDaEQ7QUFBQTtBQUFBOzs7QUNqSUE7QUFBQSxpREFBQUksVUFBQUMsU0FBQTtBQUFBLElBQUFBLFFBQU8sVUFBVSxPQUFLO0FBQ3BCLFlBQU0sSUFBSSxRQUFRLFNBQVMsS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLE9BQUssU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNuRSxVQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxPQUFLLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDekMsYUFBTyxFQUFFLEtBQUssRUFBRSxNQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQUEsSUFDdEY7QUFBQTtBQUFBOzs7QUNKQTtBQUFBLDBEQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFNQSxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sY0FBYztBQUVwQixRQUFNLDJCQUEyQixZQUFZLFNBQVM7QUFJdEQsUUFBTSxZQUFZLFNBQU87QUFDdkIsVUFBSSxRQUFRLGFBQWEsU0FBUztBQUNoQyxjQUFNLDhCQUE4QixZQUFZLEtBQUssSUFBSSxRQUFRQSxNQUFLLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRTFGLFlBQUksNkJBQTZCO0FBQy9CLGdCQUFNQyxTQUFRLElBQUksTUFBTSxxQ0FBcUMsS0FBSztBQUNsRSxVQUFBQSxPQUFNLE9BQU87QUFDYixnQkFBTUE7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFNLGlCQUFpQixhQUFXO0FBQ2hDLFlBQU0sV0FBVyxFQUFFLE1BQU0sSUFBTTtBQUMvQixVQUFJLE9BQU8sWUFBWTtBQUFVLGtCQUFVLEVBQUUsTUFBTSxRQUFRO0FBQzNELGFBQU8sRUFBRSxHQUFHLFVBQVUsR0FBRyxRQUFRO0FBQUEsSUFDbkM7QUFFQSxRQUFNLGtCQUFrQixTQUFPO0FBRzdCLFlBQU1BLFNBQVEsSUFBSSxNQUFNLG1DQUFtQyxNQUFNO0FBQ2pFLE1BQUFBLE9BQU0sT0FBTztBQUNiLE1BQUFBLE9BQU0sUUFBUTtBQUNkLE1BQUFBLE9BQU0sT0FBTztBQUNiLE1BQUFBLE9BQU0sVUFBVTtBQUNoQixhQUFPQTtBQUFBLElBQ1Q7QUFFQSxJQUFBSCxRQUFPLFFBQVEsVUFBVSxPQUFPLE9BQU8sWUFBWTtBQUNqRCxnQkFBVSxLQUFLO0FBQ2YsZ0JBQVUsZUFBZSxPQUFPO0FBRWhDLFVBQUksMEJBQTBCO0FBQzVCLGNBQU0sTUFBTUUsTUFBSyxRQUFRLEtBQUs7QUFFOUIsZUFBT0QsSUFBRyxNQUFNLEtBQUs7QUFBQSxVQUNuQixNQUFNLFFBQVE7QUFBQSxVQUNkLFdBQVc7QUFBQSxRQUNiLENBQUM7QUFBQSxNQUNIO0FBRUEsWUFBTSxPQUFPLE9BQU0sUUFBTztBQUN4QixZQUFJO0FBQ0YsZ0JBQU1BLElBQUcsTUFBTSxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQ2xDLFNBQVNFLFFBQVA7QUFDQSxjQUFJQSxPQUFNLFNBQVMsU0FBUztBQUMxQixrQkFBTUE7QUFBQSxVQUNSO0FBRUEsY0FBSUEsT0FBTSxTQUFTLFVBQVU7QUFDM0IsZ0JBQUlELE1BQUssUUFBUSxHQUFHLE1BQU0sS0FBSztBQUM3QixvQkFBTSxnQkFBZ0IsR0FBRztBQUFBLFlBQzNCO0FBRUEsZ0JBQUlDLE9BQU0sUUFBUSxTQUFTLFlBQVksR0FBRztBQUN4QyxvQkFBTUE7QUFBQSxZQUNSO0FBRUEsa0JBQU0sS0FBS0QsTUFBSyxRQUFRLEdBQUcsQ0FBQztBQUM1QixtQkFBTyxLQUFLLEdBQUc7QUFBQSxVQUNqQjtBQUVBLGNBQUk7QUFDRixrQkFBTSxRQUFRLE1BQU1ELElBQUcsS0FBSyxHQUFHO0FBQy9CLGdCQUFJLENBQUMsTUFBTSxZQUFZLEdBQUc7QUFHeEIsb0JBQU0sSUFBSSxNQUFNLDZCQUE2QjtBQUFBLFlBQy9DO0FBQUEsVUFDRixRQUFFO0FBQ0Esa0JBQU1FO0FBQUEsVUFDUjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTyxLQUFLRCxNQUFLLFFBQVEsS0FBSyxDQUFDO0FBQUEsSUFDakM7QUFFQSxJQUFBRixRQUFPLFFBQVEsY0FBYyxDQUFDLE9BQU8sWUFBWTtBQUMvQyxnQkFBVSxLQUFLO0FBQ2YsZ0JBQVUsZUFBZSxPQUFPO0FBRWhDLFVBQUksMEJBQTBCO0FBQzVCLGNBQU0sTUFBTUUsTUFBSyxRQUFRLEtBQUs7QUFFOUIsZUFBT0QsSUFBRyxVQUFVLEtBQUs7QUFBQSxVQUN2QixNQUFNLFFBQVE7QUFBQSxVQUNkLFdBQVc7QUFBQSxRQUNiLENBQUM7QUFBQSxNQUNIO0FBRUEsWUFBTSxPQUFPLFNBQU87QUFDbEIsWUFBSTtBQUNGLFVBQUFBLElBQUcsVUFBVSxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQ2hDLFNBQVNFLFFBQVA7QUFDQSxjQUFJQSxPQUFNLFNBQVMsU0FBUztBQUMxQixrQkFBTUE7QUFBQSxVQUNSO0FBRUEsY0FBSUEsT0FBTSxTQUFTLFVBQVU7QUFDM0IsZ0JBQUlELE1BQUssUUFBUSxHQUFHLE1BQU0sS0FBSztBQUM3QixvQkFBTSxnQkFBZ0IsR0FBRztBQUFBLFlBQzNCO0FBRUEsZ0JBQUlDLE9BQU0sUUFBUSxTQUFTLFlBQVksR0FBRztBQUN4QyxvQkFBTUE7QUFBQSxZQUNSO0FBRUEsaUJBQUtELE1BQUssUUFBUSxHQUFHLENBQUM7QUFDdEIsbUJBQU8sS0FBSyxHQUFHO0FBQUEsVUFDakI7QUFFQSxjQUFJO0FBQ0YsZ0JBQUksQ0FBQ0QsSUFBRyxTQUFTLEdBQUcsRUFBRSxZQUFZLEdBQUc7QUFHbkMsb0JBQU0sSUFBSSxNQUFNLDZCQUE2QjtBQUFBLFlBQy9DO0FBQUEsVUFDRixRQUFFO0FBQ0Esa0JBQU1FO0FBQUEsVUFDUjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTyxLQUFLRCxNQUFLLFFBQVEsS0FBSyxDQUFDO0FBQUEsSUFDakM7QUFBQTtBQUFBOzs7QUM1SUE7QUFBQSx1REFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNLEVBQUUsU0FBUyxVQUFVLFlBQVksSUFBSTtBQUMzQyxRQUFNLFVBQVUsRUFBRSxRQUFRO0FBRTFCLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2YsUUFBUTtBQUFBLE1BQ1IsWUFBWTtBQUFBLE1BRVosUUFBUTtBQUFBLE1BQ1IsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLE1BQ1gsZUFBZTtBQUFBLElBQ2pCO0FBQUE7QUFBQTs7O0FDYkE7QUFBQSxzREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTUMsTUFBSztBQUVYLGFBQVMsYUFBY0MsT0FBTSxPQUFPLE9BQU8sVUFBVTtBQUVuRCxNQUFBRCxJQUFHLEtBQUtDLE9BQU0sTUFBTSxDQUFDLEtBQUssT0FBTztBQUMvQixZQUFJO0FBQUssaUJBQU8sU0FBUyxHQUFHO0FBQzVCLFFBQUFELElBQUcsUUFBUSxJQUFJLE9BQU8sT0FBTyxnQkFBYztBQUN6QyxVQUFBQSxJQUFHLE1BQU0sSUFBSSxjQUFZO0FBQ3ZCLGdCQUFJO0FBQVUsdUJBQVMsY0FBYyxRQUFRO0FBQUEsVUFDL0MsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLGlCQUFrQkMsT0FBTSxPQUFPLE9BQU87QUFDN0MsWUFBTSxLQUFLRCxJQUFHLFNBQVNDLE9BQU0sSUFBSTtBQUNqQyxNQUFBRCxJQUFHLFlBQVksSUFBSSxPQUFPLEtBQUs7QUFDL0IsYUFBT0EsSUFBRyxVQUFVLEVBQUU7QUFBQSxJQUN4QjtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3pCQTtBQUFBLG9EQUFBRyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLGNBQWM7QUFFcEIsUUFBTSxxQkFBcUIsWUFBWSxRQUFRO0FBQy9DLFFBQU1DLFFBQU8sQ0FBQyxTQUFTLHFCQUFxQkgsSUFBRyxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQyxJQUFJQSxJQUFHLEtBQUssSUFBSTtBQUMxRixRQUFNLFdBQVcsQ0FBQyxTQUFTLHFCQUFxQkEsSUFBRyxTQUFTLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQyxJQUFJQSxJQUFHLFNBQVMsSUFBSTtBQUV0RyxhQUFTLFNBQVUsS0FBSyxNQUFNO0FBQzVCLGFBQU8sUUFBUSxJQUFJO0FBQUEsUUFDakJHLE1BQUssR0FBRztBQUFBLFFBQ1JBLE1BQUssSUFBSSxFQUFFLE1BQU0sU0FBTztBQUN0QixjQUFJLElBQUksU0FBUztBQUFVLG1CQUFPO0FBQ2xDLGdCQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUyxRQUFRLE9BQU8sRUFBRSxTQUFTLFNBQVMsRUFBRTtBQUFBLElBQzFEO0FBRUEsYUFBUyxhQUFjLEtBQUssTUFBTTtBQUNoQyxVQUFJO0FBQ0osWUFBTSxVQUFVLFNBQVMsR0FBRztBQUM1QixVQUFJO0FBQ0YsbUJBQVcsU0FBUyxJQUFJO0FBQUEsTUFDMUIsU0FBUyxLQUFQO0FBQ0EsWUFBSSxJQUFJLFNBQVM7QUFBVSxpQkFBTyxFQUFFLFNBQVMsVUFBVSxLQUFLO0FBQzVELGNBQU07QUFBQSxNQUNSO0FBQ0EsYUFBTyxFQUFFLFNBQVMsU0FBUztBQUFBLElBQzdCO0FBRUEsYUFBUyxXQUFZLEtBQUssTUFBTSxVQUFVLElBQUk7QUFDNUMsTUFBQUQsTUFBSyxZQUFZLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVU7QUFDcEQsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixjQUFNLEVBQUUsU0FBUyxTQUFTLElBQUk7QUFDOUIsWUFBSSxZQUFZLGFBQWEsU0FBUyxRQUFRLEdBQUc7QUFDL0MsaUJBQU8sR0FBRyxJQUFJLE1BQU0sOENBQThDLENBQUM7QUFBQSxRQUNyRTtBQUNBLFlBQUksUUFBUSxZQUFZLEtBQUssWUFBWSxLQUFLLElBQUksR0FBRztBQUNuRCxpQkFBTyxHQUFHLElBQUksTUFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsQ0FBQztBQUFBLFFBQ2xEO0FBQ0EsZUFBTyxHQUFHLE1BQU0sRUFBRSxTQUFTLFNBQVMsQ0FBQztBQUFBLE1BQ3ZDLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxlQUFnQixLQUFLLE1BQU0sVUFBVTtBQUM1QyxZQUFNLEVBQUUsU0FBUyxTQUFTLElBQUksYUFBYSxLQUFLLElBQUk7QUFDcEQsVUFBSSxZQUFZLGFBQWEsU0FBUyxRQUFRLEdBQUc7QUFDL0MsY0FBTSxJQUFJLE1BQU0sOENBQThDO0FBQUEsTUFDaEU7QUFDQSxVQUFJLFFBQVEsWUFBWSxLQUFLLFlBQVksS0FBSyxJQUFJLEdBQUc7QUFDbkQsY0FBTSxJQUFJLE1BQU0sT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDN0M7QUFDQSxhQUFPLEVBQUUsU0FBUyxTQUFTO0FBQUEsSUFDN0I7QUFNQSxhQUFTLGlCQUFrQixLQUFLLFNBQVMsTUFBTSxVQUFVLElBQUk7QUFDM0QsWUFBTSxZQUFZRCxNQUFLLFFBQVFBLE1BQUssUUFBUSxHQUFHLENBQUM7QUFDaEQsWUFBTSxhQUFhQSxNQUFLLFFBQVFBLE1BQUssUUFBUSxJQUFJLENBQUM7QUFDbEQsVUFBSSxlQUFlLGFBQWEsZUFBZUEsTUFBSyxNQUFNLFVBQVUsRUFBRTtBQUFNLGVBQU8sR0FBRztBQUN0RixZQUFNLFdBQVcsQ0FBQyxLQUFLLGFBQWE7QUFDbEMsWUFBSSxLQUFLO0FBQ1AsY0FBSSxJQUFJLFNBQVM7QUFBVSxtQkFBTyxHQUFHO0FBQ3JDLGlCQUFPLEdBQUcsR0FBRztBQUFBLFFBQ2Y7QUFDQSxZQUFJLGFBQWEsU0FBUyxRQUFRLEdBQUc7QUFDbkMsaUJBQU8sR0FBRyxJQUFJLE1BQU0sT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLENBQUM7QUFBQSxRQUNsRDtBQUNBLGVBQU8saUJBQWlCLEtBQUssU0FBUyxZQUFZLFVBQVUsRUFBRTtBQUFBLE1BQ2hFO0FBQ0EsVUFBSTtBQUFvQixRQUFBRCxJQUFHLEtBQUssWUFBWSxFQUFFLFFBQVEsS0FBSyxHQUFHLFFBQVE7QUFBQTtBQUNqRSxRQUFBQSxJQUFHLEtBQUssWUFBWSxRQUFRO0FBQUEsSUFDbkM7QUFFQSxhQUFTLHFCQUFzQixLQUFLLFNBQVMsTUFBTSxVQUFVO0FBQzNELFlBQU0sWUFBWUMsTUFBSyxRQUFRQSxNQUFLLFFBQVEsR0FBRyxDQUFDO0FBQ2hELFlBQU0sYUFBYUEsTUFBSyxRQUFRQSxNQUFLLFFBQVEsSUFBSSxDQUFDO0FBQ2xELFVBQUksZUFBZSxhQUFhLGVBQWVBLE1BQUssTUFBTSxVQUFVLEVBQUU7QUFBTTtBQUM1RSxVQUFJO0FBQ0osVUFBSTtBQUNGLG1CQUFXLFNBQVMsVUFBVTtBQUFBLE1BQ2hDLFNBQVMsS0FBUDtBQUNBLFlBQUksSUFBSSxTQUFTO0FBQVU7QUFDM0IsY0FBTTtBQUFBLE1BQ1I7QUFDQSxVQUFJLGFBQWEsU0FBUyxRQUFRLEdBQUc7QUFDbkMsY0FBTSxJQUFJLE1BQU0sT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDN0M7QUFDQSxhQUFPLHFCQUFxQixLQUFLLFNBQVMsWUFBWSxRQUFRO0FBQUEsSUFDaEU7QUFFQSxhQUFTLGFBQWMsU0FBUyxVQUFVO0FBQ3hDLFVBQUksU0FBUyxPQUFPLFNBQVMsT0FBTyxTQUFTLFFBQVEsUUFBUSxPQUFPLFNBQVMsUUFBUSxRQUFRLEtBQUs7QUFDaEcsWUFBSSxzQkFBc0IsU0FBUyxNQUFNLE9BQU8sa0JBQWtCO0FBRWhFLGlCQUFPO0FBQUEsUUFDVDtBQUlBLFlBQUksU0FBUyxTQUFTLFFBQVEsUUFDMUIsU0FBUyxTQUFTLFFBQVEsUUFDMUIsU0FBUyxVQUFVLFFBQVEsU0FDM0IsU0FBUyxZQUFZLFFBQVEsV0FDN0IsU0FBUyxZQUFZLFFBQVEsV0FDN0IsU0FBUyxZQUFZLFFBQVEsV0FDN0IsU0FBUyxnQkFBZ0IsUUFBUSxhQUFhO0FBRWhELGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUlBLGFBQVMsWUFBYSxLQUFLLE1BQU07QUFDL0IsWUFBTSxTQUFTQSxNQUFLLFFBQVEsR0FBRyxFQUFFLE1BQU1BLE1BQUssR0FBRyxFQUFFLE9BQU8sT0FBSyxDQUFDO0FBQzlELFlBQU0sVUFBVUEsTUFBSyxRQUFRLElBQUksRUFBRSxNQUFNQSxNQUFLLEdBQUcsRUFBRSxPQUFPLE9BQUssQ0FBQztBQUNoRSxhQUFPLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxNQUFNLE9BQU8sUUFBUSxPQUFPLEtBQUssSUFBSTtBQUFBLElBQ3ZFO0FBRUEsYUFBUyxPQUFRLEtBQUssTUFBTSxVQUFVO0FBQ3BDLGFBQU8sVUFBVSxhQUFhLHNDQUFzQztBQUFBLElBQ3RFO0FBRUEsSUFBQUYsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDMUlBO0FBQUEsOERBQUFLLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU1DLE1BQUs7QUFDWCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTSxhQUFhLGlCQUFxQjtBQUN4QyxRQUFNLG1CQUFtQixpQkFBMEI7QUFDbkQsUUFBTUMsUUFBTztBQUViLGFBQVMsU0FBVSxLQUFLLE1BQU0sTUFBTTtBQUNsQyxVQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGVBQU8sRUFBRSxRQUFRLEtBQUs7QUFBQSxNQUN4QjtBQUVBLGFBQU8sUUFBUSxDQUFDO0FBQ2hCLFdBQUssVUFBVSxhQUFhLE9BQU8sQ0FBQyxDQUFDLEtBQUssVUFBVTtBQUNwRCxXQUFLLFlBQVksZUFBZSxPQUFPLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSztBQUcvRCxVQUFJLEtBQUssc0JBQXNCLFFBQVEsU0FBUyxRQUFRO0FBQ3RELGdCQUFRLEtBQUs7QUFBQTtBQUFBLGlFQUNnRDtBQUFBLE1BQy9EO0FBRUEsWUFBTSxFQUFFLFNBQVMsU0FBUyxJQUFJQSxNQUFLLGVBQWUsS0FBSyxNQUFNLE1BQU07QUFDbkUsTUFBQUEsTUFBSyxxQkFBcUIsS0FBSyxTQUFTLE1BQU0sTUFBTTtBQUNwRCxhQUFPLG9CQUFvQixVQUFVLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDdEQ7QUFFQSxhQUFTLG9CQUFxQixVQUFVLEtBQUssTUFBTSxNQUFNO0FBQ3ZELFVBQUksS0FBSyxVQUFVLENBQUMsS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFHO0FBQzVDLFlBQU0sYUFBYUQsTUFBSyxRQUFRLElBQUk7QUFDcEMsVUFBSSxDQUFDRCxJQUFHLFdBQVcsVUFBVTtBQUFHLG1CQUFXLFVBQVU7QUFDckQsYUFBTyxVQUFVLFVBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUM1QztBQUVBLGFBQVMsVUFBVyxVQUFVLEtBQUssTUFBTSxNQUFNO0FBQzdDLFVBQUksS0FBSyxVQUFVLENBQUMsS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFHO0FBQzVDLGFBQU8sU0FBUyxVQUFVLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDM0M7QUFFQSxhQUFTLFNBQVUsVUFBVSxLQUFLLE1BQU0sTUFBTTtBQUM1QyxZQUFNLFdBQVcsS0FBSyxjQUFjQSxJQUFHLFdBQVdBLElBQUc7QUFDckQsWUFBTSxVQUFVLFNBQVMsR0FBRztBQUU1QixVQUFJLFFBQVEsWUFBWTtBQUFHLGVBQU8sTUFBTSxTQUFTLFVBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxlQUNqRSxRQUFRLE9BQU8sS0FDZixRQUFRLGtCQUFrQixLQUMxQixRQUFRLGNBQWM7QUFBRyxlQUFPLE9BQU8sU0FBUyxVQUFVLEtBQUssTUFBTSxJQUFJO0FBQUEsZUFDekUsUUFBUSxlQUFlO0FBQUcsZUFBTyxPQUFPLFVBQVUsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUM1RTtBQUVBLGFBQVMsT0FBUSxTQUFTLFVBQVUsS0FBSyxNQUFNLE1BQU07QUFDbkQsVUFBSSxDQUFDO0FBQVUsZUFBTyxTQUFTLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFDdkQsYUFBTyxZQUFZLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUM3QztBQUVBLGFBQVMsWUFBYSxTQUFTLEtBQUssTUFBTSxNQUFNO0FBQzlDLFVBQUksS0FBSyxXQUFXO0FBQ2xCLFFBQUFBLElBQUcsV0FBVyxJQUFJO0FBQ2xCLGVBQU8sU0FBUyxTQUFTLEtBQUssTUFBTSxJQUFJO0FBQUEsTUFDMUMsV0FBVyxLQUFLLGNBQWM7QUFDNUIsY0FBTSxJQUFJLE1BQU0sSUFBSSxzQkFBc0I7QUFBQSxNQUM1QztBQUFBLElBQ0Y7QUFFQSxhQUFTLFNBQVUsU0FBUyxLQUFLLE1BQU0sTUFBTTtBQUMzQyxNQUFBQSxJQUFHLGFBQWEsS0FBSyxJQUFJO0FBQ3pCLFVBQUksS0FBSztBQUFvQix5QkFBaUIsUUFBUSxNQUFNLEtBQUssSUFBSTtBQUNyRSxhQUFPLFlBQVksTUFBTSxRQUFRLElBQUk7QUFBQSxJQUN2QztBQUVBLGFBQVMsaUJBQWtCLFNBQVMsS0FBSyxNQUFNO0FBSTdDLFVBQUksa0JBQWtCLE9BQU87QUFBRyx5QkFBaUIsTUFBTSxPQUFPO0FBQzlELGFBQU8sa0JBQWtCLEtBQUssSUFBSTtBQUFBLElBQ3BDO0FBRUEsYUFBUyxrQkFBbUIsU0FBUztBQUNuQyxjQUFRLFVBQVUsU0FBVztBQUFBLElBQy9CO0FBRUEsYUFBUyxpQkFBa0IsTUFBTSxTQUFTO0FBQ3hDLGFBQU8sWUFBWSxNQUFNLFVBQVUsR0FBSztBQUFBLElBQzFDO0FBRUEsYUFBUyxZQUFhLE1BQU0sU0FBUztBQUNuQyxhQUFPQSxJQUFHLFVBQVUsTUFBTSxPQUFPO0FBQUEsSUFDbkM7QUFFQSxhQUFTLGtCQUFtQixLQUFLLE1BQU07QUFJckMsWUFBTSxpQkFBaUJBLElBQUcsU0FBUyxHQUFHO0FBQ3RDLGFBQU8saUJBQWlCLE1BQU0sZUFBZSxPQUFPLGVBQWUsS0FBSztBQUFBLElBQzFFO0FBRUEsYUFBUyxNQUFPLFNBQVMsVUFBVSxLQUFLLE1BQU0sTUFBTTtBQUNsRCxVQUFJLENBQUM7QUFBVSxlQUFPLGFBQWEsUUFBUSxNQUFNLEtBQUssTUFBTSxJQUFJO0FBQ2hFLFVBQUksWUFBWSxDQUFDLFNBQVMsWUFBWSxHQUFHO0FBQ3ZDLGNBQU0sSUFBSSxNQUFNLG1DQUFtQyx5QkFBeUIsT0FBTztBQUFBLE1BQ3JGO0FBQ0EsYUFBTyxRQUFRLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDaEM7QUFFQSxhQUFTLGFBQWMsU0FBUyxLQUFLLE1BQU0sTUFBTTtBQUMvQyxNQUFBQSxJQUFHLFVBQVUsSUFBSTtBQUNqQixjQUFRLEtBQUssTUFBTSxJQUFJO0FBQ3ZCLGFBQU8sWUFBWSxNQUFNLE9BQU87QUFBQSxJQUNsQztBQUVBLGFBQVMsUUFBUyxLQUFLLE1BQU0sTUFBTTtBQUNqQyxNQUFBQSxJQUFHLFlBQVksR0FBRyxFQUFFLFFBQVEsVUFBUSxZQUFZLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQztBQUFBLElBQ3hFO0FBRUEsYUFBUyxZQUFhLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFDM0MsWUFBTSxVQUFVQyxNQUFLLEtBQUssS0FBSyxJQUFJO0FBQ25DLFlBQU0sV0FBV0EsTUFBSyxLQUFLLE1BQU0sSUFBSTtBQUNyQyxZQUFNLEVBQUUsU0FBUyxJQUFJQyxNQUFLLGVBQWUsU0FBUyxVQUFVLE1BQU07QUFDbEUsYUFBTyxVQUFVLFVBQVUsU0FBUyxVQUFVLElBQUk7QUFBQSxJQUNwRDtBQUVBLGFBQVMsT0FBUSxVQUFVLEtBQUssTUFBTSxNQUFNO0FBQzFDLFVBQUksY0FBY0YsSUFBRyxhQUFhLEdBQUc7QUFDckMsVUFBSSxLQUFLLGFBQWE7QUFDcEIsc0JBQWNDLE1BQUssUUFBUSxRQUFRLElBQUksR0FBRyxXQUFXO0FBQUEsTUFDdkQ7QUFFQSxVQUFJLENBQUMsVUFBVTtBQUNiLGVBQU9ELElBQUcsWUFBWSxhQUFhLElBQUk7QUFBQSxNQUN6QyxPQUFPO0FBQ0wsWUFBSTtBQUNKLFlBQUk7QUFDRix5QkFBZUEsSUFBRyxhQUFhLElBQUk7QUFBQSxRQUNyQyxTQUFTLEtBQVA7QUFJQSxjQUFJLElBQUksU0FBUyxZQUFZLElBQUksU0FBUztBQUFXLG1CQUFPQSxJQUFHLFlBQVksYUFBYSxJQUFJO0FBQzVGLGdCQUFNO0FBQUEsUUFDUjtBQUNBLFlBQUksS0FBSyxhQUFhO0FBQ3BCLHlCQUFlQyxNQUFLLFFBQVEsUUFBUSxJQUFJLEdBQUcsWUFBWTtBQUFBLFFBQ3pEO0FBQ0EsWUFBSUMsTUFBSyxZQUFZLGFBQWEsWUFBWSxHQUFHO0FBQy9DLGdCQUFNLElBQUksTUFBTSxnQkFBZ0IsOENBQThDLGdCQUFnQjtBQUFBLFFBQ2hHO0FBS0EsWUFBSUYsSUFBRyxTQUFTLElBQUksRUFBRSxZQUFZLEtBQUtFLE1BQUssWUFBWSxjQUFjLFdBQVcsR0FBRztBQUNsRixnQkFBTSxJQUFJLE1BQU0scUJBQXFCLHVCQUF1QixlQUFlO0FBQUEsUUFDN0U7QUFDQSxlQUFPLFNBQVMsYUFBYSxJQUFJO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBRUEsYUFBUyxTQUFVLGFBQWEsTUFBTTtBQUNwQyxNQUFBRixJQUFHLFdBQVcsSUFBSTtBQUNsQixhQUFPQSxJQUFHLFlBQVksYUFBYSxJQUFJO0FBQUEsSUFDekM7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNyS2pCLElBQUFJLHFCQUFBO0FBQUEsMERBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2YsVUFBVTtBQUFBLElBQ1o7QUFBQTtBQUFBOzs7QUNKQTtBQUFBLDREQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLFFBQU1DLE1BQUs7QUFFWCxhQUFTLFdBQVlDLE9BQU07QUFDekIsYUFBT0QsSUFBRyxPQUFPQyxLQUFJLEVBQUUsS0FBSyxNQUFNLElBQUksRUFBRSxNQUFNLE1BQU0sS0FBSztBQUFBLElBQzNEO0FBRUEsSUFBQUYsUUFBTyxVQUFVO0FBQUEsTUFDZixZQUFZLEVBQUUsVUFBVTtBQUFBLE1BQ3hCLGdCQUFnQkMsSUFBRztBQUFBLElBQ3JCO0FBQUE7QUFBQTs7O0FDWEE7QUFBQSxvREFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTUMsTUFBSztBQUNYLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFNBQVMsaUJBQXFCO0FBQ3BDLFFBQU0sYUFBYSxzQkFBMEI7QUFDN0MsUUFBTSxlQUFlLGlCQUEwQjtBQUMvQyxRQUFNQyxRQUFPO0FBRWIsYUFBUyxLQUFNLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDbEMsVUFBSSxPQUFPLFNBQVMsY0FBYyxDQUFDLElBQUk7QUFDckMsYUFBSztBQUNMLGVBQU8sQ0FBQztBQUFBLE1BQ1YsV0FBVyxPQUFPLFNBQVMsWUFBWTtBQUNyQyxlQUFPLEVBQUUsUUFBUSxLQUFLO0FBQUEsTUFDeEI7QUFFQSxXQUFLLE1BQU0sV0FBWTtBQUFBLE1BQUM7QUFDeEIsYUFBTyxRQUFRLENBQUM7QUFFaEIsV0FBSyxVQUFVLGFBQWEsT0FBTyxDQUFDLENBQUMsS0FBSyxVQUFVO0FBQ3BELFdBQUssWUFBWSxlQUFlLE9BQU8sQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLO0FBRy9ELFVBQUksS0FBSyxzQkFBc0IsUUFBUSxTQUFTLFFBQVE7QUFDdEQsZ0JBQVEsS0FBSztBQUFBO0FBQUEsaUVBQ2dEO0FBQUEsTUFDL0Q7QUFFQSxNQUFBQSxNQUFLLFdBQVcsS0FBSyxNQUFNLFFBQVEsQ0FBQyxLQUFLLFVBQVU7QUFDakQsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixjQUFNLEVBQUUsU0FBUyxTQUFTLElBQUk7QUFDOUIsUUFBQUEsTUFBSyxpQkFBaUIsS0FBSyxTQUFTLE1BQU0sUUFBUSxDQUFBQyxTQUFPO0FBQ3ZELGNBQUlBO0FBQUssbUJBQU8sR0FBR0EsSUFBRztBQUN0QixjQUFJLEtBQUs7QUFBUSxtQkFBTyxhQUFhLGdCQUFnQixVQUFVLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFDbEYsaUJBQU8sZUFBZSxVQUFVLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxRQUNyRCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsZUFBZ0IsVUFBVSxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQ3RELFlBQU0sYUFBYUYsTUFBSyxRQUFRLElBQUk7QUFDcEMsaUJBQVcsWUFBWSxDQUFDLEtBQUssY0FBYztBQUN6QyxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLFlBQUk7QUFBVyxpQkFBTyxVQUFVLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUM3RCxlQUFPLFlBQVksQ0FBQUUsU0FBTztBQUN4QixjQUFJQTtBQUFLLG1CQUFPLEdBQUdBLElBQUc7QUFDdEIsaUJBQU8sVUFBVSxVQUFVLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxRQUNoRCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsYUFBYyxXQUFXLFVBQVUsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUMvRCxjQUFRLFFBQVEsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxhQUFXO0FBQ3RELFlBQUk7QUFBUyxpQkFBTyxVQUFVLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUMzRCxlQUFPLEdBQUc7QUFBQSxNQUNaLEdBQUcsQ0FBQUMsV0FBUyxHQUFHQSxNQUFLLENBQUM7QUFBQSxJQUN2QjtBQUVBLGFBQVMsVUFBVyxVQUFVLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDakQsVUFBSSxLQUFLO0FBQVEsZUFBTyxhQUFhLFVBQVUsVUFBVSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQzVFLGFBQU8sU0FBUyxVQUFVLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxJQUMvQztBQUVBLGFBQVMsU0FBVSxVQUFVLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDaEQsWUFBTUYsUUFBTyxLQUFLLGNBQWNGLElBQUcsT0FBT0EsSUFBRztBQUM3QyxNQUFBRSxNQUFLLEtBQUssQ0FBQyxLQUFLLFlBQVk7QUFDMUIsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUV0QixZQUFJLFFBQVEsWUFBWTtBQUFHLGlCQUFPLE1BQU0sU0FBUyxVQUFVLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxpQkFDckUsUUFBUSxPQUFPLEtBQ2YsUUFBUSxrQkFBa0IsS0FDMUIsUUFBUSxjQUFjO0FBQUcsaUJBQU8sT0FBTyxTQUFTLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLGlCQUM3RSxRQUFRLGVBQWU7QUFBRyxpQkFBTyxPQUFPLFVBQVUsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLE1BQ2hGLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxPQUFRLFNBQVMsVUFBVSxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQ3ZELFVBQUksQ0FBQztBQUFVLGVBQU8sU0FBUyxTQUFTLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFDM0QsYUFBTyxZQUFZLFNBQVMsS0FBSyxNQUFNLE1BQU0sRUFBRTtBQUFBLElBQ2pEO0FBRUEsYUFBUyxZQUFhLFNBQVMsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUNsRCxVQUFJLEtBQUssV0FBVztBQUNsQixRQUFBRixJQUFHLE9BQU8sTUFBTSxTQUFPO0FBQ3JCLGNBQUk7QUFBSyxtQkFBTyxHQUFHLEdBQUc7QUFDdEIsaUJBQU8sU0FBUyxTQUFTLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDSCxXQUFXLEtBQUssY0FBYztBQUM1QixlQUFPLEdBQUcsSUFBSSxNQUFNLElBQUksc0JBQXNCLENBQUM7QUFBQSxNQUNqRDtBQUFPLGVBQU8sR0FBRztBQUFBLElBQ25CO0FBRUEsYUFBUyxTQUFVLFNBQVMsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUMvQyxNQUFBQSxJQUFHLFNBQVMsS0FBSyxNQUFNLFNBQU87QUFDNUIsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixZQUFJLEtBQUs7QUFBb0IsaUJBQU8sd0JBQXdCLFFBQVEsTUFBTSxLQUFLLE1BQU0sRUFBRTtBQUN2RixlQUFPLFlBQVksTUFBTSxRQUFRLE1BQU0sRUFBRTtBQUFBLE1BQzNDLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyx3QkFBeUIsU0FBUyxLQUFLLE1BQU0sSUFBSTtBQUl4RCxVQUFJLGtCQUFrQixPQUFPLEdBQUc7QUFDOUIsZUFBTyxpQkFBaUIsTUFBTSxTQUFTLFNBQU87QUFDNUMsY0FBSTtBQUFLLG1CQUFPLEdBQUcsR0FBRztBQUN0QixpQkFBTyx5QkFBeUIsU0FBUyxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ3hELENBQUM7QUFBQSxNQUNIO0FBQ0EsYUFBTyx5QkFBeUIsU0FBUyxLQUFLLE1BQU0sRUFBRTtBQUFBLElBQ3hEO0FBRUEsYUFBUyxrQkFBbUIsU0FBUztBQUNuQyxjQUFRLFVBQVUsU0FBVztBQUFBLElBQy9CO0FBRUEsYUFBUyxpQkFBa0IsTUFBTSxTQUFTLElBQUk7QUFDNUMsYUFBTyxZQUFZLE1BQU0sVUFBVSxLQUFPLEVBQUU7QUFBQSxJQUM5QztBQUVBLGFBQVMseUJBQTBCLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFDekQsd0JBQWtCLEtBQUssTUFBTSxTQUFPO0FBQ2xDLFlBQUk7QUFBSyxpQkFBTyxHQUFHLEdBQUc7QUFDdEIsZUFBTyxZQUFZLE1BQU0sU0FBUyxFQUFFO0FBQUEsTUFDdEMsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLFlBQWEsTUFBTSxTQUFTLElBQUk7QUFDdkMsYUFBT0EsSUFBRyxNQUFNLE1BQU0sU0FBUyxFQUFFO0FBQUEsSUFDbkM7QUFFQSxhQUFTLGtCQUFtQixLQUFLLE1BQU0sSUFBSTtBQUl6QyxNQUFBQSxJQUFHLEtBQUssS0FBSyxDQUFDLEtBQUssbUJBQW1CO0FBQ3BDLFlBQUk7QUFBSyxpQkFBTyxHQUFHLEdBQUc7QUFDdEIsZUFBTyxhQUFhLE1BQU0sZUFBZSxPQUFPLGVBQWUsT0FBTyxFQUFFO0FBQUEsTUFDMUUsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLE1BQU8sU0FBUyxVQUFVLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDdEQsVUFBSSxDQUFDO0FBQVUsZUFBTyxhQUFhLFFBQVEsTUFBTSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQ3BFLFVBQUksWUFBWSxDQUFDLFNBQVMsWUFBWSxHQUFHO0FBQ3ZDLGVBQU8sR0FBRyxJQUFJLE1BQU0sbUNBQW1DLHlCQUF5QixPQUFPLENBQUM7QUFBQSxNQUMxRjtBQUNBLGFBQU8sUUFBUSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQUEsSUFDcEM7QUFFQSxhQUFTLGFBQWMsU0FBUyxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQ25ELE1BQUFBLElBQUcsTUFBTSxNQUFNLFNBQU87QUFDcEIsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixnQkFBUSxLQUFLLE1BQU0sTUFBTSxDQUFBRyxTQUFPO0FBQzlCLGNBQUlBO0FBQUssbUJBQU8sR0FBR0EsSUFBRztBQUN0QixpQkFBTyxZQUFZLE1BQU0sU0FBUyxFQUFFO0FBQUEsUUFDdEMsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLFFBQVMsS0FBSyxNQUFNLE1BQU0sSUFBSTtBQUNyQyxNQUFBSCxJQUFHLFFBQVEsS0FBSyxDQUFDLEtBQUssVUFBVTtBQUM5QixZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGVBQU8sYUFBYSxPQUFPLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxNQUNoRCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsYUFBYyxPQUFPLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDakQsWUFBTSxPQUFPLE1BQU0sSUFBSTtBQUN2QixVQUFJLENBQUM7QUFBTSxlQUFPLEdBQUc7QUFDckIsYUFBTyxZQUFZLE9BQU8sTUFBTSxLQUFLLE1BQU0sTUFBTSxFQUFFO0FBQUEsSUFDckQ7QUFFQSxhQUFTLFlBQWEsT0FBTyxNQUFNLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDdEQsWUFBTSxVQUFVQyxNQUFLLEtBQUssS0FBSyxJQUFJO0FBQ25DLFlBQU0sV0FBV0EsTUFBSyxLQUFLLE1BQU0sSUFBSTtBQUNyQyxNQUFBQyxNQUFLLFdBQVcsU0FBUyxVQUFVLFFBQVEsQ0FBQyxLQUFLLFVBQVU7QUFDekQsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixjQUFNLEVBQUUsU0FBUyxJQUFJO0FBQ3JCLGtCQUFVLFVBQVUsU0FBUyxVQUFVLE1BQU0sQ0FBQUMsU0FBTztBQUNsRCxjQUFJQTtBQUFLLG1CQUFPLEdBQUdBLElBQUc7QUFDdEIsaUJBQU8sYUFBYSxPQUFPLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxRQUNoRCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsT0FBUSxVQUFVLEtBQUssTUFBTSxNQUFNLElBQUk7QUFDOUMsTUFBQUgsSUFBRyxTQUFTLEtBQUssQ0FBQyxLQUFLLGdCQUFnQjtBQUNyQyxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLFlBQUksS0FBSyxhQUFhO0FBQ3BCLHdCQUFjQyxNQUFLLFFBQVEsUUFBUSxJQUFJLEdBQUcsV0FBVztBQUFBLFFBQ3ZEO0FBRUEsWUFBSSxDQUFDLFVBQVU7QUFDYixpQkFBT0QsSUFBRyxRQUFRLGFBQWEsTUFBTSxFQUFFO0FBQUEsUUFDekMsT0FBTztBQUNMLFVBQUFBLElBQUcsU0FBUyxNQUFNLENBQUNHLE1BQUssaUJBQWlCO0FBQ3ZDLGdCQUFJQSxNQUFLO0FBSVAsa0JBQUlBLEtBQUksU0FBUyxZQUFZQSxLQUFJLFNBQVM7QUFBVyx1QkFBT0gsSUFBRyxRQUFRLGFBQWEsTUFBTSxFQUFFO0FBQzVGLHFCQUFPLEdBQUdHLElBQUc7QUFBQSxZQUNmO0FBQ0EsZ0JBQUksS0FBSyxhQUFhO0FBQ3BCLDZCQUFlRixNQUFLLFFBQVEsUUFBUSxJQUFJLEdBQUcsWUFBWTtBQUFBLFlBQ3pEO0FBQ0EsZ0JBQUlDLE1BQUssWUFBWSxhQUFhLFlBQVksR0FBRztBQUMvQyxxQkFBTyxHQUFHLElBQUksTUFBTSxnQkFBZ0IsOENBQThDLGdCQUFnQixDQUFDO0FBQUEsWUFDckc7QUFLQSxnQkFBSSxTQUFTLFlBQVksS0FBS0EsTUFBSyxZQUFZLGNBQWMsV0FBVyxHQUFHO0FBQ3pFLHFCQUFPLEdBQUcsSUFBSSxNQUFNLHFCQUFxQix1QkFBdUIsZUFBZSxDQUFDO0FBQUEsWUFDbEY7QUFDQSxtQkFBTyxTQUFTLGFBQWEsTUFBTSxFQUFFO0FBQUEsVUFDdkMsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxTQUFVLGFBQWEsTUFBTSxJQUFJO0FBQ3hDLE1BQUFGLElBQUcsT0FBTyxNQUFNLFNBQU87QUFDckIsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixlQUFPQSxJQUFHLFFBQVEsYUFBYSxNQUFNLEVBQUU7QUFBQSxNQUN6QyxDQUFDO0FBQUEsSUFDSDtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3ZPakIsSUFBQU0sZ0JBQUE7QUFBQSxxREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmLE1BQU0sRUFBRSxjQUFpQjtBQUFBLElBQzNCO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSx3REFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTUMsTUFBSztBQUNYLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFNBQVMsUUFBUTtBQUV2QixRQUFNLFlBQWEsUUFBUSxhQUFhO0FBRXhDLGFBQVMsU0FBVSxTQUFTO0FBQzFCLFlBQU0sVUFBVTtBQUFBLFFBQ2Q7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFDQSxjQUFRLFFBQVEsT0FBSztBQUNuQixnQkFBUSxLQUFLLFFBQVEsTUFBTUQsSUFBRztBQUM5QixZQUFJLElBQUk7QUFDUixnQkFBUSxLQUFLLFFBQVEsTUFBTUEsSUFBRztBQUFBLE1BQ2hDLENBQUM7QUFFRCxjQUFRLGVBQWUsUUFBUSxnQkFBZ0I7QUFBQSxJQUNqRDtBQUVBLGFBQVMsT0FBUSxHQUFHLFNBQVMsSUFBSTtBQUMvQixVQUFJLFlBQVk7QUFFaEIsVUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxhQUFLO0FBQ0wsa0JBQVUsQ0FBQztBQUFBLE1BQ2I7QUFFQSxhQUFPLEdBQUcsc0JBQXNCO0FBQ2hDLGFBQU8sWUFBWSxPQUFPLEdBQUcsVUFBVSxpQ0FBaUM7QUFDeEUsYUFBTyxZQUFZLE9BQU8sSUFBSSxZQUFZLG9DQUFvQztBQUM5RSxhQUFPLFNBQVMsMkNBQTJDO0FBQzNELGFBQU8sWUFBWSxPQUFPLFNBQVMsVUFBVSxrQ0FBa0M7QUFFL0UsZUFBUyxPQUFPO0FBRWhCLGNBQVEsR0FBRyxTQUFTLFNBQVMsR0FBSSxJQUFJO0FBQ25DLFlBQUksSUFBSTtBQUNOLGVBQUssR0FBRyxTQUFTLFdBQVcsR0FBRyxTQUFTLGVBQWUsR0FBRyxTQUFTLFlBQy9ELFlBQVksUUFBUSxjQUFjO0FBQ3BDO0FBQ0Esa0JBQU0sT0FBTyxZQUFZO0FBRXpCLG1CQUFPLFdBQVcsTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSTtBQUFBLFVBQ3ZEO0FBR0EsY0FBSSxHQUFHLFNBQVM7QUFBVSxpQkFBSztBQUFBLFFBQ2pDO0FBRUEsV0FBRyxFQUFFO0FBQUEsTUFDUCxDQUFDO0FBQUEsSUFDSDtBQWFBLGFBQVMsUUFBUyxHQUFHLFNBQVMsSUFBSTtBQUNoQyxhQUFPLENBQUM7QUFDUixhQUFPLE9BQU87QUFDZCxhQUFPLE9BQU8sT0FBTyxVQUFVO0FBSS9CLGNBQVEsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPO0FBQzNCLFlBQUksTUFBTSxHQUFHLFNBQVMsVUFBVTtBQUM5QixpQkFBTyxHQUFHLElBQUk7QUFBQSxRQUNoQjtBQUdBLFlBQUksTUFBTSxHQUFHLFNBQVMsV0FBVyxXQUFXO0FBQzFDLGlCQUFPLFlBQVksR0FBRyxTQUFTLElBQUksRUFBRTtBQUFBLFFBQ3ZDO0FBRUEsWUFBSSxNQUFNLEdBQUcsWUFBWSxHQUFHO0FBQzFCLGlCQUFPLE1BQU0sR0FBRyxTQUFTLElBQUksRUFBRTtBQUFBLFFBQ2pDO0FBRUEsZ0JBQVEsT0FBTyxHQUFHLENBQUFFLFFBQU07QUFDdEIsY0FBSUEsS0FBSTtBQUNOLGdCQUFJQSxJQUFHLFNBQVMsVUFBVTtBQUN4QixxQkFBTyxHQUFHLElBQUk7QUFBQSxZQUNoQjtBQUNBLGdCQUFJQSxJQUFHLFNBQVMsU0FBUztBQUN2QixxQkFBUSxZQUNKLFlBQVksR0FBRyxTQUFTQSxLQUFJLEVBQUUsSUFDOUIsTUFBTSxHQUFHLFNBQVNBLEtBQUksRUFBRTtBQUFBLFlBQzlCO0FBQ0EsZ0JBQUlBLElBQUcsU0FBUyxVQUFVO0FBQ3hCLHFCQUFPLE1BQU0sR0FBRyxTQUFTQSxLQUFJLEVBQUU7QUFBQSxZQUNqQztBQUFBLFVBQ0Y7QUFDQSxpQkFBTyxHQUFHQSxHQUFFO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsWUFBYSxHQUFHLFNBQVMsSUFBSSxJQUFJO0FBQ3hDLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUNkLGFBQU8sT0FBTyxPQUFPLFVBQVU7QUFFL0IsY0FBUSxNQUFNLEdBQUcsS0FBTyxTQUFPO0FBQzdCLFlBQUksS0FBSztBQUNQLGFBQUcsSUFBSSxTQUFTLFdBQVcsT0FBTyxFQUFFO0FBQUEsUUFDdEMsT0FBTztBQUNMLGtCQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssVUFBVTtBQUM5QixnQkFBSSxLQUFLO0FBQ1AsaUJBQUcsSUFBSSxTQUFTLFdBQVcsT0FBTyxFQUFFO0FBQUEsWUFDdEMsV0FBVyxNQUFNLFlBQVksR0FBRztBQUM5QixvQkFBTSxHQUFHLFNBQVMsSUFBSSxFQUFFO0FBQUEsWUFDMUIsT0FBTztBQUNMLHNCQUFRLE9BQU8sR0FBRyxFQUFFO0FBQUEsWUFDdEI7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsZ0JBQWlCLEdBQUcsU0FBUyxJQUFJO0FBQ3hDLFVBQUk7QUFFSixhQUFPLENBQUM7QUFDUixhQUFPLE9BQU87QUFFZCxVQUFJO0FBQ0YsZ0JBQVEsVUFBVSxHQUFHLEdBQUs7QUFBQSxNQUM1QixTQUFTLEtBQVA7QUFDQSxZQUFJLElBQUksU0FBUyxVQUFVO0FBQ3pCO0FBQUEsUUFDRixPQUFPO0FBQ0wsZ0JBQU07QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUVBLFVBQUk7QUFDRixnQkFBUSxRQUFRLFNBQVMsQ0FBQztBQUFBLE1BQzVCLFNBQVMsS0FBUDtBQUNBLFlBQUksSUFBSSxTQUFTLFVBQVU7QUFDekI7QUFBQSxRQUNGLE9BQU87QUFDTCxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBRUEsVUFBSSxNQUFNLFlBQVksR0FBRztBQUN2QixrQkFBVSxHQUFHLFNBQVMsRUFBRTtBQUFBLE1BQzFCLE9BQU87QUFDTCxnQkFBUSxXQUFXLENBQUM7QUFBQSxNQUN0QjtBQUFBLElBQ0Y7QUFFQSxhQUFTLE1BQU8sR0FBRyxTQUFTLFlBQVksSUFBSTtBQUMxQyxhQUFPLENBQUM7QUFDUixhQUFPLE9BQU87QUFDZCxhQUFPLE9BQU8sT0FBTyxVQUFVO0FBSy9CLGNBQVEsTUFBTSxHQUFHLFFBQU07QUFDckIsWUFBSSxPQUFPLEdBQUcsU0FBUyxlQUFlLEdBQUcsU0FBUyxZQUFZLEdBQUcsU0FBUyxVQUFVO0FBQ2xGLGlCQUFPLEdBQUcsU0FBUyxFQUFFO0FBQUEsUUFDdkIsV0FBVyxNQUFNLEdBQUcsU0FBUyxXQUFXO0FBQ3RDLGFBQUcsVUFBVTtBQUFBLFFBQ2YsT0FBTztBQUNMLGFBQUcsRUFBRTtBQUFBLFFBQ1A7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxPQUFRLEdBQUcsU0FBUyxJQUFJO0FBQy9CLGFBQU8sQ0FBQztBQUNSLGFBQU8sT0FBTztBQUNkLGFBQU8sT0FBTyxPQUFPLFVBQVU7QUFFL0IsY0FBUSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFVBQVU7QUFDaEMsWUFBSTtBQUFJLGlCQUFPLEdBQUcsRUFBRTtBQUVwQixZQUFJLElBQUksTUFBTTtBQUNkLFlBQUk7QUFFSixZQUFJLE1BQU07QUFBRyxpQkFBTyxRQUFRLE1BQU0sR0FBRyxFQUFFO0FBRXZDLGNBQU0sUUFBUSxPQUFLO0FBQ2pCLGlCQUFPRCxNQUFLLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFBQyxRQUFNO0FBQ3JDLGdCQUFJLFVBQVU7QUFDWjtBQUFBLFlBQ0Y7QUFDQSxnQkFBSUE7QUFBSSxxQkFBTyxHQUFHLFdBQVdBLEdBQUU7QUFDL0IsZ0JBQUksRUFBRSxNQUFNLEdBQUc7QUFDYixzQkFBUSxNQUFNLEdBQUcsRUFBRTtBQUFBLFlBQ3JCO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUtBLGFBQVMsV0FBWSxHQUFHLFNBQVM7QUFDL0IsVUFBSTtBQUVKLGdCQUFVLFdBQVcsQ0FBQztBQUN0QixlQUFTLE9BQU87QUFFaEIsYUFBTyxHQUFHLHNCQUFzQjtBQUNoQyxhQUFPLFlBQVksT0FBTyxHQUFHLFVBQVUsaUNBQWlDO0FBQ3hFLGFBQU8sU0FBUyx5QkFBeUI7QUFDekMsYUFBTyxZQUFZLE9BQU8sU0FBUyxVQUFVLGtDQUFrQztBQUUvRSxVQUFJO0FBQ0YsYUFBSyxRQUFRLFVBQVUsQ0FBQztBQUFBLE1BQzFCLFNBQVMsSUFBUDtBQUNBLFlBQUksR0FBRyxTQUFTLFVBQVU7QUFDeEI7QUFBQSxRQUNGO0FBR0EsWUFBSSxHQUFHLFNBQVMsV0FBVyxXQUFXO0FBQ3BDLDBCQUFnQixHQUFHLFNBQVMsRUFBRTtBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUVBLFVBQUk7QUFFRixZQUFJLE1BQU0sR0FBRyxZQUFZLEdBQUc7QUFDMUIsb0JBQVUsR0FBRyxTQUFTLElBQUk7QUFBQSxRQUM1QixPQUFPO0FBQ0wsa0JBQVEsV0FBVyxDQUFDO0FBQUEsUUFDdEI7QUFBQSxNQUNGLFNBQVMsSUFBUDtBQUNBLFlBQUksR0FBRyxTQUFTLFVBQVU7QUFDeEI7QUFBQSxRQUNGLFdBQVcsR0FBRyxTQUFTLFNBQVM7QUFDOUIsaUJBQU8sWUFBWSxnQkFBZ0IsR0FBRyxTQUFTLEVBQUUsSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFFO0FBQUEsUUFDL0UsV0FBVyxHQUFHLFNBQVMsVUFBVTtBQUMvQixnQkFBTTtBQUFBLFFBQ1I7QUFDQSxrQkFBVSxHQUFHLFNBQVMsRUFBRTtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUVBLGFBQVMsVUFBVyxHQUFHLFNBQVMsWUFBWTtBQUMxQyxhQUFPLENBQUM7QUFDUixhQUFPLE9BQU87QUFFZCxVQUFJO0FBQ0YsZ0JBQVEsVUFBVSxDQUFDO0FBQUEsTUFDckIsU0FBUyxJQUFQO0FBQ0EsWUFBSSxHQUFHLFNBQVMsV0FBVztBQUN6QixnQkFBTTtBQUFBLFFBQ1IsV0FBVyxHQUFHLFNBQVMsZUFBZSxHQUFHLFNBQVMsWUFBWSxHQUFHLFNBQVMsU0FBUztBQUNqRixxQkFBVyxHQUFHLE9BQU87QUFBQSxRQUN2QixXQUFXLEdBQUcsU0FBUyxVQUFVO0FBQy9CLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsYUFBUyxXQUFZLEdBQUcsU0FBUztBQUMvQixhQUFPLENBQUM7QUFDUixhQUFPLE9BQU87QUFDZCxjQUFRLFlBQVksQ0FBQyxFQUFFLFFBQVEsT0FBSyxXQUFXRCxNQUFLLEtBQUssR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBRXhFLFVBQUksV0FBVztBQU9iLGNBQU0sWUFBWSxLQUFLLElBQUk7QUFDM0IsV0FBRztBQUNELGNBQUk7QUFDRixrQkFBTSxNQUFNLFFBQVEsVUFBVSxHQUFHLE9BQU87QUFDeEMsbUJBQU87QUFBQSxVQUNULFFBQUU7QUFBQSxVQUFPO0FBQUEsUUFDWCxTQUFTLEtBQUssSUFBSSxJQUFJLFlBQVk7QUFBQSxNQUNwQyxPQUFPO0FBQ0wsY0FBTSxNQUFNLFFBQVEsVUFBVSxHQUFHLE9BQU87QUFDeEMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsSUFBQUYsUUFBTyxVQUFVO0FBQ2pCLFdBQU8sT0FBTztBQUFBO0FBQUE7OztBQzdTZDtBQUFBLHVEQUFBSSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLElBQUksdUJBQXdCO0FBQ2xDLFFBQU0sU0FBUztBQUVmLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2YsUUFBUSxFQUFFLE1BQU07QUFBQSxNQUNoQixZQUFZLE9BQU87QUFBQSxJQUNyQjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsc0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsUUFBTUMsTUFBSztBQUNYLFFBQU1DLFFBQU8sUUFBUTtBQUNyQixRQUFNLFFBQVE7QUFDZCxRQUFNLFNBQVM7QUFFZixRQUFNLFdBQVcsRUFBRSxTQUFTQyxVQUFVLEtBQUssVUFBVTtBQUNuRCxpQkFBVyxZQUFZLFdBQVk7QUFBQSxNQUFDO0FBQ3BDLE1BQUFGLElBQUcsUUFBUSxLQUFLLENBQUMsS0FBSyxVQUFVO0FBQzlCLFlBQUk7QUFBSyxpQkFBTyxNQUFNLE9BQU8sS0FBSyxRQUFRO0FBRTFDLGdCQUFRLE1BQU0sSUFBSSxVQUFRQyxNQUFLLEtBQUssS0FBSyxJQUFJLENBQUM7QUFFOUMsbUJBQVc7QUFFWCxpQkFBUyxhQUFjO0FBQ3JCLGdCQUFNLE9BQU8sTUFBTSxJQUFJO0FBQ3ZCLGNBQUksQ0FBQztBQUFNLG1CQUFPLFNBQVM7QUFDM0IsaUJBQU8sT0FBTyxNQUFNLENBQUFFLFNBQU87QUFDekIsZ0JBQUlBO0FBQUsscUJBQU8sU0FBU0EsSUFBRztBQUM1Qix1QkFBVztBQUFBLFVBQ2IsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxhQUFTLGFBQWMsS0FBSztBQUMxQixVQUFJO0FBQ0osVUFBSTtBQUNGLGdCQUFRSCxJQUFHLFlBQVksR0FBRztBQUFBLE1BQzVCLFFBQUU7QUFDQSxlQUFPLE1BQU0sV0FBVyxHQUFHO0FBQUEsTUFDN0I7QUFFQSxZQUFNLFFBQVEsVUFBUTtBQUNwQixlQUFPQyxNQUFLLEtBQUssS0FBSyxJQUFJO0FBQzFCLGVBQU8sV0FBVyxJQUFJO0FBQUEsTUFDeEIsQ0FBQztBQUFBLElBQ0g7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQSxjQUFjO0FBQUEsTUFDZDtBQUFBLE1BQ0EsVUFBVTtBQUFBLElBQ1o7QUFBQTtBQUFBOzs7QUMvQ0E7QUFBQSxzREFBQUssVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTUMsTUFBSztBQUNYLFFBQU0sUUFBUTtBQUVkLGFBQVMsV0FBWSxNQUFNLFVBQVU7QUFDbkMsZUFBUyxXQUFZO0FBQ25CLFFBQUFBLElBQUcsVUFBVSxNQUFNLElBQUksU0FBTztBQUM1QixjQUFJO0FBQUssbUJBQU8sU0FBUyxHQUFHO0FBQzVCLG1CQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUVBLE1BQUFBLElBQUcsS0FBSyxNQUFNLENBQUMsS0FBSyxVQUFVO0FBQzVCLFlBQUksQ0FBQyxPQUFPLE1BQU0sT0FBTztBQUFHLGlCQUFPLFNBQVM7QUFDNUMsY0FBTSxNQUFNRCxNQUFLLFFBQVEsSUFBSTtBQUM3QixRQUFBQyxJQUFHLEtBQUssS0FBSyxDQUFDQyxNQUFLQyxXQUFVO0FBQzNCLGNBQUlELE1BQUs7QUFFUCxnQkFBSUEsS0FBSSxTQUFTLFVBQVU7QUFDekIscUJBQU8sTUFBTSxPQUFPLEtBQUssQ0FBQUEsU0FBTztBQUM5QixvQkFBSUE7QUFBSyx5QkFBTyxTQUFTQSxJQUFHO0FBQzVCLHlCQUFTO0FBQUEsY0FDWCxDQUFDO0FBQUEsWUFDSDtBQUNBLG1CQUFPLFNBQVNBLElBQUc7QUFBQSxVQUNyQjtBQUVBLGNBQUlDLE9BQU0sWUFBWTtBQUFHLHFCQUFTO0FBQUEsZUFDN0I7QUFHSCxZQUFBRixJQUFHLFFBQVEsS0FBSyxDQUFBQyxTQUFPO0FBQ3JCLGtCQUFJQTtBQUFLLHVCQUFPLFNBQVNBLElBQUc7QUFBQSxZQUM5QixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxhQUFTLGVBQWdCLE1BQU07QUFDN0IsVUFBSTtBQUNKLFVBQUk7QUFDRixnQkFBUUQsSUFBRyxTQUFTLElBQUk7QUFBQSxNQUMxQixRQUFFO0FBQUEsTUFBTztBQUNULFVBQUksU0FBUyxNQUFNLE9BQU87QUFBRztBQUU3QixZQUFNLE1BQU1ELE1BQUssUUFBUSxJQUFJO0FBQzdCLFVBQUk7QUFDRixZQUFJLENBQUNDLElBQUcsU0FBUyxHQUFHLEVBQUUsWUFBWSxHQUFHO0FBR25DLFVBQUFBLElBQUcsWUFBWSxHQUFHO0FBQUEsUUFDcEI7QUFBQSxNQUNGLFNBQVMsS0FBUDtBQUVBLFlBQUksT0FBTyxJQUFJLFNBQVM7QUFBVSxnQkFBTSxXQUFXLEdBQUc7QUFBQTtBQUNqRCxnQkFBTTtBQUFBLE1BQ2I7QUFFQSxNQUFBQSxJQUFHLGNBQWMsTUFBTSxFQUFFO0FBQUEsSUFDM0I7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFBQSxNQUNmLFlBQVksRUFBRSxVQUFVO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDcEVBO0FBQUEsc0RBQUFLLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU1DLE1BQUs7QUFDWCxRQUFNLFFBQVE7QUFDZCxRQUFNLGFBQWEsc0JBQTBCO0FBRTdDLGFBQVMsV0FBWSxTQUFTLFNBQVMsVUFBVTtBQUMvQyxlQUFTLFNBQVVDLFVBQVNDLFVBQVM7QUFDbkMsUUFBQUYsSUFBRyxLQUFLQyxVQUFTQyxVQUFTLFNBQU87QUFDL0IsY0FBSTtBQUFLLG1CQUFPLFNBQVMsR0FBRztBQUM1QixtQkFBUyxJQUFJO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDSDtBQUVBLGlCQUFXLFNBQVMsQ0FBQyxLQUFLLHNCQUFzQjtBQUM5QyxZQUFJO0FBQUssaUJBQU8sU0FBUyxHQUFHO0FBQzVCLFlBQUk7QUFBbUIsaUJBQU8sU0FBUyxJQUFJO0FBQzNDLFFBQUFGLElBQUcsTUFBTSxTQUFTLENBQUNHLFNBQVE7QUFDekIsY0FBSUEsTUFBSztBQUNQLFlBQUFBLEtBQUksVUFBVUEsS0FBSSxRQUFRLFFBQVEsU0FBUyxZQUFZO0FBQ3ZELG1CQUFPLFNBQVNBLElBQUc7QUFBQSxVQUNyQjtBQUVBLGdCQUFNLE1BQU1KLE1BQUssUUFBUSxPQUFPO0FBQ2hDLHFCQUFXLEtBQUssQ0FBQ0ksTUFBSyxjQUFjO0FBQ2xDLGdCQUFJQTtBQUFLLHFCQUFPLFNBQVNBLElBQUc7QUFDNUIsZ0JBQUk7QUFBVyxxQkFBTyxTQUFTLFNBQVMsT0FBTztBQUMvQyxrQkFBTSxPQUFPLEtBQUssQ0FBQUEsU0FBTztBQUN2QixrQkFBSUE7QUFBSyx1QkFBTyxTQUFTQSxJQUFHO0FBQzVCLHVCQUFTLFNBQVMsT0FBTztBQUFBLFlBQzNCLENBQUM7QUFBQSxVQUNILENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxlQUFnQixTQUFTLFNBQVM7QUFDekMsWUFBTSxvQkFBb0JILElBQUcsV0FBVyxPQUFPO0FBQy9DLFVBQUk7QUFBbUIsZUFBTztBQUU5QixVQUFJO0FBQ0YsUUFBQUEsSUFBRyxVQUFVLE9BQU87QUFBQSxNQUN0QixTQUFTLEtBQVA7QUFDQSxZQUFJLFVBQVUsSUFBSSxRQUFRLFFBQVEsU0FBUyxZQUFZO0FBQ3ZELGNBQU07QUFBQSxNQUNSO0FBRUEsWUFBTSxNQUFNRCxNQUFLLFFBQVEsT0FBTztBQUNoQyxZQUFNLFlBQVlDLElBQUcsV0FBVyxHQUFHO0FBQ25DLFVBQUk7QUFBVyxlQUFPQSxJQUFHLFNBQVMsU0FBUyxPQUFPO0FBQ2xELFlBQU0sV0FBVyxHQUFHO0FBRXBCLGFBQU9BLElBQUcsU0FBUyxTQUFTLE9BQU87QUFBQSxJQUNyQztBQUVBLElBQUFGLFFBQU8sVUFBVTtBQUFBLE1BQ2YsWUFBWSxFQUFFLFVBQVU7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUM1REE7QUFBQSwrREFBQU0sVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU1DLE1BQUs7QUFDWCxRQUFNLGFBQWEsc0JBQTBCO0FBd0I3QyxhQUFTLGFBQWMsU0FBUyxTQUFTLFVBQVU7QUFDakQsVUFBSUQsTUFBSyxXQUFXLE9BQU8sR0FBRztBQUM1QixlQUFPQyxJQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVE7QUFDaEMsY0FBSSxLQUFLO0FBQ1AsZ0JBQUksVUFBVSxJQUFJLFFBQVEsUUFBUSxTQUFTLGVBQWU7QUFDMUQsbUJBQU8sU0FBUyxHQUFHO0FBQUEsVUFDckI7QUFDQSxpQkFBTyxTQUFTLE1BQU07QUFBQSxZQUNwQixPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsVUFDVCxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSCxPQUFPO0FBQ0wsY0FBTSxTQUFTRCxNQUFLLFFBQVEsT0FBTztBQUNuQyxjQUFNLGdCQUFnQkEsTUFBSyxLQUFLLFFBQVEsT0FBTztBQUMvQyxlQUFPLFdBQVcsZUFBZSxDQUFDLEtBQUssV0FBVztBQUNoRCxjQUFJO0FBQUssbUJBQU8sU0FBUyxHQUFHO0FBQzVCLGNBQUksUUFBUTtBQUNWLG1CQUFPLFNBQVMsTUFBTTtBQUFBLGNBQ3BCLE9BQU87QUFBQSxjQUNQLE9BQU87QUFBQSxZQUNULENBQUM7QUFBQSxVQUNILE9BQU87QUFDTCxtQkFBT0MsSUFBRyxNQUFNLFNBQVMsQ0FBQ0MsU0FBUTtBQUNoQyxrQkFBSUEsTUFBSztBQUNQLGdCQUFBQSxLQUFJLFVBQVVBLEtBQUksUUFBUSxRQUFRLFNBQVMsZUFBZTtBQUMxRCx1QkFBTyxTQUFTQSxJQUFHO0FBQUEsY0FDckI7QUFDQSxxQkFBTyxTQUFTLE1BQU07QUFBQSxnQkFDcEIsT0FBTztBQUFBLGdCQUNQLE9BQU9GLE1BQUssU0FBUyxRQUFRLE9BQU87QUFBQSxjQUN0QyxDQUFDO0FBQUEsWUFDSCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsYUFBUyxpQkFBa0IsU0FBUyxTQUFTO0FBQzNDLFVBQUk7QUFDSixVQUFJQSxNQUFLLFdBQVcsT0FBTyxHQUFHO0FBQzVCLGlCQUFTQyxJQUFHLFdBQVcsT0FBTztBQUM5QixZQUFJLENBQUM7QUFBUSxnQkFBTSxJQUFJLE1BQU0saUNBQWlDO0FBQzlELGVBQU87QUFBQSxVQUNMLE9BQU87QUFBQSxVQUNQLE9BQU87QUFBQSxRQUNUO0FBQUEsTUFDRixPQUFPO0FBQ0wsY0FBTSxTQUFTRCxNQUFLLFFBQVEsT0FBTztBQUNuQyxjQUFNLGdCQUFnQkEsTUFBSyxLQUFLLFFBQVEsT0FBTztBQUMvQyxpQkFBU0MsSUFBRyxXQUFXLGFBQWE7QUFDcEMsWUFBSSxRQUFRO0FBQ1YsaUJBQU87QUFBQSxZQUNMLE9BQU87QUFBQSxZQUNQLE9BQU87QUFBQSxVQUNUO0FBQUEsUUFDRixPQUFPO0FBQ0wsbUJBQVNBLElBQUcsV0FBVyxPQUFPO0FBQzlCLGNBQUksQ0FBQztBQUFRLGtCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFDOUQsaUJBQU87QUFBQSxZQUNMLE9BQU87QUFBQSxZQUNQLE9BQU9ELE1BQUssU0FBUyxRQUFRLE9BQU87QUFBQSxVQUN0QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ2xHQTtBQUFBLDhEQUFBSSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxNQUFLO0FBRVgsYUFBUyxZQUFhLFNBQVMsTUFBTSxVQUFVO0FBQzdDLGlCQUFZLE9BQU8sU0FBUyxhQUFjLE9BQU87QUFDakQsYUFBUSxPQUFPLFNBQVMsYUFBYyxRQUFRO0FBQzlDLFVBQUk7QUFBTSxlQUFPLFNBQVMsTUFBTSxJQUFJO0FBQ3BDLE1BQUFBLElBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxVQUFVO0FBQ2hDLFlBQUk7QUFBSyxpQkFBTyxTQUFTLE1BQU0sTUFBTTtBQUNyQyxlQUFRLFNBQVMsTUFBTSxZQUFZLElBQUssUUFBUTtBQUNoRCxpQkFBUyxNQUFNLElBQUk7QUFBQSxNQUNyQixDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsZ0JBQWlCLFNBQVMsTUFBTTtBQUN2QyxVQUFJO0FBRUosVUFBSTtBQUFNLGVBQU87QUFDakIsVUFBSTtBQUNGLGdCQUFRQSxJQUFHLFVBQVUsT0FBTztBQUFBLE1BQzlCLFFBQUU7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQVEsU0FBUyxNQUFNLFlBQVksSUFBSyxRQUFRO0FBQUEsSUFDbEQ7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUM5QkE7QUFBQSx5REFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTUMsTUFBSztBQUNYLFFBQU0sVUFBVTtBQUNoQixRQUFNLFNBQVMsUUFBUTtBQUN2QixRQUFNLGFBQWEsUUFBUTtBQUUzQixRQUFNLGdCQUFnQjtBQUN0QixRQUFNLGVBQWUsY0FBYztBQUNuQyxRQUFNLG1CQUFtQixjQUFjO0FBRXZDLFFBQU0sZUFBZTtBQUNyQixRQUFNLGNBQWMsYUFBYTtBQUNqQyxRQUFNLGtCQUFrQixhQUFhO0FBRXJDLFFBQU0sYUFBYSxzQkFBMEI7QUFFN0MsYUFBUyxjQUFlLFNBQVMsU0FBUyxNQUFNLFVBQVU7QUFDeEQsaUJBQVksT0FBTyxTQUFTLGFBQWMsT0FBTztBQUNqRCxhQUFRLE9BQU8sU0FBUyxhQUFjLFFBQVE7QUFFOUMsaUJBQVcsU0FBUyxDQUFDLEtBQUssc0JBQXNCO0FBQzlDLFlBQUk7QUFBSyxpQkFBTyxTQUFTLEdBQUc7QUFDNUIsWUFBSTtBQUFtQixpQkFBTyxTQUFTLElBQUk7QUFDM0MscUJBQWEsU0FBUyxTQUFTLENBQUNDLE1BQUtDLGNBQWE7QUFDaEQsY0FBSUQ7QUFBSyxtQkFBTyxTQUFTQSxJQUFHO0FBQzVCLG9CQUFVQyxVQUFTO0FBQ25CLHNCQUFZQSxVQUFTLE9BQU8sTUFBTSxDQUFDRCxNQUFLRSxVQUFTO0FBQy9DLGdCQUFJRjtBQUFLLHFCQUFPLFNBQVNBLElBQUc7QUFDNUIsa0JBQU0sTUFBTUYsTUFBSyxRQUFRLE9BQU87QUFDaEMsdUJBQVcsS0FBSyxDQUFDRSxNQUFLLGNBQWM7QUFDbEMsa0JBQUlBO0FBQUssdUJBQU8sU0FBU0EsSUFBRztBQUM1QixrQkFBSTtBQUFXLHVCQUFPRCxJQUFHLFFBQVEsU0FBUyxTQUFTRyxPQUFNLFFBQVE7QUFDakUscUJBQU8sS0FBSyxDQUFBRixTQUFPO0FBQ2pCLG9CQUFJQTtBQUFLLHlCQUFPLFNBQVNBLElBQUc7QUFDNUIsZ0JBQUFELElBQUcsUUFBUSxTQUFTLFNBQVNHLE9BQU0sUUFBUTtBQUFBLGNBQzdDLENBQUM7QUFBQSxZQUNILENBQUM7QUFBQSxVQUNILENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxrQkFBbUIsU0FBUyxTQUFTLE1BQU07QUFDbEQsWUFBTSxvQkFBb0JILElBQUcsV0FBVyxPQUFPO0FBQy9DLFVBQUk7QUFBbUIsZUFBTztBQUU5QixZQUFNRSxZQUFXLGlCQUFpQixTQUFTLE9BQU87QUFDbEQsZ0JBQVVBLFVBQVM7QUFDbkIsYUFBTyxnQkFBZ0JBLFVBQVMsT0FBTyxJQUFJO0FBQzNDLFlBQU0sTUFBTUgsTUFBSyxRQUFRLE9BQU87QUFDaEMsWUFBTSxTQUFTQyxJQUFHLFdBQVcsR0FBRztBQUNoQyxVQUFJO0FBQVEsZUFBT0EsSUFBRyxZQUFZLFNBQVMsU0FBUyxJQUFJO0FBQ3hELGlCQUFXLEdBQUc7QUFDZCxhQUFPQSxJQUFHLFlBQVksU0FBUyxTQUFTLElBQUk7QUFBQSxJQUM5QztBQUVBLElBQUFGLFFBQU8sVUFBVTtBQUFBLE1BQ2YsZUFBZSxFQUFFLGFBQWE7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUM5REE7QUFBQSx1REFBQU0sVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxPQUFPO0FBQ2IsUUFBTSxPQUFPO0FBQ2IsUUFBTSxVQUFVO0FBRWhCLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BRWYsWUFBWSxLQUFLO0FBQUEsTUFDakIsZ0JBQWdCLEtBQUs7QUFBQSxNQUNyQixZQUFZLEtBQUs7QUFBQSxNQUNqQixnQkFBZ0IsS0FBSztBQUFBLE1BRXJCLFlBQVksS0FBSztBQUFBLE1BQ2pCLGdCQUFnQixLQUFLO0FBQUEsTUFDckIsWUFBWSxLQUFLO0FBQUEsTUFDakIsZ0JBQWdCLEtBQUs7QUFBQSxNQUVyQixlQUFlLFFBQVE7QUFBQSxNQUN2QixtQkFBbUIsUUFBUTtBQUFBLE1BQzNCLGVBQWUsUUFBUTtBQUFBLE1BQ3ZCLG1CQUFtQixRQUFRO0FBQUEsSUFDN0I7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQSxrRUFBQUMsVUFBQUMsU0FBQTtBQUFBLGFBQVMsVUFBVyxLQUFLLEVBQUUsTUFBTSxNQUFNLFdBQVcsTUFBTSxXQUFXLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBRztBQUN0RixZQUFNLE1BQU0sV0FBVyxNQUFNO0FBQzdCLFlBQU0sTUFBTSxLQUFLLFVBQVUsS0FBSyxVQUFVLE1BQU07QUFFaEQsYUFBTyxJQUFJLFFBQVEsT0FBTyxHQUFHLElBQUk7QUFBQSxJQUNuQztBQUVBLGFBQVMsU0FBVSxTQUFTO0FBRTFCLFVBQUksT0FBTyxTQUFTLE9BQU87QUFBRyxrQkFBVSxRQUFRLFNBQVMsTUFBTTtBQUMvRCxhQUFPLFFBQVEsUUFBUSxXQUFXLEVBQUU7QUFBQSxJQUN0QztBQUVBLElBQUFBLFFBQU8sVUFBVSxFQUFFLFdBQVcsU0FBUztBQUFBO0FBQUE7OztBQ2J2QztBQUFBLGtFQUFBQyxVQUFBQyxTQUFBO0FBQUEsUUFBSTtBQUNKLFFBQUk7QUFDRixZQUFNO0FBQUEsSUFDUixTQUFTLEdBQVA7QUFDQSxZQUFNLFFBQVE7QUFBQSxJQUNoQjtBQUNBLFFBQU0sZUFBZTtBQUNyQixRQUFNLEVBQUUsV0FBVyxTQUFTLElBQUk7QUFFaEMsbUJBQWUsVUFBVyxNQUFNLFVBQVUsQ0FBQyxHQUFHO0FBQzVDLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFDL0Isa0JBQVUsRUFBRSxVQUFVLFFBQVE7QUFBQSxNQUNoQztBQUVBLFlBQU1DLE1BQUssUUFBUSxNQUFNO0FBRXpCLFlBQU0sY0FBYyxZQUFZLFVBQVUsUUFBUSxTQUFTO0FBRTNELFVBQUksT0FBTyxNQUFNLGFBQWEsYUFBYUEsSUFBRyxRQUFRLEVBQUUsTUFBTSxPQUFPO0FBRXJFLGFBQU8sU0FBUyxJQUFJO0FBRXBCLFVBQUk7QUFDSixVQUFJO0FBQ0YsY0FBTSxLQUFLLE1BQU0sTUFBTSxVQUFVLFFBQVEsVUFBVSxJQUFJO0FBQUEsTUFDekQsU0FBUyxLQUFQO0FBQ0EsWUFBSSxhQUFhO0FBQ2YsY0FBSSxVQUFVLEdBQUcsU0FBUyxJQUFJO0FBQzlCLGdCQUFNO0FBQUEsUUFDUixPQUFPO0FBQ0wsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBTSxXQUFXLGFBQWEsWUFBWSxTQUFTO0FBRW5ELGFBQVNDLGNBQWMsTUFBTSxVQUFVLENBQUMsR0FBRztBQUN6QyxVQUFJLE9BQU8sWUFBWSxVQUFVO0FBQy9CLGtCQUFVLEVBQUUsVUFBVSxRQUFRO0FBQUEsTUFDaEM7QUFFQSxZQUFNRCxNQUFLLFFBQVEsTUFBTTtBQUV6QixZQUFNLGNBQWMsWUFBWSxVQUFVLFFBQVEsU0FBUztBQUUzRCxVQUFJO0FBQ0YsWUFBSSxVQUFVQSxJQUFHLGFBQWEsTUFBTSxPQUFPO0FBQzNDLGtCQUFVLFNBQVMsT0FBTztBQUMxQixlQUFPLEtBQUssTUFBTSxTQUFTLFFBQVEsT0FBTztBQUFBLE1BQzVDLFNBQVMsS0FBUDtBQUNBLFlBQUksYUFBYTtBQUNmLGNBQUksVUFBVSxHQUFHLFNBQVMsSUFBSTtBQUM5QixnQkFBTTtBQUFBLFFBQ1IsT0FBTztBQUNMLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsbUJBQWUsV0FBWSxNQUFNLEtBQUssVUFBVSxDQUFDLEdBQUc7QUFDbEQsWUFBTUEsTUFBSyxRQUFRLE1BQU07QUFFekIsWUFBTSxNQUFNLFVBQVUsS0FBSyxPQUFPO0FBRWxDLFlBQU0sYUFBYSxhQUFhQSxJQUFHLFNBQVMsRUFBRSxNQUFNLEtBQUssT0FBTztBQUFBLElBQ2xFO0FBRUEsUUFBTSxZQUFZLGFBQWEsWUFBWSxVQUFVO0FBRXJELGFBQVMsY0FBZSxNQUFNLEtBQUssVUFBVSxDQUFDLEdBQUc7QUFDL0MsWUFBTUEsTUFBSyxRQUFRLE1BQU07QUFFekIsWUFBTSxNQUFNLFVBQVUsS0FBSyxPQUFPO0FBRWxDLGFBQU9BLElBQUcsY0FBYyxNQUFNLEtBQUssT0FBTztBQUFBLElBQzVDO0FBRUEsUUFBTSxXQUFXO0FBQUEsTUFDZjtBQUFBLE1BQ0EsY0FBQUM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxJQUFBRixRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUN2RmpCLElBQUFHLG9CQUFBO0FBQUEsd0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sV0FBVztBQUVqQixJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUVmLFVBQVUsU0FBUztBQUFBLE1BQ25CLGNBQWMsU0FBUztBQUFBLE1BQ3ZCLFdBQVcsU0FBUztBQUFBLE1BQ3BCLGVBQWUsU0FBUztBQUFBLElBQzFCO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSx1REFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxJQUFJLHVCQUF3QjtBQUNsQyxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sUUFBUTtBQUNkLFFBQU0sYUFBYSxzQkFBMEI7QUFFN0MsYUFBUyxXQUFZLE1BQU0sTUFBTSxVQUFVLFVBQVU7QUFDbkQsVUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNsQyxtQkFBVztBQUNYLG1CQUFXO0FBQUEsTUFDYjtBQUVBLFlBQU0sTUFBTUEsTUFBSyxRQUFRLElBQUk7QUFDN0IsaUJBQVcsS0FBSyxDQUFDLEtBQUssV0FBVztBQUMvQixZQUFJO0FBQUssaUJBQU8sU0FBUyxHQUFHO0FBQzVCLFlBQUk7QUFBUSxpQkFBT0QsSUFBRyxVQUFVLE1BQU0sTUFBTSxVQUFVLFFBQVE7QUFFOUQsY0FBTSxPQUFPLEtBQUssQ0FBQUUsU0FBTztBQUN2QixjQUFJQTtBQUFLLG1CQUFPLFNBQVNBLElBQUc7QUFFNUIsVUFBQUYsSUFBRyxVQUFVLE1BQU0sTUFBTSxVQUFVLFFBQVE7QUFBQSxRQUM3QyxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsZUFBZ0IsU0FBUyxNQUFNO0FBQ3RDLFlBQU0sTUFBTUMsTUFBSyxRQUFRLElBQUk7QUFDN0IsVUFBSUQsSUFBRyxXQUFXLEdBQUcsR0FBRztBQUN0QixlQUFPQSxJQUFHLGNBQWMsTUFBTSxHQUFHLElBQUk7QUFBQSxNQUN2QztBQUNBLFlBQU0sV0FBVyxHQUFHO0FBQ3BCLE1BQUFBLElBQUcsY0FBYyxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQ2hDO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUEsTUFDZixZQUFZLEVBQUUsVUFBVTtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3ZDQTtBQUFBLDJEQUFBSSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLFFBQU0sRUFBRSxXQUFXLElBQUk7QUFFdkIsbUJBQWUsV0FBWSxNQUFNLE1BQU0sVUFBVSxDQUFDLEdBQUc7QUFDbkQsWUFBTSxNQUFNLFVBQVUsTUFBTSxPQUFPO0FBRW5DLFlBQU0sV0FBVyxNQUFNLEtBQUssT0FBTztBQUFBLElBQ3JDO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDWGpCO0FBQUEsZ0VBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsUUFBTSxFQUFFLGVBQWUsSUFBSTtBQUUzQixhQUFTLGVBQWdCLE1BQU0sTUFBTSxTQUFTO0FBQzVDLFlBQU0sTUFBTSxVQUFVLE1BQU0sT0FBTztBQUVuQyxxQkFBZSxNQUFNLEtBQUssT0FBTztBQUFBLElBQ25DO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDWGpCO0FBQUEscURBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsUUFBTSxXQUFXO0FBRWpCLGFBQVMsYUFBYSxFQUFFLHFCQUF3QjtBQUNoRCxhQUFTLGlCQUFpQjtBQUUxQixhQUFTLGFBQWEsU0FBUztBQUMvQixhQUFTLGlCQUFpQixTQUFTO0FBQ25DLGFBQVMsWUFBWSxTQUFTO0FBQzlCLGFBQVMsZ0JBQWdCLFNBQVM7QUFDbEMsYUFBUyxXQUFXLFNBQVM7QUFDN0IsYUFBUyxlQUFlLFNBQVM7QUFFakMsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDZmpCO0FBQUEsOERBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU1DLE1BQUs7QUFDWCxRQUFNQyxRQUFPLFFBQVE7QUFDckIsUUFBTSxXQUFXLHFCQUF3QjtBQUN6QyxRQUFNLGFBQWEsaUJBQXFCO0FBQ3hDLFFBQU0sYUFBYSxpQkFBcUI7QUFDeEMsUUFBTUMsUUFBTztBQUViLGFBQVMsU0FBVSxLQUFLLE1BQU0sTUFBTTtBQUNsQyxhQUFPLFFBQVEsQ0FBQztBQUNoQixZQUFNLFlBQVksS0FBSyxhQUFhLEtBQUssV0FBVztBQUVwRCxZQUFNLEVBQUUsUUFBUSxJQUFJQSxNQUFLLGVBQWUsS0FBSyxNQUFNLE1BQU07QUFDekQsTUFBQUEsTUFBSyxxQkFBcUIsS0FBSyxTQUFTLE1BQU0sTUFBTTtBQUNwRCxpQkFBV0QsTUFBSyxRQUFRLElBQUksQ0FBQztBQUM3QixhQUFPLFNBQVMsS0FBSyxNQUFNLFNBQVM7QUFBQSxJQUN0QztBQUVBLGFBQVMsU0FBVSxLQUFLLE1BQU0sV0FBVztBQUN2QyxVQUFJLFdBQVc7QUFDYixtQkFBVyxJQUFJO0FBQ2YsZUFBTyxPQUFPLEtBQUssTUFBTSxTQUFTO0FBQUEsTUFDcEM7QUFDQSxVQUFJRCxJQUFHLFdBQVcsSUFBSTtBQUFHLGNBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUMvRCxhQUFPLE9BQU8sS0FBSyxNQUFNLFNBQVM7QUFBQSxJQUNwQztBQUVBLGFBQVMsT0FBUSxLQUFLLE1BQU0sV0FBVztBQUNyQyxVQUFJO0FBQ0YsUUFBQUEsSUFBRyxXQUFXLEtBQUssSUFBSTtBQUFBLE1BQ3pCLFNBQVMsS0FBUDtBQUNBLFlBQUksSUFBSSxTQUFTO0FBQVMsZ0JBQU07QUFDaEMsZUFBTyxpQkFBaUIsS0FBSyxNQUFNLFNBQVM7QUFBQSxNQUM5QztBQUFBLElBQ0Y7QUFFQSxhQUFTLGlCQUFrQixLQUFLLE1BQU0sV0FBVztBQUMvQyxZQUFNLE9BQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxjQUFjO0FBQUEsTUFDaEI7QUFDQSxlQUFTLEtBQUssTUFBTSxJQUFJO0FBQ3hCLGFBQU8sV0FBVyxHQUFHO0FBQUEsSUFDdkI7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUM5Q2pCLElBQUFJLHFCQUFBO0FBQUEsMERBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BQ2YsVUFBVTtBQUFBLElBQ1o7QUFBQTtBQUFBOzs7QUNKQTtBQUFBLG9EQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNQyxNQUFLO0FBQ1gsUUFBTUMsUUFBTyxRQUFRO0FBQ3JCLFFBQU0sT0FBTyxnQkFBbUI7QUFDaEMsUUFBTSxTQUFTLGlCQUFxQjtBQUNwQyxRQUFNLFNBQVMsaUJBQXFCO0FBQ3BDLFFBQU0sYUFBYSxzQkFBMEI7QUFDN0MsUUFBTUMsUUFBTztBQUViLGFBQVMsS0FBTSxLQUFLLE1BQU0sTUFBTSxJQUFJO0FBQ2xDLFVBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsYUFBSztBQUNMLGVBQU8sQ0FBQztBQUFBLE1BQ1Y7QUFFQSxZQUFNLFlBQVksS0FBSyxhQUFhLEtBQUssV0FBVztBQUVwRCxNQUFBQSxNQUFLLFdBQVcsS0FBSyxNQUFNLFFBQVEsQ0FBQyxLQUFLLFVBQVU7QUFDakQsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixjQUFNLEVBQUUsUUFBUSxJQUFJO0FBQ3BCLFFBQUFBLE1BQUssaUJBQWlCLEtBQUssU0FBUyxNQUFNLFFBQVEsQ0FBQUMsU0FBTztBQUN2RCxjQUFJQTtBQUFLLG1CQUFPLEdBQUdBLElBQUc7QUFDdEIsaUJBQU9GLE1BQUssUUFBUSxJQUFJLEdBQUcsQ0FBQUUsU0FBTztBQUNoQyxnQkFBSUE7QUFBSyxxQkFBTyxHQUFHQSxJQUFHO0FBQ3RCLG1CQUFPLFNBQVMsS0FBSyxNQUFNLFdBQVcsRUFBRTtBQUFBLFVBQzFDLENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxTQUFVLEtBQUssTUFBTSxXQUFXLElBQUk7QUFDM0MsVUFBSSxXQUFXO0FBQ2IsZUFBTyxPQUFPLE1BQU0sU0FBTztBQUN6QixjQUFJO0FBQUssbUJBQU8sR0FBRyxHQUFHO0FBQ3RCLGlCQUFPLE9BQU8sS0FBSyxNQUFNLFdBQVcsRUFBRTtBQUFBLFFBQ3hDLENBQUM7QUFBQSxNQUNIO0FBQ0EsaUJBQVcsTUFBTSxDQUFDLEtBQUssZUFBZTtBQUNwQyxZQUFJO0FBQUssaUJBQU8sR0FBRyxHQUFHO0FBQ3RCLFlBQUk7QUFBWSxpQkFBTyxHQUFHLElBQUksTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxlQUFPLE9BQU8sS0FBSyxNQUFNLFdBQVcsRUFBRTtBQUFBLE1BQ3hDLENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxPQUFRLEtBQUssTUFBTSxXQUFXLElBQUk7QUFDekMsTUFBQUgsSUFBRyxPQUFPLEtBQUssTUFBTSxTQUFPO0FBQzFCLFlBQUksQ0FBQztBQUFLLGlCQUFPLEdBQUc7QUFDcEIsWUFBSSxJQUFJLFNBQVM7QUFBUyxpQkFBTyxHQUFHLEdBQUc7QUFDdkMsZUFBTyxpQkFBaUIsS0FBSyxNQUFNLFdBQVcsRUFBRTtBQUFBLE1BQ2xELENBQUM7QUFBQSxJQUNIO0FBRUEsYUFBUyxpQkFBa0IsS0FBSyxNQUFNLFdBQVcsSUFBSTtBQUNuRCxZQUFNLE9BQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxjQUFjO0FBQUEsTUFDaEI7QUFDQSxXQUFLLEtBQUssTUFBTSxNQUFNLFNBQU87QUFDM0IsWUFBSTtBQUFLLGlCQUFPLEdBQUcsR0FBRztBQUN0QixlQUFPLE9BQU8sS0FBSyxFQUFFO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0g7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNoRWpCLElBQUFLLGdCQUFBO0FBQUEscURBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sSUFBSSx1QkFBd0I7QUFDbEMsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZixNQUFNLEVBQUUsY0FBaUI7QUFBQSxJQUMzQjtBQUFBO0FBQUE7OztBQ0xBO0FBQUEsZ0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBLE1BRWYsR0FBRztBQUFBLE1BRUgsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFJQSxRQUFNQyxNQUFLLFFBQVE7QUFDbkIsUUFBSSxPQUFPLHlCQUF5QkEsS0FBSSxVQUFVLEdBQUc7QUFDbkQsYUFBTyxlQUFlRCxRQUFPLFNBQVMsWUFBWTtBQUFBLFFBQ2hELE1BQU87QUFBRSxpQkFBT0MsSUFBRztBQUFBLFFBQVM7QUFBQSxNQUM5QixDQUFDO0FBQUEsSUFDSDtBQUFBO0FBQUE7OztBQzFCQSxVQUNBLElBRU0sbUJBMkJPLFdBcUhBO0FBbkpiO0FBQUE7QUFBQTtBQUFBLFdBQXNCO0FBQ3RCLFNBQW9CO0FBRXBCLElBQU0sb0JBQW9CO0FBMkJuQixJQUFNLFlBQU4sTUFBZ0I7QUFBQSxNQW1EckIsWUFBNEIsTUFBcUI7QUFBckI7QUFDMUIsYUFBSyxtQkFBd0IsYUFBUSxLQUFLLFFBQVE7QUFDbEQsYUFBSyxXQUFnQixjQUFTLFFBQVEsSUFBSSxHQUFHLEtBQUssUUFBUTtBQUUxRCxjQUFNLFNBQWMsV0FBTSxLQUFLLFFBQVE7QUFDdkMsYUFBSyw0QkFBaUMsY0FBUyxLQUFLLGVBQWUsS0FBSyxRQUFRO0FBQ2hGLGFBQUssWUFBWSxPQUFPO0FBT3hCLGNBQU0sbUJBQXdCLGNBQVMsUUFBUSxJQUFJLEdBQUcsS0FBSyxhQUFhO0FBQ3hFLGFBQUssV0FBVyxLQUFLLGNBQW1CLFVBQUssa0JBQWtCLE1BQU0sS0FBSyxLQUFLLGNBQW1CLFVBQUssZ0JBQWdCLElBQ25ILE9BQU8sT0FDRixVQUFVLGNBQVMsS0FBSyxLQUFLLGVBQWUsT0FBTyxHQUFHLEdBQUcsT0FBTyxJQUFJO0FBRTdFLGNBQU0sZ0JBQWdCLE9BQU8sS0FBSyxNQUFNLENBQUM7QUFDekMsYUFBSyxxQkFBcUIsT0FBTztBQUNqQyxhQUFLLGNBQW1CLFVBQUssS0FBSyxXQUFXLEdBQUcsOEJBQThCO0FBQzlFLGFBQUsscUJBQTBCLFVBQUssS0FBSyxXQUFXLEdBQUcscUJBQXFCLGVBQWU7QUFBQSxNQUM3RjtBQUFBLE1BWU8sUUFBUSxNQUFjO0FBQzNCLGVBQU87QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxRQUNQLEVBQUUsU0FBUyxJQUFJO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBd0JPLElBQU0sbUJBQU4sTUFBdUI7QUFBQSxNQUM1QixZQUE2QixXQUFtQjtBQUFuQjtBQUFBLE1BQzdCO0FBQUEsTUFNQSxNQUFhLFNBQVMsVUFBd0M7QUFDNUQsY0FBTSxPQUFrQyxLQUFLLE1BQVMsZ0JBQWEsVUFBVSxFQUFFLFVBQVUsUUFBUSxDQUFDLENBQUM7QUFDbkcsY0FBTSxhQUFhLE1BQU0sS0FBSyxTQUFTO0FBRXZDLGNBQU0sV0FBVyxLQUFLLFlBQVksWUFBWSxLQUFLLE9BQU8sS0FBSyxPQUFPO0FBRXRFLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFTUSxZQUFZLGlCQUE4QixnQkFBMkIsU0FBZ0M7QUFDM0csWUFBSSxDQUFDLGdCQUFnQjtBQUNuQixpQkFBTztBQUFBLFFBQ1Q7QUFHQSxjQUFNLFdBQVcsZ0JBQWdCLE9BQU8sT0FBSztBQUMzQyxnQkFBTSxVQUFVLGVBQWUsS0FBSyxhQUFXLEVBQUUsUUFBUSxPQUFPLENBQUM7QUFDakUsaUJBQU8sWUFBWSxDQUFDLENBQUM7QUFBQSxRQUN2QixDQUFDO0FBR0QsWUFBSSxDQUFDLFNBQVM7QUFDWixnQkFBTSxvQkFBb0IsZUFBZSxPQUFPLGFBQVcsQ0FBQyxnQkFBZ0IsS0FBSyxPQUFLLEVBQUUsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUN6RyxxQkFBVyxhQUFhLG1CQUFtQjtBQUN6QyxvQkFBUSxPQUFPLE1BQU0sdUJBQXVCO0FBQUEsQ0FBYTtBQUFBLFVBQzNEO0FBQ0EsY0FBSSxrQkFBa0IsU0FBUyxHQUFHO0FBQ2hDLG9CQUFRLE9BQU8sTUFBTSxvQkFBb0IsZ0JBQWdCLElBQUksT0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssR0FBRztBQUFBLENBQUs7QUFDNUcsbUJBQU8sQ0FBQztBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQVNBLE1BQWEsWUFBWSxPQUFrQixTQUF5QztBQUNsRixjQUFNLGtCQUFrQixNQUFNLEtBQUssU0FBUztBQUU1QyxjQUFNLFdBQVcsS0FBSyxZQUFZLGlCQUFpQixPQUFPLE9BQU87QUFFakUsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUVBLE1BQWMsV0FBaUM7QUFDN0MsY0FBTSxRQUFRLE1BQU0sS0FBSyxTQUFTO0FBQ2xDLGNBQU0sU0FBUyxNQUFNLE9BQU8sY0FBaUIsY0FBUyxRQUFRLEVBQUUsV0FBVyxRQUFRLEtBQVUsY0FBUyxRQUFRLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDL0gsZUFBTyxLQUFLLFFBQVEsTUFBTTtBQUFBLE1BQzVCO0FBQUEsTUFFUSxRQUFRLE9BQThCO0FBQzVDLGVBQU8sTUFBTSxJQUFJLGNBQVksSUFBSSxVQUFVLEVBQUUsZUFBZSxLQUFLLFdBQVcsU0FBUyxDQUFDLENBQUM7QUFBQSxNQUN6RjtBQUFBLE1BRUEsTUFBYyxXQUE4QjtBQUMxQyxjQUFNLE1BQU0sSUFBSSxNQUFjO0FBRTlCLHVCQUFlLFFBQVEsS0FBYTtBQUNsQyxnQkFBTSxRQUFRLE1BQVMsV0FBUSxHQUFHO0FBQ2xDLHFCQUFXLFFBQVEsT0FBTztBQUN4QixrQkFBTSxXQUFnQixVQUFLLEtBQUssSUFBSTtBQUNwQyxrQkFBTSxRQUFRLE1BQVMsUUFBSyxRQUFRO0FBQ3BDLGdCQUFJLE1BQU0sT0FBTyxHQUFHO0FBQUUsa0JBQUksS0FBSyxRQUFRO0FBQUEsWUFBRztBQUMxQyxnQkFBSSxNQUFNLFlBQVksR0FBRztBQUFFLG9CQUFNLFFBQWEsVUFBSyxRQUFRLENBQUM7QUFBQSxZQUFHO0FBQUEsVUFDakU7QUFBQSxRQUNGO0FBRUEsY0FBTSxRQUFRLEtBQUssU0FBUztBQUM1QixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNNTyxTQUFTLGFBQWEsT0FBZSxRQUFzQjtBQUNoRSxNQUFJLFNBQVMsR0FBRztBQUNkLElBQU8sTUFBTSwwQkFBZ0MsWUFBSyxPQUFPLEdBQVMsV0FBSSxNQUFNLEdBQVMsV0FBSSxRQUFRLEdBQUcsS0FBSztBQUFBLEVBQzNHLE9BQU87QUFDTCxJQUFPLE1BQU0sMEJBQWdDLFlBQUssT0FBTyxHQUFTLGFBQU0sS0FBSyxHQUFTLGFBQU0sUUFBUSxHQUFHLEtBQUs7QUFBQSxFQUM5RztBQUNGO0FBZU8sU0FBUyxhQUFhLFlBQThCO0FBQ3pELFVBQVEsV0FBVyxRQUFRO0FBQUEsSUFDekIsS0FBSztBQUNILE1BQU8sUUFBUSxzQkFBc0IsV0FBVyxVQUFnQixZQUFLLEdBQUcsV0FBVyxXQUFXLENBQUM7QUFDL0Y7QUFBQSxJQUNGLEtBQUs7QUFDSCxNQUFPLFFBQVEsOEJBQThCLFdBQVcsVUFBZ0IsWUFBSyxHQUFHLFdBQVcsV0FBVyxHQUFHLFdBQVcsT0FBTztBQUMzSDtBQUFBLElBQ0YsS0FBSztBQUNILE1BQU8sTUFBTSxzQkFBc0IsV0FBVyxVQUFnQixZQUFLLEdBQUcsV0FBVyxXQUFXLENBQUM7QUFDN0Y7QUFBQSxJQUNGLEtBQUs7QUFDSCxNQUFPLE1BQU0sZ0NBQWdDLFdBQVcsVUFBZ0IsWUFBSyxHQUFHLFdBQVcsV0FBVyxHQUFHLFdBQVcsT0FBTztBQUMzSDtBQUFBLElBQ0YsS0FBSztBQUFBLElBQ0wsS0FBSztBQUNILE1BQU8sTUFBTSxnQ0FBZ0MsV0FBVyxVQUFnQixZQUFLLEdBQUcsV0FBVyxXQUFXLEdBQUcsV0FBVyxPQUFPO0FBQzNIO0FBQUEsSUFDRixLQUFLO0FBQ0gsTUFBTyxNQUFNLGdDQUFnQyxXQUFXLFVBQWdCLFlBQUssR0FBRyxXQUFXLFdBQVcsR0FBRyxXQUFXLE9BQU87QUFDM0g7QUFBQSxJQUNGLEtBQUs7QUFDSCxNQUFPLE1BQU0sZ0NBQWdDLFdBQVcsVUFBZ0IsWUFBSyxHQUFHLFdBQVcsV0FBVyxHQUFHLFdBQVcsT0FBTztBQUMzSDtBQUFBLEVBQ0o7QUFDQSxhQUFXLFFBQVEsV0FBVyxzQkFBc0IsQ0FBQyxHQUFHO0FBQ3RELElBQU8sTUFBTSxTQUFTLE1BQU07QUFBQSxFQUM5QjtBQUNGO0FBRU8sU0FBUyxjQUFjLFdBQXdCO0FBQ3BELFFBQU0sUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLGVBQWUsVUFBVTtBQUFBLElBQ3pCLFVBQVUsT0FBTyxLQUFLLENBQUMsS0FBSyxNQUFNLEtBQUssU0FBUyxFQUFFLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUFBLEVBQ2hGO0FBRUEsRUFBTyxNQUFZLFlBQUssTUFBTSxPQUFPLE9BQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDekQ7QUEvU0EsSUFFQUM7QUFGQTtBQUFBO0FBQUE7QUFFQSxJQUFBQSxTQUF1QjtBQUN2QjtBQUFBO0FBQUE7OztBQzZCTyxTQUFTLFFBQVcsSUFBZ0I7QUFDekMsU0FBTyxNQUFNLFVBQVUsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQzVDO0FBbENBLElBaURhO0FBakRiO0FBQUE7QUFBQTtBQWlETyxJQUFNLFdBQU4sTUFBa0I7QUFBQSxNQUt2QixZQUE2QixPQUE2QixVQUE4QixDQUFDLEdBQUc7QUFBL0Q7QUFBNkI7QUFKMUQsYUFBaUIsWUFBWSxJQUFJLElBQUksS0FBSyxLQUFLO0FBSzdDLGFBQUssVUFBVSxRQUFRLFdBQVc7QUFDbEMsYUFBSyxjQUFjO0FBQUEsTUFDckI7QUFBQSxNQUVPLFNBQVMsTUFBUztBQUN2QixhQUFLLFVBQVUsT0FBTyxJQUFJO0FBQzFCLGFBQUssVUFBVTtBQUNmLFlBQUksS0FBSyxVQUFVLE9BQU8sR0FBRztBQUMzQixlQUFLLGNBQWM7QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxNQUVPLE9BQU87QUFDWixhQUFLLFVBQVUsTUFBTTtBQUFBLE1BQ3ZCO0FBQUEsTUFFUSxZQUFZO0FBQ2xCLFlBQUksS0FBSyxPQUFPO0FBQ2QsdUJBQWEsS0FBSyxLQUFLO0FBQ3ZCLGVBQUssUUFBUTtBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUEsTUFFUSxnQkFBZ0I7QUFDdEIsYUFBSyxRQUFRLFdBQVcsTUFBTSxLQUFLLE9BQU8sR0FBRyxLQUFLLE9BQU87QUFBQSxNQUMzRDtBQUFBLE1BRVEsU0FBUztBQWxGbkI7QUFtRkkseUJBQUssU0FBUSxjQUFiLDRCQUF5QixLQUFLO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdkNBLGVBQXNCLG9CQUFvQixTQUE0RjtBQUNwSSxFQUFPLFVBQVUsbURBQW1EO0FBQ3BFLEVBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxRQUFRLFdBQVcsWUFBWSxRQUFRLFNBQVMsS0FBSyxJQUFJLFdBQVU7QUFBQSxJQUNuRSxRQUFRLFFBQVEsS0FBSyxJQUFJO0FBQUEsRUFBQztBQUM1QixRQUFNLGFBQWEsUUFBUSxNQUFNO0FBRWpDLFFBQU0sWUFBWSxNQUFNLDhCQUE4QixPQUFPO0FBQzdELEVBQU8sVUFBVSxvQkFBb0I7QUFDckMsZUFBYSxZQUFZLFVBQVUsWUFBWSxNQUFNO0FBQ3JELFNBQU87QUFBQSxJQUNMLFNBQVMsVUFBVSxZQUFZLFdBQVc7QUFBQSxJQUMxQyxTQUFTLFVBQVU7QUFBQSxFQUNyQjtBQUNGO0FBd0JBLFNBQVMsa0JBQWtCLFNBQW1CLFVBQXNDO0FBQ2xGLFFBQU0sVUFBMkIsQ0FBQztBQUNsQyxXQUFTLFdBQVcsU0FBa0I7QUFDcEMsZUFBVyxVQUFVLFNBQVM7QUFDNUIsY0FBUSxLQUFLO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNBLE1BQUksWUFBWSxTQUFTLFNBQVMsR0FBRztBQUNuQyxlQUFXLFdBQVcsWUFBWSxDQUFDLEdBQUc7QUFDcEMsaUJBQVcsT0FBTztBQUFBLElBQ3BCO0FBQUEsRUFDRixPQUFPO0FBQ0wsZUFBVztBQUFBLEVBQ2I7QUFDQSxTQUFPO0FBQ1Q7QUFPQSxlQUFzQiw4QkFDcEIsU0FDNkI7QUFFN0IsUUFBTSxRQUFRLFFBQVE7QUFDdEIsUUFBTSxVQUE4QjtBQUFBLElBQ2xDLFNBQVMsQ0FBQztBQUFBLElBQ1YsYUFBYSxDQUFDO0FBQUEsRUFDaEI7QUFDQSxRQUFNLGlCQUFrQyxrQkFBa0IsUUFBUSxTQUFTLFFBQVEsUUFBUTtBQUUzRixpQkFBZSxRQUFRQyxTQUFzQztBQUMzRCxVQUFNLFFBQVEsS0FBSyxJQUFJO0FBQ3ZCLFVBQU0sUUFBd0MsQ0FBQztBQUMvQyxPQUFHO0FBQ0QsWUFBTSxPQUFPLE1BQU0sSUFBSTtBQUN2QixVQUFJLENBQUM7QUFBTTtBQUNYLFlBQU0sWUFBWSxLQUFLLElBQUk7QUFDM0IsTUFBTyxVQUFVLGdCQUFnQixLQUFLLGVBQWVBLFFBQU8sVUFBVUEsUUFBTyxVQUFVLE1BQU0sS0FBS0EsUUFBTyxRQUFRO0FBQ2pILFlBQU0sV0FBOEIsTUFBTSxRQUFRLEtBQUssS0FBSyxtQkFBbUIsQ0FBQztBQUFBLFFBQzlFLFFBQVFBLFFBQU87QUFBQSxRQUNmLFNBQVNBLFFBQU87QUFBQSxRQUNoQixPQUFPLENBQUMsSUFBSTtBQUFBLFFBQ1osT0FBTyxRQUFRO0FBQUEsUUFDZixRQUFRLFFBQVE7QUFBQSxRQUNoQixXQUFXLFFBQVE7QUFBQSxRQUNuQixnQkFBZ0IsUUFBUTtBQUFBLE1BQzFCLENBQUMsR0FBRztBQUFBLFFBQ0YsSUFBSTtBQUFBLE1BQ04sQ0FBQztBQUVELGNBQVEsWUFBWSxLQUFLLEdBQUcsUUFBUSxRQUFRLENBQUM7QUFDN0MsWUFBTSxLQUFLLGFBQWEsS0FBSyxJQUFJLElBQUksYUFBYTtBQUFBLElBQ3BELFNBQVMsTUFBTSxTQUFTO0FBQ3hCLFVBQU0sVUFBOEI7QUFBQSxNQUNsQyxRQUFRQSxRQUFPO0FBQUEsTUFDZixTQUFTQSxRQUFPO0FBQUEsTUFDaEIsV0FBVyxLQUFLLElBQUksSUFBSSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQ0EsUUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFLFNBQVMsR0FBRztBQUNqQyxjQUFRLFFBQVEsS0FBSyxPQUFPO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBRUEsUUFBTSxVQUFVLGVBQWUsSUFBSSxDQUFDQSxZQUFXLFFBQVFBLE9BQU0sQ0FBQztBQUM5RCxRQUFNLFFBQVEsSUFBSSxPQUFPO0FBQ3pCLFNBQU87QUFDVDtBQTlKQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBOzs7QUNPQSxlQUFzQixpQkFDcEJDLE9BQ0EsT0FDQSxTQUNrQztBQUNsQyxFQUFPLFVBQVUsNkNBQTZDO0FBRTlELFFBQU0sT0FBTyxJQUFJLFNBQVMsTUFBTSxJQUFJLE9BQUssRUFBRSxRQUFRLEdBQUc7QUFBQSxJQUNwRCxXQUFXO0FBQUEsRUFDYixDQUFDO0FBRUQsUUFBTSxjQUF5QyxNQUFNLFFBQVE7QUFBQSxJQUMzRCxNQUFNLElBQUksQ0FBQyxTQUFTQSxNQUFLLEtBQUssc0JBQXNCLENBQUMsS0FBSyxNQUFvQyxPQUFPLEdBQUc7QUFBQSxNQUN0RyxJQUFJLENBQUMsTUFBTTtBQUNULGFBQUssU0FBUyxFQUFFLFFBQVE7QUFDeEIscUJBQWEsQ0FBQztBQUFBLE1BQ2hCO0FBQUEsSUFDRixDQUFDLENBQUM7QUFBQSxFQUNKO0FBQ0EsT0FBSyxLQUFLO0FBQ1YsUUFBTSxhQUFhLFFBQVEsV0FBVztBQUV0QyxFQUFPLFVBQVUsd0JBQXdCO0FBQ3pDLGVBQWEsTUFBTSxRQUFRLFdBQVcsTUFBTTtBQUM1QyxTQUFPO0FBRVQ7QUFyQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTs7O0FDSkE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDRkE7QUFBQSwrQ0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSUMsTUFBSyxRQUFRO0FBQ2pCLFFBQUlDLFFBQU8sUUFBUTtBQUNuQixRQUFJQyxRQUFPLFFBQVE7QUFFbkIsUUFBSTtBQUNKLFFBQU0sT0FBTixNQUFXO0FBQUEsTUFDUCxZQUFZLE1BQU07QUFFZCxlQUFPLFFBQVEsQ0FBQztBQUNoQixhQUFLLFlBQVksS0FBSyxhQUFhO0FBQ25DLGFBQUssY0FBYyxPQUFPLEtBQUssZ0JBQWdCLFlBQVksS0FBSyxjQUFjO0FBQzlFLGFBQUssU0FBUyxLQUFLLFVBQVU7QUFDN0IsYUFBSyxxQkFBcUIsT0FBTyxLQUFLLHVCQUF1QixZQUFZLEtBQUsscUJBQXFCO0FBRW5HLGFBQUssUUFBUSx1QkFBTyxPQUFPLElBQUk7QUFDL0IsYUFBSyxhQUFhLENBQUM7QUFBQSxNQUN2QjtBQUFBLE1BQ0EsTUFBTSxNQUFNO0FBQ1IsWUFBSSxPQUFPLFVBQVUsT0FBTyxVQUFVO0FBQ2xDLGlCQUFPLEtBQUssZUFBZSxVQUFVLElBQUksR0FBRyxTQUFTO0FBQUEsUUFDekQ7QUFDQSxjQUFNLE1BQU0sS0FBSyxNQUFNO0FBQ3ZCLFlBQUksS0FBSyxXQUFZO0FBQUEsUUFBRTtBQUN2QixZQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsT0FBTztBQUNqQyxlQUFLLEtBQUssSUFBSTtBQUNsQixhQUFLLE1BQU0sV0FBWTtBQUFBLFFBQUU7QUFDekIsWUFBSSxDQUFDLEtBQUssTUFBTSxLQUFLO0FBQ2pCLGVBQUssZ0JBQWdCO0FBRXpCLFlBQUksQ0FBQyxLQUFLLE1BQU0sS0FBSyxRQUFRLFFBQVEsS0FBSyxhQUFhO0FBQ25ELGVBQUssTUFBTSxLQUFLLFFBQVEsT0FBTztBQUkvQixlQUFLLGNBQWM7QUFBQSxZQUNmLFdBQVcsS0FBSztBQUFBLFlBQ2hCLFFBQVEsS0FBSztBQUFBLFlBQ2I7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCxhQUFHO0FBQUEsUUFDUDtBQUNBLGVBQU8sS0FBSyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsS0FBSyxNQUFNLEtBQUssUUFBUSxRQUFRLEdBQUcsRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLE1BQzVGO0FBQUEsTUFDQSxNQUFNO0FBQ0YsY0FBTSxPQUFPLE1BQU0sVUFBVSxNQUFNLEtBQUssU0FBUztBQUNqRCxjQUFNLFdBQVcsS0FBSyxNQUFNO0FBQzVCLGNBQU0sU0FBUyxLQUFLLE1BQU07QUFDMUIsY0FBTSxXQUFXLEtBQUssTUFBTTtBQUM1QixZQUFJLEtBQUssV0FBWTtBQUFBLFFBQUU7QUFDdkIsWUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLE9BQU87QUFDakMsZUFBSyxLQUFLLElBQUk7QUFDbEIsWUFBSSxDQUFDLEtBQUssTUFBTSxLQUFLO0FBQ2pCLGVBQUssZ0JBQWdCO0FBQ3pCLFlBQUksTUFBTSxhQUFhLElBQUksV0FBVztBQUN0QyxZQUFJLEtBQUssTUFBTSxLQUFLLFFBQVEsV0FBVztBQUNuQyxnQkFBTSxRQUFRLEtBQUssTUFBTSxLQUFLLFFBQVE7QUFDdEMsZ0JBQU0sTUFBTSxhQUFhLElBQUksUUFBUTtBQUFBLFFBQ3pDO0FBRUEsWUFBSSxDQUFDLEtBQUssTUFBTSxLQUFLLFFBQVEsYUFBYSxLQUFLLGFBQWE7QUFDeEQsZUFBSyxNQUFNLEtBQUssUUFBUSxZQUFZO0FBQUEsWUFDaEMsS0FBSztBQUFBLFlBQ0wsT0FBTztBQUFBLFVBQ1g7QUFJQSxlQUFLLGNBQWM7QUFBQSxZQUNmLFdBQVcsS0FBSztBQUFBLFlBQ2hCLFFBQVEsS0FBSztBQUFBLFlBQ2I7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCxhQUFHO0FBQUEsUUFDUDtBQUdBLGNBQU0sU0FBUyxDQUFDLEdBQUc7QUFDbkIsWUFBSSxDQUFDLElBQUksUUFBUSxJQUFJO0FBQ2pCLGlCQUFPLEtBQUssUUFBUTtBQUN4QixlQUFPLEtBQUssT0FBTyxNQUFNLEtBQUssUUFBUSxPQUFPLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDN0Q7QUFBQSxNQUNBLFVBQVUsUUFBUTtBQUNkLGFBQUssU0FBUztBQUFBLE1BQ2xCO0FBQUEsTUFDQSxZQUFZO0FBQ1IsZUFBTyxLQUFLO0FBQUEsTUFDaEI7QUFBQSxNQUNBLGFBQWEsS0FBSztBQUNkLFlBQUksQ0FBQyxLQUFLLE1BQU0sS0FBSztBQUNqQixlQUFLLGdCQUFnQjtBQUN6QixtQkFBVyxPQUFPLEtBQUs7QUFDbkIsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUssR0FBRyxHQUFHO0FBQ2hELGlCQUFLLE1BQU0sS0FBSyxRQUFRLE9BQU8sSUFBSTtBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxNQUNBLGVBQWUsVUFBVSxNQUFNO0FBQzNCLFlBQUksTUFBTTtBQUNWLGNBQU0sUUFBUSxTQUFVLE1BQU0sR0FBRztBQUM3QixnQkFBTSxNQUFNLEtBQUssSUFBSTtBQUNyQixpQkFBTztBQUNQLGNBQUksT0FBTyxRQUFRLGFBQWE7QUFDNUIsbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSixDQUFDO0FBQ0QsZUFBTyxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDbkU7QUFBQSxNQUNBLGNBQWMsTUFBTTtBQUNoQixhQUFLLFdBQVcsS0FBSyxJQUFJO0FBQ3pCLFlBQUksS0FBSyxXQUFXLFdBQVc7QUFDM0IsZUFBSyxtQkFBbUI7QUFBQSxNQUNoQztBQUFBLE1BQ0EscUJBQXFCO0FBQ2pCLGNBQU0sUUFBUTtBQUNkLGNBQU0sT0FBTyxLQUFLLFdBQVc7QUFFN0IsY0FBTSxZQUFZLEtBQUs7QUFDdkIsY0FBTSxTQUFTLEtBQUs7QUFDcEIsY0FBTSxLQUFLLEtBQUs7QUFDaEIsY0FBTSxlQUFlLEtBQUssbUJBQW1CLFdBQVcsTUFBTTtBQUM5RCxjQUFNLG1CQUFtQixLQUFLLFVBQVUsS0FBSyxNQUFNLFNBQVMsTUFBTSxDQUFDO0FBQ25FLGFBQUssR0FBRyxVQUFVLGNBQWMsa0JBQWtCLFNBQVMsU0FBVSxLQUFLO0FBQ3RFLGdCQUFNLFdBQVcsTUFBTTtBQUN2QixjQUFJLE1BQU0sV0FBVyxTQUFTO0FBQzFCLGtCQUFNLG1CQUFtQjtBQUM3QixhQUFHLEdBQUc7QUFBQSxRQUNWLENBQUM7QUFBQSxNQUNMO0FBQUEsTUFDQSxrQkFBa0I7QUFDZCxZQUFJLGVBQWUsQ0FBQztBQUNwQixjQUFNLGVBQWUsS0FBSyxtQkFBbUIsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUN4RSxZQUFJO0FBRUEsY0FBSSxLQUFLLEdBQUcsY0FBYztBQUN0QiwyQkFBZSxLQUFLLE1BQU0sS0FBSyxHQUFHLGFBQWEsY0FBYyxPQUFPLENBQUM7QUFBQSxVQUN6RTtBQUFBLFFBQ0osU0FDTyxLQUFQO0FBQ0ksY0FBSSxlQUFlLGFBQWE7QUFDNUIsZ0JBQUksVUFBVSxxQkFBcUI7QUFBQSxVQUN2QztBQUNBLGNBQUksSUFBSSxTQUFTO0FBQ2IsMkJBQWUsQ0FBQztBQUFBO0FBRWhCLGtCQUFNO0FBQUEsUUFDZDtBQUNBLGFBQUssTUFBTSxLQUFLLFVBQVU7QUFBQSxNQUM5QjtBQUFBLE1BQ0EsbUJBQW1CLFdBQVcsUUFBUTtBQUNsQyxZQUFJLE9BQU8sS0FBSyxRQUFRLFdBQVcsTUFBTSxTQUFTLE9BQU87QUFDekQsWUFBSSxLQUFLLHNCQUFzQixDQUFDLEtBQUssZ0JBQWdCLElBQUksS0FBSyxDQUFDLE9BQU8sWUFBWSxHQUFHLEdBQUc7QUFFcEYsZ0JBQU0sZUFBZSxLQUFLLFFBQVEsV0FBVyxNQUFNLE9BQU8sTUFBTSxHQUFHLEVBQUUsS0FBSyxPQUFPO0FBQ2pGLGNBQUksS0FBSyxnQkFBZ0IsWUFBWTtBQUNqQyxtQkFBTztBQUFBLFFBQ2Y7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsZ0JBQWdCLE1BQU07QUFDbEIsZUFBTyxLQUFLLE9BQU8sSUFBSTtBQUFBLE1BQzNCO0FBQUEsSUFDSjtBQUNBLGFBQVMsT0FBTyxNQUFNLE9BQU87QUFDekIsYUFBTztBQUNQLFlBQU1DLFFBQU8sSUFBSSxLQUFLLElBQUk7QUFDMUIsYUFBTztBQUFBLFFBQ0gsSUFBSUEsTUFBSyxHQUFHLEtBQUtBLEtBQUk7QUFBQSxRQUNyQixLQUFLQSxNQUFLLElBQUksS0FBS0EsS0FBSTtBQUFBLFFBQ3ZCLFdBQVdBLE1BQUssVUFBVSxLQUFLQSxLQUFJO0FBQUEsUUFDbkMsV0FBV0EsTUFBSyxVQUFVLEtBQUtBLEtBQUk7QUFBQSxRQUNuQyxjQUFjQSxNQUFLLGFBQWEsS0FBS0EsS0FBSTtBQUFBLFFBQ3pDLFFBQVFBLE1BQUs7QUFBQSxNQUNqQjtBQUFBLElBQ0o7QUFFQSxRQUFJLG1CQUFtQjtBQUFBLE1BQ25CLElBQUk7QUFBQSxRQUNBLGNBQWNILElBQUc7QUFBQSxRQUNqQixXQUFXQSxJQUFHO0FBQUEsTUFDbEI7QUFBQSxNQUNBLFFBQVFDLE1BQUs7QUFBQSxNQUNiLFNBQVNDLE1BQUs7QUFBQSxNQUNkLFFBQVEsQ0FBQyxTQUFTO0FBQ2QsWUFBSTtBQUNBLGlCQUFPRixJQUFHLFNBQVMsSUFBSSxFQUFFLE9BQU87QUFBQSxRQUNwQyxTQUNPLEtBQVA7QUFDSSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLFFBQU0sT0FBTyxDQUFDLFNBQVM7QUFDbkIsYUFBTyxPQUFPLE1BQU0sZ0JBQWdCO0FBQUEsSUFDeEM7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUMxTWpCLElBQUFLLGlCQUFBO0FBQUEsdURBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUlDLFFBQU8sUUFBUTtBQUNuQixRQUFJQyxNQUFLLFFBQVE7QUFDakIsUUFBSUMsUUFBTyxRQUFRO0FBRW5CLGFBQVMsVUFBVSxLQUFLO0FBQ3BCLFlBQU0sY0FBYyxRQUFRLElBQUksWUFBWSxLQUFLLFFBQVEsSUFBSSxZQUFZO0FBQ3pFLFVBQUksQ0FBQyxhQUFhO0FBQ2QsY0FBTSxJQUFJLFlBQVk7QUFBQSxNQUMxQjtBQUNBLFVBQUksSUFBSSxRQUFRLEdBQUcsTUFBTSxNQUFNLElBQUksUUFBUSxHQUFHLE1BQU0sSUFBSTtBQUNwRCxlQUFPO0FBQUEsTUFDWCxPQUNLO0FBQ0QsWUFBSSxZQUFZO0FBQ2hCLFlBQUksZUFBZTtBQUNuQixjQUFNLGlCQUFpQixJQUFJLE1BQU0sS0FBSztBQUN0QyxpQkFBUyxJQUFJLGlCQUFpQixlQUFlLEdBQUcsU0FBUyxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDN0UsY0FBSSxNQUFNLElBQUksT0FBTyxDQUFDO0FBQ3RCLGNBQUksY0FBYztBQUNkLDJCQUFlO0FBQ2Ysa0JBQU0sSUFBSSxZQUFZO0FBQUEsVUFDMUI7QUFDQSxjQUFJLE1BQU0sTUFBTSxRQUFRLE9BQU8sUUFBUSxNQUFNO0FBQ3pDLDJCQUFlO0FBQUEsVUFDbkIsV0FDUyxRQUFRLE9BQU8sUUFBUSxLQUFLO0FBQ2pDLHlCQUFhO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsYUFBUyxXQUFXLEtBQUssWUFBWTtBQUNqQyxZQUFNLFlBQVksSUFBSSxZQUFZO0FBQ2xDLG1CQUFhLGNBQWM7QUFDM0IsVUFBSSxlQUFlO0FBQ25CLGVBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsY0FBTSxXQUFXLFVBQVUsT0FBTyxDQUFDO0FBQ25DLGNBQU0sWUFBWSxJQUFJLE9BQU8sQ0FBQztBQUM5QixZQUFJLGFBQWEsYUFBYSxJQUFJLEdBQUc7QUFDakMsMEJBQWdCLEdBQUcsYUFBYSxVQUFVLE9BQU8sQ0FBQztBQUFBLFFBQ3RELE9BQ0s7QUFDRCwwQkFBZ0I7QUFBQSxRQUNwQjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLGFBQVMsZ0JBQWdCLEdBQUc7QUFDeEIsVUFBSSxNQUFNLFFBQVEsTUFBTTtBQUNwQixlQUFPO0FBQ1gsVUFBSSxPQUFPLE1BQU07QUFDYixlQUFPO0FBQ1gsVUFBSSxpQkFBaUIsS0FBSyxDQUFDO0FBQ3ZCLGVBQU87QUFDWCxVQUFJLFNBQVMsS0FBSyxDQUFDO0FBQ2YsZUFBTztBQUNYLGFBQU8sNENBQTRDLEtBQUssQ0FBQztBQUFBLElBQzdEO0FBRUEsYUFBUyxrQkFBa0IsV0FBVztBQUNsQyxVQUFJLE1BQU0sUUFBUSxTQUFTLEdBQUc7QUFDMUIsZUFBTyxVQUFVLElBQUksT0FBSyxPQUFPLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQztBQUFBLE1BQ2hFO0FBQ0Esa0JBQVksVUFBVSxLQUFLO0FBQzNCLFVBQUksSUFBSTtBQUNSLFVBQUksUUFBUTtBQUNaLFVBQUksSUFBSTtBQUNSLFVBQUksVUFBVTtBQUNkLFlBQU0sT0FBTyxDQUFDO0FBQ2QsZUFBUyxLQUFLLEdBQUcsS0FBSyxVQUFVLFFBQVEsTUFBTTtBQUMxQyxnQkFBUTtBQUNSLFlBQUksVUFBVSxPQUFPLEVBQUU7QUFDdkIsWUFBSSxNQUFNLE9BQU8sQ0FBQyxTQUFTO0FBQ3ZCLGNBQUksRUFBRSxVQUFVLE1BQU07QUFDbEI7QUFBQSxVQUNKO0FBQ0E7QUFBQSxRQUNKO0FBQ0EsWUFBSSxNQUFNLFNBQVM7QUFDZixvQkFBVTtBQUFBLFFBQ2QsWUFDVSxNQUFNLE9BQU8sTUFBTSxRQUFRLENBQUMsU0FBUztBQUMzQyxvQkFBVTtBQUFBLFFBQ2Q7QUFDQSxZQUFJLENBQUMsS0FBSztBQUNOLGVBQUssS0FBSztBQUNkLGFBQUssTUFBTTtBQUFBLE1BQ2Y7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUk7QUFDSixLQUFDLFNBQVVDLDBCQUF5QjtBQUNoQyxNQUFBQSx5QkFBd0IsYUFBYTtBQUNyQyxNQUFBQSx5QkFBd0IsWUFBWTtBQUNwQyxNQUFBQSx5QkFBd0IsWUFBWTtBQUNwQyxNQUFBQSx5QkFBd0IsV0FBVztBQUFBLElBQ3ZDLEdBQUcsNEJBQTRCLDBCQUEwQixDQUFDLEVBQUU7QUFFNUQsUUFBSTtBQUNKLFFBQU0sY0FBTixNQUFrQjtBQUFBLE1BQ2QsWUFBWSxRQUFRO0FBQ2hCLGdCQUFRO0FBQUEsTUFDWjtBQUFBLE1BQ0EsTUFBTSxXQUFXLFNBQVM7QUFDdEIsY0FBTSxPQUFPLE9BQU8sT0FBTztBQUFBLFVBQ3ZCLE9BQU87QUFBQSxVQUNQLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLGVBQWU7QUFBQSxVQUNmLGVBQWU7QUFBQSxVQUNmLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFdBQVc7QUFBQSxVQUNYLE1BQU07QUFBQSxVQUNOLFdBQVc7QUFBQSxVQUNYLFFBQVE7QUFBQSxVQUNSLFFBQVE7QUFBQSxVQUNSLElBQUk7QUFBQSxVQUNKLEtBQUs7QUFBQSxRQUNULEdBQUcsT0FBTztBQUNWLGNBQU0sT0FBTyxrQkFBa0IsU0FBUztBQUN4QyxjQUFNLFVBQVUsZUFBZSxPQUFPLE9BQU8sdUJBQU8sT0FBTyxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUM7QUFDN0UsY0FBTSxnQkFBZ0IsT0FBTyxPQUFPO0FBQUEsVUFDaEMsb0JBQW9CO0FBQUEsVUFDcEIsd0JBQXdCO0FBQUEsVUFDeEIsa0JBQWtCO0FBQUEsVUFDbEIsZ0JBQWdCO0FBQUEsVUFDaEIsNkJBQTZCO0FBQUEsVUFDN0IsNEJBQTRCO0FBQUEsVUFDNUIsaUJBQWlCO0FBQUEsVUFDakIsc0JBQXNCO0FBQUEsVUFDdEIsc0JBQXNCO0FBQUEsVUFDdEIsbUJBQW1CO0FBQUEsVUFDbkIsaUJBQWlCO0FBQUEsVUFDakIsNEJBQTRCO0FBQUEsVUFDNUIsY0FBYztBQUFBLFVBQ2QsdUJBQXVCO0FBQUEsVUFDdkIsdUJBQXVCO0FBQUEsVUFDdkIsaUJBQWlCO0FBQUEsVUFDakIsZ0JBQWdCO0FBQUEsVUFDaEIsMkJBQTJCO0FBQUEsUUFDL0IsR0FBRyxLQUFLLGFBQWE7QUFDckIsY0FBTSxXQUFXLE9BQU8sT0FBTyx1QkFBTyxPQUFPLElBQUksR0FBRyxLQUFLLE9BQU87QUFDaEUsY0FBTSxnQkFBZ0IsS0FBSyxpQkFBaUIsQ0FBQztBQUM3QyxjQUFNLFlBQVksS0FBSztBQUN2QixjQUFNLGlCQUFpQixjQUFjO0FBQ3JDLGNBQU0sZUFBZSxpQkFBaUIsT0FBTztBQUM3QyxjQUFNLGFBQWEsdUJBQU8sT0FBTyxJQUFJO0FBQ3JDLGNBQU0sWUFBWSx1QkFBTyxPQUFPLElBQUk7QUFDcEMsY0FBTSxLQUFLLEtBQUssTUFBTSxNQUFNO0FBQzVCLGNBQU0sUUFBUTtBQUFBLFVBQ1YsU0FBUyx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUMzQixRQUFRLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzFCLE9BQU8sdUJBQU8sT0FBTyxJQUFJO0FBQUEsVUFDekIsU0FBUyx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUMzQixTQUFTLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzNCLFFBQVEsdUJBQU8sT0FBTyxJQUFJO0FBQUEsVUFDMUIsV0FBVyx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUM3QixTQUFTLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFVBQzNCLE9BQU8sdUJBQU8sT0FBTyxJQUFJO0FBQUEsVUFDekIsV0FBVyx1QkFBTyxPQUFPLElBQUk7QUFBQSxVQUM3QixNQUFNLENBQUM7QUFBQSxRQUNYO0FBQ0EsY0FBTSxXQUFXO0FBQ2pCLGNBQU0saUJBQWlCLElBQUksT0FBTyxRQUFRLGNBQWMscUJBQXFCLE1BQU07QUFDbkYsU0FBQyxFQUFFLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQy9ELGdCQUFNLE1BQU0sT0FBTyxRQUFRLFdBQVcsSUFBSSxNQUFNO0FBQ2hELGdCQUFNLGFBQWEsT0FBTyxLQUFLLEdBQUcsRUFBRSxJQUFJLFNBQVVDLE1BQUs7QUFDbkQsa0JBQU0sZ0JBQWdCO0FBQUEsY0FDbEIsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLFlBQ1o7QUFDQSxtQkFBTyxjQUFjQTtBQUFBLFVBQ3pCLENBQUMsRUFBRSxPQUFPLE9BQU8sRUFBRSxJQUFJO0FBQ3ZCLGNBQUksWUFBWTtBQUNaLGtCQUFNLFlBQVksT0FBTztBQUFBLFVBQzdCO0FBQ0EsZ0JBQU0sT0FBTyxPQUFPO0FBQ3BCLGdCQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDdkIsQ0FBQztBQUNELFNBQUMsRUFBRSxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsRUFBRSxPQUFPLE9BQU8sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUNqRSxnQkFBTSxNQUFNLE9BQU87QUFDbkIsZ0JBQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUN2QixDQUFDO0FBQ0QsU0FBQyxFQUFFLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ2hFLGdCQUFNLFFBQVEsT0FBTztBQUNyQixnQkFBTSxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ3ZCLENBQUM7QUFDRCxTQUFDLEVBQUUsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxPQUFPLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDaEUsZ0JBQU0sUUFBUSxPQUFPO0FBQ3JCLGdCQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDdkIsQ0FBQztBQUNELFNBQUMsRUFBRSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLE9BQU8sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUMvRCxnQkFBTSxPQUFPLE9BQU87QUFDcEIsZ0JBQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUN2QixDQUFDO0FBQ0QsU0FBQyxFQUFFLE9BQU8sS0FBSyxhQUFhLENBQUMsQ0FBQyxFQUFFLE9BQU8sT0FBTyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ25FLGdCQUFNLFVBQVUsT0FBTztBQUN2QixnQkFBTSxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ3ZCLENBQUM7QUFDRCxZQUFJLE9BQU8sS0FBSyxTQUFTLFVBQVU7QUFDL0IsaUJBQU8sUUFBUSxLQUFLLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTTtBQUNoRCxnQkFBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixvQkFBTSxNQUFNLE9BQU87QUFDbkIsb0JBQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxZQUN2QjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxZQUFJLE9BQU8sS0FBSyxXQUFXLFVBQVU7QUFDakMsaUJBQU8sUUFBUSxLQUFLLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTTtBQUNsRCxnQkFBSSxPQUFPLFVBQVUsWUFBWTtBQUM3QixvQkFBTSxVQUFVLE9BQU87QUFDdkIsb0JBQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxZQUN2QjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxZQUFJLE9BQU8sS0FBSyxXQUFXLGFBQWE7QUFDcEMsY0FBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLFdBQVcsVUFBVTtBQUMvRCxhQUFDLEVBQUUsT0FBTyxLQUFLLE1BQU0sRUFBRSxPQUFPLE9BQU8sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUMxRCxvQkFBTSxRQUFRLE9BQU87QUFBQSxZQUN6QixDQUFDO0FBQUEsVUFDTCxXQUNTLE9BQU8sS0FBSyxXQUFXLFVBQVU7QUFDdEMsbUJBQU8sUUFBUSxLQUFLLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTTtBQUNsRCxrQkFBSSxPQUFPLFVBQVUsYUFBYSxPQUFPLFVBQVUsWUFBWTtBQUMzRCxzQkFBTSxRQUFRLE9BQU87QUFBQSxjQUN6QjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBQ0Esc0JBQWMsS0FBSyxLQUFLLFNBQVMsS0FBSyxTQUFTLE1BQU0sTUFBTTtBQUMzRCxlQUFPLEtBQUssUUFBUSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3pDLFdBQUMsTUFBTSxRQUFRLFFBQVEsQ0FBQyxHQUFHLFFBQVEsU0FBVSxPQUFPO0FBQ2hELHFCQUFTLFNBQVMsU0FBUztBQUFBLFVBQy9CLENBQUM7QUFBQSxRQUNMLENBQUM7QUFDRCxZQUFJQyxTQUFRO0FBQ1osMkJBQW1CO0FBQ25CLFlBQUksV0FBVyxDQUFDO0FBQ2hCLGNBQU0sT0FBTyxPQUFPLE9BQU8sdUJBQU8sT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3pELGNBQU0sYUFBYSxDQUFDO0FBQ3BCLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ2xDLGdCQUFNLE1BQU0sS0FBSztBQUNqQixnQkFBTSxlQUFlLElBQUksUUFBUSxVQUFVLEtBQUs7QUFDaEQsY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQ0osY0FBSSxRQUFRLFFBQVEscUJBQXFCLEdBQUcsR0FBRztBQUMzQywyQkFBZSxHQUFHO0FBQUEsVUFDdEIsV0FDUyxhQUFhLE1BQU0sV0FBVyxHQUFHO0FBQ3RDLDJCQUFlLEdBQUc7QUFDbEI7QUFBQSxVQUNKLFdBQ1MsSUFBSSxNQUFNLFFBQVEsS0FBTSxDQUFDLGNBQWMsMEJBQTBCLElBQUksTUFBTSxPQUFPLEdBQUk7QUFDM0YsZ0JBQUksSUFBSSxNQUFNLHdCQUF3QjtBQUN0QyxnQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRztBQUNqRCxrQkFBSSxnQkFBZ0IsRUFBRSxJQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ3JDLG9CQUFJLFNBQVMsR0FBRyxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUU7QUFBQSxjQUNwQyxXQUNTLGdCQUFnQixFQUFFLElBQUksTUFBTSxLQUFLLE1BQU0sT0FBTztBQUNuRCxvQkFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQUEsY0FDcEMsT0FDSztBQUNELHVCQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFBQSxjQUNyQjtBQUFBLFlBQ0o7QUFBQSxVQUNKLFdBQ1MsSUFBSSxNQUFNLGNBQWMsS0FBSyxjQUFjLHFCQUFxQjtBQUNyRSxnQkFBSSxJQUFJLE1BQU0sY0FBYztBQUM1QixnQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRztBQUNqRCxvQkFBTSxFQUFFO0FBQ1IscUJBQU8sS0FBSyxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLO0FBQUEsWUFDcEU7QUFBQSxVQUNKLFdBQ1MsSUFBSSxNQUFNLE9BQU8sS0FBTSxDQUFDLGNBQWMsMEJBQTBCLElBQUksTUFBTSxTQUFTLEdBQUk7QUFDNUYsZ0JBQUksSUFBSSxNQUFNLFVBQVU7QUFDeEIsZ0JBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUc7QUFDakQsb0JBQU0sRUFBRTtBQUNSLGtCQUFJLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3BDLG9CQUFJLFNBQVMsR0FBRyxLQUFLLElBQUk7QUFBQSxjQUM3QixXQUNTLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxNQUFNLE9BQU87QUFDbEQsb0JBQUksU0FBUyxHQUFHLEtBQUssSUFBSTtBQUFBLGNBQzdCLE9BQ0s7QUFDRCx1QkFBTyxLQUFLLElBQUk7QUFDaEIsb0JBQUksU0FBUyxXQUFjLENBQUMsS0FBSyxNQUFNLElBQUksS0FDdkMsS0FBSyxNQUFNLFFBQVEsTUFDbkIsQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssS0FDakMsQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sR0FBRztBQUNyQyx5QkFBTyxLQUFLLElBQUk7QUFDaEI7QUFBQSxnQkFDSixXQUNTLGlCQUFpQixLQUFLLElBQUksR0FBRztBQUNsQyx5QkFBTyxLQUFLLElBQUk7QUFDaEI7QUFBQSxnQkFDSixPQUNLO0FBQ0QseUJBQU8sS0FBSyxhQUFhLEdBQUcsQ0FBQztBQUFBLGdCQUNqQztBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQUEsVUFDSixXQUNTLElBQUksTUFBTSxVQUFVLEdBQUc7QUFDNUIsZ0JBQUksSUFBSSxNQUFNLHNCQUFzQjtBQUNwQyxnQkFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRztBQUNqRCxxQkFBTyxFQUFFLElBQUksRUFBRSxFQUFFO0FBQUEsWUFDckI7QUFBQSxVQUNKLFdBQ1MsSUFBSSxNQUFNLFNBQVMsS0FBSyxDQUFDLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDbkQsbUJBQU8sS0FBSyxJQUFJO0FBQ2hCLGdCQUFJLElBQUksTUFBTSxXQUFXO0FBQ3pCLGdCQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHO0FBQ2pELG9CQUFNLEVBQUU7QUFDUixrQkFBSSxTQUFTLFVBQWEsQ0FBQyxLQUFLLE1BQU0sSUFBSSxLQUN0QyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxLQUNqQyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3JDLHVCQUFPLEtBQUssSUFBSTtBQUNoQjtBQUFBLGNBQ0osT0FDSztBQUNELHVCQUFPLEtBQUssYUFBYSxHQUFHLENBQUM7QUFBQSxjQUNqQztBQUFBLFlBQ0o7QUFBQSxVQUNKLFdBQ1MsSUFBSSxNQUFNLFNBQVMsS0FBSyxDQUFDLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDbkQsc0JBQVUsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRTtBQUNuQyxxQkFBUztBQUNULHFCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3JDLHFCQUFPLElBQUksTUFBTSxJQUFJLENBQUM7QUFDdEIsa0JBQUksUUFBUSxJQUFJLE1BQU0sUUFBUSxJQUFJLE9BQU8sS0FBSztBQUMxQyx3QkFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDO0FBQ3ZCLHNCQUFNLFFBQVE7QUFDZCxvQkFBSSxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sR0FBRztBQUNwQyxzQkFBSSxTQUFTLEdBQUcsS0FBSyxNQUFNLEtBQUs7QUFBQSxnQkFDcEMsV0FDUyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssTUFBTSxPQUFPO0FBQ2xELHNCQUFJLFNBQVMsR0FBRyxLQUFLLE1BQU0sS0FBSztBQUFBLGdCQUNwQyxPQUNLO0FBQ0QseUJBQU8sS0FBSyxLQUFLO0FBQUEsZ0JBQ3JCO0FBQ0EseUJBQVM7QUFDVDtBQUFBLGNBQ0o7QUFDQSxrQkFBSSxTQUFTLEtBQUs7QUFDZCx1QkFBTyxRQUFRLElBQUksSUFBSTtBQUN2QjtBQUFBLGNBQ0o7QUFDQSxrQkFBSSxXQUFXLEtBQUssUUFBUSxFQUFFLEtBQzFCLDJCQUEyQixLQUFLLElBQUksS0FDcEMsZ0JBQWdCLE1BQU0sTUFBTSxLQUFLLE1BQU0sT0FBTztBQUM5Qyx1QkFBTyxRQUFRLElBQUksSUFBSTtBQUN2Qix5QkFBUztBQUNUO0FBQUEsY0FDSjtBQUNBLGtCQUFJLFFBQVEsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHLE1BQU0sSUFBSSxHQUFHO0FBQzlDLHVCQUFPLFFBQVEsSUFBSSxJQUFJO0FBQ3ZCLHlCQUFTO0FBQ1Q7QUFBQSxjQUNKLE9BQ0s7QUFDRCx1QkFBTyxRQUFRLElBQUksYUFBYSxRQUFRLEVBQUUsQ0FBQztBQUFBLGNBQy9DO0FBQUEsWUFDSjtBQUNBLGtCQUFNLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDcEIsZ0JBQUksQ0FBQyxVQUFVLFFBQVEsS0FBSztBQUN4QixrQkFBSSxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sR0FBRztBQUNwQyxvQkFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJO0FBQUEsY0FDN0IsV0FDUyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssTUFBTSxPQUFPO0FBQ2xELG9CQUFJLFNBQVMsR0FBRyxLQUFLLElBQUk7QUFBQSxjQUM3QixPQUNLO0FBQ0QsdUJBQU8sS0FBSyxJQUFJO0FBQ2hCLG9CQUFJLFNBQVMsV0FBYyxDQUFDLGNBQWMsS0FBSyxJQUFJLEtBQy9DLEtBQUssTUFBTSxRQUFRLE1BQ25CLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEtBQ2pDLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDckMseUJBQU8sS0FBSyxJQUFJO0FBQ2hCO0FBQUEsZ0JBQ0osV0FDUyxpQkFBaUIsS0FBSyxJQUFJLEdBQUc7QUFDbEMseUJBQU8sS0FBSyxJQUFJO0FBQ2hCO0FBQUEsZ0JBQ0osT0FDSztBQUNELHlCQUFPLEtBQUssYUFBYSxHQUFHLENBQUM7QUFBQSxnQkFDakM7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUFBLFVBQ0osV0FDUyxJQUFJLE1BQU0sVUFBVSxLQUN6QixJQUFJLE1BQU0sUUFBUSxLQUNsQixnQkFBZ0IsSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLEtBQUssR0FBRztBQUM1QyxrQkFBTSxJQUFJLE1BQU0sQ0FBQztBQUNqQixtQkFBTyxLQUFLLGFBQWEsR0FBRyxDQUFDO0FBQUEsVUFDakMsV0FDUyxRQUFRLE1BQU07QUFDbkIsdUJBQVcsS0FBSyxNQUFNLElBQUksQ0FBQztBQUMzQjtBQUFBLFVBQ0osV0FDUyxjQUFjLHVCQUF1QjtBQUMxQyx1QkFBVyxLQUFLLE1BQU0sQ0FBQztBQUN2QjtBQUFBLFVBQ0osT0FDSztBQUNELDJCQUFlLEdBQUc7QUFBQSxVQUN0QjtBQUFBLFFBQ0o7QUFDQSxxQkFBYSxNQUFNLElBQUk7QUFDdkIscUJBQWEsTUFBTSxLQUFLO0FBQ3hCLGtCQUFVLElBQUk7QUFDZCx5QkFBaUI7QUFDakIsZ0NBQXdCLE1BQU0sTUFBTSxTQUFTLFVBQVUsSUFBSTtBQUMzRCx1QkFBZSxJQUFJO0FBQ25CLFlBQUksY0FBYztBQUNkLDZCQUFtQixJQUFJO0FBQzNCLGVBQU8sS0FBSyxNQUFNLE1BQU0sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUM3QyxjQUFJLENBQUMsT0FBTyxNQUFNLElBQUksTUFBTSxHQUFHLENBQUM7QUFDNUIsbUJBQU8sS0FBSyxDQUFDO0FBQUEsUUFDckIsQ0FBQztBQUNELFlBQUksa0JBQWtCLFNBQVM7QUFDM0IsZUFBSyxnQkFBZ0IsQ0FBQztBQUMxQixpQkFBUyxRQUFRLFNBQVUsS0FBSztBQUM1QixlQUFLLGNBQWMsS0FBSyxHQUFHO0FBQUEsUUFDL0IsQ0FBQztBQUNELFlBQUksY0FBYywyQkFBMkIsY0FBYyxpQkFBaUI7QUFDeEUsaUJBQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxTQUFPLFFBQVEsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsUUFBUSxTQUFPO0FBQzlFLG1CQUFPLEtBQUs7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDTDtBQUNBLFlBQUksY0FBYyxrQkFBa0I7QUFDaEMsV0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLEtBQUssT0FBTyxFQUFFLElBQUksT0FBSyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsV0FBUztBQUNyRSxnQkFBSSxjQUFjLDJCQUEyQixNQUFNLFNBQVMsR0FBRyxHQUFHO0FBQzlELHFCQUFPLEtBQUssTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLFVBQVEsVUFBVSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFBQSxZQUN0RTtBQUNBLG1CQUFPLEtBQUs7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLGVBQWUsS0FBSztBQUN6QixnQkFBTSxxQkFBcUIsa0JBQWtCLEtBQUssR0FBRztBQUNyRCxjQUFJLE9BQU8sdUJBQXVCLFlBQVksT0FBTyx1QkFBdUIsVUFBVTtBQUNsRixpQkFBSyxFQUFFLEtBQUssa0JBQWtCO0FBQUEsVUFDbEM7QUFBQSxRQUNKO0FBQ0EsaUJBQVMsU0FBUyxHQUFHLEtBQUtDLE9BQU0sbUJBQW1CO0FBQy9DLGNBQUk7QUFDSixjQUFJLFFBQVEsZ0JBQWdCLEtBQUssTUFBTSxLQUFLO0FBQzVDLGtCQUFRLE9BQU8sVUFBVSxZQUFZLE1BQU0sS0FBSyxJQUFJLElBQUk7QUFDeEQsY0FBSSxVQUFVLEdBQUc7QUFDYixnQkFBSSxDQUFDLFlBQVksaUJBQWlCLEdBQUc7QUFDakMsY0FBQUQsU0FBUSxNQUFNLEdBQUcsK0JBQStCLEdBQUcsQ0FBQztBQUFBLFlBQ3hEO0FBQ0EsbUJBQU8sS0FBSyxhQUFhLEdBQUcsQ0FBQztBQUM3QixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLFlBQVksWUFBWSxpQkFBaUIsSUFBSSxJQUFJO0FBQ3JELGNBQUksY0FBYyx1QkFBdUI7QUFDckMsZ0JBQUlDLE1BQUssVUFBVSxJQUFJLEtBQUssWUFBWSxPQUFPO0FBQzNDLGNBQUFELFNBQVEsTUFBTSxHQUFHLHNDQUFzQyxHQUFHLENBQUM7QUFBQSxZQUMvRDtBQUNBLHdCQUFZO0FBQUEsVUFDaEIsT0FDSztBQUNELGlCQUFLLEtBQUssSUFBSSxHQUFHLEtBQUtDLE1BQUssUUFBUSxNQUFNO0FBQ3JDLGtCQUFJLENBQUNBLE1BQUssSUFBSSxNQUFNLFVBQVUsS0FBS0EsTUFBSyxJQUFJLE1BQU0sUUFBUSxLQUFLLHFCQUFxQkEsTUFBSyxHQUFHO0FBQ3hGO0FBQUE7QUFFQTtBQUFBLFlBQ1I7QUFDQSxnQkFBSSxZQUFZO0FBQ1osY0FBQUQsU0FBUSxNQUFNLEdBQUcsc0NBQXNDLEdBQUcsQ0FBQztBQUFBLFVBQ25FO0FBQ0EsY0FBSSxXQUFXLEtBQUssSUFBSSxXQUFXLEtBQUs7QUFDeEMsY0FBSSxDQUFDLFlBQVksaUJBQWlCLEtBQUssV0FBVyxHQUFHO0FBQ2pELG1CQUFPLEtBQUssaUJBQWlCO0FBQzdCO0FBQUEsVUFDSjtBQUNBLGVBQUssS0FBSyxJQUFJLEdBQUcsS0FBTSxXQUFXLElBQUksR0FBSSxNQUFNO0FBQzVDLG1CQUFPLEtBQUtDLE1BQUssR0FBRztBQUFBLFVBQ3hCO0FBQ0EsaUJBQVEsSUFBSTtBQUFBLFFBQ2hCO0FBQ0EsaUJBQVMsU0FBUyxHQUFHLEtBQUtBLE9BQU0sbUJBQW1CO0FBQy9DLGNBQUksWUFBWSxDQUFDO0FBQ2pCLGNBQUksT0FBTyxxQkFBcUJBLE1BQUssSUFBSTtBQUN6QyxnQkFBTSxhQUFhLGdCQUFnQixLQUFLLE1BQU0sS0FBSztBQUNuRCxjQUFJLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxLQUFLLENBQUUsaUJBQWlCLEtBQUssSUFBSSxHQUFJO0FBQ3JFLHNCQUFVLEtBQUssSUFBSTtBQUFBLFVBQ3ZCLFdBQ1MsWUFBWSxJQUFJLEtBQ3BCLFlBQVksaUJBQWlCLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxHQUFJO0FBQzVHLGdCQUFJLFNBQVMsU0FBUyxRQUFXO0FBQzdCLG9CQUFNLFNBQVMsU0FBUztBQUN4QiwwQkFBWSxNQUFNLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNO0FBQUEsWUFDeEQ7QUFBQSxVQUNKLE9BQ0s7QUFDRCxnQkFBSSxDQUFDLFlBQVksaUJBQWlCLEdBQUc7QUFDakMsd0JBQVUsS0FBSyxhQUFhLEtBQUssaUJBQWlCLENBQUM7QUFBQSxZQUN2RDtBQUNBLHFCQUFTLEtBQUssSUFBSSxHQUFHLEtBQUtBLE1BQUssUUFBUSxNQUFNO0FBQ3pDLGtCQUFLLENBQUMsY0FBYyxvQkFBb0IsVUFBVSxTQUFTLEtBQ3RELGNBQWMsT0FBTyxlQUFlLFlBQVksVUFBVSxVQUFVO0FBQ3JFO0FBQ0oscUJBQU9BLE1BQUs7QUFDWixrQkFBSSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJO0FBQ3JFO0FBQ0osa0JBQUk7QUFDSix3QkFBVSxLQUFLLGFBQWEsS0FBSyxJQUFJLENBQUM7QUFBQSxZQUMxQztBQUFBLFVBQ0o7QUFDQSxjQUFJLE9BQU8sZUFBZSxhQUFjLGNBQWMsVUFBVSxTQUFTLGNBQ3BFLE1BQU0sVUFBVSxLQUFLLFVBQVUsV0FBVyxJQUFLO0FBQ2hELFlBQUFELFNBQVEsTUFBTSxHQUFHLHNDQUFzQyxHQUFHLENBQUM7QUFBQSxVQUMvRDtBQUNBLGlCQUFPLEtBQUssU0FBUztBQUNyQixpQkFBTztBQUFBLFFBQ1g7QUFDQSxpQkFBUyxPQUFPLEtBQUssS0FBSztBQUN0QixjQUFJLElBQUksS0FBSyxHQUFHLEtBQUssY0FBYyx5QkFBeUI7QUFDeEQsa0JBQU0sUUFBUSxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksU0FBVSxNQUFNO0FBQzdDLHFCQUFPLFVBQVUsSUFBSTtBQUFBLFlBQ3pCLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDWCx3QkFBWSxLQUFLLEtBQUs7QUFBQSxVQUMxQjtBQUNBLGdCQUFNLFFBQVEsYUFBYSxLQUFLLEdBQUc7QUFDbkMsZ0JBQU0sV0FBVyxJQUFJLE1BQU0sR0FBRztBQUM5QixpQkFBTyxNQUFNLFVBQVUsS0FBSztBQUM1QixjQUFJLE1BQU0sUUFBUSxNQUFNO0FBQ3BCLGtCQUFNLFFBQVEsS0FBSyxRQUFRLFNBQVUsR0FBRztBQUNwQyxvQkFBTSxnQkFBZ0IsRUFBRSxNQUFNLEdBQUc7QUFDakMscUJBQU8sTUFBTSxlQUFlLEtBQUs7QUFBQSxZQUNyQyxDQUFDO0FBQUEsVUFDTDtBQUNBLGNBQUksU0FBUyxTQUFTLEtBQUssY0FBYyxpQkFBaUI7QUFDdEQsYUFBQyxNQUFNLFFBQVEsU0FBUyxPQUFPLENBQUMsR0FBRyxRQUFRLFNBQVUsR0FBRztBQUNwRCxrQkFBSSxnQkFBZ0IsRUFBRSxNQUFNLEdBQUc7QUFDL0Isb0JBQU0sSUFBSSxDQUFDLEVBQUUsT0FBTyxRQUFRO0FBQzVCLGdCQUFFLE1BQU07QUFDUiw4QkFBZ0IsY0FBYyxPQUFPLENBQUM7QUFDdEMsa0JBQUksRUFBRSxNQUFNLFFBQVEsUUFBUSxDQUFDLEdBQUcsU0FBUyxjQUFjLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDL0QsdUJBQU8sTUFBTSxlQUFlLEtBQUs7QUFBQSxjQUNyQztBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFDQSxjQUFJLGdCQUFnQixLQUFLLE1BQU0sU0FBUyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxNQUFNLEdBQUc7QUFDOUUsa0JBQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQU0sUUFBUSxRQUFRLENBQUMsQ0FBQztBQUNsRCxpQkFBSyxRQUFRLFNBQVVELE1BQUs7QUFDeEIscUJBQU8sZUFBZSxZQUFZQSxNQUFLO0FBQUEsZ0JBQ25DLFlBQVk7QUFBQSxnQkFDWixNQUFNO0FBQ0YseUJBQU87QUFBQSxnQkFDWDtBQUFBLGdCQUNBLElBQUlHLFFBQU87QUFDUCx3QkFBTSxPQUFPQSxXQUFVLFdBQVcsTUFBTSxVQUFVQSxNQUFLLElBQUlBO0FBQUEsZ0JBQy9EO0FBQUEsY0FDSixDQUFDO0FBQUEsWUFDTCxDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0o7QUFDQSxpQkFBUyxZQUFZLEtBQUssT0FBTztBQUM3QixjQUFJLEVBQUUsTUFBTSxRQUFRLFFBQVEsTUFBTSxRQUFRLEtBQUssU0FBUztBQUNwRCxrQkFBTSxRQUFRLE9BQU8sQ0FBQyxLQUFLO0FBQzNCLHVCQUFXLFNBQVM7QUFBQSxVQUN4QjtBQUNBLGNBQUksRUFBRSxNQUFNLFFBQVEsVUFBVSxNQUFNLFFBQVEsT0FBTyxTQUFTO0FBQ3hELHdCQUFZLE9BQU8sR0FBRztBQUFBLFVBQzFCO0FBQUEsUUFDSjtBQUNBLGlCQUFTLGFBQWEsS0FBSyxLQUFLO0FBQzVCLGNBQUksT0FBTyxRQUFRLGFBQ2QsSUFBSSxPQUFPLE9BQU8sSUFBSSxPQUFPLFFBQzlCLElBQUksSUFBSSxTQUFTLE9BQU8sSUFBSSxJQUFJO0FBQ2hDLGtCQUFNLElBQUksVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsVUFDekM7QUFDQSxjQUFJLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxLQUFLLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3pFLGdCQUFJLE9BQU8sUUFBUTtBQUNmLG9CQUFNLFFBQVE7QUFBQSxVQUN0QjtBQUNBLGNBQUksUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUN2QixJQUFJLElBQUksU0FBVSxHQUFHO0FBQUUsbUJBQU8sa0JBQWtCLEtBQUssQ0FBQztBQUFBLFVBQUcsQ0FBQyxJQUMxRCxrQkFBa0IsS0FBSyxHQUFHO0FBQ2hDLGNBQUksZ0JBQWdCLEtBQUssTUFBTSxNQUFNLE1BQU0sWUFBWSxLQUFLLEtBQUssT0FBTyxVQUFVLFlBQVk7QUFDMUYsb0JBQVEsVUFBVTtBQUFBLFVBQ3RCO0FBQ0EsY0FBSSxnQkFBZ0IsS0FBSyxNQUFNLFNBQVMsS0FBSyxnQkFBZ0IsS0FBSyxNQUFNLE1BQU0sR0FBRztBQUM3RSxnQkFBSSxNQUFNLFFBQVEsR0FBRztBQUNqQixzQkFBUSxJQUFJLElBQUksQ0FBQ0MsU0FBUTtBQUFFLHVCQUFPLE1BQU0sVUFBVUEsSUFBRztBQUFBLGNBQUcsQ0FBQztBQUFBO0FBRXpELHNCQUFRLE1BQU0sVUFBVSxHQUFHO0FBQUEsVUFDbkM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxpQkFBUyxrQkFBa0IsS0FBSyxPQUFPO0FBQ25DLGNBQUksQ0FBQyxjQUFjLCtCQUErQixRQUFRO0FBQ3RELG1CQUFPO0FBQ1gsY0FBSSxDQUFDLGdCQUFnQixLQUFLLE1BQU0sT0FBTyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3JHLGtCQUFNLHFCQUFxQixnQkFBZ0IsS0FBSyxLQUFLLGNBQWMsb0JBQXFCLE9BQU8sY0FBYyxLQUFLLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQy9JLGdCQUFJLHNCQUF1QixDQUFDLFlBQVksS0FBSyxLQUFLLGdCQUFnQixLQUFLLE1BQU0sT0FBTyxHQUFJO0FBQ3BGLHNCQUFRLE9BQU8sS0FBSztBQUFBLFlBQ3hCO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGlCQUFTLFVBQVVDLE9BQU07QUFDckIsZ0JBQU0sZUFBZSx1QkFBTyxPQUFPLElBQUk7QUFDdkMsa0NBQXdCLGNBQWMsTUFBTSxTQUFTLFFBQVE7QUFDN0QsaUJBQU8sS0FBSyxNQUFNLE9BQU8sRUFBRSxRQUFRLFNBQVUsV0FBVztBQUNwRCxrQkFBTSxhQUFhQSxNQUFLLGNBQWMsYUFBYTtBQUNuRCxnQkFBSSxZQUFZO0FBQ1osa0JBQUk7QUFDQSxvQkFBSSxTQUFTO0FBQ2Isc0JBQU0scUJBQXFCLE1BQU0sUUFBUSxNQUFNLElBQUksR0FBRyxVQUFVO0FBQ2hFLHNCQUFNLGdCQUFnQixNQUFNLFFBQVE7QUFDcEMsb0JBQUksT0FBTyxrQkFBa0IsWUFBWTtBQUNyQyxzQkFBSTtBQUNBLDZCQUFTLGNBQWMsa0JBQWtCO0FBQUEsa0JBQzdDLFNBQ08sR0FBUDtBQUNJLDZCQUFTO0FBQUEsa0JBQ2I7QUFDQSxzQkFBSSxrQkFBa0IsT0FBTztBQUN6QixvQkFBQUosU0FBUTtBQUNSO0FBQUEsa0JBQ0o7QUFBQSxnQkFDSixPQUNLO0FBQ0QsMkJBQVMsTUFBTSxRQUFRLGtCQUFrQjtBQUFBLGdCQUM3QztBQUNBLGdDQUFnQixNQUFNO0FBQUEsY0FDMUIsU0FDTyxJQUFQO0FBQ0ksb0JBQUksR0FBRyxTQUFTO0FBQ1osa0JBQUFBLFNBQVE7QUFBQSx5QkFDSEksTUFBSztBQUNWLGtCQUFBSixTQUFRLE1BQU0sR0FBRyxnQ0FBZ0MsVUFBVSxDQUFDO0FBQUEsY0FDcEU7QUFBQSxZQUNKO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLGdCQUFnQixRQUFRLE1BQU07QUFDbkMsaUJBQU8sS0FBSyxNQUFNLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDdkMsa0JBQU0sUUFBUSxPQUFPO0FBQ3JCLGtCQUFNLFVBQVUsT0FBTyxPQUFPLE1BQU0sTUFBTTtBQUMxQyxnQkFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLFFBQVEsQ0FBQyxNQUFNLFFBQVEsS0FBSyxLQUFLLGNBQWMsaUJBQWlCO0FBQ3ZHLDhCQUFnQixPQUFPLE9BQU87QUFBQSxZQUNsQyxPQUNLO0FBQ0Qsa0JBQUksQ0FBQyxPQUFPLE1BQU0sUUFBUSxNQUFNLEdBQUcsQ0FBQyxLQUFNLGdCQUFnQixTQUFTLE1BQU0sTUFBTSxLQUFLLGNBQWMsbUJBQW9CO0FBQ2xILHVCQUFPLFNBQVMsS0FBSztBQUFBLGNBQ3pCO0FBQUEsWUFDSjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyxtQkFBbUI7QUFDeEIsY0FBSSxPQUFPLGtCQUFrQixhQUFhO0FBQ3RDLDBCQUFjLFFBQVEsU0FBVSxjQUFjO0FBQzFDLDhCQUFnQixZQUFZO0FBQUEsWUFDaEMsQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBQ0EsaUJBQVMsYUFBYUksT0FBTSxZQUFZO0FBQ3BDLGNBQUksT0FBTyxjQUFjO0FBQ3JCO0FBQ0osZ0JBQU0sU0FBUyxPQUFPLGNBQWMsV0FBVyxZQUFZO0FBQzNELGdCQUFNQyxPQUFNLE1BQU0sSUFBSTtBQUN0QixpQkFBTyxLQUFLQSxJQUFHLEVBQUUsUUFBUSxTQUFVLFFBQVE7QUFDdkMsZ0JBQUksV0FBVyxNQUFNLE9BQU8sWUFBWSxRQUFRLENBQUMsTUFBTSxHQUFHO0FBQ3RELG9CQUFNLE9BQU8sT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLFNBQVUsS0FBSyxHQUFHO0FBQ2xELG9CQUFJLE1BQU0sR0FBRztBQUNULHdCQUFNLElBQUksVUFBVSxPQUFPLE1BQU07QUFBQSxnQkFDckM7QUFDQSx1QkFBTyxVQUFVLEdBQUc7QUFBQSxjQUN4QixDQUFDO0FBQ0QsbUJBQU0sY0FBYyxNQUFNLFFBQVEsS0FBSyxLQUFLLEdBQUcsTUFBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPRCxPQUFNLElBQUksR0FBRztBQUN2Rix1QkFBTyxLQUFLLEtBQUssR0FBRyxHQUFHQyxLQUFJLE9BQU87QUFBQSxjQUN0QztBQUFBLFlBQ0o7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsZUFBZUQsT0FBTTtBQUMxQixjQUFJO0FBQ0osZ0JBQU0sVUFBVSxvQkFBSSxJQUFJO0FBQ3hCLGlCQUFPLEtBQUtBLEtBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUNyQyxnQkFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLEdBQUc7QUFDbkIsdUJBQVMsZ0JBQWdCLEtBQUssTUFBTSxTQUFTO0FBQzdDLGtCQUFJLE9BQU8sV0FBVyxZQUFZO0FBQzlCLG9CQUFJO0FBQ0Esd0JBQU0sUUFBUSxrQkFBa0IsS0FBSyxPQUFPQSxNQUFLLElBQUksQ0FBQztBQUN0RCxrQkFBQyxDQUFDLEVBQUUsT0FBTyxNQUFNLFFBQVEsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFHLFFBQVEsU0FBTztBQUN0RCw0QkFBUSxJQUFJLEdBQUc7QUFDZixvQkFBQUEsTUFBSyxPQUFPO0FBQUEsa0JBQ2hCLENBQUM7QUFBQSxnQkFDTCxTQUNPLEtBQVA7QUFDSSxrQkFBQUosU0FBUTtBQUFBLGdCQUNaO0FBQUEsY0FDSjtBQUFBLFlBQ0o7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsbUJBQW1CSSxPQUFNO0FBQzlCLGdCQUFNLEtBQUssUUFBUSxDQUFDLFFBQVE7QUFDeEIsZ0JBQUksQ0FBQyxJQUFJLFFBQVEsR0FBRztBQUNoQjtBQUNKLGdCQUFJLE9BQU9BLE1BQUssU0FBUztBQUNyQixjQUFBQSxNQUFLLE9BQU87QUFBQSxVQUNwQixDQUFDO0FBQ0QsaUJBQU9BO0FBQUEsUUFDWDtBQUNBLGlCQUFTLHdCQUF3QixLQUFLRSxVQUFTQyxXQUFVLFNBQVMsT0FBTztBQUNyRSxpQkFBTyxLQUFLQSxTQUFRLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFDekMsZ0JBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHO0FBQzlCLHFCQUFPLEtBQUssSUFBSSxNQUFNLEdBQUcsR0FBR0EsVUFBUyxJQUFJO0FBQ3pDLGtCQUFJO0FBQ0EsMEJBQVUsT0FBTztBQUNyQixlQUFDRCxTQUFRLFFBQVEsQ0FBQyxHQUFHLFFBQVEsU0FBVSxHQUFHO0FBQ3RDLG9CQUFJLE9BQU8sS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ3hCO0FBQ0osdUJBQU8sS0FBSyxFQUFFLE1BQU0sR0FBRyxHQUFHQyxVQUFTLElBQUk7QUFBQSxjQUMzQyxDQUFDO0FBQUEsWUFDTDtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyxPQUFPLEtBQUssTUFBTTtBQUN2QixjQUFJLElBQUk7QUFDUixjQUFJLENBQUMsY0FBYztBQUNmLG1CQUFPLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUMxQixlQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsUUFBUSxTQUFVUixNQUFLO0FBQ3JDLGdCQUFLLEVBQUVBLFNBQVEsQ0FBQztBQUFBLFVBQ3BCLENBQUM7QUFDRCxnQkFBTSxNQUFNLEtBQUssS0FBSyxTQUFTO0FBQy9CLGNBQUksT0FBTyxNQUFNO0FBQ2IsbUJBQU87QUFBQTtBQUVQLG1CQUFPLE9BQU87QUFBQSxRQUN0QjtBQUNBLGlCQUFTLE9BQU8sS0FBSyxNQUFNLE9BQU87QUFDOUIsY0FBSSxJQUFJO0FBQ1IsY0FBSSxDQUFDLGNBQWM7QUFDZixtQkFBTyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDMUIsZUFBSyxNQUFNLEdBQUcsRUFBRSxFQUFFLFFBQVEsU0FBVUEsTUFBSztBQUNyQyxZQUFBQSxPQUFNLFlBQVlBLElBQUc7QUFDckIsZ0JBQUksT0FBTyxNQUFNLFlBQVksRUFBRUEsVUFBUyxRQUFXO0FBQy9DLGdCQUFFQSxRQUFPLENBQUM7QUFBQSxZQUNkO0FBQ0EsZ0JBQUksT0FBTyxFQUFFQSxVQUFTLFlBQVksTUFBTSxRQUFRLEVBQUVBLEtBQUksR0FBRztBQUNyRCxrQkFBSSxNQUFNLFFBQVEsRUFBRUEsS0FBSSxHQUFHO0FBQ3ZCLGtCQUFFQSxNQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsY0FDbEIsT0FDSztBQUNELGtCQUFFQSxRQUFPLENBQUMsRUFBRUEsT0FBTSxDQUFDLENBQUM7QUFBQSxjQUN4QjtBQUNBLGtCQUFJLEVBQUVBLE1BQUssRUFBRUEsTUFBSyxTQUFTO0FBQUEsWUFDL0IsT0FDSztBQUNELGtCQUFJLEVBQUVBO0FBQUEsWUFDVjtBQUFBLFVBQ0osQ0FBQztBQUNELGdCQUFNLE1BQU0sWUFBWSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQzdDLGdCQUFNLGNBQWMsZ0JBQWdCLEtBQUssS0FBSyxHQUFHLEdBQUcsTUFBTSxNQUFNO0FBQ2hFLGdCQUFNLGVBQWUsTUFBTSxRQUFRLEtBQUs7QUFDeEMsY0FBSSxZQUFZLGNBQWM7QUFDOUIsY0FBSSxDQUFDLGFBQWEsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFDakQsd0JBQVk7QUFDWixnQkFBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEtBQUssTUFBTSxNQUFNLFNBQVMsS0FBTyxNQUFNLFFBQVEsRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLFdBQVcsTUFBTSxNQUFNLE1BQU87QUFDbkgsZ0JBQUUsT0FBTztBQUFBLFlBQ2I7QUFBQSxVQUNKO0FBQ0EsY0FBSSxVQUFVLFVBQVUsR0FBRztBQUN2QixjQUFFLE9BQU8sVUFBVSxFQUFFLElBQUk7QUFBQSxVQUM3QixXQUNTLE1BQU0sUUFBUSxFQUFFLElBQUksR0FBRztBQUM1QixnQkFBSSxhQUFhLGVBQWUsY0FBYztBQUMxQyxnQkFBRSxPQUFPLGNBQWMsOEJBQThCLEVBQUUsS0FBSyxPQUFPLEtBQUssS0FBSyxNQUFNLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQUEsWUFDN0ksV0FDUyxDQUFDLGFBQWEsUUFBUSxXQUFXLE1BQU0sUUFBUSxZQUFZLEdBQUc7QUFDbkUsZ0JBQUUsT0FBTztBQUFBLFlBQ2IsT0FDSztBQUNELGdCQUFFLE9BQU8sRUFBRSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFBQSxZQUNsQztBQUFBLFVBQ0osV0FDUyxFQUFFLFNBQVMsVUFBYSxhQUFhO0FBQzFDLGNBQUUsT0FBTyxlQUFlLFFBQVEsQ0FBQyxLQUFLO0FBQUEsVUFDMUMsV0FDUyxhQUFhLEVBQUUsRUFBRSxTQUFTLFVBQy9CLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxLQUNqQyxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssSUFBSTtBQUNwQyxjQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSztBQUFBLFVBQzNCLE9BQ0s7QUFDRCxjQUFFLE9BQU87QUFBQSxVQUNiO0FBQUEsUUFDSjtBQUNBLGlCQUFTLGlCQUFpQkUsT0FBTTtBQUM1QixVQUFBQSxNQUFLLFFBQVEsU0FBVSxLQUFLO0FBQ3hCLG1CQUFPLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUMxQyxrQkFBSSxNQUFNLFFBQVE7QUFDZDtBQUNKLG9CQUFNLFFBQVEsT0FBTyxDQUFDLEVBQUUsT0FBTyxRQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELG9CQUFNLFFBQVEsS0FBSyxPQUFPLEdBQUcsRUFBRSxRQUFRLFNBQVUsR0FBRztBQUNoRCxvQkFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLGNBQWMseUJBQXlCO0FBQ3RELHdCQUFNLElBQUksVUFBVSxDQUFDO0FBQ3JCLHNCQUFJLE1BQU0sT0FBTyxNQUFNLFFBQVEsS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJO0FBQ25ELDBCQUFNLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFDekIsK0JBQVcsS0FBSztBQUFBLGtCQUNwQjtBQUFBLGdCQUNKO0FBQUEsY0FDSixDQUFDO0FBQ0Qsb0JBQU0sUUFBUSxLQUFLLE9BQU8sR0FBRyxFQUFFLFFBQVEsU0FBVSxHQUFHO0FBQ2hELG9CQUFJLEVBQUUsU0FBUyxLQUFLLFFBQVEsS0FBSyxDQUFDLEtBQUssY0FBYyx5QkFBeUI7QUFDMUUsd0JBQU0sSUFBSSxXQUFXLEdBQUcsR0FBRztBQUMzQixzQkFBSSxNQUFNLE9BQU8sTUFBTSxRQUFRLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSTtBQUNuRCwwQkFBTSxRQUFRLEtBQUssS0FBSyxDQUFDO0FBQ3pCLCtCQUFXLEtBQUs7QUFBQSxrQkFDcEI7QUFBQSxnQkFDSjtBQUFBLGNBQ0osQ0FBQztBQUNELG9CQUFNLFFBQVEsS0FBSyxRQUFRLFNBQVUsR0FBRztBQUNwQyxzQkFBTSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLFFBQVEsS0FBSyxPQUFPLFNBQVUsR0FBRztBQUNuRSx5QkFBTyxNQUFNO0FBQUEsZ0JBQ2pCLENBQUMsQ0FBQztBQUFBLGNBQ04sQ0FBQztBQUFBLFlBQ0wsQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyxnQkFBZ0IsS0FBSyxNQUFNO0FBQ2hDLGdCQUFNLFVBQVUsQ0FBQyxFQUFFLE9BQU8sTUFBTSxRQUFRLFFBQVEsQ0FBQyxHQUFHLEdBQUc7QUFDdkQsZ0JBQU0sT0FBTyxPQUFPLEtBQUssSUFBSTtBQUM3QixnQkFBTSxXQUFXLFFBQVEsS0FBSyxDQUFBRixTQUFPLEtBQUssU0FBU0EsSUFBRyxDQUFDO0FBQ3ZELGlCQUFPLFdBQVcsS0FBSyxZQUFZO0FBQUEsUUFDdkM7QUFDQSxpQkFBUyxXQUFXLEtBQUs7QUFDckIsZ0JBQU0sWUFBWSxPQUFPLEtBQUssS0FBSztBQUNuQyxnQkFBTSxVQUFVLENBQUMsRUFBRSxPQUFPLFVBQVUsSUFBSSxPQUFLLE1BQU0sRUFBRSxDQUFDO0FBQ3RELGlCQUFPLFFBQVEsS0FBSyxTQUFVLE1BQU07QUFDaEMsbUJBQU8sTUFBTSxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRyxJQUFJLEtBQUs7QUFBQSxVQUMzRCxDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLGlCQUFpQixRQUFRLFVBQVU7QUFDeEMsZ0JBQU0sVUFBVSxDQUFDLEVBQUUsT0FBTyxHQUFHLFFBQVE7QUFDckMsaUJBQU8sUUFBUSxLQUFLLFNBQVUsU0FBUztBQUNuQyxrQkFBTSxRQUFRLElBQUksTUFBTSxPQUFPO0FBQy9CLG1CQUFPLFNBQVMsV0FBVyxNQUFNLEVBQUU7QUFBQSxVQUN2QyxDQUFDO0FBQUEsUUFDTDtBQUNBLGlCQUFTLGlCQUFpQixLQUFLO0FBQzNCLGNBQUksSUFBSSxNQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksTUFBTSxTQUFTLEdBQUc7QUFDOUMsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxjQUFjO0FBQ2xCLGNBQUk7QUFDSixnQkFBTSxVQUFVLElBQUksTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQ3JDLG1CQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3JDLG1CQUFPLElBQUksTUFBTSxJQUFJLENBQUM7QUFDdEIsZ0JBQUksQ0FBQyxXQUFXLFFBQVEsRUFBRSxHQUFHO0FBQ3pCLDRCQUFjO0FBQ2Q7QUFBQSxZQUNKO0FBQ0EsZ0JBQUssUUFBUSxJQUFJLE1BQU0sUUFBUSxJQUFJLE9BQU8sT0FDdEMsU0FBUyxPQUNSLFdBQVcsS0FBSyxRQUFRLEVBQUUsS0FBSywyQkFBMkIsS0FBSyxJQUFJLEtBQ25FLFFBQVEsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHLE1BQU0sSUFBSSxHQUFJO0FBQ2hEO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxpQkFBUyxxQkFBcUIsS0FBSztBQUMvQixpQkFBTyxjQUFjLDhCQUE4QixnQkFBZ0IsR0FBRztBQUFBLFFBQzFFO0FBQ0EsaUJBQVMsZ0JBQWdCLEtBQUs7QUFDMUIsZ0JBQU0sSUFBSSxRQUFRLFVBQVUsSUFBSTtBQUNoQyxjQUFJLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDckIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxpQkFBaUIsR0FBRyxHQUFHO0FBQ3ZCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLGlCQUFpQjtBQUN2QixnQkFBTSxhQUFhO0FBQ25CLGdCQUFNLHFCQUFxQjtBQUMzQixnQkFBTSxxQkFBcUI7QUFDM0IsZ0JBQU0sZ0NBQWdDO0FBQ3RDLGlCQUFPLENBQUMsaUJBQWlCLEtBQUssZ0JBQWdCLGdCQUFnQixZQUFZLG9CQUFvQixvQkFBb0IsNkJBQTZCO0FBQUEsUUFDbko7QUFDQSxpQkFBUyxhQUFhLEtBQUs7QUFDdkIsY0FBSSxDQUFDLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxLQUNqQyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxLQUNsQyxHQUFHLFNBQVMsVUFBVTtBQUN0QixtQkFBTyxTQUFTO0FBQUEsVUFDcEIsT0FDSztBQUNELG1CQUFPLGVBQWUsVUFBVSxHQUFHLENBQUM7QUFBQSxVQUN4QztBQUFBLFFBQ0o7QUFDQSxpQkFBUyxlQUFlLE1BQU07QUFDMUIsZ0JBQU0sTUFBTTtBQUFBLFlBQ1IsQ0FBQyx3QkFBd0IsVUFBVTtBQUFBLFlBQ25DLENBQUMsd0JBQXdCLFNBQVM7QUFBQSxZQUNsQyxDQUFDLHdCQUF3QixTQUFTO0FBQUEsWUFDbEMsQ0FBQyx3QkFBd0IsUUFBUSxDQUFDO0FBQUEsVUFDdEM7QUFDQSxpQkFBTyxJQUFJO0FBQUEsUUFDZjtBQUNBLGlCQUFTLFVBQVUsS0FBSztBQUNwQixjQUFJLE9BQU8sd0JBQXdCO0FBQ25DLGNBQUksZ0JBQWdCLEtBQUssTUFBTSxPQUFPO0FBQ2xDLG1CQUFPLHdCQUF3QjtBQUFBLG1CQUMxQixnQkFBZ0IsS0FBSyxNQUFNLE9BQU87QUFDdkMsbUJBQU8sd0JBQXdCO0FBQUEsbUJBQzFCLGdCQUFnQixLQUFLLE1BQU0sS0FBSztBQUNyQyxtQkFBTyx3QkFBd0I7QUFBQSxtQkFDMUIsZ0JBQWdCLEtBQUssTUFBTSxNQUFNO0FBQ3RDLG1CQUFPLHdCQUF3QjtBQUNuQyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxpQkFBUyxZQUFZLEtBQUs7QUFDdEIsaUJBQU8sUUFBUTtBQUFBLFFBQ25CO0FBQ0EsaUJBQVMscUJBQXFCO0FBQzFCLGlCQUFPLEtBQUssTUFBTSxNQUFNLEVBQUUsS0FBSyxTQUFPO0FBQ2xDLGdCQUFJLGdCQUFnQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQ3BDLGNBQUFDLFNBQVEsTUFBTSxHQUFHLDhEQUE4RCxHQUFHLENBQUM7QUFDbkYscUJBQU87QUFBQSxZQUNYLFdBQ1MsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLEdBQUc7QUFDeEMsY0FBQUEsU0FBUSxNQUFNLEdBQUcsNkRBQTZELEdBQUcsQ0FBQztBQUNsRixxQkFBTztBQUFBLFlBQ1g7QUFDQSxtQkFBTztBQUFBLFVBQ1gsQ0FBQztBQUFBLFFBQ0w7QUFDQSxlQUFPO0FBQUEsVUFDSCxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPO0FBQUEsVUFDeEMsTUFBTSxPQUFPLE9BQU8sWUFBWSxJQUFJO0FBQUEsVUFDcEM7QUFBQSxVQUNBLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQUEsVUFDdEMsT0FBT0E7QUFBQSxVQUNQLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxVQUFVO0FBQUEsUUFDNUM7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBLGFBQVMsZUFBZSxTQUFTO0FBQzdCLFlBQU0sY0FBYyxDQUFDO0FBQ3JCLFlBQU0sV0FBVyx1QkFBTyxPQUFPLElBQUk7QUFDbkMsVUFBSSxTQUFTO0FBQ2IsYUFBTyxLQUFLLE9BQU8sRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN4QyxvQkFBWSxLQUFLLENBQUMsRUFBRSxPQUFPLFFBQVEsTUFBTSxHQUFHLENBQUM7QUFBQSxNQUNqRCxDQUFDO0FBQ0QsYUFBTyxRQUFRO0FBQ1gsaUJBQVM7QUFDVCxpQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLFFBQVEsS0FBSztBQUN6QyxtQkFBUyxLQUFLLElBQUksR0FBRyxLQUFLLFlBQVksUUFBUSxNQUFNO0FBQ2hELGtCQUFNLFlBQVksWUFBWSxHQUFHLE9BQU8sU0FBVSxHQUFHO0FBQ2pELHFCQUFPLFlBQVksSUFBSSxRQUFRLENBQUMsTUFBTTtBQUFBLFlBQzFDLENBQUM7QUFDRCxnQkFBSSxVQUFVLFFBQVE7QUFDbEIsMEJBQVksS0FBSyxZQUFZLEdBQUcsT0FBTyxZQUFZLEdBQUc7QUFDdEQsMEJBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsdUJBQVM7QUFDVDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxrQkFBWSxRQUFRLFNBQVUsWUFBWTtBQUN0QyxxQkFBYSxXQUFXLE9BQU8sU0FBVSxHQUFHLEdBQUdRLE9BQU07QUFDakQsaUJBQU9BLE1BQUssUUFBUSxDQUFDLE1BQU07QUFBQSxRQUMvQixDQUFDO0FBQ0QsY0FBTSxZQUFZLFdBQVcsSUFBSTtBQUNqQyxZQUFJLGNBQWMsVUFBYSxPQUFPLGNBQWMsVUFBVTtBQUMxRCxtQkFBUyxhQUFhO0FBQUEsUUFDMUI7QUFBQSxNQUNKLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDWDtBQUNBLGFBQVMsVUFBVSxNQUFNO0FBQ3JCLGFBQU8sU0FBUyxTQUFZLE9BQU8sSUFBSTtBQUFBLElBQzNDO0FBQ0EsYUFBUyxZQUFZLEtBQUs7QUFDdEIsVUFBSSxRQUFRO0FBQ1IsZUFBTztBQUNYLGFBQU87QUFBQSxJQUNYO0FBRUEsUUFBTSxpQkFBa0IsV0FBVyxRQUFRLE9BQU8sUUFBUSxJQUFJLHlCQUN4RCxPQUFPLFFBQVEsSUFBSSxzQkFBc0IsSUFDekM7QUFDTixRQUFJLFdBQVcsUUFBUSxTQUFTO0FBQzVCLFlBQU0sUUFBUSxPQUFPLFFBQVEsUUFBUSxNQUFNLFVBQVUsRUFBRSxFQUFFO0FBQ3pELFVBQUksUUFBUSxnQkFBZ0I7QUFDeEIsY0FBTSxNQUFNLHNEQUFzRCxrSEFBa0g7QUFBQSxNQUN4TDtBQUFBLElBQ0o7QUFDQSxRQUFNLE1BQU0sVUFBVSxRQUFRLE1BQU0sQ0FBQztBQUNyQyxRQUFNLFNBQVMsSUFBSSxZQUFZO0FBQUEsTUFDM0IsS0FBSyxRQUFRO0FBQUEsTUFDYixLQUFLLE1BQU07QUFDUCxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsUUFBUWIsTUFBSztBQUFBLE1BQ2IsV0FBV0UsTUFBSztBQUFBLE1BQ2hCLFNBQVNBLE1BQUs7QUFBQSxNQUNkLFNBQVMsQ0FBQ0EsVUFBUztBQUNmLFlBQUksT0FBTyxZQUFZLGFBQWE7QUFDaEMsaUJBQU8sUUFBUUE7QUFBQSxRQUNuQixXQUNTQSxNQUFLLE1BQU0sU0FBUyxHQUFHO0FBQzVCLGlCQUFPRCxJQUFHLGFBQWFDLE9BQU0sTUFBTTtBQUFBLFFBQ3ZDLE9BQ0s7QUFDRCxnQkFBTSxNQUFNLDhDQUE4QztBQUFBLFFBQzlEO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUNELFFBQU0sY0FBYyxTQUFTLE9BQU8sTUFBTSxNQUFNO0FBQzVDLFlBQU0sU0FBUyxPQUFPLE1BQU0sS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUM5QyxhQUFPLE9BQU87QUFBQSxJQUNsQjtBQUNBLGdCQUFZLFdBQVcsU0FBVSxNQUFNLE1BQU07QUFDekMsYUFBTyxPQUFPLE1BQU0sS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQzFDO0FBQ0EsZ0JBQVksWUFBWTtBQUN4QixnQkFBWSxhQUFhO0FBQ3pCLGdCQUFZLGtCQUFrQjtBQUU5QixJQUFBSCxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNqaENqQjtBQUFBLDhDQUFBZSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVUsQ0FBQyxFQUFDLFlBQVksTUFBSyxJQUFJLENBQUMsTUFBTTtBQUM5QyxZQUFNLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLE1BQ0QsRUFBRSxLQUFLLEdBQUc7QUFFVixhQUFPLElBQUksT0FBTyxTQUFTLFlBQVksU0FBWSxHQUFHO0FBQUEsSUFDdkQ7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDhDQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLFlBQVk7QUFFbEIsSUFBQUEsUUFBTyxVQUFVLFlBQVUsT0FBTyxXQUFXLFdBQVcsT0FBTyxRQUFRLFVBQVUsR0FBRyxFQUFFLElBQUk7QUFBQTtBQUFBOzs7QUNIMUY7QUFBQSwyREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBR0EsUUFBTSx1QkFBdUIsZUFBYTtBQUN6QyxVQUFJLE9BQU8sTUFBTSxTQUFTLEdBQUc7QUFDNUIsZUFBTztBQUFBLE1BQ1I7QUFJQSxVQUNDLGFBQWEsU0FDWixhQUFhLFFBQ2IsY0FBYyxRQUNkLGNBQWMsUUFFYixTQUFVLGFBQWEsYUFBYSxTQUFVLGNBQWMsU0FFNUQsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FFcEMsVUFBVyxhQUFhLGFBQWEsVUFFckMsVUFBVyxhQUFhLGFBQWEsVUFFckMsVUFBVyxhQUFhLGFBQWEsU0FFdEM7QUFDRCxlQUFPO0FBQUEsTUFDUjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQ2pCLElBQUFBLFFBQU8sUUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDakR6QjtBQUFBLCtDQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVUsV0FBWTtBQUUzQixhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ0xBO0FBQUEsZ0RBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQU0sWUFBWTtBQUNsQixRQUFNLHVCQUF1QjtBQUM3QixRQUFNLGFBQWE7QUFFbkIsUUFBTSxjQUFjLFlBQVU7QUFDN0IsVUFBSSxPQUFPLFdBQVcsWUFBWSxPQUFPLFdBQVcsR0FBRztBQUN0RCxlQUFPO0FBQUEsTUFDUjtBQUVBLGVBQVMsVUFBVSxNQUFNO0FBRXpCLFVBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEIsZUFBTztBQUFBLE1BQ1I7QUFFQSxlQUFTLE9BQU8sUUFBUSxXQUFXLEdBQUcsSUFBSTtBQUUxQyxVQUFJLFFBQVE7QUFFWixlQUFTLElBQUksR0FBRyxJQUFJLE9BQU8sUUFBUSxLQUFLO0FBQ3ZDLGNBQU0sT0FBTyxPQUFPLFlBQVksQ0FBQztBQUdqQyxZQUFJLFFBQVEsTUFBUyxRQUFRLE9BQVEsUUFBUSxLQUFPO0FBQ25EO0FBQUEsUUFDRDtBQUdBLFlBQUksUUFBUSxPQUFTLFFBQVEsS0FBTztBQUNuQztBQUFBLFFBQ0Q7QUFHQSxZQUFJLE9BQU8sT0FBUTtBQUNsQjtBQUFBLFFBQ0Q7QUFFQSxpQkFBUyxxQkFBcUIsSUFBSSxJQUFJLElBQUk7QUFBQSxNQUMzQztBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBRWpCLElBQUFBLFFBQU8sUUFBUSxVQUFVO0FBQUE7QUFBQTs7O0FDOUN6QjtBQUFBLDZDQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFNLGNBQWM7QUFDcEIsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sYUFBYTtBQUVuQixRQUFNLFVBQVUsb0JBQUksSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsTUFDQTtBQUFBLElBQ0QsQ0FBQztBQUVELFFBQU0sV0FBVztBQUVqQixRQUFNLG1CQUFtQjtBQUN6QixRQUFNLFdBQVc7QUFDakIsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sbUJBQW1CLEdBQUc7QUFFNUIsUUFBTSxXQUFXLFVBQVEsR0FBRyxRQUFRLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxXQUFXLE9BQU87QUFDOUUsUUFBTSxvQkFBb0IsU0FBTyxHQUFHLFFBQVEsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLG1CQUFtQixNQUFNO0FBSTdGLFFBQU0sY0FBYyxZQUFVLE9BQU8sTUFBTSxHQUFHLEVBQUUsSUFBSSxlQUFhLFlBQVksU0FBUyxDQUFDO0FBSXZGLFFBQU0sV0FBVyxDQUFDLE1BQU0sTUFBTSxZQUFZO0FBQ3pDLFlBQU0sYUFBYSxDQUFDLEdBQUcsSUFBSTtBQUUzQixVQUFJLGlCQUFpQjtBQUNyQixVQUFJLHFCQUFxQjtBQUN6QixVQUFJLFVBQVUsWUFBWSxVQUFVLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztBQUUxRCxpQkFBVyxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsUUFBUSxHQUFHO0FBQ3RELGNBQU0sa0JBQWtCLFlBQVksU0FBUztBQUU3QyxZQUFJLFVBQVUsbUJBQW1CLFNBQVM7QUFDekMsZUFBSyxLQUFLLFNBQVMsTUFBTTtBQUFBLFFBQzFCLE9BQU87QUFDTixlQUFLLEtBQUssU0FBUztBQUNuQixvQkFBVTtBQUFBLFFBQ1g7QUFFQSxZQUFJLFFBQVEsSUFBSSxTQUFTLEdBQUc7QUFDM0IsMkJBQWlCO0FBQ2pCLCtCQUFxQixXQUFXLE1BQU0sUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxnQkFBZ0I7QUFBQSxRQUN0RjtBQUVBLFlBQUksZ0JBQWdCO0FBQ25CLGNBQUksb0JBQW9CO0FBQ3ZCLGdCQUFJLGNBQWMsa0JBQWtCO0FBQ25DLCtCQUFpQjtBQUNqQixtQ0FBcUI7QUFBQSxZQUN0QjtBQUFBLFVBQ0QsV0FBVyxjQUFjLHFCQUFxQjtBQUM3Qyw2QkFBaUI7QUFBQSxVQUNsQjtBQUVBO0FBQUEsUUFDRDtBQUVBLG1CQUFXO0FBRVgsWUFBSSxZQUFZLFdBQVcsUUFBUSxXQUFXLFNBQVMsR0FBRztBQUN6RCxlQUFLLEtBQUssRUFBRTtBQUNaLG9CQUFVO0FBQUEsUUFDWDtBQUFBLE1BQ0Q7QUFJQSxVQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssU0FBUyxHQUFHLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FBRztBQUNwRSxhQUFLLEtBQUssU0FBUyxNQUFNLEtBQUssSUFBSTtBQUFBLE1BQ25DO0FBQUEsSUFDRDtBQUdBLFFBQU0sK0JBQStCLFlBQVU7QUFDOUMsWUFBTSxRQUFRLE9BQU8sTUFBTSxHQUFHO0FBQzlCLFVBQUksT0FBTyxNQUFNO0FBRWpCLGFBQU8sT0FBTyxHQUFHO0FBQ2hCLFlBQUksWUFBWSxNQUFNLE9BQU8sRUFBRSxJQUFJLEdBQUc7QUFDckM7QUFBQSxRQUNEO0FBRUE7QUFBQSxNQUNEO0FBRUEsVUFBSSxTQUFTLE1BQU0sUUFBUTtBQUMxQixlQUFPO0FBQUEsTUFDUjtBQUVBLGFBQU8sTUFBTSxNQUFNLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU0sTUFBTSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQUEsSUFDbEU7QUFPQSxRQUFNLE9BQU8sQ0FBQyxRQUFRLFNBQVMsVUFBVSxDQUFDLE1BQU07QUFDL0MsVUFBSSxRQUFRLFNBQVMsU0FBUyxPQUFPLEtBQUssTUFBTSxJQUFJO0FBQ25ELGVBQU87QUFBQSxNQUNSO0FBRUEsVUFBSSxjQUFjO0FBQ2xCLFVBQUk7QUFDSixVQUFJO0FBRUosWUFBTSxVQUFVLFlBQVksTUFBTTtBQUNsQyxVQUFJLE9BQU8sQ0FBQyxFQUFFO0FBRWQsaUJBQVcsQ0FBQyxPQUFPLElBQUksS0FBSyxPQUFPLE1BQU0sR0FBRyxFQUFFLFFBQVEsR0FBRztBQUN4RCxZQUFJLFFBQVEsU0FBUyxPQUFPO0FBQzNCLGVBQUssS0FBSyxTQUFTLEtBQUssS0FBSyxLQUFLLFNBQVMsR0FBRyxVQUFVO0FBQUEsUUFDekQ7QUFFQSxZQUFJLFlBQVksWUFBWSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBRWpELFlBQUksVUFBVSxHQUFHO0FBQ2hCLGNBQUksYUFBYSxZQUFZLFFBQVEsYUFBYSxTQUFTLFFBQVEsU0FBUyxRQUFRO0FBRW5GLGlCQUFLLEtBQUssRUFBRTtBQUNaLHdCQUFZO0FBQUEsVUFDYjtBQUVBLGNBQUksWUFBWSxLQUFLLFFBQVEsU0FBUyxPQUFPO0FBQzVDLGlCQUFLLEtBQUssU0FBUyxNQUFNO0FBQ3pCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFHQSxZQUFJLFFBQVEsUUFBUSxRQUFRLFNBQVMsU0FBUztBQUM3QyxnQkFBTSxtQkFBb0IsVUFBVTtBQUNwQyxnQkFBTSx5QkFBeUIsSUFBSSxLQUFLLE9BQU8sUUFBUSxTQUFTLG1CQUFtQixLQUFLLE9BQU87QUFDL0YsZ0JBQU0seUJBQXlCLEtBQUssT0FBTyxRQUFRLFNBQVMsS0FBSyxPQUFPO0FBQ3hFLGNBQUkseUJBQXlCLHdCQUF3QjtBQUNwRCxpQkFBSyxLQUFLLEVBQUU7QUFBQSxVQUNiO0FBRUEsbUJBQVMsTUFBTSxNQUFNLE9BQU87QUFDNUI7QUFBQSxRQUNEO0FBRUEsWUFBSSxZQUFZLFFBQVEsU0FBUyxXQUFXLFlBQVksS0FBSyxRQUFRLFNBQVMsR0FBRztBQUNoRixjQUFJLFFBQVEsYUFBYSxTQUFTLFlBQVksU0FBUztBQUN0RCxxQkFBUyxNQUFNLE1BQU0sT0FBTztBQUM1QjtBQUFBLFVBQ0Q7QUFFQSxlQUFLLEtBQUssRUFBRTtBQUFBLFFBQ2I7QUFFQSxZQUFJLFlBQVksUUFBUSxTQUFTLFdBQVcsUUFBUSxhQUFhLE9BQU87QUFDdkUsbUJBQVMsTUFBTSxNQUFNLE9BQU87QUFDNUI7QUFBQSxRQUNEO0FBRUEsYUFBSyxLQUFLLFNBQVMsTUFBTTtBQUFBLE1BQzFCO0FBRUEsVUFBSSxRQUFRLFNBQVMsT0FBTztBQUMzQixlQUFPLEtBQUssSUFBSSw0QkFBNEI7QUFBQSxNQUM3QztBQUVBLFlBQU0sTUFBTSxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQztBQUUvQixpQkFBVyxDQUFDLE9BQU8sU0FBUyxLQUFLLElBQUksUUFBUSxHQUFHO0FBQy9DLHVCQUFlO0FBRWYsWUFBSSxRQUFRLElBQUksU0FBUyxHQUFHO0FBQzNCLGdCQUFNLEVBQUMsT0FBTSxJQUFJLElBQUksT0FBTyxRQUFRLDRCQUE0Qiw2QkFBNkIsbUJBQW1CLEVBQUUsS0FBSyxJQUFJLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBQyxRQUFRLENBQUMsRUFBQztBQUNoSyxjQUFJLE9BQU8sU0FBUyxRQUFXO0FBQzlCLGtCQUFNQyxRQUFPLE9BQU8sV0FBVyxPQUFPLElBQUk7QUFDMUMseUJBQWFBLFVBQVMsV0FBVyxTQUFZQTtBQUFBLFVBQzlDLFdBQVcsT0FBTyxRQUFRLFFBQVc7QUFDcEMsd0JBQVksT0FBTyxJQUFJLFdBQVcsSUFBSSxTQUFZLE9BQU87QUFBQSxVQUMxRDtBQUFBLFFBQ0Q7QUFFQSxjQUFNLE9BQU8sV0FBVyxNQUFNLElBQUksT0FBTyxVQUFVLENBQUM7QUFFcEQsWUFBSSxJQUFJLFFBQVEsT0FBTyxNQUFNO0FBQzVCLGNBQUksV0FBVztBQUNkLDJCQUFlLGtCQUFrQixFQUFFO0FBQUEsVUFDcEM7QUFFQSxjQUFJLGNBQWMsTUFBTTtBQUN2QiwyQkFBZSxTQUFTLElBQUk7QUFBQSxVQUM3QjtBQUFBLFFBQ0QsV0FBVyxjQUFjLE1BQU07QUFDOUIsY0FBSSxjQUFjLE1BQU07QUFDdkIsMkJBQWUsU0FBUyxVQUFVO0FBQUEsVUFDbkM7QUFFQSxjQUFJLFdBQVc7QUFDZCwyQkFBZSxrQkFBa0IsU0FBUztBQUFBLFVBQzNDO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFQSxhQUFPO0FBQUEsSUFDUjtBQUdBLElBQUFELFFBQU8sVUFBVSxDQUFDLFFBQVEsU0FBUyxZQUFZO0FBQzlDLGFBQU8sT0FBTyxNQUFNLEVBQ2xCLFVBQVUsRUFDVixRQUFRLFNBQVMsSUFBSSxFQUNyQixNQUFNLElBQUksRUFDVixJQUFJLFVBQVEsS0FBSyxNQUFNLFNBQVMsT0FBTyxDQUFDLEVBQ3hDLEtBQUssSUFBSTtBQUFBLElBQ1o7QUFBQTtBQUFBOzs7QUN2TkEsSUFBQUUsaUJBQUE7QUFBQSxnREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBTSxRQUFRO0FBQUEsTUFDVixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsSUFDWjtBQUNBLFFBQU0sTUFBTTtBQUNaLFFBQU0sUUFBUTtBQUNkLFFBQU0sU0FBUztBQUNmLFFBQU0sT0FBTztBQUNiLFFBQU0sS0FBTixNQUFTO0FBQUEsTUFDTCxZQUFZLE1BQU07QUFDZCxZQUFJO0FBQ0osYUFBSyxRQUFRLEtBQUs7QUFDbEIsYUFBSyxRQUFRLEtBQUssS0FBSyxVQUFVLFFBQVEsT0FBTyxTQUFTLEtBQUs7QUFDOUQsYUFBSyxPQUFPLENBQUM7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsUUFBUSxNQUFNO0FBQ1YsY0FBTSxPQUFPLEtBQUssSUFBSSxHQUFHLElBQUk7QUFDN0IsYUFBSyxPQUFPO0FBQUEsTUFDaEI7QUFBQSxNQUNBLGNBQWM7QUFDVixhQUFLLE9BQU8sQ0FBQztBQUFBLE1BQ2pCO0FBQUEsTUFDQSxPQUFPLE1BQU07QUFDVCxZQUFJLEtBQUssV0FBVyxHQUFHO0FBQ25CLGVBQUssSUFBSSxFQUFFO0FBQUEsUUFDZjtBQUNBLFlBQUksS0FBSyxRQUFRLEtBQUsscUJBQXFCLEdBQUcsSUFBSSxLQUFLLE9BQU8sS0FBSyxPQUFPLFVBQVU7QUFDaEYsaUJBQU8sS0FBSyxlQUFlLEtBQUssRUFBRTtBQUFBLFFBQ3RDO0FBQ0EsY0FBTSxPQUFPLEtBQUssSUFBSSxTQUFPO0FBQ3pCLGNBQUksT0FBTyxRQUFRLFVBQVU7QUFDekIsbUJBQU8sS0FBSyxjQUFjLEdBQUc7QUFBQSxVQUNqQztBQUNBLGlCQUFPO0FBQUEsUUFDWCxDQUFDO0FBQ0QsYUFBSyxLQUFLLEtBQUssSUFBSTtBQUNuQixlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0Esd0JBQXdCLE1BQU07QUFDMUIsZUFBTyxLQUFLLFdBQVcsS0FBSyxPQUFPLEtBQUssT0FBTyxZQUMzQyxTQUFTLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDN0I7QUFBQSxNQUNBLGVBQWUsS0FBSztBQUNoQixjQUFNLE9BQU8sSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLFNBQU8sSUFBSSxNQUFNLEdBQUksQ0FBQztBQUN2RCxZQUFJLGtCQUFrQjtBQUt0QixhQUFLLFFBQVEsYUFBVztBQUNwQixjQUFJLFFBQVEsU0FBUyxLQUFLLE1BQU0sWUFBWSxRQUFRLEVBQUUsSUFBSSxpQkFBaUI7QUFDdkUsOEJBQWtCLEtBQUssSUFBSSxLQUFLLE1BQU0sS0FBSyxRQUFRLEdBQUcsR0FBRyxNQUFNLFlBQVksUUFBUSxFQUFFLENBQUM7QUFBQSxVQUMxRjtBQUFBLFFBQ0osQ0FBQztBQUlELGFBQUssUUFBUSxhQUFXO0FBQ3BCLGVBQUssSUFBSSxHQUFHLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTTtBQUM5QixtQkFBTztBQUFBLGNBQ0gsTUFBTSxFQUFFLEtBQUs7QUFBQSxjQUNiLFNBQVMsS0FBSyxlQUFlLENBQUM7QUFBQSxjQUM5QixPQUFRLE1BQU0sS0FBSyxRQUFRLFNBQVMsSUFBSyxrQkFBa0I7QUFBQSxZQUMvRDtBQUFBLFVBQ0osQ0FBQyxDQUFDO0FBQUEsUUFDTixDQUFDO0FBQ0QsZUFBTyxLQUFLLEtBQUssS0FBSyxLQUFLLFNBQVM7QUFBQSxNQUN4QztBQUFBLE1BQ0EsY0FBYyxNQUFNO0FBQ2hCLGVBQU87QUFBQSxVQUNIO0FBQUEsVUFDQSxTQUFTLEtBQUssZUFBZSxJQUFJO0FBQUEsUUFDckM7QUFBQSxNQUNKO0FBQUEsTUFDQSxlQUFlLEtBQUs7QUFFaEIsY0FBTSxTQUFTLE1BQU0sVUFBVSxHQUFHO0FBQ2xDLGVBQU8sQ0FBQyxHQUFHLE9BQU8sTUFBTSxNQUFNLEVBQUUsR0FBRyxRQUFRLEdBQUcsT0FBTyxNQUFNLE1BQU0sRUFBRSxHQUFHLE1BQU07QUFBQSxNQUNoRjtBQUFBLE1BQ0EsV0FBVztBQUNQLGNBQU0sUUFBUSxDQUFDO0FBQ2YsYUFBSyxLQUFLLFFBQVEsU0FBTztBQUNyQixlQUFLLFlBQVksS0FBSyxLQUFLO0FBQUEsUUFDL0IsQ0FBQztBQUdELGVBQU8sTUFDRixPQUFPLFVBQVEsQ0FBQyxLQUFLLE1BQU0sRUFDM0IsSUFBSSxVQUFRLEtBQUssSUFBSSxFQUNyQixLQUFLLElBQUk7QUFBQSxNQUNsQjtBQUFBLE1BQ0EsWUFBWSxLQUFLLE9BQU87QUFDcEIsYUFBSyxVQUFVLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxNQUFNO0FBQ3JDLGNBQUksTUFBTTtBQUNWLGVBQUssUUFBUSxDQUFDLEtBQUssTUFBTTtBQUNyQixrQkFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJO0FBQ3RCLGtCQUFNLFlBQVksS0FBSyxjQUFjLElBQUksRUFBRTtBQUMzQyxnQkFBSSxLQUFLO0FBQ1QsZ0JBQUksWUFBWSxNQUFNLFlBQVksR0FBRyxHQUFHO0FBQ3BDLG9CQUFNLElBQUksT0FBTyxZQUFZLE1BQU0sWUFBWSxHQUFHLENBQUM7QUFBQSxZQUN2RDtBQUVBLGdCQUFJLElBQUksR0FBRyxTQUFTLElBQUksR0FBRyxVQUFVLFVBQVUsS0FBSyxNQUFNO0FBQ3RELG9CQUFNLEtBQUssTUFBTSxJQUFJLEdBQUc7QUFDeEIsbUJBQUssR0FBRyxJQUFJLFNBQVM7QUFDckIsa0JBQUksTUFBTSxZQUFZLEVBQUUsSUFBSSxXQUFXO0FBQ25DLHNCQUFNLElBQUksUUFBUSxTQUFTLEtBQUssTUFBTSxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBQUEsY0FDN0Q7QUFBQSxZQUNKO0FBRUEsa0JBQU0sVUFBVSxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsZ0JBQUksUUFBUSxPQUFPO0FBQ2YscUJBQU8sSUFBSSxPQUFPLFFBQVEsS0FBSztBQUFBLFlBQ25DO0FBQ0EsbUJBQU8sVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJO0FBQ2pDLG1CQUFPO0FBQ1AsbUJBQU8sVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJO0FBQ2pDLGdCQUFJLFFBQVEsUUFBUTtBQUNoQixxQkFBTyxJQUFJLE9BQU8sUUFBUSxNQUFNO0FBQUEsWUFDcEM7QUFHQSxnQkFBSSxNQUFNLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFDN0Isb0JBQU0sS0FBSyxhQUFhLEtBQUssTUFBTSxNQUFNLFNBQVMsRUFBRTtBQUFBLFlBQ3hEO0FBQUEsVUFDSixDQUFDO0FBRUQsZ0JBQU0sS0FBSztBQUFBLFlBQ1AsTUFBTSxJQUFJLFFBQVEsT0FBTyxFQUFFO0FBQUEsWUFDM0IsTUFBTSxJQUFJO0FBQUEsVUFDZCxDQUFDO0FBQUEsUUFDTCxDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1g7QUFBQSxNQUdBLGFBQWEsUUFBUSxjQUFjO0FBQy9CLGNBQU0sUUFBUSxPQUFPLE1BQU0sS0FBSztBQUNoQyxjQUFNLG9CQUFvQixRQUFRLE1BQU0sR0FBRyxTQUFTO0FBQ3BELGNBQU0sU0FBUyxhQUFhO0FBQzVCLGNBQU0sa0JBQWtCLE1BQU0sWUFBWSxPQUFPLFVBQVUsQ0FBQztBQUM1RCxZQUFJLENBQUMsYUFBYSxNQUFNO0FBQ3BCLGlCQUFPO0FBQUEsUUFDWDtBQUdBLFlBQUksQ0FBQyxLQUFLLE1BQU07QUFDWix1QkFBYSxTQUFTO0FBQ3RCLGlCQUFPLFNBQVM7QUFBQSxRQUNwQjtBQUNBLFlBQUksb0JBQW9CLGlCQUFpQjtBQUNyQyxpQkFBTztBQUFBLFFBQ1g7QUFDQSxxQkFBYSxTQUFTO0FBQ3RCLGVBQU8sT0FBTyxVQUFVLElBQUksSUFBSSxPQUFPLG9CQUFvQixlQUFlLElBQUksT0FBTyxTQUFTO0FBQUEsTUFDbEc7QUFBQSxNQUNBLFVBQVUsS0FBSztBQUNYLGNBQU0sUUFBUSxDQUFDO0FBQ2YsY0FBTSxTQUFTLEtBQUssYUFBYSxHQUFHO0FBQ3BDLFlBQUk7QUFHSixZQUFJLFFBQVEsQ0FBQyxLQUFLLE1BQU07QUFFcEIsY0FBSSxRQUFRLE9BQU87QUFDbkIsY0FBSSxLQUFLLE1BQU07QUFDWCxzQkFBVSxNQUFNLEtBQUssSUFBSSxNQUFNLEtBQUssY0FBYyxHQUFHLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSTtBQUFBLFVBQ3RGLE9BQ0s7QUFDRCxzQkFBVSxJQUFJLEtBQUssTUFBTSxJQUFJO0FBQUEsVUFDakM7QUFDQSxjQUFJLElBQUksUUFBUTtBQUNaLG9CQUFRLFFBQVEsTUFBTSxJQUFJLE9BQU8sS0FBSyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRztBQUNuRSxvQkFBUSxLQUFLLE1BQU0sSUFBSSxPQUFPLEtBQUssY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUc7QUFBQSxVQUNwRTtBQUVBLGNBQUksSUFBSSxTQUFTO0FBQ2Isb0JBQVEsUUFBUSxHQUFHLElBQUksTUFBTSxJQUFJLFFBQVEsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDNUQsb0JBQVEsS0FBSyxHQUFHLElBQUksTUFBTSxJQUFJLFFBQVEsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFBQSxVQUNoRTtBQUNBLGtCQUFRLFFBQVEsQ0FBQyxLQUFLLE1BQU07QUFDeEIsZ0JBQUksQ0FBQyxNQUFNLElBQUk7QUFDWCxvQkFBTSxLQUFLLENBQUMsQ0FBQztBQUFBLFlBQ2pCO0FBQ0Esa0JBQU0sT0FBTyxNQUFNO0FBQ25CLHFCQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixrQkFBSSxLQUFLLE9BQU8sUUFBVztBQUN2QixxQkFBSyxLQUFLLEVBQUU7QUFBQSxjQUNoQjtBQUFBLFlBQ0o7QUFDQSxpQkFBSyxLQUFLLEdBQUc7QUFBQSxVQUNqQixDQUFDO0FBQUEsUUFDTCxDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1g7QUFBQSxNQUNBLGNBQWMsS0FBSztBQUNmLFlBQUksWUFBWSxJQUFJLFNBQVM7QUFDN0IsWUFBSSxJQUFJLFNBQVM7QUFDYix3QkFBYyxJQUFJLFFBQVEsU0FBUyxNQUFNLElBQUksUUFBUSxVQUFVO0FBQUEsUUFDbkU7QUFDQSxZQUFJLElBQUksUUFBUTtBQUNaLHVCQUFhO0FBQUEsUUFDakI7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsYUFBYSxLQUFLO0FBQ2QsWUFBSSxDQUFDLEtBQUssTUFBTTtBQUNaLGlCQUFPLElBQUksSUFBSSxTQUFPO0FBQ2xCLG1CQUFPLElBQUksU0FBUyxNQUFNLFlBQVksSUFBSSxJQUFJO0FBQUEsVUFDbEQsQ0FBQztBQUFBLFFBQ0w7QUFDQSxZQUFJLFFBQVEsSUFBSTtBQUNoQixZQUFJLGlCQUFpQixLQUFLO0FBRTFCLGNBQU0sU0FBUyxJQUFJLElBQUksU0FBTztBQUMxQixjQUFJLElBQUksT0FBTztBQUNYO0FBQ0EsOEJBQWtCLElBQUk7QUFDdEIsbUJBQU8sSUFBSTtBQUFBLFVBQ2Y7QUFDQSxpQkFBTztBQUFBLFFBQ1gsQ0FBQztBQUVELGNBQU0sYUFBYSxRQUFRLEtBQUssTUFBTSxpQkFBaUIsS0FBSyxJQUFJO0FBQ2hFLGVBQU8sT0FBTyxJQUFJLENBQUMsR0FBRyxNQUFNO0FBQ3hCLGNBQUksTUFBTSxRQUFXO0FBQ2pCLG1CQUFPLEtBQUssSUFBSSxZQUFZLFVBQVUsSUFBSSxFQUFFLENBQUM7QUFBQSxVQUNqRDtBQUNBLGlCQUFPO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0o7QUFDQSxhQUFTLFVBQVUsS0FBSyxJQUFJLE9BQU87QUFDL0IsVUFBSSxJQUFJLFFBQVE7QUFDWixZQUFJLGFBQWEsS0FBSyxFQUFFLEdBQUc7QUFDdkIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxHQUFHLEtBQUssRUFBRSxXQUFXLEdBQUc7QUFDeEIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUdBLGFBQVMsVUFBVSxLQUFLO0FBQ3BCLFlBQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUNoQyxZQUFNLFdBQVcsS0FBSyxRQUFRLFNBQVMsTUFBTSxRQUFRLFVBQVU7QUFDL0QsVUFBSSxJQUFJLFFBQVE7QUFDWixlQUFPLFdBQVc7QUFBQSxNQUN0QjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyxpQkFBaUI7QUFFdEIsVUFBSSxPQUFPLFlBQVksWUFBWSxRQUFRLFVBQVUsUUFBUSxPQUFPLFNBQVM7QUFDekUsZUFBTyxRQUFRLE9BQU87QUFBQSxNQUMxQjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyxXQUFXLEtBQUssT0FBTztBQUM1QixZQUFNLElBQUksS0FBSztBQUNmLFlBQU0sV0FBVyxNQUFNLFlBQVksR0FBRztBQUN0QyxVQUFJLFdBQVcsT0FBTztBQUNsQixlQUFPLElBQUksT0FBTyxRQUFRLFFBQVEsSUFBSTtBQUFBLE1BQzFDO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxhQUFTLFlBQVksS0FBSyxPQUFPO0FBQzdCLFlBQU0sSUFBSSxLQUFLO0FBQ2YsWUFBTSxXQUFXLE1BQU0sWUFBWSxHQUFHO0FBRXRDLFVBQUksWUFBWSxPQUFPO0FBQ25CLGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTyxJQUFJLE9BQVEsUUFBUSxZQUFhLENBQUMsSUFBSTtBQUFBLElBQ2pEO0FBQ0EsUUFBSTtBQUNKLGFBQVMsTUFBTSxNQUFNLFFBQVE7QUFDekIsY0FBUTtBQUNSLGFBQU8sSUFBSSxHQUFHO0FBQUEsUUFDVixRQUFRLFNBQVMsUUFBUSxTQUFTLFNBQVMsU0FBUyxLQUFLLFVBQVUsZUFBZTtBQUFBLFFBQ2xGLE1BQU0sU0FBUyxRQUFRLFNBQVMsU0FBUyxTQUFTLEtBQUs7QUFBQSxNQUMzRCxDQUFDO0FBQUEsSUFDTDtBQUdBLFFBQU0sY0FBYztBQUNwQixRQUFNLFlBQVk7QUFDbEIsUUFBTSxPQUFPO0FBQ2IsYUFBUyxHQUFHLE1BQU07QUFDZCxhQUFPLE1BQU0sTUFBTTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0osQ0FBQztBQUFBLElBQ0w7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUM3U2pCO0FBQUEsaURBQUFDLFVBQUFDLFNBQUE7QUFBQSxRQUFNLEVBQUUsU0FBUyxTQUFBQyxTQUFRLElBQUksUUFBUTtBQUNyQyxRQUFNLEVBQUUsYUFBYSxTQUFTLElBQUksUUFBUTtBQUUxQyxJQUFBRCxRQUFPLFVBQVUsU0FBVSxPQUFPLFVBQVU7QUFDM0MsVUFBSSxNQUFNQyxTQUFRLEtBQUssS0FBSztBQUM1QixVQUFJLEtBQUssUUFBUSxTQUFTLEdBQUc7QUFFN0IsVUFBSSxDQUFDLE1BQU0sWUFBWSxHQUFHO0FBQ3pCLGNBQU0sUUFBUSxHQUFHO0FBQUEsTUFDbEI7QUFFQSxhQUFPLE1BQU07QUFDWixjQUFNLFNBQVMsS0FBSyxZQUFZLEdBQUcsQ0FBQztBQUNwQyxZQUFJO0FBQUssaUJBQU9BLFNBQVEsS0FBSyxHQUFHO0FBQ2hDLGNBQU0sUUFBUSxNQUFNLEdBQUc7QUFDdkIsWUFBSSxRQUFRO0FBQUs7QUFBQSxNQUNsQjtBQUFBLElBQ0Q7QUFBQTtBQUFBOzs7Ozs7QUNaQSxJQUFBQyxRQUFBLFVBQVMsU0FBUyxjQUFjLFVBQVk7QUFBWixVQUFBLGFBQUEsUUFBQTtBQUFBLG1CQUFBO01BQVk7QUFDMUMsVUFBSSxZQUFZLE1BQU0saUJBQWlCO0FBQ3JDLGNBQU0sSUFBSSxVQUFVLHFHQUFxRyxXQUFXLHVDQUF1QyxNQUFNLGtCQUFrQixHQUFHOztBQUd4TSxVQUFNLHVCQUF1QixNQUFNO0FBQ25DLFlBQU0sb0JBQW9CLFNBQUMsR0FBR0MsUUFBSztBQUFNLGVBQUFBO01BQUE7QUFDekMsVUFBTSxRQUFRLElBQUksTUFBSyxFQUFHO0FBQzFCLFlBQU0sb0JBQW9CO0FBRzFCLFVBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxVQUFVO0FBSS9DLGVBQU8sTUFBTSxZQUFhLE1BQU0sVUFBa0IsWUFBVyxJQUFLOztJQUV0RTs7Ozs7QUN0QkE7QUFBQSxxREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSUMsTUFBSyxRQUFRO0FBQWpCLFFBQ0VDLFFBQU8sUUFBUSxRQUFRO0FBRHpCLFFBRUVDLFdBQVUsUUFBUSxRQUFRO0FBRjVCLFFBR0UsVUFBVSxRQUFRLFFBQVE7QUFINUIsUUFJRSxpQkFBaUI7QUFBQSxNQUNmLFlBQVksQ0FBQyxNQUFNLFFBQVEsUUFBUTtBQUFBLE1BQ25DLFNBQVM7QUFBQSxNQUNULFFBQVEsU0FBVSxNQUFNO0FBQ3RCLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFDQSxPQUFPLFNBQVUsS0FBSztBQUNwQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFRixhQUFTLG1CQUFtQkMsT0FBTSxVQUFVLFNBQVM7QUFDbkQsYUFFRyxJQUFJLE9BQU8sU0FBUyxRQUFRLFdBQVcsS0FBSyxHQUFHLElBQUksTUFBTSxHQUFHLEVBQUUsS0FBSyxRQUFRLEtBRzVFLEVBQUUsUUFBUSxXQUFXLFFBQVEsbUJBQW1CLFVBQVUsQ0FBQyxRQUFRLFFBQVEsS0FBS0EsS0FBSSxNQUdwRixFQUFFLFFBQVEsV0FBVyxPQUFPLFFBQVEsWUFBWSxjQUFjLENBQUMsUUFBUSxRQUFRQSxPQUFNLFFBQVEsTUFHN0YsRUFBRSxRQUFRLFdBQVcsUUFBUSxtQkFBbUIsVUFBVSxRQUFRLFFBQVEsS0FBS0EsS0FBSSxNQUduRixFQUFFLFFBQVEsV0FBVyxPQUFPLFFBQVEsWUFBWSxjQUFjLFFBQVEsUUFBUUEsT0FBTSxRQUFRO0FBQUEsSUFFaEc7QUFFQSxhQUFTLGlCQUFpQixHQUFHQSxPQUFNLFNBQVM7QUFDMUMsVUFBSSxTQUFTLENBQUM7QUFHZCxVQUFJQSxTQUFRLENBQUMsV0FBVyxPQUFPQSxVQUFTLFVBQVU7QUFDaEQsa0JBQVVBO0FBQ1YsUUFBQUEsUUFBTztBQUFBLE1BQ1Q7QUFHQSxnQkFBVSxXQUFXLENBQUM7QUFDdEIsZUFBUyxRQUFRLGdCQUFnQjtBQUMvQixZQUFJLE9BQU8sUUFBUSxVQUFVLGFBQWE7QUFDeEMsa0JBQVEsUUFBUSxlQUFlO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBSUEsTUFBQUEsUUFBTyxDQUFDQSxRQUFPLFFBQVEsRUFBRSxRQUFRLElBQUlELFNBQVEsUUFBUSxFQUFFLFFBQVEsR0FBR0MsS0FBSTtBQUd0RSxNQUFBSCxJQUFHLFlBQVlHLEtBQUksRUFBRSxRQUFRLFNBQVUsVUFBVTtBQUMvQyxZQUFJLFNBQVNGLE1BQUtFLE9BQU0sUUFBUSxHQUM5QixPQUNBLEtBQ0E7QUFFRixZQUFJSCxJQUFHLFNBQVMsTUFBTSxFQUFFLFlBQVksS0FBSyxRQUFRLFNBQVM7QUFFeEQsa0JBQVEsaUJBQWlCLEdBQUcsUUFBUSxPQUFPO0FBRTNDLGNBQUksT0FBTyxLQUFLLEtBQUssRUFBRSxRQUFRO0FBQzdCLG1CQUFPLFFBQVEsT0FBTyxVQUFVLFFBQVEsUUFBUSxLQUFLO0FBQUEsVUFDdkQ7QUFBQSxRQUNGLE9BQU87QUFDTCxjQUFJLFdBQVcsRUFBRSxZQUFZLG1CQUFtQixRQUFRLFVBQVUsT0FBTyxHQUFHO0FBRTFFLGtCQUFNLFNBQVMsVUFBVSxHQUFHLFNBQVMsWUFBWSxHQUFHLENBQUM7QUFDckQsa0JBQU0sRUFBRSxRQUFRLE1BQU07QUFDdEIsbUJBQU8sUUFBUSxPQUFPLEtBQUssUUFBUSxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUssUUFBUSxRQUFRLEtBQUs7QUFBQSxVQUMxRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFELFFBQU8sVUFBVTtBQUNqQixJQUFBQSxRQUFPLFFBQVEsV0FBVztBQUFBO0FBQUE7OztBQ3JGMUIsSUFBQUssaUJBQUE7QUFBQSxnREFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxTQUFTLFFBQVE7QUFFckIsUUFBTSxTQUFOLGNBQXFCLE1BQU07QUFBQSxNQUN2QixZQUFZLEtBQUs7QUFDYixjQUFNLE9BQU8sYUFBYTtBQUMxQixhQUFLLE9BQU87QUFDWixjQUFNLGtCQUFrQixNQUFNLE1BQU07QUFBQSxNQUN4QztBQUFBLElBQ0o7QUFFQSxRQUFJLDJCQUEyQixDQUFDO0FBQ2hDLFFBQUk7QUFDSixhQUFTLGFBQWEsUUFBUSxLQUFLLGNBQWMsT0FBTztBQUNwRCxhQUFPO0FBQ1AsVUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixVQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxTQUFTLEdBQUc7QUFDekQsWUFBSSxPQUFPLE9BQU8sWUFBWTtBQUMxQixpQkFBTztBQUNYLGNBQU0sU0FBUyxpQkFBaUIsS0FBSyxPQUFPLE9BQU87QUFDbkQsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxDQUFDLFFBQVE7QUFDVCxjQUFJO0FBQ0EsNEJBQWdCLFFBQVEsUUFBUSxPQUFPO0FBQUEsVUFDM0MsU0FDTyxNQUFQO0FBQ0ksbUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDSixPQUNLO0FBQ0QsMEJBQWdCLHVCQUF1QixLQUFLLE9BQU8sT0FBTztBQUFBLFFBQzlEO0FBQ0EsZ0NBQXdCLGFBQWE7QUFDckMsaUNBQXlCLEtBQUssYUFBYTtBQUMzQyx3QkFBZ0IsU0FDVixLQUFLLE1BQU0sS0FBSyxhQUFhLGVBQWUsTUFBTSxDQUFDLElBQ25ELFFBQVEsT0FBTztBQUNyQixlQUFPLE9BQU87QUFDZCx3QkFBZ0IsYUFBYSxlQUFlLEtBQUssS0FBSyxRQUFRLGFBQWEsR0FBRyxjQUFjLElBQUk7QUFBQSxNQUNwRztBQUNBLGlDQUEyQixDQUFDO0FBQzVCLGFBQU8sZUFDRCxVQUFVLGVBQWUsTUFBTSxJQUMvQixPQUFPLE9BQU8sQ0FBQyxHQUFHLGVBQWUsTUFBTTtBQUFBLElBQ2pEO0FBQ0EsYUFBUyx3QkFBd0IsU0FBUztBQUN0QyxVQUFJLHlCQUF5QixRQUFRLE9BQU8sSUFBSSxJQUFJO0FBQ2hELGNBQU0sSUFBSSxPQUFPLHNDQUFzQyxXQUFXO0FBQUEsTUFDdEU7QUFBQSxJQUNKO0FBQ0EsYUFBUyx1QkFBdUIsS0FBSyxjQUFjO0FBQy9DLGFBQU8sS0FBSyxLQUFLLFFBQVEsS0FBSyxZQUFZO0FBQUEsSUFDOUM7QUFDQSxhQUFTLFVBQVUsU0FBUyxTQUFTO0FBQ2pDLFlBQU0sU0FBUyxDQUFDO0FBQ2hCLGVBQVMsU0FBUyxLQUFLO0FBQ25CLGVBQU8sT0FBTyxPQUFPLFFBQVEsWUFBWSxDQUFDLE1BQU0sUUFBUSxHQUFHO0FBQUEsTUFDL0Q7QUFDQSxhQUFPLE9BQU8sUUFBUSxPQUFPO0FBQzdCLGlCQUFXLE9BQU8sT0FBTyxLQUFLLE9BQU8sR0FBRztBQUNwQyxZQUFJLFNBQVMsUUFBUSxJQUFJLEtBQUssU0FBUyxPQUFPLElBQUksR0FBRztBQUNqRCxpQkFBTyxPQUFPLFVBQVUsUUFBUSxNQUFNLFFBQVEsSUFBSTtBQUFBLFFBQ3RELE9BQ0s7QUFDRCxpQkFBTyxPQUFPLFFBQVE7QUFBQSxRQUMxQjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUVBLGFBQVMsYUFBYSxLQUFLO0FBQ3ZCLFlBQU0sNkJBQTZCLElBQUksUUFBUSxXQUFXLEdBQUc7QUFDN0QsWUFBTSxlQUFlLDJCQUEyQixNQUFNLHNCQUFzQjtBQUM1RSxZQUFNLFNBQVM7QUFDZixZQUFNLGVBQWUsYUFBYSxNQUFNO0FBQ3hDLFVBQUksQ0FBQztBQUNELGNBQU0sSUFBSSxNQUFNLHdCQUF3QixLQUFLO0FBQ2pELFlBQU0sZ0JBQWdCO0FBQUEsUUFDbEIsS0FBSyxhQUFhLFFBQVEsUUFBUSxFQUFFO0FBQUEsUUFDcEMsVUFBVSxDQUFDO0FBQUEsUUFDWCxVQUFVLENBQUM7QUFBQSxNQUNmO0FBQ0EsbUJBQWEsUUFBUSxDQUFDQyxNQUFLLE1BQU07QUFDN0IsWUFBSSxXQUFXO0FBQ2YsUUFBQUEsT0FBTUEsS0FBSSxRQUFRLE9BQU8sRUFBRTtBQUMzQixZQUFJLFdBQVcsS0FBS0EsSUFBRyxLQUFLLE1BQU0sYUFBYSxTQUFTO0FBQ3BELHFCQUFXO0FBQ2YsWUFBSSxNQUFNLEtBQUtBLElBQUcsR0FBRztBQUNqQix3QkFBYyxTQUFTLEtBQUs7QUFBQSxZQUN4QixLQUFLQSxLQUFJLFFBQVEsUUFBUSxFQUFFLEVBQUUsTUFBTSxHQUFHO0FBQUEsWUFDdEM7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCx3QkFBYyxTQUFTLEtBQUs7QUFBQSxZQUN4QixLQUFLQSxLQUFJLFFBQVEsUUFBUSxFQUFFLEVBQUUsTUFBTSxHQUFHO0FBQUEsWUFDdEM7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFDSixDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFNLGVBQWUsQ0FBQyxTQUFTLFVBQVUsU0FBUyxVQUFVLFNBQVMsT0FBTztBQUM1RSxhQUFTLFFBQVEsTUFBTSxNQUFNLE1BQU07QUFDL0IsZUFBUyxZQUFZO0FBQ2pCLGVBQU8sT0FBTyxTQUFTLFdBQ2pCLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxJQUMzQztBQUFBLFVBQ0UsYUFBYSxPQUFPLE1BQU07QUFBQSxVQUMxQjtBQUFBLFVBQ0E7QUFBQSxRQUNKO0FBQUEsTUFDUjtBQUNBLFVBQUk7QUFDQSxZQUFJLFdBQVc7QUFDZixjQUFNLENBQUMsUUFBUSxpQkFBaUIsT0FBTyxJQUFJLFVBQVU7QUFDckQsY0FBTSxPQUFPLENBQUMsRUFBRSxNQUFNLEtBQUssZUFBZTtBQUMxQyxlQUFPLEtBQUssVUFBVSxLQUFLLEtBQUssU0FBUyxPQUFPO0FBQzVDLGVBQUssSUFBSTtBQUNiLGNBQU0sU0FBUyxXQUFXLEtBQUs7QUFDL0IsWUFBSSxTQUFTLE9BQU8sU0FBUyxRQUFRO0FBQ2pDLGdCQUFNLElBQUksT0FBTywyQ0FBMkMsT0FBTyxTQUFTLHVCQUF1QixLQUFLLFNBQVM7QUFBQSxRQUNySDtBQUNBLGNBQU0sZ0JBQWdCLE9BQU8sU0FBUyxTQUFTLE9BQU8sU0FBUztBQUMvRCxZQUFJLFNBQVMsZUFBZTtBQUN4QixnQkFBTSxJQUFJLE9BQU8sNkNBQTZDLDhCQUE4QixTQUFTO0FBQUEsUUFDekc7QUFDQSxlQUFPLFNBQVMsUUFBUSxjQUFZO0FBQ2hDLGdCQUFNLE1BQU0sS0FBSyxNQUFNO0FBQ3ZCLGdCQUFNLGVBQWUsVUFBVSxHQUFHO0FBQ2xDLGdCQUFNLGdCQUFnQixTQUFTLElBQUksT0FBTyxVQUFRLFNBQVMsZ0JBQWdCLFNBQVMsR0FBRztBQUN2RixjQUFJLGNBQWMsV0FBVztBQUN6Qiw4QkFBa0IsY0FBYyxTQUFTLEtBQUssUUFBUTtBQUMxRCxzQkFBWTtBQUFBLFFBQ2hCLENBQUM7QUFDRCxlQUFPLFNBQVMsUUFBUSxjQUFZO0FBQ2hDLGNBQUksS0FBSyxXQUFXO0FBQ2hCO0FBQ0osZ0JBQU0sTUFBTSxLQUFLLE1BQU07QUFDdkIsZ0JBQU0sZUFBZSxVQUFVLEdBQUc7QUFDbEMsZ0JBQU0sZ0JBQWdCLFNBQVMsSUFBSSxPQUFPLFVBQVEsU0FBUyxnQkFBZ0IsU0FBUyxHQUFHO0FBQ3ZGLGNBQUksY0FBYyxXQUFXO0FBQ3pCLDhCQUFrQixjQUFjLFNBQVMsS0FBSyxRQUFRO0FBQzFELHNCQUFZO0FBQUEsUUFDaEIsQ0FBQztBQUFBLE1BQ0wsU0FDTyxLQUFQO0FBQ0ksZ0JBQVEsS0FBSyxJQUFJLEtBQUs7QUFBQSxNQUMxQjtBQUFBLElBQ0o7QUFDQSxhQUFTLFVBQVUsS0FBSztBQUNwQixVQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFDcEIsZUFBTztBQUFBLE1BQ1gsV0FDUyxRQUFRLE1BQU07QUFDbkIsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPLE9BQU87QUFBQSxJQUNsQjtBQUNBLGFBQVMsa0JBQWtCLGNBQWMsY0FBYyxVQUFVO0FBQzdELFlBQU0sSUFBSSxPQUFPLFdBQVcsYUFBYSxhQUFhLGdDQUFnQyxhQUFhLEtBQUssTUFBTSxrQkFBa0IsZUFBZTtBQUFBLElBQ25KO0FBRUEsYUFBU0MsV0FBVSxjQUFjO0FBQzdCLGFBQVEsQ0FBQyxDQUFDLGdCQUNOLENBQUMsQ0FBQyxhQUFhLFFBQ2YsT0FBTyxhQUFhLFNBQVM7QUFBQSxJQUNyQztBQUVBLGFBQVMscUJBQXFCLFFBQVEsVUFBVUMsT0FBTSxTQUFTO0FBQzNELE1BQUFBLE1BQUssT0FBTyxlQUFlLFFBQVEsVUFBVSxPQUFPO0FBQUEsSUFDeEQ7QUFDQSxhQUFTLGdCQUFnQixRQUFRQSxPQUFNO0FBQ25DLE1BQUFBLE1BQUssT0FBTyxZQUFZLE9BQU8sUUFBUSxRQUFRO0FBQUEsSUFDbkQ7QUFDQSxhQUFTLFdBQVcsUUFBUTtBQUN4QixhQUFPLE9BQU8sS0FBSyxNQUFNO0FBQUEsSUFDN0I7QUFFQSxhQUFTLFVBQVUsV0FBVyxDQUFDLEdBQUcsU0FBUyxNQUFNLE1BQU07QUFDbkQsWUFBTSxNQUFNLENBQUM7QUFDYixpQkFBVyxRQUFRLEVBQUUsUUFBUSxTQUFPO0FBQ2hDLFlBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzVCLGNBQUksT0FBTyxTQUFTO0FBQUEsUUFDeEI7QUFBQSxNQUNKLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDWDtBQUVBLGFBQVMsd0JBQXdCLGtCQUFrQixTQUFTO0FBQ3hELGFBQU8sU0FBVSxVQUFVLHdCQUF3QixPQUFPO0FBQ3RELGdCQUFRLDhCQUE4QixDQUFDLFVBQVUscUJBQXFCLEdBQUcsVUFBVSxNQUFNO0FBQ3pGLFlBQUksTUFBTSxRQUFRLFFBQVEsR0FBRztBQUN6QixtQkFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN0QyxnQkFBSSxPQUFPLFNBQVMsT0FBTyxZQUFZO0FBQ25DLG9CQUFNLE1BQU0sK0JBQStCO0FBQUEsWUFDL0M7QUFDQSxxQkFBUyxHQUFHLHdCQUF3QjtBQUFBLFVBQ3hDO0FBQ0EsZ0JBQU0sVUFBVSxLQUFLLE1BQU0sa0JBQWtCLFFBQVE7QUFBQSxRQUN6RCxXQUNTLE9BQU8sYUFBYSxZQUFZO0FBQ3JDLG1CQUFTLHdCQUF3QjtBQUNqQywyQkFBaUIsS0FBSyxRQUFRO0FBQUEsUUFDbEM7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxhQUFTLHlCQUF5QixtQkFBbUI7QUFDakQsVUFBSSxDQUFDO0FBQ0QsZUFBTyxDQUFDO0FBQ1osYUFBTyxrQkFBa0IsSUFBSSxnQkFBYztBQUN2QyxtQkFBVyx3QkFBd0I7QUFDbkMsZUFBTztBQUFBLE1BQ1gsQ0FBQztBQUFBLElBQ0w7QUFDQSxhQUFTLGdCQUFnQixNQUFNQyxRQUFPLGFBQWEsa0JBQWtCO0FBQ2pFLFlBQU0sd0JBQXdCLElBQUksTUFBTSx1RUFBdUU7QUFDL0csYUFBTyxZQUFZLE9BQU8sQ0FBQyxLQUFLLGVBQWU7QUFDM0MsWUFBSSxXQUFXLDBCQUEwQixrQkFBa0I7QUFDdkQsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSUYsV0FBVSxHQUFHLEdBQUc7QUFDaEIsaUJBQU8sSUFDRixLQUFLLGdCQUFjLFFBQVEsSUFBSTtBQUFBLFlBQ2hDO0FBQUEsWUFDQSxXQUFXLFlBQVlFLE1BQUs7QUFBQSxVQUNoQyxDQUFDLENBQUMsRUFDRyxLQUFLLENBQUMsQ0FBQyxZQUFZLGFBQWEsTUFBTSxPQUFPLE9BQU8sWUFBWSxhQUFhLENBQUM7QUFBQSxRQUN2RixPQUNLO0FBQ0QsZ0JBQU0sU0FBUyxXQUFXLEtBQUtBLE1BQUs7QUFDcEMsY0FBSSxvQkFBb0JGLFdBQVUsTUFBTTtBQUNwQyxrQkFBTTtBQUNWLGlCQUFPQSxXQUFVLE1BQU0sSUFDakIsT0FBTyxLQUFLLG1CQUFpQixPQUFPLE9BQU8sS0FBSyxhQUFhLENBQUMsSUFDOUQsT0FBTyxPQUFPLEtBQUssTUFBTTtBQUFBLFFBQ25DO0FBQUEsTUFDSixHQUFHLElBQUk7QUFBQSxJQUNYO0FBRUEsYUFBUyx5QkFBeUI7QUFDOUIsVUFBSSxxQkFBcUI7QUFDckIsZUFBTztBQUNYLGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyx1QkFBdUI7QUFDNUIsYUFBTyxjQUFjLEtBQUssQ0FBQyxRQUFRO0FBQUEsSUFDdkM7QUFDQSxhQUFTLGdCQUFnQjtBQUNyQixhQUFPLENBQUMsQ0FBQyxRQUFRLFNBQVM7QUFBQSxJQUM5QjtBQUNBLGFBQVMsUUFBUSxNQUFNO0FBQ25CLGFBQU8sS0FBSyxNQUFNLHVCQUF1QixJQUFJLENBQUM7QUFBQSxJQUNsRDtBQUNBLGFBQVMsb0JBQW9CO0FBQ3pCLGFBQU8sUUFBUSxLQUFLLHVCQUF1QjtBQUFBLElBQy9DO0FBRUEsUUFBSSxjQUEyQix1QkFBTyxPQUFPO0FBQUEsTUFDM0MsV0FBVztBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBRUQsYUFBUyxZQUFZLFVBQVU7QUFDM0IsVUFBSSxPQUFPLFlBQVk7QUFDbkIsZUFBTztBQUNYLGVBQVMsSUFBSSxHQUFHLFFBQVEsT0FBTyxLQUFLLFFBQVEsS0FBSyxHQUFHLEtBQUssSUFBSSxNQUFNLFFBQVEsS0FBSztBQUM1RSxjQUFNLFFBQVEsTUFBTSxNQUFNO0FBQzFCLFlBQUksSUFBSSxZQUFZO0FBQ2hCLGlCQUFPO0FBQUEsTUFDZjtBQUNBLGFBQU87QUFBQSxJQUNYO0FBRUEsUUFBTSxpQkFBaUI7QUFDdkIsYUFBUyxRQUFRRSxRQUFPQyxRQUFPQyxhQUFZLG1CQUFtQixDQUFDLEdBQUdILE9BQU07QUFDcEUsWUFBTUksUUFBTyxDQUFDO0FBQ2QsVUFBSSxXQUFXLENBQUM7QUFDaEIsVUFBSSxXQUFXLENBQUM7QUFDaEIsVUFBSTtBQUNKLE1BQUFBLE1BQUssYUFBYSxTQUFTLFdBQVcsS0FBSyxhQUFhLFNBQVMsU0FBUyxtQkFBbUIsWUFBWTtBQUNyRyxZQUFJLFVBQVUsQ0FBQztBQUNmLGNBQU0sY0FBYyx5QkFBeUIsaUJBQWlCO0FBQzlELGtCQUFVLFlBQVksTUFBTTtBQUFBLFFBQUU7QUFDOUIsWUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3BCLGNBQUksb0JBQW9CLEdBQUcsR0FBRztBQUMxQixhQUFDLEtBQUssR0FBRyxPQUFPLElBQUk7QUFBQSxVQUN4QixPQUNLO0FBQ0QsdUJBQVdDLFlBQVcsS0FBSztBQUN2QixjQUFBRCxNQUFLLFdBQVdDLFFBQU87QUFBQSxZQUMzQjtBQUFBLFVBQ0o7QUFBQSxRQUNKLFdBQ1MsMkJBQTJCLEdBQUcsR0FBRztBQUN0QyxjQUFJQSxXQUFVLE1BQU0sUUFBUSxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksWUFBWSxXQUM3RCxJQUFJLFVBQ0osV0FBVyxHQUFHO0FBQ3BCLGNBQUksSUFBSTtBQUNKLFlBQUFBLFdBQVUsQ0FBQyxFQUFFLE9BQU9BLFFBQU8sRUFBRSxPQUFPLElBQUksT0FBTztBQUNuRCxVQUFBRCxNQUFLLFdBQVdDLFVBQVMsWUFBWSxHQUFHLEdBQUcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLGFBQWEsSUFBSSxVQUFVO0FBQ3BHO0FBQUEsUUFDSixXQUNTLDJCQUEyQixPQUFPLEdBQUc7QUFDMUMsVUFBQUQsTUFBSyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sT0FBTyxHQUFHLGFBQWEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLGFBQWEsUUFBUSxVQUFVO0FBQzdIO0FBQUEsUUFDSjtBQUNBLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDekIsZ0JBQU0sZ0JBQWdCLGFBQWEsR0FBRztBQUN0QyxvQkFBVSxRQUFRLElBQUksV0FBUyxhQUFhLEtBQUssRUFBRSxHQUFHO0FBQ3RELGNBQUksWUFBWTtBQUNoQixnQkFBTSxnQkFBZ0IsQ0FBQyxjQUFjLEdBQUcsRUFBRSxPQUFPLE9BQU8sRUFBRSxPQUFPLE9BQUs7QUFDbEUsZ0JBQUksZUFBZSxLQUFLLENBQUMsR0FBRztBQUN4QiwwQkFBWTtBQUNaLHFCQUFPO0FBQUEsWUFDWDtBQUNBLG1CQUFPO0FBQUEsVUFDWCxDQUFDO0FBQ0QsY0FBSSxjQUFjLFdBQVcsS0FBSztBQUM5QiwwQkFBYyxLQUFLLElBQUk7QUFDM0IsY0FBSSxXQUFXO0FBQ1gsMEJBQWMsTUFBTSxjQUFjO0FBQ2xDLHNCQUFVLGNBQWMsTUFBTSxDQUFDO0FBQy9CLGtCQUFNLElBQUksUUFBUSxnQkFBZ0IsY0FBYyxHQUFHO0FBQUEsVUFDdkQ7QUFDQSxrQkFBUSxRQUFRLFdBQVM7QUFDckIscUJBQVMsU0FBUyxjQUFjO0FBQUEsVUFDcEMsQ0FBQztBQUNELGNBQUksZ0JBQWdCLE9BQU87QUFDdkIsWUFBQUYsT0FBTSxRQUFRLEtBQUssYUFBYSxXQUFXLFNBQVMsVUFBVTtBQUFBLFVBQ2xFO0FBQ0EsbUJBQVMsY0FBYyxPQUFPO0FBQUEsWUFDMUIsVUFBVTtBQUFBLFlBQ1Y7QUFBQSxZQUNBO0FBQUEsWUFDQSxTQUFTLFdBQVcsQ0FBQztBQUFBLFlBQ3JCO0FBQUEsWUFDQTtBQUFBLFlBQ0EsVUFBVSxjQUFjO0FBQUEsWUFDeEIsVUFBVSxjQUFjO0FBQUEsVUFDNUI7QUFDQSxjQUFJO0FBQ0EsNkJBQWlCLFNBQVMsY0FBYztBQUFBLFFBQ2hEO0FBQUEsTUFDSjtBQUNBLE1BQUFFLE1BQUssZUFBZSxTQUFTLGFBQWEsS0FBSyxTQUFTLEtBQUssWUFBWSxNQUFNO0FBQzNFLGVBQU8sUUFBUSxDQUFDO0FBQ2hCLFlBQUksT0FBTyxLQUFLLFlBQVk7QUFDeEIsZUFBSyxVQUFVO0FBQ25CLFlBQUksQ0FBQyxNQUFNLFFBQVEsS0FBSyxVQUFVO0FBQzlCLGVBQUssYUFBYSxDQUFDLElBQUk7QUFDM0IsY0FBTSxjQUFjLE9BQU8sS0FBSyxVQUFVLGFBQWEsS0FBSyxRQUFRLENBQUMsTUFBTTtBQUMzRSxhQUFLLFFBQVEsU0FBUyxNQUFNLEtBQUssUUFBUSxVQUFVO0FBQy9DLGdCQUFNLFVBQVUsWUFBWSxLQUFLLFFBQVEsUUFBUTtBQUNqRCxjQUFJLFNBQVM7QUFDVCxnQkFBSSxDQUFDLFFBQVEsTUFBTSxRQUFRLE1BQU07QUFDN0IscUJBQU87QUFDWCxvQkFBUSxNQUFNLEtBQUssTUFBTTtBQUN6QixZQUFBQSxNQUFLLFdBQVcsT0FBTztBQUFBLFVBQzNCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQ0EsUUFBQUosTUFBSyxpQkFBaUIsRUFBRSxTQUFTLEtBQUssVUFBVSxXQUFXLEdBQUcsS0FBSyxJQUFJO0FBQUEsTUFDM0U7QUFDQSxlQUFTLFdBQVcsS0FBSztBQUNyQixjQUFNLE1BQU0sWUFBWSxHQUFHO0FBQzNCLFlBQUksQ0FBQztBQUNELGdCQUFNLElBQUksTUFBTSxxQ0FBcUNBLE1BQUssUUFBUSxHQUFHLEdBQUc7QUFDNUUsZUFBTyxvQkFBb0IsSUFBSSxRQUFRO0FBQUEsTUFDM0M7QUFDQSxlQUFTLG9CQUFvQixVQUFVO0FBQ25DLGVBQU9BLE1BQUssS0FBSyxTQUFTLFVBQVVBLE1BQUssS0FBSyxRQUFRLFFBQVEsQ0FBQztBQUFBLE1BQ25FO0FBQ0EsZUFBUyxZQUFZLEVBQUUsVUFBVSxhQUFhLEtBQU0sR0FBRztBQUNuRCxtQkFBVyxRQUFRLENBQUMsVUFBVSxhQUFhLElBQUksR0FBRztBQUM5QyxjQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVM7QUFDckMsbUJBQU87QUFDWCwrQkFBcUIsTUFBTSxNQUFNQSxLQUFJO0FBQUEsUUFDekM7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLE1BQUFJLE1BQUssY0FBYyxNQUFNLE9BQU8sS0FBSyxRQUFRLEVBQUUsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0FBQzNFLE1BQUFBLE1BQUsscUJBQXFCLE1BQU07QUFDaEMsTUFBQUEsTUFBSyxvQkFBb0IsTUFBTSxDQUFDLENBQUM7QUFDakMsTUFBQUEsTUFBSyxhQUFhLFNBQVMsV0FBV0MsVUFBU0osUUFBTyxRQUFRLGNBQWM7QUFDeEUsWUFBSSxVQUFVLE9BQU87QUFDckIsY0FBTSxpQkFBaUIsU0FBU0ksYUFBWSxTQUFTLFNBQVNBLGNBQWE7QUFDM0UsY0FBTSxpQkFBaUJKLE9BQU0sV0FBVztBQUN4QyxZQUFJLFdBQVcsZUFBZSxNQUFNO0FBQ3BDLGNBQU0saUJBQWlCLGVBQWUsU0FBUyxNQUFNO0FBQ3JELFlBQUksWUFBWSxPQUFPO0FBQ3ZCLFlBQUksZ0JBQWdCLENBQUM7QUFDckIsWUFBSUksVUFBUztBQUNULHlCQUFlLFNBQVMsS0FBS0EsUUFBTztBQUNwQyx5QkFBZSxhQUFhLEtBQUssZUFBZSxRQUFRO0FBQUEsUUFDNUQ7QUFDQSxjQUFNLFVBQVUsZUFBZTtBQUMvQixZQUFJLHlCQUF5QixPQUFPLEdBQUc7QUFDbkMsZ0JBQU0sZ0JBQWdCLFFBQVFKLE9BQU0sTUFBTSxPQUFPLE9BQU8sQ0FBQztBQUN6RCxnQkFBTSxhQUFhLGdCQUFnQixhQUFhLElBQUksZ0JBQWdCQTtBQUNwRSxjQUFJLGtCQUFrQixVQUFVLEdBQUc7QUFDL0IsdUJBQ0ssaUJBQWlCLEVBQ2pCLE1BQU0sc0NBQXNDLGdCQUFnQixjQUFjLEdBQUcsZUFBZSxXQUFXO0FBQUEsVUFDaEg7QUFDQSxzQkFBWSxXQUFXLFdBQVcsTUFBTSxNQUFNLE1BQU0sWUFBWTtBQUNoRSxvQkFBVSxXQUFXLE9BQU87QUFBQSxRQUNoQyxXQUNTLGtDQUFrQyxPQUFPLEdBQUc7QUFDakQsZ0JBQU0sYUFBYUEsT0FBTSxNQUFNLE9BQU8sT0FBTztBQUM3QyxjQUFJLGtCQUFrQixVQUFVLEdBQUc7QUFDL0IsdUJBQ0ssaUJBQWlCLEVBQ2pCLE1BQU0sc0NBQXNDLGdCQUFnQixjQUFjLEdBQUcsZUFBZSxXQUFXO0FBQUEsVUFDaEg7QUFDQSxpQkFBTyxLQUFLLGVBQWUsT0FBTyxFQUFFLFFBQVEsU0FBTztBQUMvQyx1QkFBVyxPQUFPLEtBQUssUUFBUSxJQUFJO0FBQUEsVUFDdkMsQ0FBQztBQUNELHNCQUFZLFdBQVcsV0FBVyxNQUFNLE1BQU0sTUFBTSxZQUFZO0FBQ2hFLG9CQUFVLFdBQVcsT0FBTztBQUFBLFFBQ2hDO0FBQ0EsWUFBSSxDQUFDQSxPQUFNLFdBQVcsR0FBRztBQUNyQiwwQkFBZ0Isb0JBQW9CLGdCQUFnQixXQUFXLGNBQWM7QUFBQSxRQUNqRjtBQUNBLGNBQU0sY0FBYyxpQkFDZixNQUFNLENBQUMsRUFDUCxPQUFPLGVBQWUsV0FBVztBQUN0Qyx3QkFBZ0IsV0FBV0EsUUFBTyxhQUFhLElBQUk7QUFDbkQsWUFBSSxDQUFDQSxPQUFNLFdBQVcsR0FBRztBQUNyQixVQUFBQSxPQUFNLGVBQWUsV0FBVyxTQUFTLGVBQWVBLE9BQU0sT0FBTyxPQUFPLENBQUNJLFFBQU87QUFBQSxRQUN4RjtBQUNBLFlBQUksZUFBZSxXQUFXLENBQUNKLE9BQU0sV0FBVyxHQUFHO0FBQy9DLFVBQUFBLE9BQU0sY0FBYztBQUNwQixnQkFBTSxxQkFBcUIsQ0FBQyxDQUFDQSxPQUFNLFdBQVcsRUFBRSxjQUFjO0FBQzlELFVBQUFBLE9BQU0sYUFBYSxXQUFXLGtCQUFrQjtBQUNoRCxzQkFBWSxnQkFBZ0IsV0FBV0EsUUFBTyxhQUFhLEtBQUs7QUFDaEUsY0FBSTtBQUNKLGNBQUlGLFdBQVUsU0FBUyxHQUFHO0FBQ3RCLDRCQUFnQixVQUFVLEtBQUssVUFBUSxlQUFlLFFBQVEsSUFBSSxDQUFDO0FBQUEsVUFDdkUsT0FDSztBQUNELDRCQUFnQixlQUFlLFFBQVEsU0FBUztBQUFBLFVBQ3BEO0FBQ0EsZ0JBQU0sdUJBQXVCRSxPQUFNLHdCQUF3QjtBQUMzRCxjQUFJRixXQUFVLGFBQWEsR0FBRztBQUMxQixZQUFBRSxPQUFNLGlCQUFpQixFQUFFLGlCQUFpQjtBQUMxQywwQkFDSyxLQUFLLFdBQVM7QUFDZixrQkFBSSxzQkFBc0I7QUFDdEIscUNBQXFCLEtBQUs7QUFBQSxjQUM5QjtBQUFBLFlBQ0osQ0FBQyxFQUNJLE1BQU0sQ0FBQUssV0FBUztBQUNoQixrQkFBSTtBQUNBLGdCQUFBTCxPQUFNLGlCQUFpQixFQUFFLEtBQUssTUFBTUssTUFBSztBQUFBLGNBQzdDLFNBQ08sS0FBUDtBQUFBLGNBQ0E7QUFBQSxZQUNKLENBQUMsRUFDSSxLQUFLLE1BQU07QUFDWixjQUFBTCxPQUFNLGlCQUFpQixFQUFFLHVCQUF1QjtBQUFBLFlBQ3BELENBQUM7QUFBQSxVQUNMLE9BQ0s7QUFDRCxnQkFBSSxzQkFBc0I7QUFDdEIsbUNBQXFCLGFBQWE7QUFBQSxZQUN0QztBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQ0EsWUFBSUksVUFBUztBQUNULHlCQUFlLFNBQVMsSUFBSTtBQUM1Qix5QkFBZSxhQUFhLElBQUk7QUFBQSxRQUNwQztBQUNBLG1CQUFXLGVBQWUsTUFBTSxTQUFTO0FBQ3pDLFlBQUksV0FBVztBQUNYLHlCQUFlLE1BQU0sT0FBTyxXQUFXLElBQUksUUFBUTtBQUN2RCxlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsa0JBQWtCSixRQUFPO0FBQzlCLGVBQVEsQ0FBQ0EsT0FBTSxpQkFBaUIsRUFBRSxpQkFBaUIsS0FDL0NBLE9BQU0saUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVc7QUFBQSxNQUN2RDtBQUNBLGVBQVMsc0NBQXNDLGdCQUFnQixnQkFBZ0I7QUFDM0UsY0FBTSxJQUFJLGVBQWUsS0FBSyxlQUFlLFFBQVEsSUFDL0MsZUFBZSxTQUFTLFFBQVEsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLElBQ3pELGVBQWU7QUFDckIsY0FBTSxLQUFLLGVBQWUsT0FBTyxDQUFBTSxPQUFLO0FBQ2xDLGlCQUFPLENBQUMsZUFBZSxLQUFLQSxFQUFDO0FBQUEsUUFDakMsQ0FBQztBQUNELFdBQUcsS0FBSyxDQUFDO0FBQ1QsZUFBTyxNQUFNLEdBQUcsS0FBSyxHQUFHO0FBQUEsTUFDNUI7QUFDQSxNQUFBSCxNQUFLLHNCQUFzQixTQUFVSCxRQUFPO0FBQ3hDLDZCQUFxQixnQkFBZ0IsUUFBV0QsS0FBSTtBQUNwRCxZQUFJLGtCQUFrQkMsTUFBSyxHQUFHO0FBQzFCLGdCQUFNLGdCQUFnQixlQUFlLEtBQUssZUFBZSxRQUFRLElBQzNELGVBQWUsV0FDZixlQUFlLFNBQVMsUUFBUSxjQUFjLEtBQUs7QUFDekQsVUFBQUEsT0FBTSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsZUFBZSxXQUFXO0FBQUEsUUFDNUU7QUFDQSxjQUFNLFVBQVUsZUFBZTtBQUMvQixZQUFJLHlCQUF5QixPQUFPLEdBQUc7QUFDbkMsa0JBQVFBLE1BQUs7QUFBQSxRQUNqQixXQUNTLENBQUMsMkJBQTJCLE9BQU8sR0FBRztBQUMzQyxpQkFBTyxLQUFLLE9BQU8sRUFBRSxRQUFRLFNBQU87QUFDaEMsWUFBQUEsT0FBTSxPQUFPLEtBQUssUUFBUSxJQUFJO0FBQUEsVUFDbEMsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNKO0FBQ0EsZUFBUyxvQkFBb0IsZ0JBQWdCLE1BQU0sU0FBUztBQUN4RCxhQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sUUFBUSxTQUFTLE1BQU07QUFDN0MsY0FBTSxXQUFXLGVBQWUsU0FBUyxNQUFNLENBQUM7QUFDaEQsY0FBTSxXQUFXLGVBQWUsU0FBUyxNQUFNLENBQUM7QUFDaEQsY0FBTSxnQkFBZ0IsQ0FBQztBQUN2QixRQUFBRSxZQUFXLGdCQUFnQixTQUFTLFFBQVEsS0FBSyxFQUFFLE1BQU07QUFDekQsZUFBTyxTQUFTLFFBQVE7QUFDcEIsZ0JBQU0sU0FBUyxTQUFTLE1BQU07QUFDOUIsNkJBQW1CLFFBQVEsTUFBTSxhQUFhO0FBQUEsUUFDbEQ7QUFDQSxlQUFPLFNBQVMsUUFBUTtBQUNwQixnQkFBTSxRQUFRLFNBQVMsTUFBTTtBQUM3Qiw2QkFBbUIsT0FBTyxNQUFNLGFBQWE7QUFBQSxRQUNqRDtBQUNBLGFBQUssSUFBSSxRQUFRLFNBQVMsT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3hELCtCQUF1QixNQUFNLGVBQWVDLE1BQUssa0JBQWtCLGVBQWUsUUFBUSxDQUFDO0FBQzNGLGVBQU87QUFBQSxNQUNYO0FBQ0EsZUFBUyxtQkFBbUIsWUFBWSxNQUFNLGVBQWU7QUFDekQsY0FBTSxNQUFNLFdBQVcsSUFBSTtBQUMzQixZQUFJLFdBQVcsVUFBVTtBQUNyQix3QkFBYyxPQUFPLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLE1BQU07QUFBQSxRQUNwRCxPQUNLO0FBQ0QsY0FBSSxLQUFLLEVBQUU7QUFDUCwwQkFBYyxPQUFPLENBQUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxRQUNwRDtBQUFBLE1BQ0o7QUFDQSxlQUFTLHVCQUF1QixNQUFNLGVBQWUsY0FBYztBQUMvRCxjQUFNLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBR0gsT0FBTSxXQUFXLENBQUM7QUFDcEQsZ0JBQVEsVUFBVSxPQUFPLE9BQU8sYUFBYSxTQUFTLFFBQVEsT0FBTztBQUNyRSxtQkFBVyxPQUFPLE9BQU8sS0FBSyxhQUFhLEtBQUssR0FBRztBQUMvQyxrQkFBUSxNQUFNLFFBQVEsUUFBUSxNQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU8sYUFBYSxNQUFNLElBQUk7QUFBQSxRQUNsRjtBQUNBLGdCQUFRLFFBQVEsUUFBUSxNQUFNLE9BQU8sYUFBYSxLQUFLO0FBQ3ZELGdCQUFRLFNBQVMsQ0FBQztBQUNsQixjQUFNLFdBQVcsQ0FBQztBQUNsQixlQUFPLEtBQUssYUFBYSxFQUFFLFFBQVEsU0FBTztBQUN0Qyx3QkFBYyxLQUFLLElBQUksV0FBUztBQUM1QixnQkFBSSxRQUFRLGNBQWM7QUFDdEIsc0JBQVEsSUFBSSxPQUFPO0FBQ3ZCLHFCQUFTLEtBQUssS0FBSyxLQUFLO0FBQ3hCLHFCQUFTLEtBQUssS0FBSztBQUFBLFVBQ3ZCLENBQUM7QUFBQSxRQUNMLENBQUM7QUFDRCxZQUFJLENBQUMsU0FBUztBQUNWO0FBQ0osY0FBTSxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsUUFBUSxlQUFlO0FBQUEsVUFDcEQsY0FBYztBQUFBLFFBQ2xCLENBQUM7QUFDRCxjQUFNLFNBQVNELE1BQUssT0FBTyxTQUFTLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQUEsVUFDckUsZUFBZTtBQUFBLFFBQ25CLENBQUMsQ0FBQztBQUNGLFlBQUksT0FBTyxPQUFPO0FBQ2QsVUFBQUMsT0FBTSxpQkFBaUIsRUFBRSxLQUFLLE9BQU8sTUFBTSxTQUFTLE9BQU8sS0FBSztBQUFBLFFBQ3BFLE9BQ0s7QUFDRCxnQkFBTSxpQkFBaUIsT0FBTyxLQUFLLGFBQWE7QUFDaEQsaUJBQU8sS0FBSyxhQUFhLEVBQUUsUUFBUSxTQUFPO0FBQ3RDLDJCQUFlLEtBQUssR0FBRyxPQUFPLFFBQVEsSUFBSTtBQUFBLFVBQzlDLENBQUM7QUFDRCxpQkFBTyxLQUFLLE9BQU8sSUFBSSxFQUFFLFFBQVEsU0FBTztBQUNwQyxnQkFBSSxlQUFlLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDcEMsa0JBQUksQ0FBQyxjQUFjO0FBQ2YsOEJBQWMsT0FBTyxPQUFPLEtBQUs7QUFDckMsbUJBQUssT0FBTyxPQUFPLEtBQUs7QUFBQSxZQUM1QjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNKO0FBQ0EsTUFBQUcsTUFBSyxvQkFBb0IsU0FBVSxXQUFXO0FBQzFDLGNBQU0sZUFBZTtBQUFBLFVBQ2pCLE9BQU8sQ0FBQztBQUFBLFVBQ1IsU0FBUyxDQUFDO0FBQUEsVUFDVixPQUFPLENBQUM7QUFBQSxVQUNSLFFBQVEsQ0FBQztBQUFBLFFBQ2I7QUFDQSxjQUFNLFNBQVMsYUFBYSxTQUFTO0FBQ3JDLGVBQU8sU0FBUyxRQUFRLE9BQUs7QUFDekIsZ0JBQU0sQ0FBQyxRQUFRLE9BQU8sSUFBSSxFQUFFO0FBQzVCLGNBQUksRUFBRSxVQUFVO0FBQ1oseUJBQWEsTUFBTSxLQUFLLEdBQUc7QUFDM0IseUJBQWEsUUFBUSxPQUFPLENBQUM7QUFBQSxVQUNqQztBQUNBLHVCQUFhLE1BQU0sT0FBTztBQUMxQix1QkFBYSxPQUFPLE9BQU87QUFBQSxRQUMvQixDQUFDO0FBQ0QsZUFBTyxTQUFTLFFBQVEsT0FBSztBQUN6QixnQkFBTSxDQUFDLFFBQVEsT0FBTyxJQUFJLEVBQUU7QUFDNUIsY0FBSSxFQUFFLFVBQVU7QUFDWix5QkFBYSxNQUFNLEtBQUssR0FBRztBQUMzQix5QkFBYSxRQUFRLE9BQU8sQ0FBQztBQUFBLFVBQ2pDO0FBQ0EsdUJBQWEsTUFBTSxPQUFPO0FBQUEsUUFDOUIsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxRQUFRLE1BQU07QUFDZixtQkFBVyxDQUFDO0FBQ1osbUJBQVcsQ0FBQztBQUNaLHlCQUFpQjtBQUNqQixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxZQUFNLFVBQVUsQ0FBQztBQUNqQixNQUFBQSxNQUFLLFNBQVMsTUFBTTtBQUNoQixnQkFBUSxLQUFLO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUNBLE1BQUFBLE1BQUssV0FBVyxNQUFNO0FBQ2xCLGNBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsNkJBQXFCLFFBQVEsUUFBV0osS0FBSTtBQUM1QyxTQUFDLEVBQUUsVUFBVSxVQUFVLGVBQWUsSUFBSTtBQUFBLE1BQzlDO0FBQ0EsYUFBT0k7QUFBQSxJQUNYO0FBQ0EsYUFBUywyQkFBMkIsU0FBUztBQUN6QyxhQUFRLE9BQU8sWUFBWSxZQUN2QixDQUFDLENBQUMsUUFBUSxXQUNWLE9BQU8sUUFBUSxZQUFZO0FBQUEsSUFDbkM7QUFDQSxhQUFTLG9CQUFvQixLQUFLO0FBQzlCLFVBQUksSUFBSSxNQUFNLE9BQUssT0FBTyxNQUFNLFFBQVEsR0FBRztBQUN2QyxlQUFPO0FBQUEsTUFDWCxPQUNLO0FBQ0QsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsYUFBUyx5QkFBeUIsU0FBUztBQUN2QyxhQUFPLE9BQU8sWUFBWTtBQUFBLElBQzlCO0FBQ0EsYUFBUyxrQ0FBa0MsU0FBUztBQUNoRCxhQUFPLE9BQU8sWUFBWTtBQUFBLElBQzlCO0FBQ0EsYUFBUywyQkFBMkIsS0FBSztBQUNyQyxhQUFPLE9BQU8sUUFBUSxZQUFZLENBQUMsTUFBTSxRQUFRLEdBQUc7QUFBQSxJQUN4RDtBQUVBLGFBQVMsWUFBWSxVQUFVO0FBQzNCLFVBQUksT0FBTyxZQUFZO0FBQ25CO0FBQ0osT0FBQyxRQUFRLFFBQVEsUUFBUSxNQUFNLEVBQUUsUUFBUSxhQUFXO0FBQ2hELGNBQU0sU0FBUztBQUNmLFlBQUksT0FBTyxXQUNQLE9BQU8sU0FDUCxPQUFPLE9BQU8sUUFBUSxnQkFBZ0IsWUFBWTtBQUNsRCxpQkFBTyxRQUFRLFlBQVksUUFBUTtBQUFBLFFBQ3ZDO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTDtBQUVBLGFBQVMsTUFBTUgsUUFBT08sT0FBTVIsT0FBTTtBQUM5QixZQUFNLEtBQUtRLE1BQUs7QUFDaEIsWUFBTUosUUFBTyxDQUFDO0FBQ2QsWUFBTSxRQUFRLENBQUM7QUFDZixNQUFBQSxNQUFLLFNBQVMsU0FBUyxPQUFPLEdBQUc7QUFDN0IsY0FBTSxLQUFLLENBQUM7QUFBQSxNQUNoQjtBQUNBLFVBQUksY0FBYztBQUNsQixVQUFJLGlCQUFpQjtBQUNyQixNQUFBQSxNQUFLLGlCQUFpQixTQUFTLGlCQUFpQixPQUFPLE1BQU0sTUFBTTtBQUMvRCxpQkFBUyxvQkFBb0I7QUFDekIsaUJBQU8sT0FBTyxTQUFTLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSTtBQUFBLFFBQ2hFO0FBQ0EsY0FBTSxDQUFDLFNBQVMsT0FBTyxJQUFJLGtCQUFrQjtBQUM3QyxzQkFBYztBQUNkLHlCQUFpQjtBQUNqQixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxVQUFJLGdCQUFnQjtBQUNwQixNQUFBQSxNQUFLLE9BQU8sU0FBUyxLQUFLLEtBQUssS0FBSztBQUNoQyxjQUFNSyxVQUFTUixPQUFNLG1CQUFtQjtBQUN4QyxZQUFJLE1BQU0sUUFBUTtBQUNkLG1CQUFTLElBQUksTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRztBQUN4QyxrQkFBTSxHQUFHLEtBQUssS0FBS0csS0FBSTtBQUFBLFVBQzNCO0FBQUEsUUFDSixPQUNLO0FBQ0QsY0FBSUgsT0FBTSxlQUFlO0FBQ3JCLHdCQUFZLElBQUk7QUFDcEIsY0FBSSxDQUFDLGVBQWU7QUFDaEIsNEJBQWdCO0FBQ2hCLGdCQUFJLGdCQUFnQjtBQUNoQixjQUFBQSxPQUFNLFNBQVMsT0FBTztBQUN0QixjQUFBUSxRQUFPLE1BQU07QUFBQSxZQUNqQjtBQUNBLGdCQUFJLE9BQU87QUFDUCxjQUFBQSxRQUFPLE1BQU0sT0FBTyxHQUFHO0FBQzNCLGdCQUFJLGFBQWE7QUFDYixrQkFBSSxPQUFPO0FBQ1AsZ0JBQUFBLFFBQU8sTUFBTSxFQUFFO0FBQ25CLGNBQUFBLFFBQU8sTUFBTSxXQUFXO0FBQUEsWUFDNUI7QUFBQSxVQUNKO0FBQ0EsZ0JBQU0sT0FBTyxJQUFJLE9BQU8sR0FBRztBQUMzQixjQUFJUixPQUFNLGVBQWUsR0FBRztBQUN4QixtQkFBT0EsT0FBTSxLQUFLLENBQUM7QUFBQSxVQUN2QixXQUNTQSxPQUFNLGtCQUFrQixHQUFHO0FBQ2hDLG1CQUFPQSxPQUFNLEtBQUssR0FBRyxHQUFHO0FBQUEsVUFDNUIsT0FDSztBQUNELGtCQUFNO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsVUFBSSxTQUFTLENBQUM7QUFDZCxVQUFJLGdCQUFnQjtBQUNwQixNQUFBRyxNQUFLLFFBQVEsQ0FBQyxLQUFLLGdCQUFnQjtBQUMvQixZQUFJLFFBQVEsTUFBTTtBQUNkLDBCQUFnQjtBQUNoQixtQkFBUyxDQUFDO0FBQ1YsaUJBQU9BO0FBQUEsUUFDWDtBQUNBLHdCQUFnQjtBQUNoQixlQUFPLEtBQUssQ0FBQyxLQUFLLGVBQWUsRUFBRSxDQUFDO0FBQ3BDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssV0FBVyxNQUFNO0FBQ2xCLGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxtQkFBbUIsTUFBTTtBQUMxQixlQUFPO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUsseUJBQXlCLE1BQU07QUFDaEMsZUFBTyxHQUFHLGNBQWM7QUFBQSxNQUM1QjtBQUNBLFVBQUksV0FBVyxDQUFDO0FBQ2hCLE1BQUFBLE1BQUssVUFBVSxDQUFDLEtBQUssZ0JBQWdCO0FBQ2pDLGlCQUFTLEtBQUssQ0FBQyxLQUFLLGVBQWUsRUFBRSxDQUFDO0FBQUEsTUFDMUM7QUFDQSxVQUFJLFdBQVcsQ0FBQztBQUNoQixNQUFBQSxNQUFLLFVBQVUsU0FBU0MsU0FBUSxLQUFLLGFBQWEsV0FBVyxTQUFTLGFBQWEsT0FBTztBQUN0RixZQUFJLFdBQVc7QUFDWCxxQkFBVyxTQUFTLElBQUksY0FBWTtBQUNoQyxxQkFBUyxLQUFLO0FBQ2QsbUJBQU87QUFBQSxVQUNYLENBQUM7QUFBQSxRQUNMO0FBQ0EsaUJBQVMsS0FBSyxDQUFDLEtBQUssZUFBZSxJQUFJLFdBQVcsU0FBUyxVQUFVLENBQUM7QUFBQSxNQUMxRTtBQUNBLE1BQUFELE1BQUssY0FBYyxNQUFNO0FBQ3pCLFVBQUksZUFBZSxDQUFDO0FBQ3BCLE1BQUFBLE1BQUssV0FBVyxTQUFTLFNBQVMsV0FBVyxNQUFNO0FBQy9DLFlBQUksTUFBTSxRQUFRLFNBQVMsR0FBRztBQUMxQixvQkFBVSxRQUFRLE9BQUs7QUFDbkIsWUFBQUEsTUFBSyxTQUFTLEdBQUcsSUFBSTtBQUFBLFVBQ3pCLENBQUM7QUFBQSxRQUNMLFdBQ1MsT0FBTyxjQUFjLFVBQVU7QUFDcEMsaUJBQU8sS0FBSyxTQUFTLEVBQUUsUUFBUSxPQUFLO0FBQ2hDLFlBQUFBLE1BQUssU0FBUyxHQUFHLFVBQVUsRUFBRTtBQUFBLFVBQ2pDLENBQUM7QUFBQSxRQUNMLE9BQ0s7QUFDRCx1QkFBYSxhQUFhO0FBQUEsUUFDOUI7QUFBQSxNQUNKO0FBQ0EsTUFBQUEsTUFBSyxrQkFBa0IsTUFBTTtBQUM3QixVQUFJLFVBQVUsQ0FBQztBQUNmLE1BQUFBLE1BQUssU0FBUyxTQUFPO0FBQ2pCLGdCQUFRLEtBQUssR0FBRztBQUFBLE1BQ3BCO0FBQ0EsVUFBSSxVQUFVO0FBQ2QsVUFBSTtBQUNKLE1BQUFBLE1BQUssT0FBTyxVQUFRO0FBQ2hCLGtCQUFVO0FBQ1YsZUFBTztBQUFBLE1BQ1g7QUFDQSxlQUFTLFVBQVU7QUFDZixZQUFJLENBQUMsU0FBUztBQUNWLGlCQUFPLFlBQVk7QUFDbkIsb0JBQVU7QUFBQSxRQUNkO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxZQUFNLHdCQUF3QjtBQUM5QixNQUFBQSxNQUFLLGtCQUFrQixTQUFPLHdCQUF3QjtBQUN0RCxNQUFBQSxNQUFLLE9BQU8sU0FBUyxPQUFPO0FBQ3hCLFlBQUk7QUFDQSxpQkFBTztBQUNYLHlCQUFpQjtBQUNqQixjQUFNLFNBQVNILE9BQU0sbUJBQ2ZBLE9BQU0sS0FDTkQsTUFBSyxLQUFLLFNBQVNDLE9BQU0sRUFBRTtBQUNqQyxjQUFNLGtCQUFrQkEsT0FBTSxtQkFBbUI7QUFDakQsY0FBTSxtQkFBbUJBLE9BQU0sb0JBQW9CO0FBQ25ELGNBQU0sb0JBQW9CQSxPQUFNLHFCQUFxQjtBQUNyRCxjQUFNLFNBQVNBLE9BQU0sVUFBVTtBQUMvQixjQUFNLFVBQVVBLE9BQU0sV0FBVztBQUNqQyxZQUFJLE9BQU8sQ0FBQztBQUNaLGVBQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxZQUFZLENBQUM7QUFDNUMsZUFBTyxLQUFLLE9BQU8sT0FBTyxLQUFLLGVBQWUsQ0FBQztBQUMvQyxlQUFPLEtBQUssT0FBTyxPQUFPLEtBQUssZ0JBQWdCLENBQUM7QUFDaEQsZUFBTyxLQUFLLE9BQU8sT0FBTyxLQUFLLFFBQVEsT0FBTyxDQUFDO0FBQy9DLGVBQU8sS0FBSyxPQUFPLG1CQUFtQjtBQUN0QyxlQUFPLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLFFBQVE7QUFDekMsY0FBSSxRQUFRO0FBQ1IsZ0JBQUksT0FBTztBQUNmLGlCQUFPO0FBQUEsUUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ04sY0FBTSxVQUFVLFFBQVE7QUFDeEIsY0FBTSxLQUFLRCxNQUFLLE1BQU07QUFBQSxVQUNsQixPQUFPO0FBQUEsVUFDUCxNQUFNLENBQUMsQ0FBQztBQUFBLFFBQ1osQ0FBQztBQUNELFlBQUksQ0FBQyxlQUFlO0FBQ2hCLGNBQUksT0FBTyxRQUFRO0FBQ2YsbUJBQU8sUUFBUSxDQUFBRSxXQUFTO0FBQ3BCLGlCQUFHLElBQUksR0FBR0EsT0FBTSxHQUFHLFFBQVEsUUFBUSxNQUFNLEdBQUc7QUFDNUMsa0JBQUlBLE9BQU0sSUFBSTtBQUNWLG1CQUFHLElBQUksRUFBRSxNQUFNLEdBQUdBLE9BQU0sTUFBTSxTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFBQSxjQUN6RDtBQUFBLFlBQ0osQ0FBQztBQUNELGVBQUcsSUFBSTtBQUFBLFVBQ1gsV0FDUyxTQUFTLFFBQVE7QUFDdEIsZ0JBQUksSUFBSTtBQUNSLGdCQUFJLGlCQUFpQixHQUFHO0FBQ3BCLGtCQUFJLEdBQUcsV0FBVyxHQUFHLFNBQVM7QUFBQTtBQUFBLFlBQ2xDLE9BQ0s7QUFDRCxrQkFBSSxHQUFHLFdBQVcsR0FBRyxTQUFTO0FBQUE7QUFBQSxZQUNsQztBQUNBLGVBQUcsSUFBSSxHQUFHLEdBQUc7QUFBQSxVQUNqQjtBQUFBLFFBQ0o7QUFDQSxZQUFJLFNBQVMsUUFBUTtBQUNqQixhQUFHLElBQUksR0FBRyxXQUFXLENBQUM7QUFDdEIsZ0JBQU0sVUFBVUQsT0FBTSxXQUFXO0FBQ2pDLGdCQUFNLGlCQUFpQixRQUFRLFNBQVMsU0FDbEMsR0FBRyxRQUFRLFNBQVMsS0FBSyxHQUFHLE9BQzVCO0FBQ04sY0FBSUEsT0FBTSx1QkFBdUIsRUFBRSxxQkFBcUIsTUFBTTtBQUMxRCx1QkFBVyxTQUFTLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLGNBQWMsRUFBRSxFQUFFLENBQUM7QUFBQSxVQUMvRDtBQUNBLG1CQUFTLFFBQVEsQ0FBQUksYUFBVztBQUN4QixrQkFBTSxnQkFBZ0IsR0FBRyxVQUFVLGlCQUFpQkEsU0FBUSxHQUFHLFFBQVEsVUFBVSxFQUFFO0FBQ25GLGVBQUcsS0FBSztBQUFBLGNBQ0osTUFBTTtBQUFBLGNBQ04sU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxjQUNwQixPQUFPLFNBQVMsVUFBVSxTQUFTLEdBQUcsU0FBUyxnQkFBZ0IsSUFBSTtBQUFBLFlBQ3ZFLEdBQUcsRUFBRSxNQUFNQSxTQUFRLEdBQUcsQ0FBQztBQUN2QixrQkFBTSxRQUFRLENBQUM7QUFDZixnQkFBSUEsU0FBUTtBQUNSLG9CQUFNLEtBQUssSUFBSSxHQUFHLFNBQVMsSUFBSTtBQUNuQyxnQkFBSUEsU0FBUSxNQUFNQSxTQUFRLEdBQUcsUUFBUTtBQUNqQyxvQkFBTSxLQUFLLElBQUksR0FBRyxVQUFVLEtBQUtBLFNBQVEsR0FBRyxLQUFLLElBQUksSUFBSTtBQUFBLFlBQzdEO0FBQ0EsZ0JBQUlBLFNBQVEsSUFBSTtBQUNaLGtCQUFJLE9BQU9BLFNBQVEsT0FBTyxVQUFVO0FBQ2hDLHNCQUFNLEtBQUssSUFBSSxHQUFHLGtCQUFrQkEsU0FBUSxFQUFFLElBQUk7QUFBQSxjQUN0RCxPQUNLO0FBQ0Qsc0JBQU0sS0FBSyxJQUFJLEdBQUcsWUFBWSxJQUFJO0FBQUEsY0FDdEM7QUFBQSxZQUNKO0FBQ0EsZ0JBQUksTUFBTSxRQUFRO0FBQ2QsaUJBQUcsSUFBSTtBQUFBLGdCQUNILE1BQU0sTUFBTSxLQUFLLEdBQUc7QUFBQSxnQkFDcEIsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxnQkFDcEIsT0FBTztBQUFBLGNBQ1gsQ0FBQztBQUFBLFlBQ0wsT0FDSztBQUNELGlCQUFHLElBQUk7QUFBQSxZQUNYO0FBQUEsVUFDSixDQUFDO0FBQ0QsYUFBRyxJQUFJO0FBQUEsUUFDWDtBQUNBLGNBQU0sYUFBYSxPQUFPLEtBQUssUUFBUSxLQUFLLEtBQUssQ0FBQyxHQUFHLE9BQU8sT0FBTyxLQUFLSixPQUFNLE9BQU8sVUFBVSxLQUFLLENBQUMsQ0FBQztBQUN0RyxlQUFPLEtBQUssT0FBTyxTQUFPLENBQUNBLE9BQU0sT0FBTyxXQUFXLFFBQy9DLFVBQVUsTUFBTSxZQUFVLFFBQVEsTUFBTSxVQUFVLENBQUMsR0FBRyxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDOUUsY0FBTSxlQUFlLEdBQUcsVUFBVTtBQUNsQyxZQUFJLENBQUMsT0FBTztBQUNSLGlCQUFPLGdCQUFnQixDQUFDO0FBQzVCLHlCQUFpQixNQUFNLFFBQVEsT0FBTyxRQUFRLFlBQVk7QUFDMUQsY0FBTSxlQUFlLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7QUFDbkQsY0FBTSxrQkFBa0IsT0FBTyxLQUFLLE1BQU0sRUFDckMsT0FBTyxlQUFhLE9BQU8sV0FBVyxTQUFTLENBQUMsRUFDaEQsSUFBSSxlQUFhO0FBQ2xCLGdCQUFNLGlCQUFpQixPQUFPLFdBQ3pCLE9BQU8sbUJBQW1CLEVBQzFCLElBQUksU0FBTztBQUNaLGdCQUFJLENBQUMsVUFBVSxRQUFRLEdBQUc7QUFDdEIscUJBQU87QUFDWCxxQkFBUyxJQUFJLEdBQUcsV0FBVyxXQUFXLFVBQVUsUUFBUSxRQUFXLEtBQUs7QUFDcEUsa0JBQUksRUFBRSxRQUFRLE1BQU0sYUFBYSxDQUFDLEdBQUcsUUFBUSxHQUFHO0FBQzVDLHVCQUFPO0FBQUEsWUFDZjtBQUNBLG1CQUFPO0FBQUEsVUFDWCxDQUFDO0FBQ0QsaUJBQU8sRUFBRSxXQUFXLGVBQWU7QUFBQSxRQUN2QyxDQUFDLEVBQ0ksT0FBTyxDQUFDLEVBQUUsZUFBZSxNQUFNLGVBQWUsU0FBUyxDQUFDLEVBQ3hELElBQUksQ0FBQyxFQUFFLFdBQVcsZUFBZSxNQUFNO0FBQ3hDLGdCQUFNLFdBQVcsZUFBZSxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ2pELGdCQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQ1YsT0FBTyxRQUFRLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFDL0IsSUFBSSxRQUFNO0FBQ1gsa0JBQUksY0FBY0csTUFBSyx1QkFBdUI7QUFDMUMsdUJBQU87QUFBQSxtQkFDTjtBQUNELHdCQUFTLFVBQVUsS0FBSyxFQUFFLElBQ3BCLENBQUMsUUFBUSxRQUFRLFFBQVEsR0FBRyxJQUN4QixNQUNBLE9BQ0osR0FBRyxTQUFTLElBQ1IsT0FDQSxPQUFPO0FBQUEsY0FDckI7QUFBQSxZQUNKLENBQUMsRUFDSSxLQUFLLENBQUMsS0FBSyxRQUFRLGFBQWEsR0FBRyxNQUFNLGFBQWEsR0FBRyxJQUN4RCxJQUNBLGFBQWEsR0FBRyxJQUNaLElBQ0EsRUFBRSxFQUNQLEtBQUssSUFBSTtBQUNkLG1CQUFPO0FBQUEsVUFDWCxHQUFHLENBQUMsQ0FBQztBQUNMLGlCQUFPLEVBQUUsV0FBVyxnQkFBZ0IsU0FBUztBQUFBLFFBQ2pELENBQUM7QUFDRCxjQUFNLG9CQUFvQixnQkFDckIsT0FBTyxDQUFDLEVBQUUsVUFBVSxNQUFNLGNBQWNBLE1BQUssdUJBQXVCLENBQUMsRUFDckUsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLFNBQVMsTUFBTSxDQUFDLGVBQWUsTUFBTSxTQUFPLGFBQWEsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUNyRyxZQUFJLG1CQUFtQjtBQUNuQiwwQkFDSyxPQUFPLENBQUMsRUFBRSxVQUFVLE1BQU0sY0FBY0EsTUFBSyx1QkFBdUIsQ0FBQyxFQUNyRSxRQUFRLENBQUMsRUFBRSxnQkFBZ0IsU0FBUyxNQUFNO0FBQzNDLDJCQUFlLFFBQVEsU0FBTztBQUMxQixrQkFBSSxhQUFhLFNBQVMsSUFBSSxHQUFHO0FBQzdCLHlCQUFTLE9BQU8sZUFBZSxTQUFTLE1BQU0sT0FBTyxNQUFNO0FBQUEsY0FDL0Q7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMLENBQUM7QUFBQSxRQUNMO0FBQ0Esd0JBQWdCLFFBQVEsQ0FBQyxFQUFFLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtBQUNqRSxhQUFHLElBQUksU0FBUztBQUNoQix5QkFBZSxRQUFRLFNBQU87QUFDMUIsa0JBQU0sVUFBVSxTQUFTO0FBQ3pCLGdCQUFJLE9BQU8sYUFBYSxRQUFRO0FBQ2hDLGdCQUFJLE9BQU87QUFDWCxnQkFBSSxDQUFDLEtBQUssWUFBWSxxQkFBcUI7QUFDdkMscUJBQU8sR0FBRyxLQUFLLFVBQVUsc0JBQXNCLE1BQU0sQ0FBQztBQUMxRCxnQkFBSSxDQUFDLFFBQVEsUUFBUSxRQUFRLEdBQUc7QUFDNUIscUJBQU8sSUFBSSxHQUFHLFNBQVM7QUFDM0IsZ0JBQUksQ0FBQyxRQUFRLE1BQU0sUUFBUSxHQUFHO0FBQzFCLHFCQUFPLElBQUksR0FBRyxPQUFPO0FBQ3pCLGdCQUFJLENBQUMsUUFBUSxPQUFPLFFBQVEsR0FBRztBQUMzQixxQkFBTyxJQUFJLEdBQUcsUUFBUTtBQUMxQixnQkFBSSxDQUFDLFFBQVEsVUFBVSxRQUFRLEdBQUc7QUFDOUIscUJBQU8sSUFBSSxHQUFHLFFBQVE7QUFDMUIsZ0JBQUksQ0FBQyxRQUFRLE1BQU0sUUFBUSxHQUFHO0FBQzFCLHFCQUFPLElBQUksR0FBRyxPQUFPO0FBQ3pCLGdCQUFJLENBQUMsUUFBUSxPQUFPLFFBQVEsR0FBRztBQUMzQixxQkFBTyxJQUFJLEdBQUcsUUFBUTtBQUMxQixrQkFBTSxrQkFBa0IsQ0FBQyxlQUFlLE9BQU8sZUFBZSxXQUN4RCxJQUFJLEdBQUcsa0JBQWtCLFVBQVUsT0FDbkMsSUFBSSxHQUFHLFlBQVk7QUFDekIsa0JBQU0sUUFBUTtBQUFBLGNBQ1YsT0FBTyxvQkFDRCxnQkFBZ0Isa0JBQWtCLElBQUksSUFDdEM7QUFBQSxjQUNOO0FBQUEsY0FDQSxPQUFPLGtCQUFrQixJQUFJLEdBQUcsVUFBVSxPQUFPO0FBQUEsY0FDakQsUUFBUSxXQUFXLFFBQVEsUUFBUSxPQUM3QixJQUFJLEdBQUcsVUFBVSxLQUFLQSxNQUFLLGtCQUFrQixRQUFRLFFBQVEsSUFBSSxPQUNqRTtBQUFBLGNBQ04sY0FBYyxRQUFRLFFBQVEsTUFBTSxRQUFRLG1CQUFtQixJQUFJO0FBQUEsWUFDdkUsRUFDSyxPQUFPLE9BQU8sRUFDZCxLQUFLLEdBQUc7QUFDYixlQUFHLEtBQUs7QUFBQSxjQUNKLE1BQU0sUUFBUSxPQUFPO0FBQUEsY0FDckIsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksZUFBZSxPQUFPLENBQUM7QUFBQSxjQUM5QyxPQUFPLFNBQVMsVUFBVSxPQUFPLElBQUk7QUFBQSxZQUN6QyxHQUFHLElBQUk7QUFDUCxnQkFBSTtBQUNBLGlCQUFHLElBQUksRUFBRSxNQUFNLE9BQU8sU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLFFBQVEsQ0FBQztBQUFBO0FBRTdELGlCQUFHLElBQUk7QUFBQSxVQUNmLENBQUM7QUFDRCxhQUFHLElBQUk7QUFBQSxRQUNYLENBQUM7QUFDRCxZQUFJLFNBQVMsUUFBUTtBQUNqQixhQUFHLElBQUksR0FBRyxXQUFXLENBQUM7QUFDdEIsbUJBQVMsUUFBUSxhQUFXO0FBQ3hCLG9CQUFRLEtBQUssUUFBUSxHQUFHLFFBQVEsUUFBUSxNQUFNO0FBQUEsVUFDbEQsQ0FBQztBQUNELG1CQUFTLFFBQVEsYUFBVztBQUN4QixnQkFBSSxRQUFRLE9BQU8sSUFBSTtBQUNuQixpQkFBRyxJQUFJO0FBQUEsZ0JBQ0gsTUFBTSxRQUFRO0FBQUEsZ0JBQ2QsU0FBUyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFBQSxjQUN4QixDQUFDO0FBQUEsWUFDTCxPQUNLO0FBQ0QsaUJBQUcsSUFBSTtBQUFBLGdCQUNILE1BQU0sUUFBUTtBQUFBLGdCQUNkLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQUEsZ0JBQ3BCLE9BQU8sU0FBUyxVQUFVLE9BQU8sSUFBSTtBQUFBLGNBQ3pDLEdBQUc7QUFBQSxnQkFDQyxNQUFNLFFBQVE7QUFBQSxjQUNsQixDQUFDO0FBQUEsWUFDTDtBQUFBLFVBQ0osQ0FBQztBQUNELGFBQUcsSUFBSTtBQUFBLFFBQ1g7QUFDQSxZQUFJLFFBQVEsU0FBUyxHQUFHO0FBQ3BCLGdCQUFNLElBQUksUUFDTCxJQUFJLFlBQVUsT0FBTyxRQUFRLFFBQVEsTUFBTSxDQUFDLEVBQzVDLEtBQUssSUFBSTtBQUNkLGFBQUcsSUFBSSxHQUFHO0FBQUEsQ0FBSztBQUFBLFFBQ25CO0FBQ0EsZUFBTyxHQUFHLFNBQVMsRUFBRSxRQUFRLFFBQVEsRUFBRTtBQUFBLE1BQzNDO0FBQ0EsZUFBUyxTQUFTLE9BQU8sU0FBUyxVQUFVO0FBQ3hDLFlBQUksUUFBUTtBQUNaLFlBQUksQ0FBQyxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3ZCLGtCQUFRLE9BQU8sT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFLLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDN0M7QUFDQSxjQUFNLFFBQVEsT0FBSztBQUNmLGtCQUFRLEtBQUssSUFBSUosTUFBSyxZQUFZLFdBQVcsR0FBRyxZQUFZLFFBQVEsRUFBRSxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLGVBQWUsRUFBRSxFQUFFLEdBQUcsS0FBSztBQUFBLFFBQzlILENBQUM7QUFDRCxZQUFJO0FBQ0Esa0JBQVEsS0FBSyxJQUFJLE9BQU8sVUFBVSxVQUFVLEtBQUssU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNwRSxlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsbUJBQW1CO0FBQ3hCLGNBQU0sa0JBQWtCQyxPQUFNLG1CQUFtQjtBQUNqRCxjQUFNLFVBQVVBLE9BQU0sV0FBVztBQUNqQyxTQUFDLE9BQU8sS0FBSyxRQUFRLEtBQUssS0FBSyxDQUFDLEdBQUcsUUFBUSxTQUFPO0FBQzlDLGtCQUFRLE1BQU0sS0FBSyxRQUFRLFdBQVM7QUFDaEMsZ0JBQUksYUFBYTtBQUNiLGNBQUFHLE1BQUssU0FBUyxLQUFLLGFBQWEsTUFBTTtBQUMxQyxnQkFBSSxTQUFTO0FBQ1QsY0FBQUgsT0FBTSxhQUFhLEtBQUssZ0JBQWdCLE1BQU07QUFDbEQsZ0JBQUksQ0FBQyxRQUFRLFFBQVEsUUFBUSxLQUFLO0FBQzlCLGNBQUFBLE9BQU0sUUFBUSxHQUFHO0FBQ3JCLGdCQUFJLENBQUMsUUFBUSxNQUFNLFFBQVEsS0FBSztBQUM1QixjQUFBQSxPQUFNLE1BQU0sR0FBRztBQUNuQixnQkFBSSxDQUFDLFFBQVEsT0FBTyxRQUFRLEtBQUs7QUFDN0IsY0FBQUEsT0FBTSxPQUFPLEdBQUc7QUFDcEIsZ0JBQUksQ0FBQyxRQUFRLFVBQVUsUUFBUSxLQUFLO0FBQ2hDLGNBQUFBLE9BQU0sVUFBVSxHQUFHO0FBQ3ZCLGdCQUFJLENBQUMsUUFBUSxNQUFNLFFBQVEsS0FBSztBQUM1QixjQUFBQSxPQUFNLE1BQU0sR0FBRztBQUNuQixnQkFBSSxDQUFDLFFBQVEsT0FBTyxRQUFRLEtBQUs7QUFDN0IsY0FBQUEsT0FBTSxPQUFPLEdBQUc7QUFBQSxVQUN4QixDQUFDO0FBQUEsUUFDTCxDQUFDO0FBQUEsTUFDTDtBQUNBLFVBQUk7QUFDSixNQUFBRyxNQUFLLG1CQUFtQixXQUFZO0FBQ2hDLDRCQUFvQixLQUFLLEtBQUs7QUFBQSxNQUNsQztBQUNBLE1BQUFBLE1BQUsseUJBQXlCLFdBQVk7QUFDdEMsNEJBQW9CO0FBQUEsTUFDeEI7QUFDQSxlQUFTLGlCQUFpQixNQUFNLFNBQVMsUUFBUSxjQUFjO0FBQzNELFlBQUksY0FBYyxDQUFDO0FBQ25CLFlBQUksVUFBVTtBQUNkLGVBQU8sS0FBSyxNQUFNLEVBQUUsUUFBUSxXQUFTO0FBQ2pDLHdCQUFjLFlBQVksT0FBTyxPQUFPLE1BQU07QUFBQSxRQUNsRCxDQUFDO0FBQ0QsYUFBSyxRQUFRLFNBQU87QUFDaEIsb0JBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDbkMsY0FBSSxDQUFDLFFBQVEsS0FBSyxPQUFLLFlBQVksUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHO0FBQ25ELG1CQUFPLGNBQWMsS0FBSyxHQUFHO0FBQUEsVUFDakM7QUFBQSxRQUNKLENBQUM7QUFDRCxlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsb0JBQW9CLEtBQUs7QUFDOUIsZUFBUUgsT0FBTSxXQUFXLEVBQUUsY0FBYyxRQUFRLEdBQUcsSUFBSSxLQUNwREEsT0FBTSxPQUFPLEtBQUtBLE9BQU0sV0FBVyxFQUFFO0FBQUEsTUFDN0M7QUFDQSxNQUFBRyxNQUFLLFdBQVcsQ0FBQyxVQUFVO0FBQ3ZCLGNBQU1LLFVBQVNSLE9BQU0sbUJBQW1CO0FBQ3hDLFlBQUksQ0FBQztBQUNELGtCQUFRO0FBQ1osY0FBTSxPQUFPLE9BQU8sVUFBVSxhQUFhLFFBQVFRLFFBQU87QUFDMUQsYUFBS0wsTUFBSyxLQUFLLENBQUM7QUFBQSxNQUNwQjtBQUNBLE1BQUFBLE1BQUssc0JBQXNCLFFBQU07QUFDN0IsY0FBTSxjQUFjLEdBQUcsT0FDakJKLE1BQUssT0FBTyxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQ25DLEdBQUcsaUJBQWlCO0FBQzFCLGVBQU8sQ0FBQyxLQUFLLGFBQWEsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUFBLE1BQzFDO0FBQ0EsTUFBQUksTUFBSyxvQkFBb0IsU0FBUyxrQkFBa0IsUUFBUSxXQUFXO0FBQ25FLFlBQUksU0FBUztBQUNiLGNBQU0sTUFBTSxhQUFhO0FBQ3pCLGNBQU0sUUFBUSxDQUFDLEVBQUUsT0FBTyxNQUFNO0FBQzlCLFlBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUNsQixpQkFBTztBQUNYLGNBQU0sUUFBUSxXQUFTO0FBQ25CLGNBQUksT0FBTztBQUNQLHNCQUFVO0FBQ2Qsb0JBQVUsS0FBSyxVQUFVLEtBQUs7QUFBQSxRQUNsQyxDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1g7QUFDQSxlQUFTLGNBQWMsT0FBTyxvQkFBb0I7QUFDOUMsWUFBSSxTQUFTLElBQUksR0FBRyxVQUFVO0FBQzlCLFlBQUksVUFBVSxVQUFhLENBQUM7QUFDeEIsaUJBQU87QUFDWCxZQUFJLG9CQUFvQjtBQUNwQixvQkFBVTtBQUFBLFFBQ2QsT0FDSztBQUNELGtCQUFRLE9BQU8sT0FBTztBQUFBLFlBQ2xCLEtBQUs7QUFDRCx3QkFBVSxJQUFJO0FBQ2Q7QUFBQSxZQUNKLEtBQUs7QUFDRCx3QkFBVSxLQUFLLFVBQVUsS0FBSztBQUM5QjtBQUFBLFlBQ0o7QUFDSSx3QkFBVTtBQUFBLFVBQ2xCO0FBQUEsUUFDSjtBQUNBLGVBQU8sR0FBRztBQUFBLE1BQ2Q7QUFDQSxlQUFTLGNBQWM7QUFDbkIsY0FBTU0sWUFBVztBQUNqQixZQUFJVixNQUFLLFFBQVEsWUFBWTtBQUN6QixpQkFBTyxLQUFLLElBQUlVLFdBQVVWLE1BQUssUUFBUSxVQUFVO0FBQUEsUUFDckQsT0FDSztBQUNELGlCQUFPVTtBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsVUFBSSxVQUFVO0FBQ2QsTUFBQU4sTUFBSyxVQUFVLFNBQU87QUFDbEIsa0JBQVU7QUFBQSxNQUNkO0FBQ0EsTUFBQUEsTUFBSyxjQUFjLE1BQU07QUFDckIsY0FBTUssVUFBU1IsT0FBTSxtQkFBbUI7QUFDeEMsUUFBQVEsUUFBTyxJQUFJLE9BQU87QUFBQSxNQUN0QjtBQUNBLE1BQUFMLE1BQUssUUFBUSxTQUFTLE1BQU0sYUFBYTtBQUNyQyxzQkFBYztBQUNkLHdCQUFnQjtBQUNoQixpQkFBUyxDQUFDO0FBQ1Ysd0JBQWdCO0FBQ2hCLGtCQUFVLENBQUM7QUFDWCxtQkFBVyxDQUFDO0FBQ1osbUJBQVcsQ0FBQztBQUNaLHVCQUFlLFVBQVUsY0FBYyxPQUFLLENBQUMsWUFBWSxFQUFFO0FBQzNELGVBQU9BO0FBQUEsTUFDWDtBQUNBLFlBQU0sVUFBVSxDQUFDO0FBQ2pCLE1BQUFBLE1BQUssU0FBUyxTQUFTLFNBQVM7QUFDNUIsZ0JBQVEsS0FBSztBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUNBLE1BQUFBLE1BQUssV0FBVyxTQUFTLFdBQVc7QUFDaEMsY0FBTSxTQUFTLFFBQVEsSUFBSTtBQUMzQiw2QkFBcUIsUUFBUSxRQUFXSixLQUFJO0FBQzVDLFNBQUM7QUFBQSxVQUNHO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0osSUFBSTtBQUFBLE1BQ1I7QUFDQSxhQUFPSTtBQUFBLElBQ1g7QUFDQSxhQUFTLGVBQWUsTUFBTTtBQUMxQixhQUFPLE9BQU8sU0FBUztBQUFBLElBQzNCO0FBQ0EsYUFBUyxlQUFlLE1BQU0sUUFBUTtBQUNsQyxhQUFPLGVBQWUsSUFBSSxJQUNwQixFQUFFLE1BQU0sS0FBSyxNQUFNLGFBQWEsS0FBSyxjQUFjLE9BQU8sSUFDMUQsRUFBRSxNQUFNLGFBQWEsT0FBTztBQUFBLElBQ3RDO0FBQ0EsYUFBUyxlQUFlLE1BQU07QUFDMUIsYUFBTyxlQUFlLElBQUksSUFBSSxLQUFLLGNBQWM7QUFBQSxJQUNyRDtBQUNBLGFBQVMsUUFBUSxNQUFNO0FBQ25CLGFBQU8sZUFBZSxJQUFJLElBQUksS0FBSyxPQUFPO0FBQUEsSUFDOUM7QUFFQSxRQUFNLHVCQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkI3QixRQUFNLHdCQUF3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1COUIsYUFBUyxXQUFXSCxRQUFPQyxRQUFPRyxVQUFTTCxPQUFNO0FBQzdDLFlBQU1JLFFBQU87QUFBQSxRQUNULGVBQWU7QUFBQSxNQUNuQjtBQUNBLFVBQUk7QUFDSixNQUFBQSxNQUFLLFlBQVksU0FBUyxVQUFVLFFBQVE7QUFDeEMsa0JBQVUsT0FBTztBQUFBLE1BQ3JCO0FBQ0EsWUFBTSxXQUFZSixNQUFLLE9BQU8sT0FBTyxLQUFLQSxNQUFLLE9BQU8sT0FBTyxFQUFFLFFBQVEsS0FBSyxNQUFNLE1BQzdFQSxNQUFLLE9BQU8sVUFBVSxLQUFLQSxNQUFLLE9BQU8sVUFBVSxFQUFFLFFBQVEsS0FBSyxNQUFNO0FBQzNFLE1BQUFJLE1BQUssZ0JBQWdCLFNBQVMsY0FBYyxNQUFNLE1BQU07QUFDcEQsY0FBTSxjQUFjLENBQUM7QUFDckIsY0FBTSxVQUFVLEtBQUssU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLO0FBQ3RELGNBQU0sT0FBT0gsT0FBTSxNQUFNLE1BQU0sSUFBSTtBQUNuQyxjQUFNLGlCQUFpQkEsT0FBTSxXQUFXLEVBQUU7QUFDMUMsaUJBQVMsc0JBQXNCVSxPQUFNO0FBQ2pDLCtCQUFxQixvQkFBb0IsTUFBTVgsS0FBSTtBQUNuRCxjQUFJLHlCQUF5QixrQkFBa0IsR0FBRztBQUM5QyxrQkFBTSxTQUFTLG1CQUFtQixTQUFTVyxLQUFJO0FBQy9DLGdCQUFJWixXQUFVLE1BQU0sR0FBRztBQUNuQixxQkFBTyxPQUNGLEtBQUssVUFBUTtBQUNkLGdCQUFBQyxNQUFLLFFBQVEsU0FBUyxNQUFNO0FBQ3hCLHVCQUFLLElBQUk7QUFBQSxnQkFDYixDQUFDO0FBQUEsY0FDTCxDQUFDLEVBQ0ksTUFBTSxTQUFPO0FBQ2QsZ0JBQUFBLE1BQUssUUFBUSxTQUFTLE1BQU07QUFDeEIsd0JBQU07QUFBQSxnQkFDVixDQUFDO0FBQUEsY0FDTCxDQUFDO0FBQUEsWUFDTDtBQUNBLG1CQUFPLEtBQUssTUFBTTtBQUFBLFVBQ3RCLE9BQ0s7QUFDRCxtQkFBTyxtQkFBbUIsU0FBU1csT0FBTSxDQUFBQyxpQkFBZTtBQUNwRCxtQkFBS0EsWUFBVztBQUFBLFlBQ3BCLENBQUM7QUFBQSxVQUNMO0FBQUEsUUFDSjtBQUNBLFlBQUksb0JBQW9CO0FBQ3BCLGlCQUFPYixXQUFVLElBQUksSUFDZixLQUFLLEtBQUsscUJBQXFCLElBQy9CLHNCQUFzQixJQUFJO0FBQUEsUUFDcEM7QUFDQSxjQUFNLFdBQVdNLFNBQVEsbUJBQW1CO0FBQzVDLGlCQUFTLElBQUksR0FBRyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksRUFBRSxHQUFHO0FBQzNDLGNBQUksU0FBUyxLQUFLLE9BQU8sU0FBUyxLQUFLLElBQUksU0FBUztBQUNoRCxrQkFBTSxVQUFVLFNBQVMsS0FBSyxJQUFJO0FBQ2xDLGdCQUFJLHlCQUF5QixPQUFPLEdBQUc7QUFDbkMsb0JBQU0sSUFBSUosT0FBTSxNQUFNO0FBQ3RCLHNCQUFRLENBQUM7QUFDVCxxQkFBTyxFQUFFO0FBQUEsWUFDYjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQ0EsWUFBSSxDQUFDLFFBQVEsTUFBTSxJQUFJLEtBQ25CLGVBQWUsZUFBZSxTQUFTLE9BQU8sU0FBUztBQUN2RCxVQUFBQyxPQUFNLFlBQVksRUFBRSxRQUFRLGtCQUFnQjtBQUN4QyxrQkFBTSxjQUFjLGFBQWEsYUFBYSxFQUFFLEVBQUU7QUFDbEQsZ0JBQUksS0FBSyxRQUFRLFdBQVcsTUFBTSxJQUFJO0FBQ2xDLGtCQUFJLENBQUMsVUFBVTtBQUNYLDRCQUFZLEtBQUssV0FBVztBQUFBLGNBQ2hDLE9BQ0s7QUFDRCxzQkFBTSxPQUFPLGFBQWEsTUFBTTtBQUNoQyw0QkFBWSxLQUFLLFlBQVksUUFBUSxNQUFNLEtBQUssSUFBSSxNQUFNLElBQUk7QUFBQSxjQUNsRTtBQUFBLFlBQ0o7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQ0EsWUFBSSxRQUFRLE1BQU0sSUFBSSxLQUFNLFlBQVksTUFBTSxZQUFZLFdBQVcsR0FBSTtBQUNyRSxnQkFBTSxRQUFRQSxPQUFNLGdCQUFnQjtBQUNwQyxnQkFBTSxVQUFVRCxPQUFNLFdBQVc7QUFDakMsaUJBQU8sS0FBSyxRQUFRLEdBQUcsRUFBRSxRQUFRLFNBQU87QUFDcEMsa0JBQU0sVUFBVSxDQUFDLENBQUMsUUFBUSxjQUFjLHVCQUNwQyxRQUFRLFFBQVEsU0FBUyxHQUFHO0FBQ2hDLGdCQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxPQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDbkQsZ0JBQUk7QUFDQSw4QkFBZ0IsY0FBYyxPQUFPLGNBQWMsSUFBSSxDQUFBWSxTQUFPLE1BQU1BLE1BQUssQ0FBQztBQUM5RSxxQkFBUyxrQkFBa0JBLE1BQUs7QUFDNUIsb0JBQU0sWUFBWSxjQUFjLE1BQU0sU0FBTyxLQUFLLFFBQVEsS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUM1RSxrQkFBSSxXQUFXO0FBQ1gsc0JBQU0sb0JBQW9CLENBQUMsTUFBTSxNQUFNLEtBQUssQ0FBQztBQUM3QyxzQkFBTSxnQkFBZ0IsQ0FBQyxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQzlDLHNCQUFNLFNBQVMsQ0FBQyxrQkFBa0IsT0FBTyxLQUFLLGNBQWNBLElBQUcsSUFBSSxNQUFNO0FBQ3pFLG9CQUFJLENBQUMsVUFBVTtBQUNYLDhCQUFZLEtBQUssU0FBU0EsSUFBRztBQUFBLGdCQUNqQyxPQUNLO0FBQ0Qsd0JBQU0sT0FBTyxNQUFNQSxTQUFRO0FBQzNCLDhCQUFZLEtBQUssU0FDYixHQUFHQSxLQUFJLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxRQUFRLG9CQUFvQixFQUFFLEdBQUc7QUFBQSxnQkFDN0U7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUNBLDhCQUFrQixHQUFHO0FBQ3JCLGdCQUFJLFdBQVcsQ0FBQyxDQUFDLFFBQVEsUUFBUTtBQUM3QixnQ0FBa0IsTUFBTSxLQUFLO0FBQUEsVUFDckMsQ0FBQztBQUFBLFFBQ0w7QUFDQSxhQUFLLFdBQVc7QUFBQSxNQUNwQjtBQUNBLE1BQUFULE1BQUssMkJBQTJCLFNBQVMseUJBQXlCLElBQUksS0FBSztBQUN2RSxZQUFJLFNBQVMsV0FDUCx3QkFDQTtBQUNOLGNBQU0sT0FBT0osTUFBSyxLQUFLLFNBQVMsRUFBRTtBQUNsQyxZQUFJLEdBQUcsTUFBTSxPQUFPO0FBQ2hCLGVBQUssS0FBSztBQUNkLGlCQUFTLE9BQU8sUUFBUSxpQkFBaUIsSUFBSTtBQUM3QyxpQkFBUyxPQUFPLFFBQVEsMkJBQTJCLEdBQUc7QUFDdEQsZUFBTyxPQUFPLFFBQVEsaUJBQWlCLEVBQUU7QUFBQSxNQUM3QztBQUNBLFVBQUkscUJBQXFCO0FBQ3pCLE1BQUFJLE1BQUssbUJBQW1CLFFBQU07QUFDMUIsNkJBQXFCO0FBQUEsTUFDekI7QUFDQSxhQUFPQTtBQUFBLElBQ1g7QUFDQSxhQUFTLHlCQUF5QixvQkFBb0I7QUFDbEQsYUFBTyxtQkFBbUIsU0FBUztBQUFBLElBQ3ZDO0FBRUEsYUFBUyxZQUFZLEdBQUcsR0FBRztBQUN2QixVQUFJLEVBQUUsV0FBVztBQUNiLGVBQU8sRUFBRTtBQUNiLFVBQUksRUFBRSxXQUFXO0FBQ2IsZUFBTyxFQUFFO0FBQ2IsWUFBTSxTQUFTLENBQUM7QUFDaEIsVUFBSTtBQUNKLFdBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxRQUFRLEtBQUs7QUFDNUIsZUFBTyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BQ2xCO0FBQ0EsVUFBSTtBQUNKLFdBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxRQUFRLEtBQUs7QUFDNUIsZUFBTyxHQUFHLEtBQUs7QUFBQSxNQUNuQjtBQUNBLFdBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxRQUFRLEtBQUs7QUFDNUIsYUFBSyxJQUFJLEdBQUcsS0FBSyxFQUFFLFFBQVEsS0FBSztBQUM1QixjQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUc7QUFDckMsbUJBQU8sR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLElBQUk7QUFBQSxVQUNyQyxPQUNLO0FBQ0QsbUJBQU8sR0FBRyxLQUFLLEtBQUssSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLEtBQUssR0FBRyxLQUFLLElBQUksT0FBTyxHQUFHLElBQUksS0FBSyxHQUFHLE9BQU8sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQUEsVUFDMUc7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGFBQU8sT0FBTyxFQUFFLFFBQVEsRUFBRTtBQUFBLElBQzlCO0FBRUEsUUFBTSxjQUFjLENBQUMsTUFBTSxNQUFNLEdBQUc7QUFDcEMsYUFBUyxXQUFXSCxRQUFPQyxRQUFPTSxPQUFNUixPQUFNO0FBQzFDLFlBQU0sS0FBS1EsTUFBSztBQUNoQixZQUFNLE1BQU1BLE1BQUs7QUFDakIsWUFBTUosUUFBTyxDQUFDO0FBQ2QsTUFBQUEsTUFBSyxpQkFBaUIsU0FBUyxlQUFlLE1BQU07QUFDaEQsY0FBTSxtQkFBbUJILE9BQU0sb0JBQW9CO0FBQ25ELGNBQU0sa0JBQWtCLEtBQUssRUFBRSxVQUFVLEtBQUssUUFBUSxLQUFLLE1BQU0sU0FBUztBQUMxRSxjQUFNLEtBQUssa0JBQWtCQSxPQUFNLFdBQVcsRUFBRSxTQUFTO0FBQ3pELFlBQUksaUJBQWlCLE1BQ2hCLEtBQUssaUJBQWlCLEVBQUUsT0FBTyxLQUFLLGlCQUFpQixFQUFFLE1BQU07QUFDOUQsY0FBSSxLQUFLLGlCQUFpQixFQUFFLEtBQUs7QUFDN0IsZ0JBQUksaUJBQWlCLEVBQUUsV0FBVyxRQUFXO0FBQ3pDLGNBQUFDLE9BQU0sS0FBSyxpQkFBaUIsRUFBRSxTQUN4QixpQkFBaUIsRUFBRSxPQUNoQixRQUFRLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFDN0IsUUFBUSxPQUFPLGlCQUFpQixFQUFFLElBQUksU0FBUyxDQUFDLElBQ25ELElBQUk7QUFBQSxZQUNkLE9BQ0s7QUFDRCxjQUFBQSxPQUFNLEtBQUssSUFBSSw2REFBNkQsNkRBQTZELElBQUksR0FBRyxTQUFTLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQztBQUFBLFlBQ2xNO0FBQUEsVUFDSixXQUNTLEtBQUssaUJBQWlCLEVBQUUsS0FBSztBQUNsQyxnQkFBSSxpQkFBaUIsRUFBRSxXQUFXLFFBQVc7QUFDekMsY0FBQUEsT0FBTSxLQUFLLGlCQUFpQixFQUFFLFNBQ3hCLGlCQUFpQixFQUFFLE9BQ2hCLFFBQVEsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUM3QixRQUFRLE9BQU8saUJBQWlCLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFDbkQsSUFBSTtBQUFBLFlBQ2QsT0FDSztBQUNELGNBQUFBLE9BQU0sS0FBSyxJQUFJLHdEQUF3RCx3REFBd0QsSUFBSSxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsWUFDeEw7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxNQUFBRSxNQUFLLGtCQUFrQixTQUFTLGdCQUFnQixVQUFVLFVBQVU7QUFDaEUsWUFBSSxXQUFXLFVBQVU7QUFDckIsVUFBQUYsT0FBTSxLQUFLLElBQUksNkRBQTZELDZEQUE2RCxVQUFVLFdBQVcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUFBLFFBQ3BMO0FBQUEsTUFDSjtBQUNBLE1BQUFFLE1BQUssb0JBQW9CLFNBQVMsa0JBQWtCLE1BQU07QUFDdEQsY0FBTSxrQkFBa0JILE9BQU0sbUJBQW1CO0FBQ2pELFlBQUksVUFBVTtBQUNkLG1CQUFXLE9BQU8sT0FBTyxLQUFLLGVBQWUsR0FBRztBQUM1QyxjQUFJLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxNQUFNLEdBQUcsS0FDL0MsT0FBTyxLQUFLLFNBQVMsYUFBYTtBQUNsQyxzQkFBVSxXQUFXLENBQUM7QUFDdEIsb0JBQVEsT0FBTyxnQkFBZ0I7QUFBQSxVQUNuQztBQUFBLFFBQ0o7QUFDQSxZQUFJLFNBQVM7QUFDVCxnQkFBTSxhQUFhLENBQUM7QUFDcEIscUJBQVcsT0FBTyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3BDLGtCQUFNLE1BQU0sUUFBUTtBQUNwQixnQkFBSSxPQUFPLFdBQVcsUUFBUSxHQUFHLElBQUksR0FBRztBQUNwQyx5QkFBVyxLQUFLLEdBQUc7QUFBQSxZQUN2QjtBQUFBLFVBQ0o7QUFDQSxnQkFBTSxZQUFZLFdBQVcsU0FBUztBQUFBLEVBQUssV0FBVyxLQUFLLElBQUksTUFBTTtBQUNyRSxVQUFBQyxPQUFNLEtBQUssSUFBSSxpQ0FBaUMsa0NBQWtDLE9BQU8sS0FBSyxPQUFPLEVBQUUsUUFBUSxPQUFPLEtBQUssT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUFBLFFBQy9KO0FBQUEsTUFDSjtBQUNBLE1BQUFFLE1BQUssbUJBQW1CLFNBQVMsaUJBQWlCLE1BQU0sU0FBUyxlQUFlLGtCQUFrQixtQkFBbUIsTUFBTTtBQUN2SCxjQUFNLGNBQWNILE9BQU0sbUJBQW1CLEVBQUUsWUFBWTtBQUMzRCxjQUFNLFVBQVUsQ0FBQztBQUNqQixjQUFNLGlCQUFpQkEsT0FBTSxXQUFXO0FBQ3hDLGVBQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxTQUFPO0FBQzdCLGNBQUksWUFBWSxRQUFRLEdBQUcsTUFBTSxNQUM3QixDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssZUFBZSxHQUFHLEtBQ3hELENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBS0EsT0FBTSxpQkFBaUIsR0FBRyxHQUFHLEtBQ25FLENBQUNHLE1BQUssNEJBQTRCLEtBQUssT0FBTyxHQUFHO0FBQ2pELG9CQUFRLEtBQUssR0FBRztBQUFBLFVBQ3BCO0FBQUEsUUFDSixDQUFDO0FBQ0QsWUFBSSxxQkFDQyxlQUFlLFNBQVMsU0FBUyxLQUM5QixZQUFZLFNBQVMsS0FDckIsbUJBQW1CO0FBQ3ZCLGVBQUssRUFBRSxNQUFNLGVBQWUsU0FBUyxNQUFNLEVBQUUsUUFBUSxTQUFPO0FBQ3hELGdCQUFJLFlBQVksUUFBUSxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQ3RDLHNCQUFRLEtBQUssS0FBSyxHQUFHO0FBQUEsWUFDekI7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQ0EsWUFBSSxRQUFRLFNBQVMsR0FBRztBQUNwQixVQUFBRixPQUFNLEtBQUssSUFBSSx3QkFBd0IseUJBQXlCLFFBQVEsUUFBUSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxRQUN2RztBQUFBLE1BQ0o7QUFDQSxNQUFBRSxNQUFLLGtCQUFrQixTQUFTLGdCQUFnQixNQUFNO0FBQ2xELGNBQU0sY0FBY0gsT0FBTSxtQkFBbUIsRUFBRSxZQUFZO0FBQzNELGNBQU0sVUFBVSxDQUFDO0FBQ2pCLGNBQU0saUJBQWlCQSxPQUFNLFdBQVc7QUFDeEMsWUFBSSxlQUFlLFNBQVMsU0FBUyxLQUFLLFlBQVksU0FBUyxHQUFHO0FBQzlELGVBQUssRUFBRSxNQUFNLGVBQWUsU0FBUyxNQUFNLEVBQUUsUUFBUSxTQUFPO0FBQ3hELGdCQUFJLFlBQVksUUFBUSxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQ3RDLHNCQUFRLEtBQUssS0FBSyxHQUFHO0FBQUEsWUFDekI7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMO0FBQ0EsWUFBSSxRQUFRLFNBQVMsR0FBRztBQUNwQixVQUFBQyxPQUFNLEtBQUssSUFBSSx1QkFBdUIsd0JBQXdCLFFBQVEsUUFBUSxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDakcsaUJBQU87QUFBQSxRQUNYLE9BQ0s7QUFDRCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsTUFBQUUsTUFBSyw4QkFBOEIsU0FBUyw0QkFBNEIsS0FBSyxTQUFTO0FBQ2xGLFlBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQ3JELGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sYUFBYUgsT0FBTSxPQUFPO0FBQ2hDLG1CQUFXLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxJQUFJLEdBQUc7QUFDcEMsY0FBSSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssWUFBWSxDQUFDLEtBQ25ELENBQUMsV0FBVyxNQUFNO0FBQ2xCLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLE1BQUFHLE1BQUssaUJBQWlCLFNBQVMsZUFBZSxNQUFNO0FBQ2hELGNBQU0sVUFBVUgsT0FBTSxXQUFXO0FBQ2pDLGNBQU0sVUFBVSxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxPQUFPLEVBQUU7QUFDOUI7QUFDSixlQUFPLEtBQUssSUFBSSxFQUFFLFFBQVEsU0FBTztBQUM3QixjQUFJLFlBQVksUUFBUSxHQUFHLE1BQU0sTUFDN0IsT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLFNBQVMsR0FBRyxHQUFHO0FBQzVELGFBQUMsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLFFBQVEsV0FBUztBQUNsQyxrQkFBSSxRQUFRLFFBQVEsS0FBSyxRQUFRLEtBQUssTUFBTSxNQUN4QyxVQUFVLFFBQVc7QUFDckIsd0JBQVEsUUFBUSxRQUFRLFFBQVEsQ0FBQyxHQUFHLE9BQU8sS0FBSztBQUFBLGNBQ3BEO0FBQUEsWUFDSixDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0osQ0FBQztBQUNELGNBQU0sY0FBYyxPQUFPLEtBQUssT0FBTztBQUN2QyxZQUFJLENBQUMsWUFBWTtBQUNiO0FBQ0osWUFBSSxNQUFNLEdBQUcsaUJBQWlCO0FBQzlCLG9CQUFZLFFBQVEsU0FBTztBQUN2QixpQkFBTztBQUFBLElBQU8sR0FBRyx3Q0FBd0MsS0FBS0MsT0FBTSxrQkFBa0IsUUFBUSxJQUFJLEdBQUdBLE9BQU0sa0JBQWtCLFFBQVEsUUFBUSxJQUFJLENBQUM7QUFBQSxRQUN0SixDQUFDO0FBQ0QsUUFBQUEsT0FBTSxLQUFLLEdBQUc7QUFBQSxNQUNsQjtBQUNBLFVBQUksU0FBUyxDQUFDO0FBQ2QsTUFBQUUsTUFBSyxRQUFRLFNBQVMsTUFBTSxHQUFHVSxTQUFRO0FBQ25DLGVBQU8sS0FBSztBQUFBLFVBQ1IsTUFBTTtBQUFBLFVBQ04sUUFBQUE7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMO0FBQ0EsTUFBQVYsTUFBSyxlQUFlLFNBQVMsYUFBYSxNQUFNLFNBQVM7QUFDckQsaUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxPQUFPLFFBQVEsUUFBVyxLQUFLO0FBQ25ELGdCQUFNLE9BQU8sRUFBRTtBQUNmLGNBQUksU0FBUztBQUNiLGNBQUk7QUFDQSxxQkFBUyxLQUFLLE1BQU0sT0FBTztBQUFBLFVBQy9CLFNBQ08sS0FBUDtBQUNJLFlBQUFGLE9BQU0sS0FBSyxJQUFJLFVBQVUsSUFBSSxVQUFVLEtBQUssR0FBRztBQUMvQztBQUFBLFVBQ0o7QUFDQSxjQUFJLENBQUMsUUFBUTtBQUNULFlBQUFBLE9BQU0sS0FBSyxHQUFHLDZCQUE2QixLQUFLLFNBQVMsQ0FBQyxDQUFDO0FBQUEsVUFDL0QsV0FDUyxPQUFPLFdBQVcsWUFBWSxrQkFBa0IsT0FBTztBQUM1RCxZQUFBQSxPQUFNLEtBQUssT0FBTyxTQUFTLEdBQUcsTUFBTTtBQUFBLFVBQ3hDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxVQUFJLFVBQVUsQ0FBQztBQUNmLE1BQUFFLE1BQUssVUFBVSxTQUFTLFFBQVEsS0FBSyxPQUFPO0FBQ3hDLGdCQUFRLHlDQUF5QyxDQUFDLEtBQUssS0FBSyxHQUFHLFVBQVUsTUFBTTtBQUMvRSxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLGlCQUFPLEtBQUssR0FBRyxFQUFFLFFBQVEsT0FBSztBQUMxQixZQUFBQSxNQUFLLFFBQVEsR0FBRyxJQUFJLEVBQUU7QUFBQSxVQUMxQixDQUFDO0FBQUEsUUFDTCxPQUNLO0FBQ0QsVUFBQUgsT0FBTSxPQUFPLEdBQUc7QUFDaEIsY0FBSSxDQUFDLFFBQVEsTUFBTTtBQUNmLG9CQUFRLE9BQU8sQ0FBQztBQUFBLFVBQ3BCO0FBQ0EsY0FBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3RCLGtCQUFNLFFBQVEsT0FBS0csTUFBSyxRQUFRLEtBQUssQ0FBQyxDQUFDO0FBQUEsVUFDM0MsT0FDSztBQUNELGlDQUFxQixPQUFPLFFBQVdKLEtBQUk7QUFDM0Msb0JBQVEsS0FBSyxLQUFLLEtBQUs7QUFBQSxVQUMzQjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsTUFBQUksTUFBSyxhQUFhLFNBQVMsYUFBYTtBQUNwQyxlQUFPO0FBQUEsTUFDWDtBQUNBLGVBQVMsVUFBVSxNQUFNLEtBQUs7QUFDMUIsY0FBTSxNQUFNLE9BQU8sR0FBRztBQUN0QixjQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU07QUFDekIsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixnQkFBTSxLQUFLLEVBQUUsVUFBVTtBQUFBLFFBQzNCLFdBQ1MsSUFBSSxNQUFNLFVBQVUsR0FBRztBQUM1QixnQkFBTSxJQUFJLE1BQU0sWUFBWSxFQUFFO0FBQzlCLGdCQUFNLENBQUMsS0FBSztBQUFBLFFBQ2hCLE9BQ0s7QUFDRCxnQkFBTSxLQUFLO0FBQUEsUUFDZjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxlQUFlLFNBQVMsYUFBYSxNQUFNO0FBQzVDLGNBQU0sWUFBWSxDQUFDO0FBQ25CLGVBQU8sS0FBSyxPQUFPLEVBQUUsUUFBUSxTQUFPO0FBQ2hDLGdCQUFNLFVBQVU7QUFDaEIsV0FBQyxRQUFRLFFBQVEsQ0FBQyxHQUFHLFFBQVEsV0FBUztBQUNsQyxnQkFBSVMsT0FBTTtBQUNWLGtCQUFNLFlBQVk7QUFDbEIsWUFBQUEsT0FBTSxVQUFVLE1BQU1BLElBQUc7QUFDekIsb0JBQVEsVUFBVSxNQUFNLEtBQUs7QUFDN0IsZ0JBQUlBLFFBQU8sQ0FBQyxPQUFPO0FBQ2Ysd0JBQVUsS0FBSyxJQUFJLGNBQWMsV0FBVztBQUFBLFlBQ2hEO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTCxDQUFDO0FBQ0QsWUFBSSxVQUFVLFFBQVE7QUFDbEIsY0FBSSxNQUFNLEdBQUcsR0FBRyxzQkFBc0I7QUFBQTtBQUN0QyxvQkFBVSxRQUFRLFdBQVM7QUFDdkIsbUJBQU87QUFBQSxVQUNYLENBQUM7QUFDRCxVQUFBWCxPQUFNLEtBQUssR0FBRztBQUFBLFFBQ2xCO0FBQUEsTUFDSjtBQUNBLFVBQUksY0FBYyxDQUFDO0FBQ25CLE1BQUFFLE1BQUssWUFBWSxTQUFTLFVBQVUsS0FBSyxPQUFPO0FBQzVDLGdCQUFRLGtDQUFrQyxDQUFDLEtBQUssS0FBSyxHQUFHLFVBQVUsTUFBTTtBQUN4RSxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLGlCQUFPLEtBQUssR0FBRyxFQUFFLFFBQVEsT0FBSztBQUMxQixZQUFBQSxNQUFLLFVBQVUsR0FBRyxJQUFJLEVBQUU7QUFBQSxVQUM1QixDQUFDO0FBQUEsUUFDTCxPQUNLO0FBQ0QsVUFBQUgsT0FBTSxPQUFPLEdBQUc7QUFDaEIsY0FBSSxDQUFDLFlBQVksTUFBTTtBQUNuQix3QkFBWSxPQUFPLENBQUM7QUFBQSxVQUN4QjtBQUNBLGNBQUksTUFBTSxRQUFRLEtBQUssR0FBRztBQUN0QixrQkFBTSxRQUFRLE9BQUtHLE1BQUssVUFBVSxLQUFLLENBQUMsQ0FBQztBQUFBLFVBQzdDLE9BQ0s7QUFDRCx3QkFBWSxLQUFLLEtBQUssS0FBSztBQUFBLFVBQy9CO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxNQUFBQSxNQUFLLGlCQUFpQixNQUFNO0FBQzVCLE1BQUFBLE1BQUssY0FBYyxTQUFTLGNBQWMsTUFBTTtBQUM1QyxlQUFPLEtBQUssSUFBSSxFQUFFLFFBQVEsU0FBTztBQUM3QixjQUFJLFlBQVksTUFBTTtBQUNsQix3QkFBWSxLQUFLLFFBQVEsV0FBUztBQUM5QixrQkFBSSxTQUFTLEtBQUssU0FBUyxVQUFhLEtBQUssV0FBVyxRQUFXO0FBQy9ELGdCQUFBRixPQUFNLEtBQUssR0FBRyw4Q0FBOEMsS0FBSyxLQUFLLENBQUM7QUFBQSxjQUMzRTtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMO0FBQ0EsTUFBQUUsTUFBSyxvQkFBb0IsU0FBUyxrQkFBa0IsS0FBSyxtQkFBbUI7QUFDeEUsY0FBTSxZQUFZO0FBQ2xCLDRCQUFvQixrQkFBa0IsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNO0FBQ3hFLFlBQUksY0FBYztBQUNsQixZQUFJLGVBQWU7QUFDbkIsaUJBQVMsSUFBSSxHQUFHLFlBQVksWUFBWSxrQkFBa0IsUUFBUSxRQUFXLEtBQUs7QUFDOUUsZ0JBQU0sSUFBSSxZQUFZLEtBQUssU0FBUztBQUNwQyxjQUFJLEtBQUssYUFBYSxJQUFJLGNBQWM7QUFDcEMsMkJBQWU7QUFDZiwwQkFBYztBQUFBLFVBQ2xCO0FBQUEsUUFDSjtBQUNBLFlBQUk7QUFDQSxVQUFBRixPQUFNLEtBQUssR0FBRyxvQkFBb0IsV0FBVyxDQUFDO0FBQUEsTUFDdEQ7QUFDQSxNQUFBRSxNQUFLLFFBQVEsU0FBUyxNQUFNLGFBQWE7QUFDckMsa0JBQVUsVUFBVSxTQUFTLE9BQUssQ0FBQyxZQUFZLEVBQUU7QUFDakQsc0JBQWMsVUFBVSxhQUFhLE9BQUssQ0FBQyxZQUFZLEVBQUU7QUFDekQsaUJBQVMsT0FBTyxPQUFPLE9BQUssRUFBRSxNQUFNO0FBQ3BDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFlBQU0sVUFBVSxDQUFDO0FBQ2pCLE1BQUFBLE1BQUssU0FBUyxTQUFTLFNBQVM7QUFDNUIsZ0JBQVEsS0FBSztBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0w7QUFDQSxNQUFBQSxNQUFLLFdBQVcsU0FBUyxXQUFXO0FBQ2hDLGNBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsNkJBQXFCLFFBQVEsUUFBV0osS0FBSTtBQUM1QyxTQUFDLEVBQUUsU0FBUyxRQUFRLFlBQVksSUFBSTtBQUFBLE1BQ3hDO0FBQ0EsYUFBT0k7QUFBQSxJQUNYO0FBRUEsUUFBSTtBQUNKLGFBQVMsY0FBYyxPQUFPO0FBQzFCLGVBQVM7QUFDVCxhQUFPO0FBQUEsSUFDWDtBQUNBLGFBQVMsTUFBTSxjQUFjLENBQUMsR0FBRyxNQUFNLE9BQU8sUUFBUSxJQUFJLEdBQUcsZUFBZTtBQUN4RSxZQUFNQSxRQUFPLENBQUM7QUFDZCxVQUFJO0FBQ0osVUFBSSxlQUFlO0FBQ25CLFVBQUksU0FBUyxDQUFDO0FBQ2QsWUFBTSxtQkFBbUIsQ0FBQztBQUMxQixVQUFJLFNBQVM7QUFDYixZQUFNLGtCQUFrQixDQUFDO0FBQ3pCLFVBQUk7QUFDSixVQUFJO0FBQ0osVUFBSSx1QkFBdUI7QUFDM0IsWUFBTUksUUFBTyxPQUFPO0FBQ3BCLE1BQUFKLE1BQUssYUFBYSx3QkFBd0Isa0JBQWtCQSxLQUFJO0FBQ2hFLE1BQUFBLE1BQUssYUFBYSxTQUFVLFlBQVk7QUFDcEMsUUFBQUEsTUFBSyxtQkFBbUI7QUFDeEIsUUFBQUEsTUFBSyxLQUFLO0FBQ1YsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsVUFBSTtBQUNKLFVBQUksa0NBQWtDLEtBQUssT0FBTyxRQUFRLEtBQUssRUFBRSxFQUFFLEdBQUc7QUFDbEUsb0JBQVksT0FBTyxRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQ2hELE9BQ0s7QUFDRCxvQkFBWSxPQUFPLFFBQVEsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQUEsTUFDaEQ7QUFDQSxNQUFBQSxNQUFLLEtBQUssVUFDTCxJQUFJLE9BQUs7QUFDVixjQUFNLElBQUksT0FBTyxLQUFLLENBQUM7QUFDdkIsZUFBTyxFQUFFLE1BQU0sc0JBQXNCLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxJQUFJO0FBQUEsTUFDeEUsQ0FBQyxFQUNJLEtBQUssR0FBRyxFQUNSLEtBQUs7QUFDVixVQUFJLE9BQU8sT0FBTyxHQUFHLEtBQUssT0FBTyxrQkFBa0IsTUFBTSxPQUFPLE9BQU8sR0FBRyxHQUFHO0FBQ3pFLFFBQUFBLE1BQUssS0FBSyxPQUNMLE9BQU8sR0FBRyxFQUNWLFFBQVEsR0FBRyxPQUFPLEtBQUssUUFBUSxPQUFPLFFBQVEsU0FBUyxDQUFDLE1BQU0sRUFBRTtBQUFBLE1BQ3pFO0FBQ0EsWUFBTSxVQUFVLEVBQUUsUUFBUSxJQUFJLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFO0FBQ3hFLE1BQUFBLE1BQUssYUFBYSxNQUFNO0FBQ3hCLFVBQUksWUFBWTtBQUNoQixVQUFJLFlBQVk7QUFDaEIsTUFBQUEsTUFBSyxPQUFPLENBQUMsTUFBTSxRQUFRO0FBQ3ZCLG9CQUFZO0FBQ1osb0JBQVk7QUFDWixZQUFJO0FBQ0EsaUJBQU8sUUFBUSxLQUFLLElBQUk7QUFBQSxNQUNoQztBQUNBLFVBQUksb0JBQW9CO0FBQ3hCLE1BQUFBLE1BQUssYUFBYSxTQUFVLEtBQUssTUFBTSxJQUFJO0FBQ3ZDLGdCQUFRLGlEQUFpRCxDQUFDLEtBQUssTUFBTSxFQUFFLEdBQUcsVUFBVSxNQUFNO0FBQzFGLFlBQUksT0FBTyxTQUFTLFlBQVk7QUFDNUIsZUFBSztBQUNMLGlCQUFPO0FBQUEsUUFDWDtBQUNBLDRCQUFvQixPQUFPLHFCQUFxQjtBQUNoRCxZQUFJLENBQUMsUUFBUSxTQUFTLE9BQU87QUFDekIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsUUFBQUEsTUFBSyxRQUFRLG1CQUFtQixJQUFJO0FBQ3BDLFlBQUk7QUFDQSx1QkFBYSxpQkFBaUIsRUFBRTtBQUNwQyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxVQUFJO0FBQ0osTUFBQUEsTUFBSyxlQUFlQSxNQUFLLFFBQVEsU0FBUyxhQUFhLFVBQVUsQ0FBQyxHQUFHO0FBQ2pFLGdCQUFRO0FBQ1Isa0JBQVUsV0FBVyxDQUFDO0FBQ3RCLGNBQU0sYUFBYSxDQUFDO0FBQ3BCLG1CQUFXLFFBQVEsUUFBUSxRQUFRLFFBQVEsUUFBUSxDQUFDO0FBQ3BELG1CQUFXLGdCQUFnQixRQUFRLGdCQUM3QixRQUFRLGdCQUNSLENBQUM7QUFDUCxjQUFNLGNBQWMsQ0FBQztBQUNyQixtQkFBVyxNQUFNLFFBQVEsT0FBSztBQUMxQixzQkFBWSxLQUFLO0FBQ2pCLFdBQUMsUUFBUSxNQUFNLENBQUMsR0FBRyxRQUFRLE9BQUs7QUFDNUIsd0JBQVksS0FBSztBQUFBLFVBQ3JCLENBQUM7QUFBQSxRQUNMLENBQUM7QUFDRCxlQUFPLE9BQU8saUJBQWlCLE9BQU8sS0FBSyxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssY0FBYztBQUMxRSxnQkFBTSxPQUFPLE9BQU8sV0FBVyxPQUFPLFNBQU8sRUFBRSxPQUFPLFlBQVk7QUFDbEUsY0FBSSxLQUFLLFNBQVMsR0FBRztBQUNqQixnQkFBSSxhQUFhO0FBQUEsVUFDckI7QUFDQSxpQkFBTztBQUFBLFFBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNOLGlCQUFTLENBQUM7QUFDVixjQUFNLGVBQWU7QUFBQSxVQUNqQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKO0FBQ0EsY0FBTSxnQkFBZ0I7QUFBQSxVQUNsQjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKO0FBQ0EscUJBQWEsUUFBUSxPQUFLO0FBQ3RCLHFCQUFXLE1BQU0sUUFBUSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUNXLE9BQU0sQ0FBQyxZQUFZQSxHQUFFO0FBQUEsUUFDcEUsQ0FBQztBQUNELHNCQUFjLFFBQVEsQ0FBQyxNQUFNO0FBQ3pCLHFCQUFXLEtBQUssVUFBVSxRQUFRLElBQUksQ0FBQUEsT0FBSyxDQUFDLFlBQVlBLEdBQUU7QUFBQSxRQUM5RCxDQUFDO0FBQ0QsbUJBQVcsWUFBWSxRQUFRO0FBQy9CLGtCQUFVO0FBQ1Ysa0JBQVUsVUFBVSxRQUFRLE1BQU0sV0FBVyxJQUFJLE1BQU1YLE9BQU1JLE9BQU0sTUFBTTtBQUN6RSx1QkFBZSxlQUNULGFBQWEsTUFBTSxXQUFXLElBQzlCLFdBQVdKLE9BQU0sU0FBU0ksT0FBTSxNQUFNO0FBQzVDLG9CQUFZLFlBQ04sVUFBVSxNQUFNLElBQ2hCLFFBQVFKLE9BQU0sU0FBUyxjQUFjLGtCQUFrQixNQUFNO0FBQ25FLFlBQUksQ0FBQztBQUNELHlCQUFlLFdBQVdBLE9BQU0sU0FBUyxXQUFXLE1BQU07QUFDOUQsNEJBQW9CO0FBQ3BCLGlCQUFTO0FBQ1Qsb0JBQVk7QUFDWixvQkFBWTtBQUNaLFFBQUFBLE1BQUssU0FBUztBQUNkLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssYUFBYTtBQUNsQixZQUFNLFVBQVUsQ0FBQztBQUNqQixlQUFTLFNBQVM7QUFDZCxnQkFBUSxLQUFLO0FBQUEsVUFDVDtBQUFBLFVBQ0EsZUFBZSxRQUFRLGNBQWMsTUFBTSxDQUFDO0FBQUEsVUFDNUM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsUUFBUUEsTUFBSztBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0osQ0FBQztBQUNELGdCQUFRLE9BQU87QUFDZixxQkFBYSxPQUFPO0FBQ3BCLGtCQUFVLE9BQU87QUFBQSxNQUNyQjtBQUNBLGVBQVMsV0FBVztBQUNoQixjQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLDZCQUFxQixRQUFRLFFBQVcsTUFBTTtBQUM5QyxZQUFJO0FBQ0osU0FBQztBQUFBLFVBQ0c7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFFBQVFBLE1BQUs7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixJQUFJO0FBQ0osZ0JBQVEsZ0JBQWdCO0FBQ3hCLGdCQUFRLFNBQVM7QUFDakIscUJBQWEsU0FBUztBQUN0QixrQkFBVSxTQUFTO0FBQUEsTUFDdkI7QUFDQSxNQUFBQSxNQUFLLFVBQVUsU0FBVSxNQUFNO0FBQzNCLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLFdBQVcsSUFBSTtBQUN2QyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFFBQVEsU0FBVSxNQUFNO0FBQ3pCLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLFNBQVMsSUFBSTtBQUNyQyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFNBQVMsU0FBVSxNQUFNO0FBQzFCLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLFVBQVUsSUFBSTtBQUN0QyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFlBQVksU0FBVSxNQUFNO0FBQzdCLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLGFBQWEsSUFBSTtBQUN6QyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFFBQVEsU0FBVSxNQUFNO0FBQ3pCLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLFNBQVMsSUFBSTtBQUNyQyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFNBQVMsU0FBVSxNQUFNO0FBQzFCLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLFVBQVUsSUFBSTtBQUN0QyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGNBQWMsU0FBVSxNQUFNO0FBQy9CLGdCQUFRLGtDQUFrQyxDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEUsWUFBSSxPQUFPLFNBQVMsWUFBWSxRQUFRLEtBQUssT0FBTztBQUNoRCxpQkFBT0E7QUFBQSxRQUNYLE9BQ0s7QUFDRCxrREFBd0NBLE1BQUssYUFBYSxRQUFRLE1BQU0sR0FBRztBQUFBLFFBQy9FO0FBQ0EsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxpQkFBaUIsU0FBVSxNQUFNO0FBQ2xDLGdCQUFRLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDbEQsZ0NBQXdCLGtCQUFrQixJQUFJO0FBQzlDLGVBQU9BO0FBQUEsTUFDWDtBQUNBLGVBQVMsd0JBQXdCLE1BQU0sTUFBTTtBQUN6QyxlQUFPLENBQUMsRUFBRSxPQUFPLElBQUk7QUFDckIsYUFBSyxRQUFRLFNBQU87QUFDaEIsZ0JBQU0sWUFBWSxHQUFHO0FBQ3JCLGtCQUFRLE1BQU0sS0FBSyxHQUFHO0FBQUEsUUFDMUIsQ0FBQztBQUFBLE1BQ0w7QUFDQSxNQUFBQSxNQUFLLFFBQVEsU0FBVSxLQUFLLE9BQU87QUFDL0IsZ0JBQVEsa0NBQWtDLENBQUMsS0FBSyxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQ3hFLGdEQUF3Q0EsTUFBSyxPQUFPLFFBQVEsS0FBSyxLQUFLO0FBQ3RFLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssVUFBVSxTQUFVLEtBQUssT0FBTztBQUNqQyxnQkFBUSx3Q0FBd0MsQ0FBQyxLQUFLLEtBQUssR0FBRyxVQUFVLE1BQU07QUFDOUUsMENBQWtDQSxNQUFLLFNBQVMsV0FBVyxLQUFLLEtBQUs7QUFDckUsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxRQUFRLFNBQVUsS0FBSyxPQUFPO0FBQy9CLGdCQUFRLHdDQUF3QyxDQUFDLEtBQUssS0FBSyxHQUFHLFVBQVUsTUFBTTtBQUM5RSwwQ0FBa0NBLE1BQUssT0FBTyxTQUFTLEtBQUssS0FBSztBQUNqRSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFVBQVVBLE1BQUssV0FBVyxTQUFVLEtBQUssT0FBTyxvQkFBb0I7QUFDckUsZ0JBQVEsc0NBQXNDLENBQUMsS0FBSyxPQUFPLGtCQUFrQixHQUFHLFVBQVUsTUFBTTtBQUNoRyxZQUFJLG9CQUFvQjtBQUNwQiwwQkFBZ0IsS0FBSyxNQUFNO0FBQzNCLGtCQUFRLG1CQUFtQixPQUFPO0FBQUEsUUFDdEM7QUFDQSxZQUFJLE9BQU8sVUFBVSxZQUFZO0FBQzdCLDBCQUFnQixLQUFLLE1BQU07QUFDM0IsY0FBSSxDQUFDLFFBQVEsbUJBQW1CO0FBQzVCLG9CQUFRLG1CQUFtQixPQUFPLFFBQVEsb0JBQW9CLEtBQUs7QUFDdkUsa0JBQVEsTUFBTSxLQUFLO0FBQUEsUUFDdkI7QUFDQSxnREFBd0NBLE1BQUssU0FBUyxXQUFXLEtBQUssS0FBSztBQUMzRSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFdBQVcsU0FBVSxLQUFLLE1BQU07QUFDakMsZ0JBQVEsa0NBQWtDLENBQUMsS0FBSyxJQUFJLEdBQUcsVUFBVSxNQUFNO0FBQ3ZFLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGdCQUFRLFNBQVMsS0FBSyxJQUFJO0FBQzFCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLGVBQVMsT0FBTyxLQUFLLEtBQUs7QUFDdEIsZ0RBQXdDLFFBQVEsT0FBTyxLQUFLLEdBQUc7QUFDL0QsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsZUFBUyxhQUFhLE1BQU0sS0FBSztBQUM3QixnQkFBUSxrQ0FBa0MsQ0FBQyxNQUFNLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDdkUsZ0RBQXdDQSxNQUFLLGNBQWMsbUJBQW1CLE1BQU0sR0FBRztBQUN2RixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGVBQWU7QUFDcEIsTUFBQUEsTUFBSyxTQUFTLFNBQVUsTUFBTSxPQUFPO0FBQ2pDLGdCQUFRLG9DQUFvQyxDQUFDLE1BQU0sS0FBSyxHQUFHLFVBQVUsTUFBTTtBQUMzRSxnREFBd0NBLE1BQUssUUFBUSxVQUFVLE1BQU0sS0FBSztBQUMxRSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxlQUFTLHdDQUF3QyxTQUFTLE1BQU0sS0FBSyxPQUFPO0FBQ3hFLHFDQUE2QixTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUNZLE9BQU1ILE1BQUtJLFdBQVU7QUFDMUUsa0JBQVFELE9BQU1ILFFBQU9JO0FBQUEsUUFDekIsQ0FBQztBQUFBLE1BQ0w7QUFDQSxlQUFTLGtDQUFrQyxTQUFTLE1BQU0sS0FBSyxPQUFPO0FBQ2xFLHFDQUE2QixTQUFTLE1BQU0sS0FBSyxPQUFPLENBQUNELE9BQU1ILE1BQUtJLFdBQVU7QUFDMUUsa0JBQVFELE9BQU1ILFNBQVEsUUFBUUcsT0FBTUgsU0FBUSxDQUFDLEdBQUcsT0FBT0ksTUFBSztBQUFBLFFBQ2hFLENBQUM7QUFBQSxNQUNMO0FBQ0EsZUFBUyw2QkFBNkIsU0FBUyxNQUFNLEtBQUssT0FBTyxrQkFBa0I7QUFDL0UsWUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3BCLGNBQUksUUFBUSxPQUFLO0FBQ2Isb0JBQVEsR0FBRyxLQUFLO0FBQUEsVUFDcEIsQ0FBQztBQUFBLFFBQ0wsWUFDVSxDQUFDSixTQUFRLE9BQU9BLFNBQVEsVUFBVSxHQUFHLEdBQUc7QUFDOUMscUJBQVcsS0FBSyxXQUFXLEdBQUcsR0FBRztBQUM3QixvQkFBUSxHQUFHLElBQUksRUFBRTtBQUFBLFVBQ3JCO0FBQUEsUUFDSixPQUNLO0FBQ0QsMkJBQWlCLE1BQU0sWUFBWSxHQUFHLEdBQUcsS0FBSztBQUFBLFFBQ2xEO0FBQUEsTUFDSjtBQUNBLGVBQVMsWUFBWSxLQUFLO0FBQ3RCLFlBQUksUUFBUTtBQUNSLGlCQUFPO0FBQ1gsZUFBTztBQUFBLE1BQ1g7QUFDQSxlQUFTLDJCQUEyQixXQUFXO0FBQzNDLG1CQUFXLE9BQU8sRUFBRSxRQUFRLENBQUMsWUFBWTtBQUNyQyxlQUFLLENBQUMsUUFBUSxRQUFRLGlCQUFpQixPQUFPO0FBQzFDO0FBQ0osZ0JBQU0sT0FBTyxRQUFRO0FBQ3JCLGNBQUksTUFBTSxRQUFRLElBQUksR0FBRztBQUNyQixnQkFBSSxDQUFDLEtBQUssUUFBUSxTQUFTO0FBQ3ZCLG1CQUFLLE9BQU8sS0FBSyxRQUFRLFNBQVMsR0FBRyxDQUFDO0FBQUEsVUFDOUMsV0FDUyxPQUFPLFNBQVMsVUFBVTtBQUMvQixtQkFBTyxLQUFLO0FBQUEsVUFDaEI7QUFBQSxRQUNKLENBQUM7QUFDRCxlQUFPLFFBQVEsZ0JBQWdCLEVBQUU7QUFBQSxNQUNyQztBQUNBLE1BQUFULE1BQUssU0FBUyxTQUFTLE9BQU8sTUFBTSxVQUFVLEtBQUtjLFVBQVM7QUFDeEQsZ0JBQVEsZ0RBQWdELENBQUMsS0FBSyxLQUFLQSxRQUFPLEdBQUcsVUFBVSxNQUFNO0FBQzdGLFlBQUksT0FBTyxRQUFRLFlBQVksQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ2hELGdCQUFNLGFBQWEsS0FBSyxLQUFLZCxNQUFLLHVCQUF1QixFQUFFLHdCQUF3QixPQUFPLE1BQU07QUFDaEcsa0JBQVEsaUJBQWlCLFFBQVEsaUJBQWlCLENBQUMsR0FBRyxPQUFPLEdBQUc7QUFDaEUsaUJBQU9BO0FBQUEsUUFDWDtBQUNBLFlBQUksT0FBTyxRQUFRLFlBQVk7QUFDM0IsVUFBQWMsV0FBVTtBQUNWLGdCQUFNO0FBQUEsUUFDVjtBQUNBLFFBQUFkLE1BQUssU0FBUyxLQUFLLE9BQU8sUUFBUSxnQkFBZ0IsMEJBQTBCLENBQUM7QUFDN0UsU0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxPQUFLO0FBQzVDLGtCQUFRLE9BQU8sS0FBS2MsWUFBVztBQUFBLFFBQ25DLENBQUM7QUFDRCxlQUFPZDtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFVBQVUsU0FBVSxLQUFLLGFBQWE7QUFDdkMsZ0JBQVEsMkJBQTJCLENBQUMsS0FBSyxXQUFXLEdBQUcsVUFBVSxNQUFNO0FBQ3ZFLFlBQUksTUFBTSxRQUFRLEdBQUcsR0FBRztBQUNwQixjQUFJLFFBQVEsbUJBQWlCQSxNQUFLLFFBQVEsR0FBRyxhQUFhLENBQUM7QUFBQSxRQUMvRCxPQUNLO0FBQ0Qsa0JBQVEsUUFBUSxLQUFLLFdBQVc7QUFBQSxRQUNwQztBQUNBLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssVUFBVSxTQUFVLEtBQUssYUFBYSxTQUFTLFNBQVMsYUFBYSxZQUFZO0FBQ2xGLGdCQUFRLGdHQUFnRyxDQUFDLEtBQUssYUFBYSxTQUFTLFNBQVMsYUFBYSxVQUFVLEdBQUcsVUFBVSxNQUFNO0FBQ3ZMLGtCQUFVLFdBQVcsS0FBSyxhQUFhLFNBQVMsU0FBUyxhQUFhLFVBQVU7QUFDaEYsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxhQUFhLFNBQVUsS0FBSyxNQUFNO0FBQ25DLGdCQUFRLHFCQUFxQixDQUFDLEtBQUssSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUMxRCxjQUFNLE1BQU0saUJBQWlCLE9BQU87QUFDcEMsa0JBQVUsYUFBYSxLQUFLQSxNQUFLLFdBQVcsR0FBRyxLQUFLLE9BQU8sY0FBYyxHQUFHLElBQUk7QUFDaEYsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxTQUFTQSxNQUFLLFdBQVdBLE1BQUssVUFBVSxTQUFTLE9BQU8sTUFBTSxLQUFLLEtBQUs7QUFDekUsWUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3BCLGNBQUksUUFBUSxTQUFPO0FBQ2YsaUNBQXFCLEtBQUssTUFBTSxNQUFNO0FBQ3RDLHlCQUFhLEtBQUssR0FBRztBQUFBLFVBQ3pCLENBQUM7QUFDRCxnQkFBTTtBQUFBLFFBQ1YsV0FDUyxPQUFPLFFBQVEsVUFBVTtBQUM5QixnQkFBTTtBQUNOLGdCQUFNO0FBQUEsUUFDVjtBQUNBLFlBQUksT0FBTyxTQUFTLFVBQVU7QUFDMUIsK0JBQXFCLEtBQUssTUFBTSxNQUFNO0FBQ3RDLFVBQUFBLE1BQUssY0FBYyxNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDMUMsV0FDUyxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQzFCLGVBQUssUUFBUSxTQUFPO0FBQ2hCLGlDQUFxQixLQUFLLE1BQU0sTUFBTTtBQUN0Qyx5QkFBYSxLQUFLLEdBQUc7QUFBQSxVQUN6QixDQUFDO0FBQUEsUUFDTCxPQUNLO0FBQ0QsY0FBSSxPQUFPLFFBQVEsVUFBVTtBQUN6Qix5QkFBYSxNQUFNLEdBQUc7QUFBQSxVQUMxQixXQUNTLFFBQVEsUUFBUSxPQUFPLFFBQVEsYUFBYTtBQUNqRCx5QkFBYSxJQUFJO0FBQUEsVUFDckI7QUFBQSxRQUNKO0FBQ0EsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxnQkFBZ0IsU0FBUyxjQUFjLE1BQU0sR0FBRyxLQUFLLFFBQVEsUUFBUTtBQUN0RSxnQkFBUSw0RUFBNEUsQ0FBQyxLQUFLLEtBQUssUUFBUSxNQUFNLEdBQUcsVUFBVSxNQUFNO0FBQ2hJLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDekIsbUJBQVM7QUFDVCxnQkFBTTtBQUFBLFFBQ1Y7QUFDQSxRQUFBQSxNQUFLLE9BQU8sS0FBSyxLQUFLO0FBQ3RCLGdCQUFRLGlCQUFpQixJQUFJO0FBQUEsVUFDekI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNKO0FBQ0EsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxxQkFBcUIsTUFBTTtBQUM1QixnQkFBUSxDQUFDLEdBQUcsQ0FBQztBQUNiLGVBQU8sUUFBUTtBQUFBLE1BQ25CO0FBQ0EsTUFBQUEsTUFBSyxzQkFBc0IsTUFBTTtBQUM3QixnQkFBUSxDQUFDLEdBQUcsQ0FBQztBQUNiLGVBQU8sUUFBUTtBQUFBLE1BQ25CO0FBQ0EsTUFBQUEsTUFBSyxrQkFBa0IsU0FBUyxnQkFBZ0IsUUFBUSxTQUFTO0FBQzdELGdCQUFRLDZCQUE2QixDQUFDLFFBQVEsT0FBTyxHQUFHLFVBQVUsTUFBTTtBQUN4RSxnQkFBUSxrQkFBa0IsVUFBVTtBQUNwQyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLHVCQUF1QixNQUFNO0FBQzlCLGdCQUFRLENBQUMsR0FBRyxDQUFDO0FBQ2IsZUFBTyxRQUFRO0FBQUEsTUFDbkI7QUFDQSxNQUFBQSxNQUFLLFVBQVUsU0FBVSxLQUFLLE9BQU87QUFDakMsZ0JBQVEseUNBQXlDLENBQUMsS0FBSyxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQy9FLHFCQUFhLFFBQVEsS0FBSyxLQUFLO0FBQy9CLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssWUFBWSxTQUFVLE1BQU0sTUFBTTtBQUNuQyxnQkFBUSxrQ0FBa0MsQ0FBQyxNQUFNLElBQUksR0FBRyxVQUFVLE1BQU07QUFDeEUscUJBQWEsVUFBVSxNQUFNLElBQUk7QUFDakMsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxRQUFRLFNBQVUsS0FBSyxhQUFhLFNBQVMsU0FBUztBQUN2RCxnQkFBUSx5RUFBeUUsQ0FBQyxLQUFLLGFBQWEsU0FBUyxPQUFPLEdBQUcsVUFBVSxNQUFNO0FBQ3ZJLFlBQUksZ0JBQWdCLFFBQVc7QUFDM0IsK0JBQXFCLEtBQUssTUFBTSxNQUFNO0FBQ3RDLGVBQUssT0FBTyxJQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ2hDLG1CQUFPQSxNQUFLLFFBQVEsS0FBSyxhQUFhLFNBQVMsT0FBTztBQUFBLFVBQzFELE9BQ0s7QUFDRCxrQkFBTSxJQUFJLE9BQU8sK0VBQStFO0FBQUEsVUFDcEc7QUFBQSxRQUNKLE9BQ0s7QUFDRCxrQkFBUSxNQUFNLEdBQUc7QUFDakIsaUJBQU9BO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxNQUFBQSxNQUFLLFdBQVdBLE1BQUssU0FBUyxTQUFVLEtBQUs7QUFDekMsZ0JBQVEsWUFBWSxDQUFDLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDM0MsZ0JBQVEsT0FBTyxHQUFHO0FBQ2xCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssT0FBTyxTQUFVLEdBQUc7QUFDckIsZ0JBQVEsY0FBYyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU07QUFDM0MsZ0JBQVEsT0FBTyxDQUFDO0FBQ2hCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssa0JBQWtCLFNBQVUsR0FBRztBQUNoQyxnQkFBUSxjQUFjLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTTtBQUMzQywrQkFBdUI7QUFDdkIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSywwQkFBMEIsTUFBTTtBQUNyQyxNQUFBQSxNQUFLLFFBQVEsU0FBVSxHQUFHLFNBQVM7QUFDL0IsZ0JBQVEsd0JBQXdCLENBQUMsR0FBRyxPQUFPLEdBQUcsVUFBVSxNQUFNO0FBQzlELHFCQUFhLE1BQU0sR0FBRyxZQUFZLEtBQUs7QUFDdkMsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxTQUFTLFNBQVNVLFFBQU8sU0FBU0EsU0FBUTtBQUMzQyxnQkFBUSw0QkFBNEIsQ0FBQyxTQUFTQSxPQUFNLEdBQUcsVUFBVSxNQUFNO0FBQ3ZFLGtCQUFVLENBQUMsRUFBRSxPQUFPLE9BQU87QUFDM0IsWUFBSUEsWUFBVyxPQUFPO0FBQ2xCLGtCQUFRLFFBQVEsUUFBUSxNQUFNLE9BQU8sT0FBSyxRQUFRLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFBQSxRQUN2RSxPQUNLO0FBQ0Qsa0JBQVEsUUFBUSxPQUFLO0FBQ2pCLGdCQUFJLFFBQVEsTUFBTSxRQUFRLENBQUMsTUFBTTtBQUM3QixzQkFBUSxNQUFNLEtBQUssQ0FBQztBQUFBLFVBQzVCLENBQUM7QUFBQSxRQUNMO0FBQ0EsZUFBT1Y7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxVQUFVLFNBQVMsUUFBUSxLQUFLLFVBQVU7QUFDM0MsZ0JBQVEscUJBQXFCLENBQUMsS0FBSyxRQUFRLEdBQUcsVUFBVSxNQUFNO0FBQzlELFlBQUksT0FBTztBQUNYLGNBQU0sTUFBTSxNQUFNLFlBQVksR0FBRztBQUNqQyxZQUFJLElBQUksUUFBUSxPQUFPLElBQUksU0FBUyxVQUFVO0FBQzFDLGlCQUFPLGFBQWEsSUFBSSxNQUFNLFlBQVksS0FBS0EsTUFBSyx1QkFBdUIsRUFBRSx3QkFBd0IsT0FBTyxNQUFNO0FBQ2xILGtCQUFRLGlCQUFpQixRQUFRLGlCQUFpQixDQUFDLEdBQUcsT0FBTyxJQUFJO0FBQUEsUUFDckU7QUFDQSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxZQUFNLE9BQU8sQ0FBQztBQUNkLGVBQVMsTUFBTSxVQUFVO0FBQ3JCLGNBQU0sUUFBUSxZQUFZO0FBQzFCLFlBQUksS0FBSztBQUNMLGlCQUFPLEtBQUs7QUFDaEIsWUFBSSxNQUFNLENBQUM7QUFDWCxZQUFJO0FBQ0EsY0FBSSxXQUFXLFlBQVksT0FBTztBQUNsQyxjQUFJLENBQUMsWUFBWSxPQUFPLEtBQUssUUFBUSxRQUFRLEdBQUc7QUFDNUMsdUJBQVcsT0FBTyxLQUFLLFFBQVEsUUFBUTtBQUFBLFVBQzNDO0FBQ0EsZ0JBQU0sY0FBYyxPQUFPLE9BQU8sVUFBVSxDQUFDLEtBQUssVUFBVTtBQUN4RCxnQkFBSSxNQUFNLFNBQVMsY0FBYyxHQUFHO0FBQ2hDLHFCQUFPO0FBQUEsWUFDWCxPQUNLO0FBQ0QscUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDSixDQUFDO0FBQ0QsK0JBQXFCLGFBQWEsUUFBVyxNQUFNO0FBQ25ELGdCQUFNLEtBQUssTUFBTSxPQUFPLGFBQWEsYUFBYSxNQUFNLENBQUM7QUFBQSxRQUM3RCxTQUNPLE9BQVA7QUFBQSxRQUFnQjtBQUNoQixhQUFLLFNBQVMsT0FBTyxDQUFDO0FBQ3RCLGVBQU8sS0FBSztBQUFBLE1BQ2hCO0FBQ0EsVUFBSSxVQUFVO0FBQ2QsVUFBSSxlQUFlO0FBQ25CLE1BQUFBLE1BQUssUUFBUSxTQUFTZSxPQUFNLE1BQU0sY0FBYyxVQUFVO0FBQ3RELGdCQUFRLHVEQUF1RCxDQUFDLE1BQU0sY0FBYyxRQUFRLEdBQUcsVUFBVSxNQUFNO0FBQy9HLGVBQU87QUFDUCxZQUFJLE9BQU8sU0FBUyxhQUFhO0FBQzdCLGdCQUFNLE9BQU9mLE1BQUssV0FBVyxXQUFXO0FBQ3hDLGdCQUFNLFlBQVlBLE1BQUs7QUFDdkIsbUJBQVM7QUFDVCxVQUFBQSxNQUFLLFNBQVM7QUFDZCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLE9BQU8saUJBQWlCLFVBQVU7QUFDbEMseUJBQWU7QUFDZix5QkFBZTtBQUFBLFFBQ25CO0FBQ0EsWUFBSSxPQUFPLGlCQUFpQixZQUFZO0FBQ3BDLG9CQUFVO0FBQ1YseUJBQWU7QUFBQSxRQUNuQjtBQUNBLFlBQUksQ0FBQztBQUNELHdCQUFjO0FBQ2xCLFlBQUk7QUFDQSx3QkFBYztBQUNsQixjQUFNLFNBQVNBLE1BQUssV0FBVyxNQUFNLENBQUMsQ0FBQyxZQUFZO0FBQ25ELHFCQUFhLFVBQVVBLE1BQUssTUFBTTtBQUNsQyxZQUFJO0FBQ0Esa0JBQVEsV0FBVyxRQUFRLE1BQU07QUFDckMsaUJBQVM7QUFDVCxlQUFPO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssbUJBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsTUFBQUEsTUFBSyxvQkFBb0IsTUFBTSxDQUFDLENBQUM7QUFDakMsTUFBQUEsTUFBSyxTQUFTQSxNQUFLLFVBQVUsU0FBUyxPQUFPLEtBQUssS0FBSztBQUNuRCxnQkFBUSw0QkFBNEIsQ0FBQyxLQUFLLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDaEUsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUN6QixpQkFBTyxLQUFLLEdBQUcsRUFBRSxRQUFRLE9BQUs7QUFDMUIsWUFBQUEsTUFBSyxRQUFRLEdBQUcsSUFBSSxFQUFFO0FBQUEsVUFDMUIsQ0FBQztBQUFBLFFBQ0wsT0FDSztBQUNELGNBQUksT0FBTyxRQUFRLFVBQVU7QUFDekIsa0JBQU0sQ0FBQztBQUFBLFVBQ1g7QUFDQSxrQkFBUSxJQUFJLE9BQU87QUFDbkIsY0FBSSxJQUFJO0FBQ0osWUFBQUEsTUFBSyxNQUFNLEtBQUssSUFBSSxLQUFLO0FBQzdCLGdCQUFNLFlBQVksSUFBSSxhQUFhLElBQUk7QUFDdkMsY0FBSSxXQUFXO0FBQ1gsWUFBQUEsTUFBSyxnQkFBZ0IsS0FBSyxTQUFTO0FBQUEsVUFDdkM7QUFDQSxnQkFBTSxTQUFTLElBQUksVUFBVSxJQUFJLFlBQVksSUFBSTtBQUNqRCxjQUFJLFFBQVE7QUFDUixZQUFBQSxNQUFLLE9BQU8sS0FBSyxNQUFNO0FBQUEsVUFDM0I7QUFDQSxjQUFJLElBQUksY0FBYztBQUNsQixZQUFBQSxNQUFLLGFBQWEsS0FBSyxPQUFPLElBQUksaUJBQWlCLFdBQVcsSUFBSSxlQUFlLE1BQVM7QUFBQSxVQUM5RjtBQUNBLGNBQUksSUFBSSxXQUFXO0FBQ2YsWUFBQUEsTUFBSyxVQUFVLEtBQUssSUFBSSxTQUFTO0FBQUEsVUFDckM7QUFDQSxjQUFJLGFBQWEsS0FBSztBQUNsQixZQUFBQSxNQUFLLFFBQVEsS0FBSyxJQUFJLE9BQU87QUFBQSxVQUNqQztBQUNBLGNBQUksSUFBSSxZQUFZLFFBQVc7QUFDM0IsWUFBQUEsTUFBSyxRQUFRLEtBQUssSUFBSSxPQUFPO0FBQUEsVUFDakM7QUFDQSxjQUFJLElBQUksVUFBVSxRQUFXO0FBQ3pCLFlBQUFBLE1BQUssTUFBTSxLQUFLLElBQUksS0FBSztBQUFBLFVBQzdCO0FBQ0EsY0FBSSxJQUFJLFFBQVE7QUFDWixZQUFBQSxNQUFLLE9BQU8sS0FBSyxJQUFJLFlBQVk7QUFBQSxVQUNyQztBQUNBLGNBQUksSUFBSSxXQUFXO0FBQ2YsWUFBQUEsTUFBSyxVQUFVLEdBQUc7QUFBQSxVQUN0QjtBQUNBLGNBQUksSUFBSSxTQUFTO0FBQ2IsWUFBQUEsTUFBSyxRQUFRLEtBQUssSUFBSSxPQUFPO0FBQUEsVUFDakM7QUFDQSxjQUFJLElBQUksUUFBUTtBQUNaLFlBQUFBLE1BQUssT0FBTyxLQUFLLElBQUksTUFBTTtBQUFBLFVBQy9CO0FBQ0EsY0FBSSxJQUFJLE9BQU87QUFDWCxZQUFBQSxNQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUs7QUFBQSxVQUM3QjtBQUNBLGNBQUksSUFBSSxXQUFXLElBQUksU0FBUyxXQUFXO0FBQ3ZDLFlBQUFBLE1BQUssUUFBUSxHQUFHO0FBQ2hCLGdCQUFJLElBQUk7QUFDSixjQUFBQSxNQUFLLFFBQVEsSUFBSSxLQUFLO0FBQUEsVUFDOUI7QUFDQSxjQUFJLElBQUksU0FBUyxJQUFJLFNBQVMsU0FBUztBQUNuQyxZQUFBQSxNQUFLLE1BQU0sR0FBRztBQUNkLGdCQUFJLElBQUk7QUFDSixjQUFBQSxNQUFLLE1BQU0sSUFBSSxLQUFLO0FBQUEsVUFDNUI7QUFDQSxjQUFJLElBQUksVUFBVSxJQUFJLFNBQVMsVUFBVTtBQUNyQyxZQUFBQSxNQUFLLE9BQU8sR0FBRztBQUNmLGdCQUFJLElBQUk7QUFDSixjQUFBQSxNQUFLLE9BQU8sSUFBSSxLQUFLO0FBQUEsVUFDN0I7QUFDQSxjQUFJLElBQUksVUFBVSxJQUFJLFNBQVMsVUFBVTtBQUNyQyxZQUFBQSxNQUFLLE9BQU8sR0FBRztBQUNmLGdCQUFJLElBQUk7QUFDSixjQUFBQSxNQUFLLE9BQU8sSUFBSSxLQUFLO0FBQUEsVUFDN0I7QUFDQSxjQUFJLElBQUksU0FBUyxJQUFJLFNBQVMsU0FBUztBQUNuQyxZQUFBQSxNQUFLLE1BQU0sR0FBRztBQUFBLFVBQ2xCO0FBQ0EsY0FBSSxPQUFPLElBQUksV0FBVyxXQUFXO0FBQ2pDLFlBQUFBLE1BQUssT0FBTyxLQUFLLElBQUksTUFBTTtBQUFBLFVBQy9CO0FBQ0EsY0FBSSxJQUFJLG9CQUFvQjtBQUN4QixvQkFBUSxtQkFBbUIsT0FBTyxJQUFJO0FBQUEsVUFDMUM7QUFDQSxjQUFJLElBQUksZ0JBQWdCO0FBQ3BCLFlBQUFBLE1BQUssZUFBZSxHQUFHO0FBQUEsVUFDM0I7QUFDQSxnQkFBTSxPQUFPLElBQUksWUFBWSxJQUFJLGVBQWUsSUFBSTtBQUNwRCxVQUFBQSxNQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ3ZCLGNBQUksSUFBSSxRQUFRO0FBQ1osWUFBQUEsTUFBSyxLQUFLLEdBQUc7QUFBQSxVQUNqQjtBQUNBLGNBQUksSUFBSSxhQUFhO0FBQ2pCLFlBQUFBLE1BQUssWUFBWSxHQUFHO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQ0EsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxhQUFhLE1BQU07QUFDeEIsTUFBQUEsTUFBSyxhQUFhLFNBQVUsS0FBSyxNQUFNO0FBQ25DLGdCQUFRLHFCQUFxQixDQUFDLEtBQUssSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUMxRCxZQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3RCLGdCQUFNLElBQUksT0FBTyxrRUFBa0U7QUFBQSxRQUN2RjtBQUNBLGNBQU0sZ0JBQWdCO0FBQUEsVUFDbEI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0o7QUFDQSxlQUFPLFVBQVUsTUFBTSxDQUFDLEdBQUcsTUFBTTtBQUM3QixjQUFJLFNBQVMsY0FBYyxRQUFRLENBQUMsTUFBTTtBQUMxQyxjQUFJLE1BQU0sVUFBVSxDQUFDLFVBQVUsVUFBVSxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU07QUFDL0QscUJBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1gsQ0FBQztBQUNELGNBQU0sY0FBYyxRQUFRLGFBQWEsUUFBUSxhQUFhLFNBQVM7QUFDdkUsY0FBTSxlQUFlLGNBQ2YsVUFBVSxrQkFBa0IsV0FBVyxJQUN2QztBQUFBLFVBQ0UsT0FBTyxDQUFDO0FBQUEsVUFDUixPQUFPLENBQUM7QUFBQSxVQUNSLFNBQVMsQ0FBQztBQUFBLFVBQ1YsUUFBUSxDQUFDO0FBQUEsUUFDYjtBQUNKLG1CQUFXLFlBQVksRUFBRSxRQUFRLFFBQU07QUFDbkMsZ0JBQU0sY0FBYyxhQUFhO0FBQ2pDLGNBQUksTUFBTSxRQUFRLFdBQVcsR0FBRztBQUM1QixnQkFBSSxZQUFZLFFBQVEsR0FBRyxNQUFNO0FBQzdCLG1CQUFLLE1BQU07QUFBQSxVQUNuQixPQUNLO0FBQ0QsZ0JBQUksWUFBWSxRQUFRLEVBQUUsTUFBTTtBQUM1QixtQkFBSyxNQUFNLFlBQVk7QUFBQSxVQUMvQjtBQUFBLFFBQ0osQ0FBQztBQUNELFFBQUFBLE1BQUssTUFBTSxLQUFLLFFBQVEsdUJBQXVCLENBQUM7QUFDaEQsZUFBT0EsTUFBSyxPQUFPLEtBQUssSUFBSTtBQUFBLE1BQ2hDO0FBQ0EsTUFBQUEsTUFBSyxRQUFRLFNBQVMsTUFBTSxNQUFNLFdBQVc7QUFDekMsZ0JBQVEsMkJBQTJCLENBQUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxNQUFNO0FBQ3RFLGNBQU0sV0FBVyxnQkFBZ0IsY0FBYyxPQUFPO0FBQ3RELFlBQUksZ0JBQWdCLFlBQVk7QUFDNUIsaUJBQU8sZ0JBQWdCO0FBQUEsUUFDM0I7QUFDQSxjQUFNLE9BQU8sQ0FBQztBQUNkLGVBQU8sY0FBYyxZQUFZLENBQUMsR0FBRyxPQUFPLElBQUksRUFBRSxPQUFPLFNBQU87QUFDNUQsY0FBSSxLQUFLO0FBQ0wsbUJBQU87QUFDWCxpQkFBUSxLQUFLLE9BQU87QUFBQSxRQUN4QixDQUFDO0FBQ0QsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxZQUFZLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxRQUFRLGVBQWU7QUFDaEUsTUFBQUEsTUFBSyxNQUFNLFNBQVUsUUFBUTtBQUN6QixnQkFBUSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNO0FBQ3RELFlBQUksV0FBVztBQUNYLGlCQUFPLFFBQVE7QUFBQTtBQUVmLGtCQUFRLFlBQVksVUFBVTtBQUNsQyxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLE9BQU8sU0FBVSxNQUFNO0FBQ3hCLGdCQUFRLDJCQUEyQixDQUFDLElBQUksR0FBRyxVQUFVLE1BQU07QUFDM0QsZ0JBQVEsS0FBSyxJQUFJO0FBQ2pCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLFVBQUksU0FBUztBQUNiLE1BQUFBLE1BQUssU0FBUyxTQUFVLFNBQVM7QUFDN0IsZ0JBQVEsYUFBYSxDQUFDLE9BQU8sR0FBRyxVQUFVLE1BQU07QUFDaEQsaUJBQVMsWUFBWTtBQUNyQixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLFlBQVksTUFBTTtBQUN2QixVQUFJLGlCQUFpQjtBQUNyQixNQUFBQSxNQUFLLGlCQUFpQixTQUFVLFNBQVM7QUFDckMsZ0JBQVEsYUFBYSxDQUFDLE9BQU8sR0FBRyxVQUFVLE1BQU07QUFDaEQseUJBQWlCLFlBQVk7QUFDN0IsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxvQkFBb0IsTUFBTTtBQUMvQixVQUFJLGdCQUFnQjtBQUNwQixNQUFBQSxNQUFLLGdCQUFnQixTQUFVLFNBQVM7QUFDcEMsZ0JBQVEsYUFBYSxDQUFDLE9BQU8sR0FBRyxVQUFVLE1BQU07QUFDaEQsd0JBQWdCLFlBQVk7QUFDNUIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxtQkFBbUIsTUFBTTtBQUM5QixVQUFJLGVBQWUsQ0FBQztBQUNwQixNQUFBQSxNQUFLLHNCQUFzQixTQUFTLG9CQUFvQixRQUFRO0FBQzVELGdCQUFRLFlBQVksQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNO0FBQzlDLHVCQUFlO0FBQ2YsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyx5QkFBeUIsTUFBTTtBQUNwQyxNQUFBQSxNQUFLLFdBQVcsU0FBVSxPQUFPO0FBQzdCLGdCQUFRLHFCQUFxQixDQUFDLEtBQUssR0FBRyxVQUFVLE1BQU07QUFDdEQsWUFBSSxDQUFDQSxNQUFLO0FBQ04sVUFBQUEsTUFBSyxXQUFXLFdBQVc7QUFDL0IsWUFBSSxVQUFVLGtCQUFrQixHQUFHO0FBQy9CLGtCQUFRO0FBQ1Isb0JBQVUsb0JBQW9CQSxLQUFJO0FBQUEsUUFDdEM7QUFDQSxnQkFBUSxTQUFTLEtBQUs7QUFDdEIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsVUFBSSxhQUFhO0FBQ2pCLE1BQUFBLE1BQUssVUFBVSxTQUFTLFFBQVEsS0FBSyxLQUFLLEtBQUs7QUFDM0MsY0FBTSxvQkFBb0I7QUFDMUIsZ0JBQVEsc0NBQXNDLENBQUMsS0FBSyxLQUFLLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDL0UsWUFBSSxZQUFZO0FBQ1oscUNBQTJCLFVBQVU7QUFDckMsa0JBQVEsUUFBUSxNQUFTO0FBQ3pCLHVCQUFhO0FBQUEsUUFDakI7QUFDQSxZQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLGdCQUFNLGFBQWE7QUFDbkIsZ0JBQU07QUFBQSxRQUNWLFdBQ1MsVUFBVSxXQUFXLEdBQUc7QUFDN0IsY0FBSSxRQUFRLE9BQU87QUFDZixtQkFBT0E7QUFBQSxVQUNYO0FBQ0EsZ0JBQU07QUFDTixnQkFBTTtBQUFBLFFBQ1YsV0FDUyxVQUFVLFdBQVcsR0FBRztBQUM3QixnQkFBTTtBQUNOLGdCQUFNO0FBQUEsUUFDVjtBQUNBLHFCQUFhLE9BQU8sUUFBUSxXQUFXLE1BQU07QUFDN0MsY0FBTSxPQUFPLFFBQVEsZ0JBQWdCLHFCQUFxQjtBQUMxRCxnQkFBUSxRQUFRLE9BQU8sTUFBUztBQUNoQyxRQUFBQSxNQUFLLFFBQVEsVUFBVTtBQUN2QixRQUFBQSxNQUFLLFNBQVMsWUFBWSxHQUFHO0FBQzdCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLGVBQVMsZUFBZTtBQUNwQixjQUFNLE1BQU0sTUFBTTtBQUNsQixlQUFPLElBQUksV0FBVztBQUFBLE1BQzFCO0FBQ0EsVUFBSSxVQUFVO0FBQ2QsTUFBQUEsTUFBSyxhQUFhQSxNQUFLLE9BQU8sU0FBUyxXQUFXLEtBQUssS0FBSztBQUN4RCxjQUFNLGlCQUFpQjtBQUN2QixnQkFBUSw2QkFBNkIsQ0FBQyxLQUFLLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDakUsWUFBSSxTQUFTO0FBQ1QscUNBQTJCLE9BQU87QUFDbEMsb0JBQVU7QUFBQSxRQUNkO0FBQ0EsWUFBSSxVQUFVLFdBQVcsR0FBRztBQUN4QixjQUFJLFFBQVE7QUFDUixtQkFBT0E7QUFBQSxRQUNmO0FBQ0Esa0JBQVUsT0FBTyxRQUFRLFdBQVcsTUFBTTtBQUMxQyxRQUFBQSxNQUFLLFFBQVEsT0FBTztBQUNwQixRQUFBQSxNQUFLLFNBQVMsU0FBUyxPQUFPLFFBQVEsZ0JBQWdCLFdBQVcsQ0FBQztBQUNsRSxlQUFPQTtBQUFBLE1BQ1g7QUFDQSxZQUFNLHVCQUF1QjtBQUM3QixjQUFRLGdCQUFnQjtBQUN4QixNQUFBQSxNQUFLLG1CQUFtQkEsTUFBSyxhQUFhLFNBQVMsaUJBQWlCLEtBQUssS0FBSztBQUMxRSxnQkFBUSw2QkFBNkIsQ0FBQyxLQUFLLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDakUsWUFBSSxVQUFVLFdBQVcsR0FBRztBQUN4QixjQUFJLFFBQVE7QUFDUixtQkFBT0E7QUFBQSxRQUNmO0FBQ0EsY0FBTSxnQkFBZ0IsT0FBTyxRQUFRLFdBQVcsTUFBTTtBQUN0RCxRQUFBQSxNQUFLLFFBQVEsYUFBYTtBQUMxQixRQUFBQSxNQUFLLFNBQVMsZUFBZSxPQUFPLFFBQVEsZ0JBQWdCLHFCQUFxQixDQUFDO0FBQ2xGLGdCQUFRLGdCQUFnQjtBQUN4QixlQUFPQTtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLE9BQU8sU0FBUyxLQUFLLEtBQUs7QUFDM0IsZ0JBQVEsWUFBWSxDQUFDLEdBQUcsR0FBRyxVQUFVLE1BQU07QUFDM0MsZ0JBQVEsY0FBYyxLQUFLLEdBQUc7QUFDOUIsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxpQkFBaUIsU0FBUyxlQUFlLFNBQVMsU0FBUztBQUM1RCxnQkFBUSw2QkFBNkIsQ0FBQyxTQUFTLE9BQU8sR0FBRyxVQUFVLE1BQU07QUFDekUsZ0JBQVEsZUFBZSxTQUFTLE9BQU87QUFDdkMsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsVUFBSSxjQUFjO0FBQ2xCLE1BQUFBLE1BQUssY0FBYyxTQUFVLFVBQVUsTUFBTTtBQUN6QyxnQkFBUSxhQUFhLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTTtBQUNoRCxzQkFBYztBQUNkLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssaUJBQWlCLE1BQU07QUFDNUIsTUFBQUEsTUFBSyx1QkFBdUIsU0FBVSxJQUFJLEtBQUs7QUFDM0MsZ0JBQVEscUJBQXFCLENBQUMsSUFBSSxHQUFHLEdBQUcsVUFBVSxNQUFNO0FBQ3hELGFBQUssTUFBTUEsTUFBSztBQUNoQixnQkFBUSxJQUFJLGFBQWEseUJBQXlCLElBQUksT0FBTyxxQkFBcUIsWUFBWSxDQUFDO0FBQy9GLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssZ0JBQWdCLFNBQVUsTUFBTSxNQUFNO0FBQ3ZDLGdCQUFRLHNCQUFzQixDQUFDLE1BQU0sSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUM1RCxxQkFBYSxjQUFjLE1BQU0sSUFBSTtBQUFBLE1BQ3pDO0FBQ0EsTUFBQUEsTUFBSyxTQUFTLFNBQVUsUUFBUTtBQUM1QixnQkFBUSxZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBTTtBQUM5QyxZQUFJLENBQUMsUUFBUTtBQUNULHNCQUFZO0FBQ1osaUJBQU9JLE1BQUssVUFBVTtBQUFBLFFBQzFCO0FBQ0EsdUJBQWU7QUFDZixRQUFBQSxNQUFLLFVBQVUsTUFBTTtBQUNyQixlQUFPSjtBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGdCQUFnQkEsTUFBSyxlQUFlLFNBQVUsS0FBSztBQUNwRCxnQkFBUSxZQUFZLENBQUMsR0FBRyxHQUFHLFVBQVUsTUFBTTtBQUMzQyx1QkFBZTtBQUNmLFFBQUFJLE1BQUssYUFBYSxHQUFHO0FBQ3JCLGVBQU9KO0FBQUEsTUFDWDtBQUNBLFVBQUksZUFBZTtBQUNuQixNQUFBQSxNQUFLLGVBQWUsU0FBVSxRQUFRO0FBQ2xDLGdCQUFRLGFBQWEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNO0FBQy9DLHVCQUFlO0FBQ2YsZUFBT0E7QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxrQkFBa0IsTUFBTTtBQUM3QixZQUFNLFVBQVU7QUFBQSxRQUNaLE9BQU8sTUFBTTtBQUNULGNBQUksQ0FBQ0EsTUFBSyxrQkFBa0I7QUFDeEIsb0JBQVEsSUFBSSxHQUFHLElBQUk7QUFDdkIsc0JBQVk7QUFDWixjQUFJLE9BQU87QUFDUCxzQkFBVTtBQUNkLG9CQUFVLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksQ0FBQ0EsTUFBSyxrQkFBa0I7QUFDeEIsb0JBQVEsTUFBTSxHQUFHLElBQUk7QUFDekIsc0JBQVk7QUFDWixjQUFJLE9BQU87QUFDUCxzQkFBVTtBQUNkLG9CQUFVLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDM0I7QUFBQSxNQUNKO0FBQ0EsTUFBQUEsTUFBSyxxQkFBcUIsTUFBTTtBQUNoQyxNQUFBQSxNQUFLLGFBQWEsTUFBTTtBQUN4QixNQUFBQSxNQUFLLGdCQUFnQixNQUFNO0FBQ3ZCLG9CQUFZO0FBQUEsTUFDaEI7QUFDQSxVQUFJO0FBQ0osTUFBQUEsTUFBSyxvQkFBb0IsU0FBVSxZQUFZLE1BQU07QUFDakQsZ0JBQVEsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLE1BQU07QUFDbEQsNEJBQW9CO0FBQ3BCLGVBQU9BO0FBQUEsTUFDWDtBQUNBLE1BQUFBLE1BQUssbUJBQW1CLE1BQU07QUFDOUIsTUFBQUEsTUFBSyx3QkFBd0IsTUFBTTtBQUNuQyxNQUFBQSxNQUFLLHFCQUFxQixNQUFNO0FBQ2hDLE1BQUFBLE1BQUssZ0JBQWdCLE1BQU07QUFDdkIsZ0JBQVEsQ0FBQyxHQUFHLENBQUM7QUFDYixlQUFPLE9BQU8sUUFBUTtBQUFBLE1BQzFCO0FBQ0EsYUFBTyxlQUFlQSxPQUFNLFFBQVE7QUFBQSxRQUNoQyxLQUFLLE1BQU1BLE1BQUssV0FBVyxXQUFXO0FBQUEsUUFDdEMsWUFBWTtBQUFBLE1BQ2hCLENBQUM7QUFDRCxNQUFBQSxNQUFLLGFBQWEsU0FBUyxVQUFVLE1BQU0sY0FBYyxvQkFBb0IsY0FBYztBQUN2RixZQUFJLGlCQUFpQixDQUFDLENBQUM7QUFDdkIsZUFBTyxRQUFRO0FBQ2YsZ0JBQVEsS0FBS0ksTUFBSztBQUNsQixnQkFBUSxnQkFBZ0JKLE1BQUssdUJBQXVCO0FBQ3BELGNBQU0scUJBQXFCLENBQUMsQ0FBQyxRQUFRLGNBQWM7QUFDbkQsY0FBTSxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsUUFBUSxlQUFlO0FBQUEsVUFDcEQsY0FBYztBQUFBLFFBQ2xCLENBQUM7QUFDRCxjQUFNLFNBQVMsT0FBTyxPQUFPLFNBQVMsTUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFBQSxVQUNuRSxlQUFlLE9BQU8sT0FBTyxFQUFFLDRCQUE0QixNQUFNLEdBQUcsTUFBTTtBQUFBLFFBQzlFLENBQUMsQ0FBQztBQUNGLFlBQUksT0FBTyxPQUFPO0FBQ2xCLFlBQUk7QUFDQSxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sWUFBWTtBQUMvQyxjQUFNLFVBQVUsT0FBTztBQUN2QixhQUFLLEtBQUtBLE1BQUs7QUFDZixRQUFBQSxNQUFLLFNBQVM7QUFDZCxZQUFJO0FBQ0Esc0JBQVk7QUFDWixjQUFJLGNBQWM7QUFDZCxtQkFBT0EsTUFBSyxhQUFhLE1BQU0sb0JBQW9CLGtCQUFrQjtBQUFBLFVBQ3pFO0FBQ0EsY0FBSSxTQUFTO0FBQ1Qsa0JBQU0sV0FBVyxDQUFDLE9BQU8sRUFDcEIsT0FBTyxRQUFRLFlBQVksQ0FBQyxDQUFDLEVBQzdCLE9BQU8sT0FBSyxFQUFFLFNBQVMsQ0FBQztBQUM3QixnQkFBSSxDQUFDLFNBQVMsUUFBUSxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUc7QUFDbkQsbUJBQUssRUFBRSxJQUFJO0FBQ1gsbUJBQUssV0FBVztBQUFBLFlBQ3BCO0FBQUEsVUFDSjtBQUNBLGdCQUFNLGNBQWMsVUFBVSxZQUFZO0FBQzFDLGdCQUFNLHFCQUFxQixhQUFhLGlCQUFpQjtBQUN6RCxnQkFBTSxxQkFBcUIsS0FBSyxZQUFZO0FBQzVDLGdCQUFNLHFCQUFxQix1QkFDdEIsWUFBWSxTQUFTLEtBQUssWUFBWSxPQUFPO0FBQ2xELGNBQUksS0FBSyxFQUFFLFFBQVE7QUFDZixnQkFBSSxZQUFZLFFBQVE7QUFDcEIsa0JBQUk7QUFDSix1QkFBUyxJQUFJLGdCQUFnQixHQUFHLEtBQUssS0FBSyxFQUFFLE9BQU8sUUFBVyxLQUFLO0FBQy9ELHNCQUFNLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDdEIsb0JBQUksQ0FBQyxZQUFZLFFBQVEsR0FBRyxLQUFLLFFBQVEsbUJBQW1CO0FBQ3hELHdCQUFNLFlBQVksVUFBVSxXQUFXLEtBQUtBLE9BQU0sUUFBUSxJQUFJLENBQUM7QUFDL0QseUJBQU9BLE1BQUssYUFBYSxXQUFXLGtCQUFrQjtBQUFBLGdCQUMxRCxXQUNTLENBQUMsdUJBQXVCLFFBQVEsbUJBQW1CO0FBQ3hELHdDQUFzQjtBQUN0QjtBQUFBLGdCQUNKO0FBQUEsY0FDSjtBQUNBLGtCQUFJLFVBQVUsa0JBQWtCLEtBQUssQ0FBQyxvQkFBb0I7QUFDdEQsc0JBQU0sWUFBWSxVQUFVLFdBQVcsTUFBTUEsT0FBTSxNQUFNO0FBQ3pELHVCQUFPQSxNQUFLLGFBQWEsV0FBVyxrQkFBa0I7QUFBQSxjQUMxRDtBQUNBLGtCQUFJLHFCQUFxQix1QkFBdUIsQ0FBQyxvQkFBb0I7QUFDakUsNkJBQWEsa0JBQWtCLHFCQUFxQixXQUFXO0FBQUEsY0FDbkU7QUFBQSxZQUNKO0FBQ0EsZ0JBQUkscUJBQ0EsQ0FBQyxLQUFLLEVBQUUsUUFBUSxpQkFBaUIsS0FDakMsQ0FBQyxvQkFBb0I7QUFDckIsa0JBQUk7QUFDQSw0QkFBWSxJQUFJO0FBQ3BCLGNBQUFBLE1BQUsscUJBQXFCO0FBQzFCLGNBQUFBLE1BQUssS0FBSyxDQUFDO0FBQUEsWUFDZjtBQUFBLFVBQ0osV0FDUyxVQUFVLGtCQUFrQixLQUFLLENBQUMsb0JBQW9CO0FBQzNELGtCQUFNLFlBQVksVUFBVSxXQUFXLE1BQU1BLE9BQU0sTUFBTTtBQUN6RCxtQkFBT0EsTUFBSyxhQUFhLFdBQVcsa0JBQWtCO0FBQUEsVUFDMUQ7QUFDQSxjQUFJLG9CQUFvQjtBQUNwQixnQkFBSTtBQUNBLDBCQUFZLElBQUk7QUFDcEIsbUJBQU8sQ0FBQyxFQUFFLE9BQU8sSUFBSTtBQUNyQixrQkFBTSxpQkFBaUIsS0FBSyxNQUFNLEtBQUssUUFBUSxLQUFLLGFBQWEsZUFBZSxJQUFJLENBQUM7QUFDckYseUJBQWEsY0FBYyxnQkFBZ0IsaUJBQWU7QUFDdEQsZUFBQyxlQUFlLENBQUMsR0FBRyxRQUFRLENBQUFnQixnQkFBYztBQUN0Qyx3QkFBUSxJQUFJQSxXQUFVO0FBQUEsY0FDMUIsQ0FBQztBQUNELGNBQUFoQixNQUFLLEtBQUssQ0FBQztBQUFBLFlBQ2YsQ0FBQztBQUNELG1CQUFPQSxNQUFLLGFBQWEsTUFBTSxDQUFDLG9CQUFvQixrQkFBa0I7QUFBQSxVQUMxRTtBQUNBLGNBQUksQ0FBQyxXQUFXO0FBQ1osbUJBQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxTQUFPO0FBQzdCLGtCQUFJLFFBQVEsV0FBVyxLQUFLLE1BQU07QUFDOUIsb0JBQUk7QUFDQSw4QkFBWSxJQUFJO0FBQ3BCLGlDQUFpQjtBQUNqQixnQkFBQUEsTUFBSyxTQUFTLEtBQUs7QUFDbkIsZ0JBQUFBLE1BQUssS0FBSyxDQUFDO0FBQUEsY0FDZixXQUNTLFFBQVEsY0FBYyxLQUFLLE1BQU07QUFDdEMsb0JBQUk7QUFDQSw4QkFBWSxJQUFJO0FBQ3BCLGlDQUFpQjtBQUNqQix3QkFBUSxZQUFZO0FBQ3BCLGdCQUFBQSxNQUFLLEtBQUssQ0FBQztBQUFBLGNBQ2Y7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMO0FBQ0EsY0FBSSxDQUFDLGtCQUFrQixRQUFRLGVBQWUsU0FBUyxHQUFHO0FBQ3RELDZCQUFpQixPQUFPLEtBQUssSUFBSSxFQUFFLEtBQUssU0FBTyxRQUFRLGVBQWUsUUFBUSxHQUFHLEtBQUssS0FBSyxLQUFLLFNBQVMsSUFBSTtBQUFBLFVBQ2pIO0FBQ0EsY0FBSSxDQUFDLGdCQUFnQjtBQUNqQixnQkFBSSxPQUFPO0FBQ1Asb0JBQU0sSUFBSSxPQUFPLE9BQU8sTUFBTSxPQUFPO0FBQ3pDLGdCQUFJLENBQUMsb0JBQW9CO0FBQ3JCLGNBQUFBLE1BQUssZUFBZSxNQUFNLFNBQVMsQ0FBQyxHQUFHLE9BQU8sS0FBSztBQUFBLFlBQ3ZEO0FBQUEsVUFDSjtBQUFBLFFBQ0osU0FDTyxLQUFQO0FBQ0ksY0FBSSxlQUFlO0FBQ2Ysb0JBQVEsS0FBSyxJQUFJLFNBQVMsR0FBRztBQUFBO0FBRTdCLGtCQUFNO0FBQUEsUUFDZDtBQUNBLGVBQU9BLE1BQUssYUFBYSxNQUFNLG9CQUFvQixrQkFBa0I7QUFBQSxNQUN6RTtBQUNBLE1BQUFBLE1BQUssZUFBZSxTQUFVLE1BQU0sb0JBQW9CLG9CQUFvQixPQUFPO0FBQy9FLFlBQUlMLFdBQVUsSUFBSTtBQUNkLGlCQUFPO0FBQ1gsWUFBSTtBQUNBLGlCQUFPO0FBQ1gsWUFBSSxDQUFDLG9CQUFvQjtBQUNyQixpQkFBT0ssTUFBSyxnQkFBZ0IsSUFBSTtBQUFBLFFBQ3BDO0FBQ0EsY0FBTSx5QkFBeUJBLE1BQUssdUJBQXVCLEVBQUUsK0JBQ3pEQSxNQUFLLHVCQUF1QixFQUFFLGdDQUFnQztBQUNsRSxZQUFJLHdCQUF3QjtBQUN4QixpQkFBT0EsTUFBSyx3QkFBd0IsSUFBSTtBQUFBLFFBQzVDO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLGtCQUFrQixTQUFVLE1BQU07QUFDbkMsWUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEtBQUs7QUFDakIsaUJBQU87QUFDWCxhQUFLLEVBQUUsS0FBSyxNQUFNLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFDcEMsWUFBSTtBQUNBLGlCQUFPLEtBQUs7QUFBQSxRQUNoQixTQUNPLE1BQVA7QUFBQSxRQUFlO0FBQ2YsZUFBTztBQUFBLE1BQ1g7QUFDQSxNQUFBQSxNQUFLLDBCQUEwQixTQUFVLE1BQU07QUFDM0MsY0FBTSxPQUFPLEtBQUssUUFBUSxLQUFLLFFBQVEsS0FBSztBQUM1QyxpQkFBUyxJQUFJLEdBQUcsTUFBTSxNQUFNLEtBQUssUUFBUSxRQUFXLEtBQUs7QUFDckQsY0FBSSxPQUFPLE9BQU8sZ0JBQWdCLEdBQUcsS0FDakMsT0FBTyxjQUFjLEtBQUssTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRztBQUN4RCxpQkFBSyxLQUFLLE9BQU8sR0FBRztBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsTUFBQUEsTUFBSyxpQkFBaUIsU0FBUyxjQUFjLE1BQU0sU0FBUyxlQUFlLGFBQWEsbUJBQW1CLE9BQU87QUFDOUcsWUFBSTtBQUNBLGdCQUFNLElBQUksT0FBTyxZQUFZLE9BQU87QUFDeEMscUJBQWEsZUFBZSxJQUFJO0FBQ2hDLHFCQUFhLGtCQUFrQixJQUFJO0FBQ25DLFlBQUksdUJBQXVCO0FBQzNCLFlBQUksZ0JBQWdCO0FBQ2hCLGlDQUF1QixhQUFhLGdCQUFnQixJQUFJO0FBQUEsUUFDNUQ7QUFDQSxZQUFJLFVBQVUsQ0FBQyxzQkFBc0I7QUFDakMsdUJBQWEsaUJBQWlCLE1BQU0sU0FBUyxlQUFlLGdCQUFnQjtBQUFBLFFBQ2hGLFdBQ1MsZUFBZTtBQUNwQix1QkFBYSxpQkFBaUIsTUFBTSxTQUFTLENBQUMsR0FBRyxPQUFPLEtBQUs7QUFBQSxRQUNqRTtBQUNBLHFCQUFhLGFBQWEsTUFBTSxPQUFPO0FBQ3ZDLHFCQUFhLGVBQWUsSUFBSTtBQUNoQyxxQkFBYSxhQUFhLElBQUk7QUFDOUIscUJBQWEsWUFBWSxJQUFJO0FBQUEsTUFDakM7QUFDQSxlQUFTLGNBQWM7QUFDbkIsWUFBSSxDQUFDO0FBQ0Q7QUFDSixjQUFNLFNBQVMsT0FBTyxPQUFPLFFBQVEsS0FDakMsT0FBTyxPQUFPLGFBQWEsS0FDM0IsT0FBTyxPQUFPLE1BQU0sS0FDcEIsT0FBTyxPQUFPLFVBQVUsS0FDeEI7QUFDSixRQUFBQSxNQUFLLE9BQU8sT0FBTyxRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQUEsTUFDNUM7QUFDQSxNQUFBQSxNQUFLLEtBQUs7QUFDVixNQUFBQSxNQUFLLFFBQVE7QUFDYixhQUFPQTtBQUFBLElBQ1g7QUFDQSxRQUFNLFNBQVMsQ0FBQyxNQUFNLFFBQVEsT0FBTyxLQUFLLFNBQVMsTUFBTSxHQUFHO0FBQzVELGFBQVMsZ0JBQWdCLEdBQUc7QUFDeEIsYUFBTyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUUsZUFBZTtBQUFBLElBQzFDO0FBRUEsUUFBSTtBQUFKLFFBQVE7QUFDUixRQUFNLEVBQUUsY0FBQWlCLGNBQWEsSUFBSSxRQUFRO0FBQ2pDLFFBQU0sRUFBRSxRQUFRLElBQUksUUFBUTtBQUM1QixRQUFNLEVBQUUsU0FBQUMsU0FBUSxJQUFJLFFBQVE7QUFDNUIsUUFBTSxPQUFPO0FBQ2IsUUFBTSxTQUFTO0FBQ2YsUUFBSSxrQkFBa0I7QUFBQSxNQUNsQixRQUFRO0FBQUEsUUFDSixnQkFBZ0IsT0FBTztBQUFBLFFBQ3ZCLGFBQWEsT0FBTztBQUFBLE1BQ3hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixRQUFRLENBQUMsUUFBUTtBQUNiLGVBQU8sUUFBUSxJQUFJO0FBQUEsTUFDdkI7QUFBQSxNQUNBLGVBQWU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0EsZUFBZSxNQUFNLEtBQUssWUFBWSxRQUFRLFlBQVksU0FBUyxTQUFTLFFBQVEsVUFBVSxRQUFRLE9BQU8sU0FBUyxTQUFTLEdBQUcsY0FBYyxRQUFRLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSTtBQUFBLE1BQ3pMO0FBQUEsTUFDQSxNQUFNLFFBQVE7QUFBQSxNQUNkLFNBQVM7QUFBQSxRQUNMLE1BQU0sTUFBTSxRQUFRO0FBQUEsUUFDcEIsS0FBSyxRQUFRO0FBQUEsUUFDYixVQUFVLE1BQU0sUUFBUTtBQUFBLFFBQ3hCLE1BQU0sQ0FBQyxTQUFTO0FBQ1osa0JBQVEsS0FBSyxJQUFJO0FBQUEsUUFDckI7QUFBQSxRQUNBLFVBQVUsUUFBUTtBQUFBLFFBQ2xCLFlBQVksT0FBTyxRQUFRLE9BQU8sWUFBWSxjQUN4QyxRQUFRLE9BQU8sVUFDZjtBQUFBLE1BQ1Y7QUFBQSxNQUNBLGNBQUFEO0FBQUEsTUFDQTtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsTUFDbEIsYUFBYTtBQUFBLE1BQ2IsTUFBTSxLQUFLO0FBQUEsUUFDUCxXQUFXQyxTQUFRLFdBQVcsWUFBWTtBQUFBLFFBQzFDLGFBQWE7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDTDtBQUVBLFFBQU0saUJBQWlCLFdBQVcsUUFBUSxPQUFPLFFBQVEsSUFBSSx5QkFDdkQsT0FBTyxRQUFRLElBQUksc0JBQXNCLElBQ3pDO0FBQ04sUUFBSSxXQUFXLFFBQVEsU0FBUztBQUM1QixZQUFNLFFBQVEsT0FBTyxRQUFRLFFBQVEsTUFBTSxVQUFVLEVBQUUsRUFBRTtBQUN6RCxVQUFJLFFBQVEsZ0JBQWdCO0FBQ3hCLGNBQU0sTUFBTSwrQ0FBK0MsMkdBQTJHO0FBQUEsTUFDMUs7QUFBQSxJQUNKO0FBQ0EsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sVUFBVSxjQUFjLGVBQWU7QUFDN0MsUUFBSSxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0EsV0FBQXZCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFFBQVE7QUFBQSxNQUNSO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNKO0FBRUEsSUFBQUYsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDdjJGakI7QUFBQSwwQ0FBQTBCLFVBQUFDLFNBQUE7QUFBQTtBQUlBLFFBQU0sRUFBQyxPQUFPLFlBQVcsSUFBSTtBQUU3QixTQUFLLFlBQVksUUFBUSxRQUFRLElBQUksQ0FBQztBQUV0QyxJQUFBQSxRQUFPLFVBQVU7QUFFakIsYUFBUyxLQUFLLGFBQWEsS0FBSztBQUM5QixZQUFNLE9BQU8sTUFBTSxhQUFhLEtBQUssT0FBTztBQUM1QyxtQkFBYSxJQUFJO0FBQ2pCLGFBQU87QUFBQSxJQUNUO0FBU0EsYUFBUyxhQUFhLE1BQU07QUFDMUIsYUFBTyxLQUFLLElBQUksRUFBRSxRQUFRLFNBQU87QUFDL0IsWUFBSSxRQUFRLFFBQVE7QUFDbEIsZUFBSyxpQkFBaUIsS0FBSyxLQUFLLGlCQUFpQixHQUFHLENBQUM7QUFBQSxRQUN2RCxXQUFXLE9BQU8sS0FBSyxTQUFTLFlBQVk7QUFDMUMsZUFBSyxPQUFPLEtBQUssS0FBSyxLQUFLLElBQUk7QUFBQSxRQUNqQyxPQUFPO0FBQ0wsZUFBSyxpQkFBaUIsTUFBTSxNQUFNO0FBQ2hDLG1CQUFPLEtBQUs7QUFBQSxVQUNkLENBQUM7QUFDRCxlQUFLLGlCQUFpQixVQUFVLE1BQU07QUFDcEMsbUJBQU8sS0FBSztBQUFBLFVBQ2QsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7O0FDdENBO0FBQUE7QUFBQTtBQUFBO0FBZUEsZUFBZSxPQUFPO0FBQ3BCLFFBQU0sT0FBTyxNQUNWLE1BQU0sK0JBQStCLEVBQ3JDLE9BQU8sUUFBUSxFQUFFLE1BQU0sV0FBVyxTQUFTLE9BQU8sTUFBTSxxQ0FBcUMsQ0FBQyxFQUM5RixPQUFPLFNBQVMsRUFBRSxNQUFNLFdBQVcsU0FBUyxNQUFNLE1BQU0sMEVBQTBFLENBQUMsRUFDbkksT0FBTyxXQUFXLEVBQUUsTUFBTSxXQUFXLFNBQVMsT0FBTyxPQUFPLEtBQUssT0FBTyxNQUFNLE1BQU0seUdBQXlHLENBQUMsRUFDOUwsT0FBTyxXQUFXLEVBQUUsTUFBTSxXQUFXLFNBQVMsT0FBTyxNQUFNLGdGQUFnRixDQUFDLEVBQzVJLE9BQU8sb0JBQW9CLEVBQUUsTUFBTSxXQUFXLFNBQVMsT0FBTyxNQUFNLGlFQUFpRSxDQUFDLEVBQ3RJLE9BQU8sU0FBUyxFQUFFLE1BQU0sV0FBVyxTQUFTLE9BQU8sTUFBTSx3REFBd0QsQ0FBQyxFQUNsSCxPQUFPLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxNQUFNLDJIQUEySCxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQzFMLFFBQVEsYUFBYSxFQUFFLE1BQU0sVUFBVSxTQUFTLFFBQVEsTUFBTSw2R0FBNkcsQ0FBQyxFQUM1SyxRQUFRLFlBQVksRUFBRSxNQUFNLFNBQVMsTUFBTSwwRkFBMEYsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNsSixRQUFRLGVBQWUsRUFBRSxNQUFNLFVBQVUsTUFBTSwwRkFBMEYsU0FBUyxHQUFHLENBQUMsRUFDdEosUUFBUSxXQUFXLEVBQUUsTUFBTSxXQUFXLE1BQU0sOERBQThELFNBQVMsTUFBTSxDQUFDLEVBQzFILFFBQVEsYUFBYSxFQUFFLE1BQU0sVUFBVSxNQUFNLGtEQUFrRCxDQUFDLEVBQ2hHLE9BQU8sb0JBQW9CLEVBQUUsTUFBTSxXQUFXLE1BQU0seUVBQXlFLFNBQVMsTUFBTSxDQUFDLEVBQzdJLE9BQU8sMkJBQTJCLEVBQUUsTUFBTSxXQUFXLFNBQVMsT0FBTyxNQUFNLG9FQUFvRSxDQUFDLEVBQ2hKLE9BQU8sRUFDUDtBQUVILFFBQU1DLFFBQWtCLGdCQUFVLFdBQUssV0FBVyxpQ0FBaUMsR0FBRztBQUFBLElBQ3BGLFlBQVksS0FBSztBQUFBLEVBQ25CLENBQUM7QUFHRCxRQUFNLGFBQXNDLENBQUM7QUFDN0MsUUFBTSxxQkFBMEMsQ0FBQztBQUNqRCxRQUFNLGdCQUE2QixDQUFDO0FBQ3BDLFFBQU0sa0JBQWtCLGVBQWUsS0FBSyxtQkFBbUI7QUFDL0QsUUFBTSxjQUF3QixtQkFBbUIsQ0FBQyxhQUFhLGFBQWEsV0FBVztBQUN2RixRQUFNLFdBQVcsZUFBZSxLQUFLLFFBQVE7QUFDN0MsUUFBTSxvQkFBb0IsS0FBSyx1QkFBdUI7QUFDdEQsUUFBTSxXQUErQixLQUFLO0FBQzFDLFFBQU0sVUFBbUIsS0FBSztBQUU5QixNQUFJLGtCQUEyQyxDQUFDO0FBQ2hELE1BQUksS0FBSyxpQkFBaUIsWUFBWSxVQUFVLFlBQVksQ0FBQyxDQUFDLEdBQUcsUUFBUTtBQUN2RSxJQUFPLFFBQVEsK0hBQStILEtBQUssV0FBVyxLQUFLLHFCQUFxQixLQUFLLGNBQWM7QUFBQSxFQUM3TTtBQUVBLE1BQUksaUJBQWlCO0FBQ3JCLE1BQUk7QUFDRixRQUFJLEtBQUssTUFBTTtBQUNiLFlBQU0sUUFBUSxNQUFNLElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFLFlBQVk7QUFDckUsY0FBUSxPQUFPLE1BQU0sTUFBTSxJQUFJLE9BQUssRUFBRSx5QkFBeUIsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJO0FBQ2xGO0FBQUEsSUFDRjtBQUVBLFFBQUksS0FBSyxFQUFFLFNBQVMsS0FBSyxVQUFVO0FBQ2pDLFlBQU0sSUFBSSxNQUFNLGlFQUFpRTtBQUFBLElBQ25GO0FBQ0EsVUFBTSxpQkFBaUIsWUFDbEIsTUFBTSxVQUFBQyxTQUFHLFNBQVMsVUFBVSxFQUFFLFVBQVUsT0FBTyxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsT0FBTyxPQUFLLENBQUMsSUFDNUUsS0FBSyxFQUFFLFNBQVMsSUFBSSxLQUFLLElBQUk7QUFFbEMsa0JBQWMsS0FBSyxHQUFJLE1BQU0sSUFBSSxpQkFBc0IsY0FBUSxLQUFLLFNBQVMsQ0FBQyxFQUFFLFlBQVksZ0JBQWdCLE9BQU8sQ0FBRTtBQUtySCxzQkFBa0IsTUFBTSxpQkFBaUJELE9BQU0sZUFBZTtBQUFBLE1BQzVELFFBQVEsS0FBSztBQUFBLE1BQ2IsU0FBUyxRQUFRLEtBQUssT0FBTztBQUFBLElBQy9CLENBQUM7QUFDRCxlQUFXLFdBQVcsaUJBQWlCO0FBQ3JDLHlCQUFtQixLQUFLLEdBQUcsUUFBUSxzQkFBc0IsQ0FBQyxDQUFDO0FBQUEsSUFDN0Q7QUFDQSxRQUFJLENBQUMsS0FBSyxPQUFPO0FBQ2YsaUJBQVcsS0FBSyxHQUFHLGVBQWU7QUFBQSxJQUNwQyxPQUFPO0FBR0wsaUJBQVcsS0FBSyxHQUFHLFdBQVcsY0FBYyxJQUFJLE9BQUssRUFBRSxJQUFJLEdBQUcsZUFBZSxDQUFDO0FBQUEsSUFDaEY7QUFHQSxRQUFJLHFCQUFxQixLQUFLLE9BQU87QUFDbkMsWUFBTSxFQUFFLFNBQUFFLFVBQVMsUUFBUSxJQUFJLE1BQU0sb0JBQW9CO0FBQUEsUUFDckQsTUFBQUY7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxRQUNUO0FBQUEsUUFDQSxPQUFPLEtBQUs7QUFBQSxRQUNaLFFBQVEsS0FBSztBQUFBLFFBQ2IsV0FBVyxLQUFLO0FBQUEsUUFDaEIsZ0JBQWdCLENBQUMsS0FBSztBQUFBLE1BQ3hCLENBQUM7QUFDRCx1QkFBaUJFO0FBR2pCLFVBQUksS0FBSyxVQUFVLE9BQU87QUFDeEIsUUFBTyxRQUFRLG9EQUFvRDtBQUFBLE1BQ3JFO0FBRUEsVUFBSSxRQUFRLEtBQUssT0FBTyxHQUFHO0FBQ3pCLHFCQUFhLE9BQU87QUFBQSxNQUN0QjtBQUVBLFVBQUksQ0FBQ0EsVUFBUztBQUNaLGNBQU0sSUFBSSxNQUFNLGdDQUFnQztBQUFBLE1BQ2xEO0FBQUEsSUFDRjtBQUFBLEVBQ0YsVUFBRTtBQUNBLFNBQUtGLE1BQUssVUFBVTtBQUFBLEVBQ3RCO0FBRUEsTUFBSSxtQkFBbUIsU0FBUyxHQUFHO0FBQ2pDLDRCQUF3QixrQkFBa0I7QUFDMUMsVUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQUEsRUFDbEQ7QUFDQSxNQUFJLGdCQUFnQixTQUFTLEdBQUc7QUFDOUIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxDQUFDLG1CQUFtQjtBQUN0QixnQkFBVTtBQUFBLElBQ1o7QUFDQSxRQUFJLENBQUMsZ0JBQWdCO0FBQ25CLFlBQU0sSUFBSSxNQUFNO0FBQUEsRUFBdUIsU0FBUztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUVGO0FBRUEsU0FBUyx3QkFBd0IsU0FBb0M7QUFDbkUsTUFBSSxRQUFRLFNBQVMsR0FBRztBQUN0QixJQUFPLFFBQVEsaUNBQXVDLFlBQUsscUJBQXFCLENBQUM7QUFDakYsWUFBUSxRQUFRLFlBQVU7QUFDeEIsTUFBTyxRQUFRLDZDQUE2QyxPQUFPLFdBQVcsT0FBTyxXQUFXLE9BQU8sTUFBTTtBQUFBLElBQy9HLENBQUM7QUFDRCxJQUFPLFFBQVEsb0ZBQW9GO0FBQUEsRUFDckc7QUFDRjtBQUVBLFNBQVMsYUFBYSxTQUFxQztBQUN6RCxFQUFPLFVBQVUscUNBQXFDO0FBQ3RELFFBQU0sZ0JBQWdCLFFBQVEsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRO0FBQ3BFLGdCQUFjLFFBQVEsWUFBVTtBQUM5QixJQUFPLE1BQU0seUNBQXlDLE9BQU8sU0FBUyxPQUFPLFFBQVEsT0FBTyxRQUFRO0FBQ3BHLFVBQU0sY0FBYyxPQUFPLFFBQVEsT0FBTyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQzNFLGdCQUFZLFFBQVEsVUFBZSxNQUFNLFlBQVksS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQUEsRUFDeEUsQ0FBQztBQUNIO0FBV0EsU0FBUyxlQUFlLElBQW9DO0FBQzFELE1BQUksR0FBRyxXQUFXLEdBQUc7QUFBRSxXQUFPO0FBQUEsRUFBVztBQUN6QyxTQUFPLEdBQUcsT0FBTyxPQUFLLE1BQU0sRUFBRTtBQUNoQztBQU9BLFNBQVMsV0FBVyxjQUErQixxQkFBdUU7QUFDeEgsUUFBTSxrQkFBa0IsSUFBSSxJQUFJLG9CQUFvQixJQUFJLFVBQVEsS0FBSyxRQUFRLENBQUM7QUFDOUUsUUFBTSxRQUFpQztBQUN2QyxRQUFNLEtBQUssR0FBRyxhQUFhLE9BQU8sVUFBUSxDQUFDLGdCQUFnQixJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDOUUsU0FBTztBQUNUO0FBRU8sU0FBUyxNQUFNO0FBQ3BCLE9BQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFPO0FBQ3pCLElBQU8sTUFBTSxHQUFHO0FBQ2hCLFlBQVEsV0FBVztBQUFBLEVBQ3JCLENBQUM7QUFDSDtBQTVMQSxJQUNBLFdBQ0FHLE9BQ0FDLFFBQ0EsWUFRTTtBQVpOO0FBQUE7QUFBQTtBQUNBLGdCQUErQjtBQUMvQixJQUFBRCxRQUFzQjtBQUN0QixJQUFBQyxTQUF1QjtBQUN2QixpQkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBS0EsSUFBTSxRQUFRO0FBQUE7QUFBQTs7OztBQ1pkLElBQUEsUUFBQTtBQUFTLE9BQUEsZUFBQSxTQUFBLE9BQUEsRUFBQSxZQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsU0FBQSxNQUFBO0FBQUcsRUFBQSxDQUFBOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJncmF5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hhbGsiLCAic3R5bGVzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNoYWxrIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZUZvb2xXZWJwYWNrIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJlcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInJlcXVpcmVGb29sV2VicGFjayIsICJURVJNSU5BVEVfTUVUSE9EX0lEIiwgIldvcmtlclRocmVhZHMiLCAiZXJyb3IiLCAiV29ya2VyIiwgIndvcmtlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInBvb2wiLCAid29ya2VyIiwgInJlc29sdmUiLCAiZXJyb3IiLCAicmVzdWx0IiwgImV4cG9ydHMiLCAicG9vbCIsICJ3b3JrZXIiLCAiZXhwb3J0cyIsICJyZXNvbHZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyIiwgImVycjIiLCAiZXIiLCAiZXIyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJ1dGlsIiwgInF1ZXVlIiwgInBhdGgiLCAib3B0aW9ucyIsICJjYiIsICJkYXRhIiwgInNyYyIsICJkZXN0IiwgImZsYWdzIiwgInJlYWRkaXIiLCAiZ28kcmVhZGRpciIsICJtb2RlIiwgImV4cG9ydHMiLCAiZnMiLCAicmVzb2x2ZSIsICJidWZmZXIiLCAiYnVmZmVycyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJ1dGlsIiwgInN0YXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgInJlcXVpcmVfY29weV9zeW5jIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgImVyciIsICJlcnJvciIsICJyZXF1aXJlX2NvcHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVtcHR5RGlyIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJzdGF0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgInNyY3BhdGgiLCAiZHN0cGF0aCIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAicmVsYXRpdmUiLCAidHlwZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJyZWFkRmlsZVN5bmMiLCAicmVxdWlyZV9qc29uZmlsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9tb3ZlX3N5bmMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgImVyciIsICJyZXF1aXJlX21vdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiY2hhbGsiLCAid29ya2VyIiwgInBvb2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAidXRpbCIsICJwYXRoIiwgInkxOG4iLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgImZzIiwgInBhdGgiLCAiRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkiLCAia2V5IiwgImVycm9yIiwgImFyZ3MiLCAidmFsdWUiLCAidmFsIiwgImFyZ3YiLCAiZW52IiwgImFsaWFzZXMiLCAiZGVmYXVsdHMiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb2RlIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVzb2x2ZSIsICJtb2R1bGUiLCAic3RhY2siLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiam9pbiIsICJyZXNvbHZlIiwgInBhdGgiLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjbWQiLCAiaXNQcm9taXNlIiwgInNoaW0iLCAieWFyZ3MiLCAidXNhZ2UiLCAidmFsaWRhdGlvbiIsICJzZWxmIiwgImNvbW1hbmQiLCAiZXJyb3IiLCAiYyIsICJ5MThuIiwgImxvZ2dlciIsICJtYXhXaWR0aCIsICJhcmd2IiwgImNvbXBsZXRpb25zIiwgImtleSIsICJnbG9iYWwiLCAiayIsICJ0eXBlIiwgInZhbHVlIiwgInBhcnNlRm4iLCAicGFyc2UiLCAiY29tcGxldGlvbiIsICJyZWFkRmlsZVN5bmMiLCAicmVzb2x2ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwb29sIiwgImZzIiwgInN1Y2Nlc3MiLCAicGF0aCIsICJjaGFsayJdCn0K
|
|
10199
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvY29udmVyc2lvbnMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvcm91dGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NoYWxrL3NvdXJjZS91dGlsLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvdGVtcGxhdGVzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jaGFsay9zb3VyY2UvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3JlcXVpcmVGb29sV2VicGFjay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZW52aXJvbm1lbnQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Byb21pc2UuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvV29ya2VySGFuZGxlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvZGVidWctcG9ydC1hbGxvY2F0b3IuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL1Bvb2wuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wvc3JjL3dvcmtlci5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VycG9vbC9zcmMvaW5kZXguanMiLCAibG9nZ2VyLnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy91bml2ZXJzYWxpZnkvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL3BvbHlmaWxscy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvbGVnYWN5LXN0cmVhbXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2Nsb25lLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9ncmFjZWZ1bC1mcy5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2ZzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9hdC1sZWFzdC1ub2RlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL21ha2UtZGlyLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbWtkaXJzL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5LXN5bmMvY29weS1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS1zeW5jL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcGF0aC1leGlzdHMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2NvcHkuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL3JpbXJhZi5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3JlbW92ZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2VtcHR5L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2ZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvbGluay5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLXBhdGhzLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstdHlwZS5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9zeW1saW5rLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9ub2RlX21vZHVsZXMvanNvbmZpbGUvdXRpbHMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9vdXRwdXQtanNvbi1zeW5jLmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvanNvbi9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21vdmUtc3luYy9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlLXN5bmMvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL21vdmUuanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAicnVubmVyL2ludGVncmF0aW9uLXRlc3RzLnRzIiwgIndvcmtlcnMvY29tbW9uLnRzIiwgInV0aWxzLnRzIiwgIndvcmtlcnMvaW50ZWctdGVzdC13b3JrZXIudHMiLCAid29ya2Vycy9pbnRlZy1zbmFwc2hvdC13b3JrZXIudHMiLCAid29ya2Vycy9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9pbmRleC5janMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50L2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleC9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL2luZGV4LmpzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvaW5kZXguanMiLCAiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2J1aWxkL2luZGV4LmNqcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZXNjYWxhZGUvc3luYy9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LnRzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZXF1aXJlLWRpcmVjdG9yeS9pbmRleC5qcyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvaW5kZXguY2pzIiwgIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy95YXJncy9pbmRleC5janMiLCAiY2xpLnRzIiwgImluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCdcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG5cdFwiYWxpY2VibHVlXCI6IFsyNDAsIDI0OCwgMjU1XSxcclxuXHRcImFudGlxdWV3aGl0ZVwiOiBbMjUwLCAyMzUsIDIxNV0sXHJcblx0XCJhcXVhXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJhcXVhbWFyaW5lXCI6IFsxMjcsIDI1NSwgMjEyXSxcclxuXHRcImF6dXJlXCI6IFsyNDAsIDI1NSwgMjU1XSxcclxuXHRcImJlaWdlXCI6IFsyNDUsIDI0NSwgMjIwXSxcclxuXHRcImJpc3F1ZVwiOiBbMjU1LCAyMjgsIDE5Nl0sXHJcblx0XCJibGFja1wiOiBbMCwgMCwgMF0sXHJcblx0XCJibGFuY2hlZGFsbW9uZFwiOiBbMjU1LCAyMzUsIDIwNV0sXHJcblx0XCJibHVlXCI6IFswLCAwLCAyNTVdLFxyXG5cdFwiYmx1ZXZpb2xldFwiOiBbMTM4LCA0MywgMjI2XSxcclxuXHRcImJyb3duXCI6IFsxNjUsIDQyLCA0Ml0sXHJcblx0XCJidXJseXdvb2RcIjogWzIyMiwgMTg0LCAxMzVdLFxyXG5cdFwiY2FkZXRibHVlXCI6IFs5NSwgMTU4LCAxNjBdLFxyXG5cdFwiY2hhcnRyZXVzZVwiOiBbMTI3LCAyNTUsIDBdLFxyXG5cdFwiY2hvY29sYXRlXCI6IFsyMTAsIDEwNSwgMzBdLFxyXG5cdFwiY29yYWxcIjogWzI1NSwgMTI3LCA4MF0sXHJcblx0XCJjb3JuZmxvd2VyYmx1ZVwiOiBbMTAwLCAxNDksIDIzN10sXHJcblx0XCJjb3Juc2lsa1wiOiBbMjU1LCAyNDgsIDIyMF0sXHJcblx0XCJjcmltc29uXCI6IFsyMjAsIDIwLCA2MF0sXHJcblx0XCJjeWFuXCI6IFswLCAyNTUsIDI1NV0sXHJcblx0XCJkYXJrYmx1ZVwiOiBbMCwgMCwgMTM5XSxcclxuXHRcImRhcmtjeWFuXCI6IFswLCAxMzksIDEzOV0sXHJcblx0XCJkYXJrZ29sZGVucm9kXCI6IFsxODQsIDEzNCwgMTFdLFxyXG5cdFwiZGFya2dyYXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2dyZWVuXCI6IFswLCAxMDAsIDBdLFxyXG5cdFwiZGFya2dyZXlcIjogWzE2OSwgMTY5LCAxNjldLFxyXG5cdFwiZGFya2toYWtpXCI6IFsxODksIDE4MywgMTA3XSxcclxuXHRcImRhcmttYWdlbnRhXCI6IFsxMzksIDAsIDEzOV0sXHJcblx0XCJkYXJrb2xpdmVncmVlblwiOiBbODUsIDEwNywgNDddLFxyXG5cdFwiZGFya29yYW5nZVwiOiBbMjU1LCAxNDAsIDBdLFxyXG5cdFwiZGFya29yY2hpZFwiOiBbMTUzLCA1MCwgMjA0XSxcclxuXHRcImRhcmtyZWRcIjogWzEzOSwgMCwgMF0sXHJcblx0XCJkYXJrc2FsbW9uXCI6IFsyMzMsIDE1MCwgMTIyXSxcclxuXHRcImRhcmtzZWFncmVlblwiOiBbMTQzLCAxODgsIDE0M10sXHJcblx0XCJkYXJrc2xhdGVibHVlXCI6IFs3MiwgNjEsIDEzOV0sXHJcblx0XCJkYXJrc2xhdGVncmF5XCI6IFs0NywgNzksIDc5XSxcclxuXHRcImRhcmtzbGF0ZWdyZXlcIjogWzQ3LCA3OSwgNzldLFxyXG5cdFwiZGFya3R1cnF1b2lzZVwiOiBbMCwgMjA2LCAyMDldLFxyXG5cdFwiZGFya3Zpb2xldFwiOiBbMTQ4LCAwLCAyMTFdLFxyXG5cdFwiZGVlcHBpbmtcIjogWzI1NSwgMjAsIDE0N10sXHJcblx0XCJkZWVwc2t5Ymx1ZVwiOiBbMCwgMTkxLCAyNTVdLFxyXG5cdFwiZGltZ3JheVwiOiBbMTA1LCAxMDUsIDEwNV0sXHJcblx0XCJkaW1ncmV5XCI6IFsxMDUsIDEwNSwgMTA1XSxcclxuXHRcImRvZGdlcmJsdWVcIjogWzMwLCAxNDQsIDI1NV0sXHJcblx0XCJmaXJlYnJpY2tcIjogWzE3OCwgMzQsIDM0XSxcclxuXHRcImZsb3JhbHdoaXRlXCI6IFsyNTUsIDI1MCwgMjQwXSxcclxuXHRcImZvcmVzdGdyZWVuXCI6IFszNCwgMTM5LCAzNF0sXHJcblx0XCJmdWNoc2lhXCI6IFsyNTUsIDAsIDI1NV0sXHJcblx0XCJnYWluc2Jvcm9cIjogWzIyMCwgMjIwLCAyMjBdLFxyXG5cdFwiZ2hvc3R3aGl0ZVwiOiBbMjQ4LCAyNDgsIDI1NV0sXHJcblx0XCJnb2xkXCI6IFsyNTUsIDIxNSwgMF0sXHJcblx0XCJnb2xkZW5yb2RcIjogWzIxOCwgMTY1LCAzMl0sXHJcblx0XCJncmF5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImdyZWVuXCI6IFswLCAxMjgsIDBdLFxyXG5cdFwiZ3JlZW55ZWxsb3dcIjogWzE3MywgMjU1LCA0N10sXHJcblx0XCJncmV5XCI6IFsxMjgsIDEyOCwgMTI4XSxcclxuXHRcImhvbmV5ZGV3XCI6IFsyNDAsIDI1NSwgMjQwXSxcclxuXHRcImhvdHBpbmtcIjogWzI1NSwgMTA1LCAxODBdLFxyXG5cdFwiaW5kaWFucmVkXCI6IFsyMDUsIDkyLCA5Ml0sXHJcblx0XCJpbmRpZ29cIjogWzc1LCAwLCAxMzBdLFxyXG5cdFwiaXZvcnlcIjogWzI1NSwgMjU1LCAyNDBdLFxyXG5cdFwia2hha2lcIjogWzI0MCwgMjMwLCAxNDBdLFxyXG5cdFwibGF2ZW5kZXJcIjogWzIzMCwgMjMwLCAyNTBdLFxyXG5cdFwibGF2ZW5kZXJibHVzaFwiOiBbMjU1LCAyNDAsIDI0NV0sXHJcblx0XCJsYXduZ3JlZW5cIjogWzEyNCwgMjUyLCAwXSxcclxuXHRcImxlbW9uY2hpZmZvblwiOiBbMjU1LCAyNTAsIDIwNV0sXHJcblx0XCJsaWdodGJsdWVcIjogWzE3MywgMjE2LCAyMzBdLFxyXG5cdFwibGlnaHRjb3JhbFwiOiBbMjQwLCAxMjgsIDEyOF0sXHJcblx0XCJsaWdodGN5YW5cIjogWzIyNCwgMjU1LCAyNTVdLFxyXG5cdFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogWzI1MCwgMjUwLCAyMTBdLFxyXG5cdFwibGlnaHRncmF5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0Z3JlZW5cIjogWzE0NCwgMjM4LCAxNDRdLFxyXG5cdFwibGlnaHRncmV5XCI6IFsyMTEsIDIxMSwgMjExXSxcclxuXHRcImxpZ2h0cGlua1wiOiBbMjU1LCAxODIsIDE5M10sXHJcblx0XCJsaWdodHNhbG1vblwiOiBbMjU1LCAxNjAsIDEyMl0sXHJcblx0XCJsaWdodHNlYWdyZWVuXCI6IFszMiwgMTc4LCAxNzBdLFxyXG5cdFwibGlnaHRza3libHVlXCI6IFsxMzUsIDIwNiwgMjUwXSxcclxuXHRcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c2xhdGVncmV5XCI6IFsxMTksIDEzNiwgMTUzXSxcclxuXHRcImxpZ2h0c3RlZWxibHVlXCI6IFsxNzYsIDE5NiwgMjIyXSxcclxuXHRcImxpZ2h0eWVsbG93XCI6IFsyNTUsIDI1NSwgMjI0XSxcclxuXHRcImxpbWVcIjogWzAsIDI1NSwgMF0sXHJcblx0XCJsaW1lZ3JlZW5cIjogWzUwLCAyMDUsIDUwXSxcclxuXHRcImxpbmVuXCI6IFsyNTAsIDI0MCwgMjMwXSxcclxuXHRcIm1hZ2VudGFcIjogWzI1NSwgMCwgMjU1XSxcclxuXHRcIm1hcm9vblwiOiBbMTI4LCAwLCAwXSxcclxuXHRcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwgMjA1LCAxNzBdLFxyXG5cdFwibWVkaXVtYmx1ZVwiOiBbMCwgMCwgMjA1XSxcclxuXHRcIm1lZGl1bW9yY2hpZFwiOiBbMTg2LCA4NSwgMjExXSxcclxuXHRcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LCAxMTIsIDIxOV0sXHJcblx0XCJtZWRpdW1zZWFncmVlblwiOiBbNjAsIDE3OSwgMTEzXSxcclxuXHRcIm1lZGl1bXNsYXRlYmx1ZVwiOiBbMTIzLCAxMDQsIDIzOF0sXHJcblx0XCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwgMjUwLCAxNTRdLFxyXG5cdFwibWVkaXVtdHVycXVvaXNlXCI6IFs3MiwgMjA5LCAyMDRdLFxyXG5cdFwibWVkaXVtdmlvbGV0cmVkXCI6IFsxOTksIDIxLCAxMzNdLFxyXG5cdFwibWlkbmlnaHRibHVlXCI6IFsyNSwgMjUsIDExMl0sXHJcblx0XCJtaW50Y3JlYW1cIjogWzI0NSwgMjU1LCAyNTBdLFxyXG5cdFwibWlzdHlyb3NlXCI6IFsyNTUsIDIyOCwgMjI1XSxcclxuXHRcIm1vY2Nhc2luXCI6IFsyNTUsIDIyOCwgMTgxXSxcclxuXHRcIm5hdmFqb3doaXRlXCI6IFsyNTUsIDIyMiwgMTczXSxcclxuXHRcIm5hdnlcIjogWzAsIDAsIDEyOF0sXHJcblx0XCJvbGRsYWNlXCI6IFsyNTMsIDI0NSwgMjMwXSxcclxuXHRcIm9saXZlXCI6IFsxMjgsIDEyOCwgMF0sXHJcblx0XCJvbGl2ZWRyYWJcIjogWzEwNywgMTQyLCAzNV0sXHJcblx0XCJvcmFuZ2VcIjogWzI1NSwgMTY1LCAwXSxcclxuXHRcIm9yYW5nZXJlZFwiOiBbMjU1LCA2OSwgMF0sXHJcblx0XCJvcmNoaWRcIjogWzIxOCwgMTEyLCAyMTRdLFxyXG5cdFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LCAyMzIsIDE3MF0sXHJcblx0XCJwYWxlZ3JlZW5cIjogWzE1MiwgMjUxLCAxNTJdLFxyXG5cdFwicGFsZXR1cnF1b2lzZVwiOiBbMTc1LCAyMzgsIDIzOF0sXHJcblx0XCJwYWxldmlvbGV0cmVkXCI6IFsyMTksIDExMiwgMTQ3XSxcclxuXHRcInBhcGF5YXdoaXBcIjogWzI1NSwgMjM5LCAyMTNdLFxyXG5cdFwicGVhY2hwdWZmXCI6IFsyNTUsIDIxOCwgMTg1XSxcclxuXHRcInBlcnVcIjogWzIwNSwgMTMzLCA2M10sXHJcblx0XCJwaW5rXCI6IFsyNTUsIDE5MiwgMjAzXSxcclxuXHRcInBsdW1cIjogWzIyMSwgMTYwLCAyMjFdLFxyXG5cdFwicG93ZGVyYmx1ZVwiOiBbMTc2LCAyMjQsIDIzMF0sXHJcblx0XCJwdXJwbGVcIjogWzEyOCwgMCwgMTI4XSxcclxuXHRcInJlYmVjY2FwdXJwbGVcIjogWzEwMiwgNTEsIDE1M10sXHJcblx0XCJyZWRcIjogWzI1NSwgMCwgMF0sXHJcblx0XCJyb3N5YnJvd25cIjogWzE4OCwgMTQzLCAxNDNdLFxyXG5cdFwicm95YWxibHVlXCI6IFs2NSwgMTA1LCAyMjVdLFxyXG5cdFwic2FkZGxlYnJvd25cIjogWzEzOSwgNjksIDE5XSxcclxuXHRcInNhbG1vblwiOiBbMjUwLCAxMjgsIDExNF0sXHJcblx0XCJzYW5keWJyb3duXCI6IFsyNDQsIDE2NCwgOTZdLFxyXG5cdFwic2VhZ3JlZW5cIjogWzQ2LCAxMzksIDg3XSxcclxuXHRcInNlYXNoZWxsXCI6IFsyNTUsIDI0NSwgMjM4XSxcclxuXHRcInNpZW5uYVwiOiBbMTYwLCA4MiwgNDVdLFxyXG5cdFwic2lsdmVyXCI6IFsxOTIsIDE5MiwgMTkyXSxcclxuXHRcInNreWJsdWVcIjogWzEzNSwgMjA2LCAyMzVdLFxyXG5cdFwic2xhdGVibHVlXCI6IFsxMDYsIDkwLCAyMDVdLFxyXG5cdFwic2xhdGVncmF5XCI6IFsxMTIsIDEyOCwgMTQ0XSxcclxuXHRcInNsYXRlZ3JleVwiOiBbMTEyLCAxMjgsIDE0NF0sXHJcblx0XCJzbm93XCI6IFsyNTUsIDI1MCwgMjUwXSxcclxuXHRcInNwcmluZ2dyZWVuXCI6IFswLCAyNTUsIDEyN10sXHJcblx0XCJzdGVlbGJsdWVcIjogWzcwLCAxMzAsIDE4MF0sXHJcblx0XCJ0YW5cIjogWzIxMCwgMTgwLCAxNDBdLFxyXG5cdFwidGVhbFwiOiBbMCwgMTI4LCAxMjhdLFxyXG5cdFwidGhpc3RsZVwiOiBbMjE2LCAxOTEsIDIxNl0sXHJcblx0XCJ0b21hdG9cIjogWzI1NSwgOTksIDcxXSxcclxuXHRcInR1cnF1b2lzZVwiOiBbNjQsIDIyNCwgMjA4XSxcclxuXHRcInZpb2xldFwiOiBbMjM4LCAxMzAsIDIzOF0sXHJcblx0XCJ3aGVhdFwiOiBbMjQ1LCAyMjIsIDE3OV0sXHJcblx0XCJ3aGl0ZVwiOiBbMjU1LCAyNTUsIDI1NV0sXHJcblx0XCJ3aGl0ZXNtb2tlXCI6IFsyNDUsIDI0NSwgMjQ1XSxcclxuXHRcInllbGxvd1wiOiBbMjU1LCAyNTUsIDBdLFxyXG5cdFwieWVsbG93Z3JlZW5cIjogWzE1NCwgMjA1LCA1MF1cclxufTtcclxuIiwgIi8qIE1JVCBsaWNlbnNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmNvbnN0IGNzc0tleXdvcmRzID0gcmVxdWlyZSgnY29sb3ItbmFtZScpO1xuXG4vLyBOT1RFOiBjb252ZXJzaW9ucyBzaG91bGQgb25seSByZXR1cm4gcHJpbWl0aXZlIHZhbHVlcyAoaS5lLiBhcnJheXMsIG9yXG4vLyAgICAgICB2YWx1ZXMgdGhhdCBnaXZlIGNvcnJlY3QgYHR5cGVvZmAgcmVzdWx0cykuXG4vLyAgICAgICBkbyBub3QgdXNlIGJveCB2YWx1ZXMgdHlwZXMgKGkuZS4gTnVtYmVyKCksIFN0cmluZygpLCBldGMuKVxuXG5jb25zdCByZXZlcnNlS2V5d29yZHMgPSB7fTtcbmZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc0tleXdvcmRzKSkge1xuXHRyZXZlcnNlS2V5d29yZHNbY3NzS2V5d29yZHNba2V5XV0gPSBrZXk7XG59XG5cbmNvbnN0IGNvbnZlcnQgPSB7XG5cdHJnYjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdyZ2InfSxcblx0aHNsOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2hzbCd9LFxuXHRoc3Y6IHtjaGFubmVsczogMywgbGFiZWxzOiAnaHN2J30sXG5cdGh3Yjoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICdod2InfSxcblx0Y215azoge2NoYW5uZWxzOiA0LCBsYWJlbHM6ICdjbXlrJ30sXG5cdHh5ejoge2NoYW5uZWxzOiAzLCBsYWJlbHM6ICd4eXonfSxcblx0bGFiOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogJ2xhYid9LFxuXHRsY2g6IHtjaGFubmVsczogMywgbGFiZWxzOiAnbGNoJ30sXG5cdGhleDoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnaGV4J119LFxuXHRrZXl3b3JkOiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydrZXl3b3JkJ119LFxuXHRhbnNpMTY6IHtjaGFubmVsczogMSwgbGFiZWxzOiBbJ2Fuc2kxNiddfSxcblx0YW5zaTI1Njoge2NoYW5uZWxzOiAxLCBsYWJlbHM6IFsnYW5zaTI1NiddfSxcblx0aGNnOiB7Y2hhbm5lbHM6IDMsIGxhYmVsczogWydoJywgJ2MnLCAnZyddfSxcblx0YXBwbGU6IHtjaGFubmVsczogMywgbGFiZWxzOiBbJ3IxNicsICdnMTYnLCAnYjE2J119LFxuXHRncmF5OiB7Y2hhbm5lbHM6IDEsIGxhYmVsczogWydncmF5J119XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG5cbi8vIEhpZGUgLmNoYW5uZWxzIGFuZCAubGFiZWxzIHByb3BlcnRpZXNcbmZvciAoY29uc3QgbW9kZWwgb2YgT2JqZWN0LmtleXMoY29udmVydCkpIHtcblx0aWYgKCEoJ2NoYW5uZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoISgnbGFiZWxzJyBpbiBjb252ZXJ0W21vZGVsXSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2hhbm5lbCBsYWJlbHMgcHJvcGVydHk6ICcgKyBtb2RlbCk7XG5cdH1cblxuXHRpZiAoY29udmVydFttb2RlbF0ubGFiZWxzLmxlbmd0aCAhPT0gY29udmVydFttb2RlbF0uY2hhbm5lbHMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NoYW5uZWwgYW5kIGxhYmVsIGNvdW50cyBtaXNtYXRjaDogJyArIG1vZGVsKTtcblx0fVxuXG5cdGNvbnN0IHtjaGFubmVscywgbGFiZWxzfSA9IGNvbnZlcnRbbW9kZWxdO1xuXHRkZWxldGUgY29udmVydFttb2RlbF0uY2hhbm5lbHM7XG5cdGRlbGV0ZSBjb252ZXJ0W21vZGVsXS5sYWJlbHM7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W21vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjaGFubmVsc30pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udmVydFttb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGxhYmVsc30pO1xufVxuXG5jb252ZXJ0LnJnYi5oc2wgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0Y29uc3QgZGVsdGEgPSBtYXggLSBtaW47XG5cdGxldCBoO1xuXHRsZXQgcztcblxuXHRpZiAobWF4ID09PSBtaW4pIHtcblx0XHRoID0gMDtcblx0fSBlbHNlIGlmIChyID09PSBtYXgpIHtcblx0XHRoID0gKGcgLSBiKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGcgPT09IG1heCkge1xuXHRcdGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuXHR9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuXHRcdGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuXHR9XG5cblx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGwgPSAobWluICsgbWF4KSAvIDI7XG5cblx0aWYgKG1heCA9PT0gbWluKSB7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSBpZiAobCA8PSAwLjUpIHtcblx0XHRzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcblx0fSBlbHNlIHtcblx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cdH1cblxuXHRyZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuaHN2ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgcmRpZjtcblx0bGV0IGdkaWY7XG5cdGxldCBiZGlmO1xuXHRsZXQgaDtcblx0bGV0IHM7XG5cblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblx0Y29uc3QgdiA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmID0gdiAtIE1hdGgubWluKHIsIGcsIGIpO1xuXHRjb25zdCBkaWZmYyA9IGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICh2IC0gYykgLyA2IC8gZGlmZiArIDEgLyAyO1xuXHR9O1xuXG5cdGlmIChkaWZmID09PSAwKSB7XG5cdFx0aCA9IDA7XG5cdFx0cyA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IGRpZmYgLyB2O1xuXHRcdHJkaWYgPSBkaWZmYyhyKTtcblx0XHRnZGlmID0gZGlmZmMoZyk7XG5cdFx0YmRpZiA9IGRpZmZjKGIpO1xuXG5cdFx0aWYgKHIgPT09IHYpIHtcblx0XHRcdGggPSBiZGlmIC0gZ2RpZjtcblx0XHR9IGVsc2UgaWYgKGcgPT09IHYpIHtcblx0XHRcdGggPSAoMSAvIDMpICsgcmRpZiAtIGJkaWY7XG5cdFx0fSBlbHNlIGlmIChiID09PSB2KSB7XG5cdFx0XHRoID0gKDIgLyAzKSArIGdkaWYgLSByZGlmO1xuXHRcdH1cblxuXHRcdGlmIChoIDwgMCkge1xuXHRcdFx0aCArPSAxO1xuXHRcdH0gZWxzZSBpZiAoaCA+IDEpIHtcblx0XHRcdGggLT0gMTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gW1xuXHRcdGggKiAzNjAsXG5cdFx0cyAqIDEwMCxcblx0XHR2ICogMTAwXG5cdF07XG59O1xuXG5jb252ZXJ0LnJnYi5od2IgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF07XG5cdGNvbnN0IGcgPSByZ2JbMV07XG5cdGxldCBiID0gcmdiWzJdO1xuXHRjb25zdCBoID0gY29udmVydC5yZ2IuaHNsKHJnYilbMF07XG5cdGNvbnN0IHcgPSAxIC8gMjU1ICogTWF0aC5taW4ociwgTWF0aC5taW4oZywgYikpO1xuXG5cdGIgPSAxIC0gMSAvIDI1NSAqIE1hdGgubWF4KHIsIE1hdGgubWF4KGcsIGIpKTtcblxuXHRyZXR1cm4gW2gsIHcgKiAxMDAsIGIgKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IuY215ayA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgciA9IHJnYlswXSAvIDI1NTtcblx0Y29uc3QgZyA9IHJnYlsxXSAvIDI1NTtcblx0Y29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblxuXHRjb25zdCBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG5cdGNvbnN0IGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcblx0Y29uc3QgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuXHRjb25zdCB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG5cblx0cmV0dXJuIFtjICogMTAwLCBtICogMTAwLCB5ICogMTAwLCBrICogMTAwXTtcbn07XG5cbmZ1bmN0aW9uIGNvbXBhcmF0aXZlRGlzdGFuY2UoeCwgeSkge1xuXHQvKlxuXHRcdFNlZSBodHRwczovL2VuLm0ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9kaXN0YW5jZSNTcXVhcmVkX0V1Y2xpZGVhbl9kaXN0YW5jZVxuXHQqL1xuXHRyZXR1cm4gKFxuXHRcdCgoeFswXSAtIHlbMF0pICoqIDIpICtcblx0XHQoKHhbMV0gLSB5WzFdKSAqKiAyKSArXG5cdFx0KCh4WzJdIC0geVsyXSkgKiogMilcblx0KTtcbn1cblxuY29udmVydC5yZ2Iua2V5d29yZCA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgcmV2ZXJzZWQgPSByZXZlcnNlS2V5d29yZHNbcmdiXTtcblx0aWYgKHJldmVyc2VkKSB7XG5cdFx0cmV0dXJuIHJldmVyc2VkO1xuXHR9XG5cblx0bGV0IGN1cnJlbnRDbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblx0bGV0IGN1cnJlbnRDbG9zZXN0S2V5d29yZDtcblxuXHRmb3IgKGNvbnN0IGtleXdvcmQgb2YgT2JqZWN0LmtleXMoY3NzS2V5d29yZHMpKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBjc3NLZXl3b3Jkc1trZXl3b3JkXTtcblxuXHRcdC8vIENvbXB1dGUgY29tcGFyYXRpdmUgZGlzdGFuY2Vcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvbXBhcmF0aXZlRGlzdGFuY2UocmdiLCB2YWx1ZSk7XG5cblx0XHQvLyBDaGVjayBpZiBpdHMgbGVzcywgaWYgc28gc2V0IGFzIGNsb3Nlc3Rcblx0XHRpZiAoZGlzdGFuY2UgPCBjdXJyZW50Q2xvc2VzdERpc3RhbmNlKSB7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7XG5cdFx0XHRjdXJyZW50Q2xvc2VzdEtleXdvcmQgPSBrZXl3b3JkO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50Q2xvc2VzdEtleXdvcmQ7XG59O1xuXG5jb252ZXJ0LmtleXdvcmQucmdiID0gZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0cmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufTtcblxuY29udmVydC5yZ2IueHl6ID0gZnVuY3Rpb24gKHJnYikge1xuXHRsZXQgciA9IHJnYlswXSAvIDI1NTtcblx0bGV0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGxldCBiID0gcmdiWzJdIC8gMjU1O1xuXG5cdC8vIEFzc3VtZSBzUkdCXG5cdHIgPSByID4gMC4wNDA0NSA/ICgoKHIgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40KSA6IChyIC8gMTIuOTIpO1xuXHRnID0gZyA+IDAuMDQwNDUgPyAoKChnICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNCkgOiAoZyAvIDEyLjkyKTtcblx0YiA9IGIgPiAwLjA0MDQ1ID8gKCgoYiArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQpIDogKGIgLyAxMi45Mik7XG5cblx0Y29uc3QgeCA9IChyICogMC40MTI0KSArIChnICogMC4zNTc2KSArIChiICogMC4xODA1KTtcblx0Y29uc3QgeSA9IChyICogMC4yMTI2KSArIChnICogMC43MTUyKSArIChiICogMC4wNzIyKTtcblx0Y29uc3QgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuXHRyZXR1cm4gW3ggKiAxMDAsIHkgKiAxMDAsIHogKiAxMDBdO1xufTtcblxuY29udmVydC5yZ2IubGFiID0gZnVuY3Rpb24gKHJnYikge1xuXHRjb25zdCB4eXogPSBjb252ZXJ0LnJnYi54eXoocmdiKTtcblx0bGV0IHggPSB4eXpbMF07XG5cdGxldCB5ID0geHl6WzFdO1xuXHRsZXQgeiA9IHh5elsyXTtcblxuXHR4IC89IDk1LjA0Nztcblx0eSAvPSAxMDA7XG5cdHogLz0gMTA4Ljg4MztcblxuXHR4ID0geCA+IDAuMDA4ODU2ID8gKHggKiogKDEgLyAzKSkgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG5cdHkgPSB5ID4gMC4wMDg4NTYgPyAoeSAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcblx0eiA9IHogPiAwLjAwODg1NiA/ICh6ICoqICgxIC8gMykpIDogKDcuNzg3ICogeikgKyAoMTYgLyAxMTYpO1xuXG5cdGNvbnN0IGwgPSAoMTE2ICogeSkgLSAxNjtcblx0Y29uc3QgYSA9IDUwMCAqICh4IC0geSk7XG5cdGNvbnN0IGIgPSAyMDAgKiAoeSAtIHopO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LmhzbC5yZ2IgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF0gLyAzNjA7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cdGxldCB0Mjtcblx0bGV0IHQzO1xuXHRsZXQgdmFsO1xuXG5cdGlmIChzID09PSAwKSB7XG5cdFx0dmFsID0gbCAqIDI1NTtcblx0XHRyZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuXHR9XG5cblx0aWYgKGwgPCAwLjUpIHtcblx0XHR0MiA9IGwgKiAoMSArIHMpO1xuXHR9IGVsc2Uge1xuXHRcdHQyID0gbCArIHMgLSBsICogcztcblx0fVxuXG5cdGNvbnN0IHQxID0gMiAqIGwgLSB0MjtcblxuXHRjb25zdCByZ2IgPSBbMCwgMCwgMF07XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRpZiAodDMgPCAwKSB7XG5cdFx0XHR0MysrO1xuXHRcdH1cblxuXHRcdGlmICh0MyA+IDEpIHtcblx0XHRcdHQzLS07XG5cdFx0fVxuXG5cdFx0aWYgKDYgKiB0MyA8IDEpIHtcblx0XHRcdHZhbCA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzO1xuXHRcdH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuXHRcdFx0dmFsID0gdDI7XG5cdFx0fSBlbHNlIGlmICgzICogdDMgPCAyKSB7XG5cdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbCA9IHQxO1xuXHRcdH1cblxuXHRcdHJnYltpXSA9IHZhbCAqIDI1NTtcblx0fVxuXG5cdHJldHVybiByZ2I7XG59O1xuXG5jb252ZXJ0LmhzbC5oc3YgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IGggPSBoc2xbMF07XG5cdGxldCBzID0gaHNsWzFdIC8gMTAwO1xuXHRsZXQgbCA9IGhzbFsyXSAvIDEwMDtcblx0bGV0IHNtaW4gPSBzO1xuXHRjb25zdCBsbWluID0gTWF0aC5tYXgobCwgMC4wMSk7XG5cblx0bCAqPSAyO1xuXHRzICo9IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRzbWluICo9IGxtaW4gPD0gMSA/IGxtaW4gOiAyIC0gbG1pbjtcblx0Y29uc3QgdiA9IChsICsgcykgLyAyO1xuXHRjb25zdCBzdiA9IGwgPT09IDAgPyAoMiAqIHNtaW4pIC8gKGxtaW4gKyBzbWluKSA6ICgyICogcykgLyAobCArIHMpO1xuXG5cdHJldHVybiBbaCwgc3YgKiAxMDAsIHYgKiAxMDBdO1xufTtcblxuY29udmVydC5oc3YucmdiID0gZnVuY3Rpb24gKGhzdikge1xuXHRjb25zdCBoID0gaHN2WzBdIC8gNjA7XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGxldCB2ID0gaHN2WzJdIC8gMTAwO1xuXHRjb25zdCBoaSA9IE1hdGguZmxvb3IoaCkgJSA2O1xuXG5cdGNvbnN0IGYgPSBoIC0gTWF0aC5mbG9vcihoKTtcblx0Y29uc3QgcCA9IDI1NSAqIHYgKiAoMSAtIHMpO1xuXHRjb25zdCBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSk7XG5cdGNvbnN0IHQgPSAyNTUgKiB2ICogKDEgLSAocyAqICgxIC0gZikpKTtcblx0diAqPSAyNTU7XG5cblx0c3dpdGNoIChoaSkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHJldHVybiBbdiwgdCwgcF07XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cmV0dXJuIFtxLCB2LCBwXTtcblx0XHRjYXNlIDI6XG5cdFx0XHRyZXR1cm4gW3AsIHYsIHRdO1xuXHRcdGNhc2UgMzpcblx0XHRcdHJldHVybiBbcCwgcSwgdl07XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cmV0dXJuIFt0LCBwLCB2XTtcblx0XHRjYXNlIDU6XG5cdFx0XHRyZXR1cm4gW3YsIHAsIHFdO1xuXHR9XG59O1xuXG5jb252ZXJ0Lmhzdi5oc2wgPSBmdW5jdGlvbiAoaHN2KSB7XG5cdGNvbnN0IGggPSBoc3ZbMF07XG5cdGNvbnN0IHMgPSBoc3ZbMV0gLyAxMDA7XG5cdGNvbnN0IHYgPSBoc3ZbMl0gLyAxMDA7XG5cdGNvbnN0IHZtaW4gPSBNYXRoLm1heCh2LCAwLjAxKTtcblx0bGV0IHNsO1xuXHRsZXQgbDtcblxuXHRsID0gKDIgLSBzKSAqIHY7XG5cdGNvbnN0IGxtaW4gPSAoMiAtIHMpICogdm1pbjtcblx0c2wgPSBzICogdm1pbjtcblx0c2wgLz0gKGxtaW4gPD0gMSkgPyBsbWluIDogMiAtIGxtaW47XG5cdHNsID0gc2wgfHwgMDtcblx0bCAvPSAyO1xuXG5cdHJldHVybiBbaCwgc2wgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5jb252ZXJ0Lmh3Yi5yZ2IgPSBmdW5jdGlvbiAoaHdiKSB7XG5cdGNvbnN0IGggPSBod2JbMF0gLyAzNjA7XG5cdGxldCB3aCA9IGh3YlsxXSAvIDEwMDtcblx0bGV0IGJsID0gaHdiWzJdIC8gMTAwO1xuXHRjb25zdCByYXRpbyA9IHdoICsgYmw7XG5cdGxldCBmO1xuXG5cdC8vIFdoICsgYmwgY2FudCBiZSA+IDFcblx0aWYgKHJhdGlvID4gMSkge1xuXHRcdHdoIC89IHJhdGlvO1xuXHRcdGJsIC89IHJhdGlvO1xuXHR9XG5cblx0Y29uc3QgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuXHRjb25zdCB2ID0gMSAtIGJsO1xuXHRmID0gNiAqIGggLSBpO1xuXG5cdGlmICgoaSAmIDB4MDEpICE9PSAwKSB7XG5cdFx0ZiA9IDEgLSBmO1xuXHR9XG5cblx0Y29uc3QgbiA9IHdoICsgZiAqICh2IC0gd2gpOyAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvblxuXG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzLXBlci1saW5lLG5vLW11bHRpLXNwYWNlcyAqL1xuXHRzd2l0Y2ggKGkpIHtcblx0XHRkZWZhdWx0OlxuXHRcdGNhc2UgNjpcblx0XHRjYXNlIDA6IHIgPSB2OyAgZyA9IG47ICBiID0gd2g7IGJyZWFrO1xuXHRcdGNhc2UgMTogciA9IG47ICBnID0gdjsgIGIgPSB3aDsgYnJlYWs7XG5cdFx0Y2FzZSAyOiByID0gd2g7IGcgPSB2OyAgYiA9IG47IGJyZWFrO1xuXHRcdGNhc2UgMzogciA9IHdoOyBnID0gbjsgIGIgPSB2OyBicmVhaztcblx0XHRjYXNlIDQ6IHIgPSBuOyAgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSA1OiByID0gdjsgIGcgPSB3aDsgYiA9IG47IGJyZWFrO1xuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMtcGVyLWxpbmUsbm8tbXVsdGktc3BhY2VzICovXG5cblx0cmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn07XG5cbmNvbnZlcnQuY215ay5yZ2IgPSBmdW5jdGlvbiAoY215aykge1xuXHRjb25zdCBjID0gY215a1swXSAvIDEwMDtcblx0Y29uc3QgbSA9IGNteWtbMV0gLyAxMDA7XG5cdGNvbnN0IHkgPSBjbXlrWzJdIC8gMTAwO1xuXHRjb25zdCBrID0gY215a1szXSAvIDEwMDtcblxuXHRjb25zdCByID0gMSAtIE1hdGgubWluKDEsIGMgKiAoMSAtIGspICsgayk7XG5cdGNvbnN0IGcgPSAxIC0gTWF0aC5taW4oMSwgbSAqICgxIC0gaykgKyBrKTtcblx0Y29uc3QgYiA9IDEgLSBNYXRoLm1pbigxLCB5ICogKDEgLSBrKSArIGspO1xuXG5cdHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59O1xuXG5jb252ZXJ0Lnh5ei5yZ2IgPSBmdW5jdGlvbiAoeHl6KSB7XG5cdGNvbnN0IHggPSB4eXpbMF0gLyAxMDA7XG5cdGNvbnN0IHkgPSB4eXpbMV0gLyAxMDA7XG5cdGNvbnN0IHogPSB4eXpbMl0gLyAxMDA7XG5cdGxldCByO1xuXHRsZXQgZztcblx0bGV0IGI7XG5cblx0ciA9ICh4ICogMy4yNDA2KSArICh5ICogLTEuNTM3MikgKyAoeiAqIC0wLjQ5ODYpO1xuXHRnID0gKHggKiAtMC45Njg5KSArICh5ICogMS44NzU4KSArICh6ICogMC4wNDE1KTtcblx0YiA9ICh4ICogMC4wNTU3KSArICh5ICogLTAuMjA0MCkgKyAoeiAqIDEuMDU3MCk7XG5cblx0Ly8gQXNzdW1lIHNSR0Jcblx0ciA9IHIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAociAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiByICogMTIuOTI7XG5cblx0ZyA9IGcgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoZyAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBnICogMTIuOTI7XG5cblx0YiA9IGIgPiAwLjAwMzEzMDhcblx0XHQ/ICgoMS4wNTUgKiAoYiAqKiAoMS4wIC8gMi40KSkpIC0gMC4wNTUpXG5cdFx0OiBiICogMTIuOTI7XG5cblx0ciA9IE1hdGgubWluKE1hdGgubWF4KDAsIHIpLCAxKTtcblx0ZyA9IE1hdGgubWluKE1hdGgubWF4KDAsIGcpLCAxKTtcblx0YiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGIpLCAxKTtcblxuXHRyZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufTtcblxuY29udmVydC54eXoubGFiID0gZnVuY3Rpb24gKHh5eikge1xuXHRsZXQgeCA9IHh5elswXTtcblx0bGV0IHkgPSB4eXpbMV07XG5cdGxldCB6ID0geHl6WzJdO1xuXG5cdHggLz0gOTUuMDQ3O1xuXHR5IC89IDEwMDtcblx0eiAvPSAxMDguODgzO1xuXG5cdHggPSB4ID4gMC4wMDg4NTYgPyAoeCAqKiAoMSAvIDMpKSA6ICg3Ljc4NyAqIHgpICsgKDE2IC8gMTE2KTtcblx0eSA9IHkgPiAwLjAwODg1NiA/ICh5ICoqICgxIC8gMykpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuXHR6ID0geiA+IDAuMDA4ODU2ID8gKHogKiogKDEgLyAzKSkgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cblx0Y29uc3QgbCA9ICgxMTYgKiB5KSAtIDE2O1xuXHRjb25zdCBhID0gNTAwICogKHggLSB5KTtcblx0Y29uc3QgYiA9IDIwMCAqICh5IC0geik7XG5cblx0cmV0dXJuIFtsLCBhLCBiXTtcbn07XG5cbmNvbnZlcnQubGFiLnh5eiA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IHg7XG5cdGxldCB5O1xuXHRsZXQgejtcblxuXHR5ID0gKGwgKyAxNikgLyAxMTY7XG5cdHggPSBhIC8gNTAwICsgeTtcblx0eiA9IHkgLSBiIC8gMjAwO1xuXG5cdGNvbnN0IHkyID0geSAqKiAzO1xuXHRjb25zdCB4MiA9IHggKiogMztcblx0Y29uc3QgejIgPSB6ICoqIDM7XG5cdHkgPSB5MiA+IDAuMDA4ODU2ID8geTIgOiAoeSAtIDE2IC8gMTE2KSAvIDcuNzg3O1xuXHR4ID0geDIgPiAwLjAwODg1NiA/IHgyIDogKHggLSAxNiAvIDExNikgLyA3Ljc4Nztcblx0eiA9IHoyID4gMC4wMDg4NTYgPyB6MiA6ICh6IC0gMTYgLyAxMTYpIC8gNy43ODc7XG5cblx0eCAqPSA5NS4wNDc7XG5cdHkgKj0gMTAwO1xuXHR6ICo9IDEwOC44ODM7XG5cblx0cmV0dXJuIFt4LCB5LCB6XTtcbn07XG5cbmNvbnZlcnQubGFiLmxjaCA9IGZ1bmN0aW9uIChsYWIpIHtcblx0Y29uc3QgbCA9IGxhYlswXTtcblx0Y29uc3QgYSA9IGxhYlsxXTtcblx0Y29uc3QgYiA9IGxhYlsyXTtcblx0bGV0IGg7XG5cblx0Y29uc3QgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuXHRoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcblxuXHRpZiAoaCA8IDApIHtcblx0XHRoICs9IDM2MDtcblx0fVxuXG5cdGNvbnN0IGMgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG5cblx0cmV0dXJuIFtsLCBjLCBoXTtcbn07XG5cbmNvbnZlcnQubGNoLmxhYiA9IGZ1bmN0aW9uIChsY2gpIHtcblx0Y29uc3QgbCA9IGxjaFswXTtcblx0Y29uc3QgYyA9IGxjaFsxXTtcblx0Y29uc3QgaCA9IGxjaFsyXTtcblxuXHRjb25zdCBociA9IGggLyAzNjAgKiAyICogTWF0aC5QSTtcblx0Y29uc3QgYSA9IGMgKiBNYXRoLmNvcyhocik7XG5cdGNvbnN0IGIgPSBjICogTWF0aC5zaW4oaHIpO1xuXG5cdHJldHVybiBbbCwgYSwgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMTYgPSBmdW5jdGlvbiAoYXJncywgc2F0dXJhdGlvbiA9IG51bGwpIHtcblx0Y29uc3QgW3IsIGcsIGJdID0gYXJncztcblx0bGV0IHZhbHVlID0gc2F0dXJhdGlvbiA9PT0gbnVsbCA/IGNvbnZlcnQucmdiLmhzdihhcmdzKVsyXSA6IHNhdHVyYXRpb247IC8vIEhzdiAtPiBhbnNpMTYgb3B0aW1pemF0aW9uXG5cblx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gNTApO1xuXG5cdGlmICh2YWx1ZSA9PT0gMCkge1xuXHRcdHJldHVybiAzMDtcblx0fVxuXG5cdGxldCBhbnNpID0gMzBcblx0XHQrICgoTWF0aC5yb3VuZChiIC8gMjU1KSA8PCAyKVxuXHRcdHwgKE1hdGgucm91bmQoZyAvIDI1NSkgPDwgMSlcblx0XHR8IE1hdGgucm91bmQociAvIDI1NSkpO1xuXG5cdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdGFuc2kgKz0gNjA7XG5cdH1cblxuXHRyZXR1cm4gYW5zaTtcbn07XG5cbmNvbnZlcnQuaHN2LmFuc2kxNiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIE9wdGltaXphdGlvbiBoZXJlOyB3ZSBhbHJlYWR5IGtub3cgdGhlIHZhbHVlIGFuZCBkb24ndCBuZWVkIHRvIGdldFxuXHQvLyBpdCBjb252ZXJ0ZWQgZm9yIHVzLlxuXHRyZXR1cm4gY29udmVydC5yZ2IuYW5zaTE2KGNvbnZlcnQuaHN2LnJnYihhcmdzKSwgYXJnc1syXSk7XG59O1xuXG5jb252ZXJ0LnJnYi5hbnNpMjU2ID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgciA9IGFyZ3NbMF07XG5cdGNvbnN0IGcgPSBhcmdzWzFdO1xuXHRjb25zdCBiID0gYXJnc1syXTtcblxuXHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0aWYgKHIgPT09IGcgJiYgZyA9PT0gYikge1xuXHRcdGlmIChyIDwgOCkge1xuXHRcdFx0cmV0dXJuIDE2O1xuXHRcdH1cblxuXHRcdGlmIChyID4gMjQ4KSB7XG5cdFx0XHRyZXR1cm4gMjMxO1xuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLnJvdW5kKCgociAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0fVxuXG5cdGNvbnN0IGFuc2kgPSAxNlxuXHRcdCsgKDM2ICogTWF0aC5yb3VuZChyIC8gMjU1ICogNSkpXG5cdFx0KyAoNiAqIE1hdGgucm91bmQoZyAvIDI1NSAqIDUpKVxuXHRcdCsgTWF0aC5yb3VuZChiIC8gMjU1ICogNSk7XG5cblx0cmV0dXJuIGFuc2k7XG59O1xuXG5jb252ZXJ0LmFuc2kxNi5yZ2IgPSBmdW5jdGlvbiAoYXJncykge1xuXHRsZXQgY29sb3IgPSBhcmdzICUgMTA7XG5cblx0Ly8gSGFuZGxlIGdyZXlzY2FsZVxuXHRpZiAoY29sb3IgPT09IDAgfHwgY29sb3IgPT09IDcpIHtcblx0XHRpZiAoYXJncyA+IDUwKSB7XG5cdFx0XHRjb2xvciArPSAzLjU7XG5cdFx0fVxuXG5cdFx0Y29sb3IgPSBjb2xvciAvIDEwLjUgKiAyNTU7XG5cblx0XHRyZXR1cm4gW2NvbG9yLCBjb2xvciwgY29sb3JdO1xuXHR9XG5cblx0Y29uc3QgbXVsdCA9ICh+fihhcmdzID4gNTApICsgMSkgKiAwLjU7XG5cdGNvbnN0IHIgPSAoKGNvbG9yICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgZyA9ICgoKGNvbG9yID4+IDEpICYgMSkgKiBtdWx0KSAqIDI1NTtcblx0Y29uc3QgYiA9ICgoKGNvbG9yID4+IDIpICYgMSkgKiBtdWx0KSAqIDI1NTtcblxuXHRyZXR1cm4gW3IsIGcsIGJdO1xufTtcblxuY29udmVydC5hbnNpMjU2LnJnYiA9IGZ1bmN0aW9uIChhcmdzKSB7XG5cdC8vIEhhbmRsZSBncmV5c2NhbGVcblx0aWYgKGFyZ3MgPj0gMjMyKSB7XG5cdFx0Y29uc3QgYyA9IChhcmdzIC0gMjMyKSAqIDEwICsgODtcblx0XHRyZXR1cm4gW2MsIGMsIGNdO1xuXHR9XG5cblx0YXJncyAtPSAxNjtcblxuXHRsZXQgcmVtO1xuXHRjb25zdCByID0gTWF0aC5mbG9vcihhcmdzIC8gMzYpIC8gNSAqIDI1NTtcblx0Y29uc3QgZyA9IE1hdGguZmxvb3IoKHJlbSA9IGFyZ3MgJSAzNikgLyA2KSAvIDUgKiAyNTU7XG5cdGNvbnN0IGIgPSAocmVtICUgNikgLyA1ICogMjU1O1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oZXggPSBmdW5jdGlvbiAoYXJncykge1xuXHRjb25zdCBpbnRlZ2VyID0gKChNYXRoLnJvdW5kKGFyZ3NbMF0pICYgMHhGRikgPDwgMTYpXG5cdFx0KyAoKE1hdGgucm91bmQoYXJnc1sxXSkgJiAweEZGKSA8PCA4KVxuXHRcdCsgKE1hdGgucm91bmQoYXJnc1syXSkgJiAweEZGKTtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5oZXgucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0Y29uc3QgbWF0Y2ggPSBhcmdzLnRvU3RyaW5nKDE2KS5tYXRjaCgvW2EtZjAtOV17Nn18W2EtZjAtOV17M30vaSk7XG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHR9XG5cblx0bGV0IGNvbG9yU3RyaW5nID0gbWF0Y2hbMF07XG5cblx0aWYgKG1hdGNoWzBdLmxlbmd0aCA9PT0gMykge1xuXHRcdGNvbG9yU3RyaW5nID0gY29sb3JTdHJpbmcuc3BsaXQoJycpLm1hcChjaGFyID0+IHtcblx0XHRcdHJldHVybiBjaGFyICsgY2hhcjtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdGNvbnN0IGludGVnZXIgPSBwYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXHRjb25zdCByID0gKGludGVnZXIgPj4gMTYpICYgMHhGRjtcblx0Y29uc3QgZyA9IChpbnRlZ2VyID4+IDgpICYgMHhGRjtcblx0Y29uc3QgYiA9IGludGVnZXIgJiAweEZGO1xuXG5cdHJldHVybiBbciwgZywgYl07XG59O1xuXG5jb252ZXJ0LnJnYi5oY2cgPSBmdW5jdGlvbiAocmdiKSB7XG5cdGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XG5cdGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG5cdGNvbnN0IGIgPSByZ2JbMl0gLyAyNTU7XG5cdGNvbnN0IG1heCA9IE1hdGgubWF4KE1hdGgubWF4KHIsIGcpLCBiKTtcblx0Y29uc3QgbWluID0gTWF0aC5taW4oTWF0aC5taW4ociwgZyksIGIpO1xuXHRjb25zdCBjaHJvbWEgPSAobWF4IC0gbWluKTtcblx0bGV0IGdyYXlzY2FsZTtcblx0bGV0IGh1ZTtcblxuXHRpZiAoY2hyb21hIDwgMSkge1xuXHRcdGdyYXlzY2FsZSA9IG1pbiAvICgxIC0gY2hyb21hKTtcblx0fSBlbHNlIHtcblx0XHRncmF5c2NhbGUgPSAwO1xuXHR9XG5cblx0aWYgKGNocm9tYSA8PSAwKSB7XG5cdFx0aHVlID0gMDtcblx0fSBlbHNlXG5cdGlmIChtYXggPT09IHIpIHtcblx0XHRodWUgPSAoKGcgLSBiKSAvIGNocm9tYSkgJSA2O1xuXHR9IGVsc2Vcblx0aWYgKG1heCA9PT0gZykge1xuXHRcdGh1ZSA9IDIgKyAoYiAtIHIpIC8gY2hyb21hO1xuXHR9IGVsc2Uge1xuXHRcdGh1ZSA9IDQgKyAociAtIGcpIC8gY2hyb21hO1xuXHR9XG5cblx0aHVlIC89IDY7XG5cdGh1ZSAlPSAxO1xuXG5cdHJldHVybiBbaHVlICogMzYwLCBjaHJvbWEgKiAxMDAsIGdyYXlzY2FsZSAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhzbC5oY2cgPSBmdW5jdGlvbiAoaHNsKSB7XG5cdGNvbnN0IHMgPSBoc2xbMV0gLyAxMDA7XG5cdGNvbnN0IGwgPSBoc2xbMl0gLyAxMDA7XG5cblx0Y29uc3QgYyA9IGwgPCAwLjUgPyAoMi4wICogcyAqIGwpIDogKDIuMCAqIHMgKiAoMS4wIC0gbCkpO1xuXG5cdGxldCBmID0gMDtcblx0aWYgKGMgPCAxLjApIHtcblx0XHRmID0gKGwgLSAwLjUgKiBjKSAvICgxLjAgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHNsWzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHN2LmhjZyA9IGZ1bmN0aW9uIChoc3YpIHtcblx0Y29uc3QgcyA9IGhzdlsxXSAvIDEwMDtcblx0Y29uc3QgdiA9IGhzdlsyXSAvIDEwMDtcblxuXHRjb25zdCBjID0gcyAqIHY7XG5cdGxldCBmID0gMDtcblxuXHRpZiAoYyA8IDEuMCkge1xuXHRcdGYgPSAodiAtIGMpIC8gKDEgLSBjKTtcblx0fVxuXG5cdHJldHVybiBbaHN2WzBdLCBjICogMTAwLCBmICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaGNnLnJnYiA9IGZ1bmN0aW9uIChoY2cpIHtcblx0Y29uc3QgaCA9IGhjZ1swXSAvIDM2MDtcblx0Y29uc3QgYyA9IGhjZ1sxXSAvIDEwMDtcblx0Y29uc3QgZyA9IGhjZ1syXSAvIDEwMDtcblxuXHRpZiAoYyA9PT0gMC4wKSB7XG5cdFx0cmV0dXJuIFtnICogMjU1LCBnICogMjU1LCBnICogMjU1XTtcblx0fVxuXG5cdGNvbnN0IHB1cmUgPSBbMCwgMCwgMF07XG5cdGNvbnN0IGhpID0gKGggJSAxKSAqIDY7XG5cdGNvbnN0IHYgPSBoaSAlIDE7XG5cdGNvbnN0IHcgPSAxIC0gdjtcblx0bGV0IG1nID0gMDtcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXHRzd2l0Y2ggKE1hdGguZmxvb3IoaGkpKSB7XG5cdFx0Y2FzZSAwOlxuXHRcdFx0cHVyZVswXSA9IDE7IHB1cmVbMV0gPSB2OyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cHVyZVswXSA9IHc7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gMDsgYnJlYWs7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSAxOyBwdXJlWzJdID0gdjsgYnJlYWs7XG5cdFx0Y2FzZSAzOlxuXHRcdFx0cHVyZVswXSA9IDA7IHB1cmVbMV0gPSB3OyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0Y2FzZSA0OlxuXHRcdFx0cHVyZVswXSA9IHY7IHB1cmVbMV0gPSAwOyBwdXJlWzJdID0gMTsgYnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHB1cmVbMF0gPSAxOyBwdXJlWzFdID0gMDsgcHVyZVsyXSA9IHc7XG5cdH1cblx0LyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cy1wZXItbGluZSAqL1xuXG5cdG1nID0gKDEuMCAtIGMpICogZztcblxuXHRyZXR1cm4gW1xuXHRcdChjICogcHVyZVswXSArIG1nKSAqIDI1NSxcblx0XHQoYyAqIHB1cmVbMV0gKyBtZykgKiAyNTUsXG5cdFx0KGMgKiBwdXJlWzJdICsgbWcpICogMjU1XG5cdF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc3YgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgdiA9IGMgKyBnICogKDEuMCAtIGMpO1xuXHRsZXQgZiA9IDA7XG5cblx0aWYgKHYgPiAwLjApIHtcblx0XHRmID0gYyAvIHY7XG5cdH1cblxuXHRyZXR1cm4gW2hjZ1swXSwgZiAqIDEwMCwgdiAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmhjZy5oc2wgPSBmdW5jdGlvbiAoaGNnKSB7XG5cdGNvbnN0IGMgPSBoY2dbMV0gLyAxMDA7XG5cdGNvbnN0IGcgPSBoY2dbMl0gLyAxMDA7XG5cblx0Y29uc3QgbCA9IGcgKiAoMS4wIC0gYykgKyAwLjUgKiBjO1xuXHRsZXQgcyA9IDA7XG5cblx0aWYgKGwgPiAwLjAgJiYgbCA8IDAuNSkge1xuXHRcdHMgPSBjIC8gKDIgKiBsKTtcblx0fSBlbHNlXG5cdGlmIChsID49IDAuNSAmJiBsIDwgMS4wKSB7XG5cdFx0cyA9IGMgLyAoMiAqICgxIC0gbCkpO1xuXHR9XG5cblx0cmV0dXJuIFtoY2dbMF0sIHMgKiAxMDAsIGwgKiAxMDBdO1xufTtcblxuY29udmVydC5oY2cuaHdiID0gZnVuY3Rpb24gKGhjZykge1xuXHRjb25zdCBjID0gaGNnWzFdIC8gMTAwO1xuXHRjb25zdCBnID0gaGNnWzJdIC8gMTAwO1xuXHRjb25zdCB2ID0gYyArIGcgKiAoMS4wIC0gYyk7XG5cdHJldHVybiBbaGNnWzBdLCAodiAtIGMpICogMTAwLCAoMSAtIHYpICogMTAwXTtcbn07XG5cbmNvbnZlcnQuaHdiLmhjZyA9IGZ1bmN0aW9uIChod2IpIHtcblx0Y29uc3QgdyA9IGh3YlsxXSAvIDEwMDtcblx0Y29uc3QgYiA9IGh3YlsyXSAvIDEwMDtcblx0Y29uc3QgdiA9IDEgLSBiO1xuXHRjb25zdCBjID0gdiAtIHc7XG5cdGxldCBnID0gMDtcblxuXHRpZiAoYyA8IDEpIHtcblx0XHRnID0gKHYgLSBjKSAvICgxIC0gYyk7XG5cdH1cblxuXHRyZXR1cm4gW2h3YlswXSwgYyAqIDEwMCwgZyAqIDEwMF07XG59O1xuXG5jb252ZXJ0LmFwcGxlLnJnYiA9IGZ1bmN0aW9uIChhcHBsZSkge1xuXHRyZXR1cm4gWyhhcHBsZVswXSAvIDY1NTM1KSAqIDI1NSwgKGFwcGxlWzFdIC8gNjU1MzUpICogMjU1LCAoYXBwbGVbMl0gLyA2NTUzNSkgKiAyNTVdO1xufTtcblxuY29udmVydC5yZ2IuYXBwbGUgPSBmdW5jdGlvbiAocmdiKSB7XG5cdHJldHVybiBbKHJnYlswXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsxXSAvIDI1NSkgKiA2NTUzNSwgKHJnYlsyXSAvIDI1NSkgKiA2NTUzNV07XG59O1xuXG5jb252ZXJ0LmdyYXkucmdiID0gZnVuY3Rpb24gKGFyZ3MpIHtcblx0cmV0dXJuIFthcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1LCBhcmdzWzBdIC8gMTAwICogMjU1XTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oc2wgPSBmdW5jdGlvbiAoYXJncykge1xuXHRyZXR1cm4gWzAsIDAsIGFyZ3NbMF1dO1xufTtcblxuY29udmVydC5ncmF5LmhzdiA9IGNvbnZlcnQuZ3JheS5oc2w7XG5cbmNvbnZlcnQuZ3JheS5od2IgPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRyZXR1cm4gWzAsIDEwMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkuY215ayA9IGZ1bmN0aW9uIChncmF5KSB7XG5cdHJldHVybiBbMCwgMCwgMCwgZ3JheVswXV07XG59O1xuXG5jb252ZXJ0LmdyYXkubGFiID0gZnVuY3Rpb24gKGdyYXkpIHtcblx0cmV0dXJuIFtncmF5WzBdLCAwLCAwXTtcbn07XG5cbmNvbnZlcnQuZ3JheS5oZXggPSBmdW5jdGlvbiAoZ3JheSkge1xuXHRjb25zdCB2YWwgPSBNYXRoLnJvdW5kKGdyYXlbMF0gLyAxMDAgKiAyNTUpICYgMHhGRjtcblx0Y29uc3QgaW50ZWdlciA9ICh2YWwgPDwgMTYpICsgKHZhbCA8PCA4KSArIHZhbDtcblxuXHRjb25zdCBzdHJpbmcgPSBpbnRlZ2VyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKHN0cmluZy5sZW5ndGgpICsgc3RyaW5nO1xufTtcblxuY29udmVydC5yZ2IuZ3JheSA9IGZ1bmN0aW9uIChyZ2IpIHtcblx0Y29uc3QgdmFsID0gKHJnYlswXSArIHJnYlsxXSArIHJnYlsyXSkgLyAzO1xuXHRyZXR1cm4gW3ZhbCAvIDI1NSAqIDEwMF07XG59O1xuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuXG4vKlxuXHRUaGlzIGZ1bmN0aW9uIHJvdXRlcyBhIG1vZGVsIHRvIGFsbCBvdGhlciBtb2RlbHMuXG5cblx0YWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSByb3V0ZWQgaGF2ZSBhIHByb3BlcnR5IGAuY29udmVyc2lvbmAgYXR0YWNoZWRcblx0dG8gdGhlIHJldHVybmVkIHN5bnRoZXRpYyBmdW5jdGlvbi4gVGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheVxuXHRvZiBzdHJpbmdzLCBlYWNoIHdpdGggdGhlIHN0ZXBzIGluIGJldHdlZW4gdGhlICdmcm9tJyBhbmQgJ3RvJ1xuXHRjb2xvciBtb2RlbHMgKGluY2x1c2l2ZSkuXG5cblx0Y29udmVyc2lvbnMgdGhhdCBhcmUgbm90IHBvc3NpYmxlIHNpbXBseSBhcmUgbm90IGluY2x1ZGVkLlxuKi9cblxuZnVuY3Rpb24gYnVpbGRHcmFwaCgpIHtcblx0Y29uc3QgZ3JhcGggPSB7fTtcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL29iamVjdC1rZXlzLXZzLWZvci1pbi13aXRoLWNsb3N1cmUvM1xuXHRjb25zdCBtb2RlbHMgPSBPYmplY3Qua2V5cyhjb252ZXJzaW9ucyk7XG5cblx0Zm9yIChsZXQgbGVuID0gbW9kZWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGdyYXBoW21vZGVsc1tpXV0gPSB7XG5cdFx0XHQvLyBodHRwOi8vanNwZXJmLmNvbS8xLXZzLWluZmluaXR5XG5cdFx0XHQvLyBtaWNyby1vcHQsIGJ1dCB0aGlzIGlzIHNpbXBsZS5cblx0XHRcdGRpc3RhbmNlOiAtMSxcblx0XHRcdHBhcmVudDogbnVsbFxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JyZWFkdGgtZmlyc3Rfc2VhcmNoXG5mdW5jdGlvbiBkZXJpdmVCRlMoZnJvbU1vZGVsKSB7XG5cdGNvbnN0IGdyYXBoID0gYnVpbGRHcmFwaCgpO1xuXHRjb25zdCBxdWV1ZSA9IFtmcm9tTW9kZWxdOyAvLyBVbnNoaWZ0IC0+IHF1ZXVlIC0+IHBvcFxuXG5cdGdyYXBoW2Zyb21Nb2RlbF0uZGlzdGFuY2UgPSAwO1xuXG5cdHdoaWxlIChxdWV1ZS5sZW5ndGgpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcXVldWUucG9wKCk7XG5cdFx0Y29uc3QgYWRqYWNlbnRzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnNbY3VycmVudF0pO1xuXG5cdFx0Zm9yIChsZXQgbGVuID0gYWRqYWNlbnRzLmxlbmd0aCwgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0Y29uc3QgYWRqYWNlbnQgPSBhZGphY2VudHNbaV07XG5cdFx0XHRjb25zdCBub2RlID0gZ3JhcGhbYWRqYWNlbnRdO1xuXG5cdFx0XHRpZiAobm9kZS5kaXN0YW5jZSA9PT0gLTEpIHtcblx0XHRcdFx0bm9kZS5kaXN0YW5jZSA9IGdyYXBoW2N1cnJlbnRdLmRpc3RhbmNlICsgMTtcblx0XHRcdFx0bm9kZS5wYXJlbnQgPSBjdXJyZW50O1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KGFkamFjZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZ3JhcGg7XG59XG5cbmZ1bmN0aW9uIGxpbmsoZnJvbSwgdG8pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG5cdFx0cmV0dXJuIHRvKGZyb20oYXJncykpO1xuXHR9O1xufVxuXG5mdW5jdGlvbiB3cmFwQ29udmVyc2lvbih0b01vZGVsLCBncmFwaCkge1xuXHRjb25zdCBwYXRoID0gW2dyYXBoW3RvTW9kZWxdLnBhcmVudCwgdG9Nb2RlbF07XG5cdGxldCBmbiA9IGNvbnZlcnNpb25zW2dyYXBoW3RvTW9kZWxdLnBhcmVudF1bdG9Nb2RlbF07XG5cblx0bGV0IGN1ciA9IGdyYXBoW3RvTW9kZWxdLnBhcmVudDtcblx0d2hpbGUgKGdyYXBoW2N1cl0ucGFyZW50KSB7XG5cdFx0cGF0aC51bnNoaWZ0KGdyYXBoW2N1cl0ucGFyZW50KTtcblx0XHRmbiA9IGxpbmsoY29udmVyc2lvbnNbZ3JhcGhbY3VyXS5wYXJlbnRdW2N1cl0sIGZuKTtcblx0XHRjdXIgPSBncmFwaFtjdXJdLnBhcmVudDtcblx0fVxuXG5cdGZuLmNvbnZlcnNpb24gPSBwYXRoO1xuXHRyZXR1cm4gZm47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZyb21Nb2RlbCkge1xuXHRjb25zdCBncmFwaCA9IGRlcml2ZUJGUyhmcm9tTW9kZWwpO1xuXHRjb25zdCBjb252ZXJzaW9uID0ge307XG5cblx0Y29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoZ3JhcGgpO1xuXHRmb3IgKGxldCBsZW4gPSBtb2RlbHMubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0Y29uc3QgdG9Nb2RlbCA9IG1vZGVsc1tpXTtcblx0XHRjb25zdCBub2RlID0gZ3JhcGhbdG9Nb2RlbF07XG5cblx0XHRpZiAobm9kZS5wYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdC8vIE5vIHBvc3NpYmxlIGNvbnZlcnNpb24sIG9yIHRoaXMgbm9kZSBpcyB0aGUgc291cmNlIG1vZGVsLlxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udmVyc2lvblt0b01vZGVsXSA9IHdyYXBDb252ZXJzaW9uKHRvTW9kZWwsIGdyYXBoKTtcblx0fVxuXG5cdHJldHVybiBjb252ZXJzaW9uO1xufTtcblxuIiwgImNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZSgnLi9jb252ZXJzaW9ucycpO1xuY29uc3Qgcm91dGUgPSByZXF1aXJlKCcuL3JvdXRlJyk7XG5cbmNvbnN0IGNvbnZlcnQgPSB7fTtcblxuY29uc3QgbW9kZWxzID0gT2JqZWN0LmtleXMoY29udmVyc2lvbnMpO1xuXG5mdW5jdGlvbiB3cmFwUmF3KGZuKSB7XG5cdGNvbnN0IHdyYXBwZWRGbiA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0Y29uc3QgYXJnMCA9IGFyZ3NbMF07XG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZm4oYXJncyk7XG5cdH07XG5cblx0Ly8gUHJlc2VydmUgLmNvbnZlcnNpb24gcHJvcGVydHkgaWYgdGhlcmUgaXMgb25lXG5cdGlmICgnY29udmVyc2lvbicgaW4gZm4pIHtcblx0XHR3cmFwcGVkRm4uY29udmVyc2lvbiA9IGZuLmNvbnZlcnNpb247XG5cdH1cblxuXHRyZXR1cm4gd3JhcHBlZEZuO1xufVxuXG5mdW5jdGlvbiB3cmFwUm91bmRlZChmbikge1xuXHRjb25zdCB3cmFwcGVkRm4gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdGNvbnN0IGFyZzAgPSBhcmdzWzBdO1xuXG5cdFx0aWYgKGFyZzAgPT09IHVuZGVmaW5lZCB8fCBhcmcwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gYXJnMDtcblx0XHR9XG5cblx0XHRpZiAoYXJnMC5sZW5ndGggPiAxKSB7XG5cdFx0XHRhcmdzID0gYXJnMDtcblx0XHR9XG5cblx0XHRjb25zdCByZXN1bHQgPSBmbihhcmdzKTtcblxuXHRcdC8vIFdlJ3JlIGFzc3VtaW5nIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgaGVyZS5cblx0XHQvLyBzZWUgbm90aWNlIGluIGNvbnZlcnNpb25zLmpzOyBkb24ndCB1c2UgYm94IHR5cGVzXG5cdFx0Ly8gaW4gY29udmVyc2lvbiBmdW5jdGlvbnMuXG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGxldCBsZW4gPSByZXN1bHQubGVuZ3RoLCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdFtpXSA9IE1hdGgucm91bmQocmVzdWx0W2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIFByZXNlcnZlIC5jb252ZXJzaW9uIHByb3BlcnR5IGlmIHRoZXJlIGlzIG9uZVxuXHRpZiAoJ2NvbnZlcnNpb24nIGluIGZuKSB7XG5cdFx0d3JhcHBlZEZuLmNvbnZlcnNpb24gPSBmbi5jb252ZXJzaW9uO1xuXHR9XG5cblx0cmV0dXJuIHdyYXBwZWRGbjtcbn1cblxubW9kZWxzLmZvckVhY2goZnJvbU1vZGVsID0+IHtcblx0Y29udmVydFtmcm9tTW9kZWxdID0ge307XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnZlcnRbZnJvbU1vZGVsXSwgJ2NoYW5uZWxzJywge3ZhbHVlOiBjb252ZXJzaW9uc1tmcm9tTW9kZWxdLmNoYW5uZWxzfSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb252ZXJ0W2Zyb21Nb2RlbF0sICdsYWJlbHMnLCB7dmFsdWU6IGNvbnZlcnNpb25zW2Zyb21Nb2RlbF0ubGFiZWxzfSk7XG5cblx0Y29uc3Qgcm91dGVzID0gcm91dGUoZnJvbU1vZGVsKTtcblx0Y29uc3Qgcm91dGVNb2RlbHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG5cdHJvdXRlTW9kZWxzLmZvckVhY2godG9Nb2RlbCA9PiB7XG5cdFx0Y29uc3QgZm4gPSByb3V0ZXNbdG9Nb2RlbF07XG5cblx0XHRjb252ZXJ0W2Zyb21Nb2RlbF1bdG9Nb2RlbF0gPSB3cmFwUm91bmRlZChmbik7XG5cdFx0Y29udmVydFtmcm9tTW9kZWxdW3RvTW9kZWxdLnJhdyA9IHdyYXBSYXcoZm4pO1xuXHR9KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3cmFwQW5zaTE2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7Y29kZSArIG9mZnNldH1tYDtcbn07XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKGZuLCBvZmZzZXQpID0+ICguLi5hcmdzKSA9PiB7XG5cdGNvbnN0IGNvZGUgPSBmbiguLi5hcmdzKTtcblx0cmV0dXJuIGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xufTtcblxuY29uc3Qgd3JhcEFuc2kxNm0gPSAoZm4sIG9mZnNldCkgPT4gKC4uLmFyZ3MpID0+IHtcblx0Y29uc3QgcmdiID0gZm4oLi4uYXJncyk7XG5cdHJldHVybiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmdiWzBdfTske3JnYlsxXX07JHtyZ2JbMl19bWA7XG59O1xuXG5jb25zdCBhbnNpMmFuc2kgPSBuID0+IG47XG5jb25zdCByZ2IycmdiID0gKHIsIGcsIGIpID0+IFtyLCBnLCBiXTtcblxuY29uc3Qgc2V0TGF6eVByb3BlcnR5ID0gKG9iamVjdCwgcHJvcGVydHksIGdldCkgPT4ge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuXHRcdGdldDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoKTtcblxuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdH0pO1xufTtcblxuLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCdjb2xvci1jb252ZXJ0Jyl9ICovXG5sZXQgY29sb3JDb252ZXJ0O1xuY29uc3QgbWFrZUR5bmFtaWNTdHlsZXMgPSAod3JhcCwgdGFyZ2V0U3BhY2UsIGlkZW50aXR5LCBpc0JhY2tncm91bmQpID0+IHtcblx0aWYgKGNvbG9yQ29udmVydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29sb3JDb252ZXJ0ID0gcmVxdWlyZSgnY29sb3ItY29udmVydCcpO1xuXHR9XG5cblx0Y29uc3Qgb2Zmc2V0ID0gaXNCYWNrZ3JvdW5kID8gMTAgOiAwO1xuXHRjb25zdCBzdHlsZXMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IFtzb3VyY2VTcGFjZSwgc3VpdGVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbG9yQ29udmVydCkpIHtcblx0XHRjb25zdCBuYW1lID0gc291cmNlU3BhY2UgPT09ICdhbnNpMTYnID8gJ2Fuc2knIDogc291cmNlU3BhY2U7XG5cdFx0aWYgKHNvdXJjZVNwYWNlID09PSB0YXJnZXRTcGFjZSkge1xuXHRcdFx0c3R5bGVzW25hbWVdID0gd3JhcChpZGVudGl0eSwgb2Zmc2V0KTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzdWl0ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdHN0eWxlc1tuYW1lXSA9IHdyYXAoc3VpdGVbdGFyZ2V0U3BhY2VdLCBvZmZzZXQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgZmFsc2UpKTtcblx0c2V0TGF6eVByb3BlcnR5KHN0eWxlcy5jb2xvciwgJ2Fuc2kyNTYnLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTI1NiwgJ2Fuc2kyNTYnLCBhbnNpMmFuc2ksIGZhbHNlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuY29sb3IsICdhbnNpMTZtJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNm0sICdyZ2InLCByZ2IycmdiLCBmYWxzZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpJywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kxNiwgJ2Fuc2kxNicsIGFuc2kyYW5zaSwgdHJ1ZSkpO1xuXHRzZXRMYXp5UHJvcGVydHkoc3R5bGVzLmJnQ29sb3IsICdhbnNpMjU2JywgKCkgPT4gbWFrZUR5bmFtaWNTdHlsZXMod3JhcEFuc2kyNTYsICdhbnNpMjU2JywgYW5zaTJhbnNpLCB0cnVlKSk7XG5cdHNldExhenlQcm9wZXJ0eShzdHlsZXMuYmdDb2xvciwgJ2Fuc2kxNm0nLCAoKSA9PiBtYWtlRHluYW1pY1N0eWxlcyh3cmFwQW5zaTE2bSwgJ3JnYicsIHJnYjJyZ2IsIHRydWUpKTtcblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG4vLyBNYWtlIHRoZSBleHBvcnQgaW1tdXRhYmxlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0Z2V0OiBhc3NlbWJsZVN0eWxlc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2ID0gcHJvY2Vzcy5hcmd2KSA9PiB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaW5nUmVwbGFjZUFsbCA9IChzdHJpbmcsIHN1YnN0cmluZywgcmVwbGFjZXIpID0+IHtcblx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3Vic3RyaW5nKTtcblx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRjb25zdCBzdWJzdHJpbmdMZW5ndGggPSBzdWJzdHJpbmcubGVuZ3RoO1xuXHRsZXQgZW5kSW5kZXggPSAwO1xuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0ZG8ge1xuXHRcdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgsIGluZGV4IC0gZW5kSW5kZXgpICsgc3Vic3RyaW5nICsgcmVwbGFjZXI7XG5cdFx0ZW5kSW5kZXggPSBpbmRleCArIHN1YnN0cmluZ0xlbmd0aDtcblx0XHRpbmRleCA9IHN0cmluZy5pbmRleE9mKHN1YnN0cmluZywgZW5kSW5kZXgpO1xuXHR9IHdoaWxlIChpbmRleCAhPT0gLTEpO1xuXG5cdHJldHVyblZhbHVlICs9IHN0cmluZy5zdWJzdHIoZW5kSW5kZXgpO1xuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG5jb25zdCBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXggPSAoc3RyaW5nLCBwcmVmaXgsIHBvc3RmaXgsIGluZGV4KSA9PiB7XG5cdGxldCBlbmRJbmRleCA9IDA7XG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRkbyB7XG5cdFx0Y29uc3QgZ290Q1IgPSBzdHJpbmdbaW5kZXggLSAxXSA9PT0gJ1xccic7XG5cdFx0cmV0dXJuVmFsdWUgKz0gc3RyaW5nLnN1YnN0cihlbmRJbmRleCwgKGdvdENSID8gaW5kZXggLSAxIDogaW5kZXgpIC0gZW5kSW5kZXgpICsgcHJlZml4ICsgKGdvdENSID8gJ1xcclxcbicgOiAnXFxuJykgKyBwb3N0Zml4O1xuXHRcdGVuZEluZGV4ID0gaW5kZXggKyAxO1xuXHRcdGluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicsIGVuZEluZGV4KTtcblx0fSB3aGlsZSAoaW5kZXggIT09IC0xKTtcblxuXHRyZXR1cm5WYWx1ZSArPSBzdHJpbmcuc3Vic3RyKGVuZEluZGV4KTtcblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHN0cmluZ1JlcGxhY2VBbGwsXG5cdHN0cmluZ0VuY2FzZUNSTEZXaXRoRmlyc3RJbmRleFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBURU1QTEFURV9SRUdFWCA9IC8oPzpcXFxcKHUoPzpbYS1mXFxkXXs0fXxcXHtbYS1mXFxkXXsxLDZ9XFx9KXx4W2EtZlxcZF17Mn18LikpfCg/Olxceyh+KT8oXFx3Kyg/OlxcKFteKV0qXFwpKT8oPzpcXC5cXHcrKD86XFwoW14pXSpcXCkpPykqKSg/OlsgXFx0XXwoPz1cXHI/XFxuKSkpfChcXH0pfCgoPzoufFtcXHJcXG5cXGZdKSs/KS9naTtcbmNvbnN0IFNUWUxFX1JFR0VYID0gLyg/Ol58XFwuKShcXHcrKSg/OlxcKChbXildKilcXCkpPy9nO1xuY29uc3QgU1RSSU5HX1JFR0VYID0gL14oWydcIl0pKCg/OlxcXFwufCg/IVxcMSlbXlxcXFxdKSopXFwxJC87XG5jb25zdCBFU0NBUEVfUkVHRVggPSAvXFxcXCh1KD86W2EtZlxcZF17NH18e1thLWZcXGRdezEsNn19KXx4W2EtZlxcZF17Mn18Lil8KFteXFxcXF0pL2dpO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IE1hcChbXG5cdFsnbicsICdcXG4nXSxcblx0WydyJywgJ1xcciddLFxuXHRbJ3QnLCAnXFx0J10sXG5cdFsnYicsICdcXGInXSxcblx0WydmJywgJ1xcZiddLFxuXHRbJ3YnLCAnXFx2J10sXG5cdFsnMCcsICdcXDAnXSxcblx0WydcXFxcJywgJ1xcXFwnXSxcblx0WydlJywgJ1xcdTAwMUInXSxcblx0WydhJywgJ1xcdTAwMDcnXVxuXSk7XG5cbmZ1bmN0aW9uIHVuZXNjYXBlKGMpIHtcblx0Y29uc3QgdSA9IGNbMF0gPT09ICd1Jztcblx0Y29uc3QgYnJhY2tldCA9IGNbMV0gPT09ICd7JztcblxuXHRpZiAoKHUgJiYgIWJyYWNrZXQgJiYgYy5sZW5ndGggPT09IDUpIHx8IChjWzBdID09PSAneCcgJiYgYy5sZW5ndGggPT09IDMpKSB7XG5cdFx0cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zbGljZSgxKSwgMTYpKTtcblx0fVxuXG5cdGlmICh1ICYmIGJyYWNrZXQpIHtcblx0XHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQoYy5zbGljZSgyLCAtMSksIDE2KSk7XG5cdH1cblxuXHRyZXR1cm4gRVNDQVBFUy5nZXQoYykgfHwgYztcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMobmFtZSwgYXJndW1lbnRzXykge1xuXHRjb25zdCByZXN1bHRzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IGFyZ3VtZW50c18udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovZyk7XG5cdGxldCBtYXRjaGVzO1xuXG5cdGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG5cdFx0Y29uc3QgbnVtYmVyID0gTnVtYmVyKGNodW5rKTtcblx0XHRpZiAoIU51bWJlci5pc05hTihudW1iZXIpKSB7XG5cdFx0XHRyZXN1bHRzLnB1c2gobnVtYmVyKTtcblx0XHR9IGVsc2UgaWYgKChtYXRjaGVzID0gY2h1bmsubWF0Y2goU1RSSU5HX1JFR0VYKSkpIHtcblx0XHRcdHJlc3VsdHMucHVzaChtYXRjaGVzWzJdLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCAobSwgZXNjYXBlLCBjaGFyYWN0ZXIpID0+IGVzY2FwZSA/IHVuZXNjYXBlKGVzY2FwZSkgOiBjaGFyYWN0ZXIpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIENoYWxrIHRlbXBsYXRlIHN0eWxlIGFyZ3VtZW50OiAke2NodW5rfSAoaW4gc3R5bGUgJyR7bmFtZX0nKWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0eWxlKHN0eWxlKSB7XG5cdFNUWUxFX1JFR0VYLmxhc3RJbmRleCA9IDA7XG5cblx0Y29uc3QgcmVzdWx0cyA9IFtdO1xuXHRsZXQgbWF0Y2hlcztcblxuXHR3aGlsZSAoKG1hdGNoZXMgPSBTVFlMRV9SRUdFWC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRjb25zdCBuYW1lID0gbWF0Y2hlc1sxXTtcblxuXHRcdGlmIChtYXRjaGVzWzJdKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gcGFyc2VBcmd1bWVudHMobmFtZSwgbWF0Y2hlc1syXSk7XG5cdFx0XHRyZXN1bHRzLnB1c2goW25hbWVdLmNvbmNhdChhcmdzKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdHMucHVzaChbbmFtZV0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpIHtcblx0Y29uc3QgZW5hYmxlZCA9IHt9O1xuXG5cdGZvciAoY29uc3QgbGF5ZXIgb2Ygc3R5bGVzKSB7XG5cdFx0Zm9yIChjb25zdCBzdHlsZSBvZiBsYXllci5zdHlsZXMpIHtcblx0XHRcdGVuYWJsZWRbc3R5bGVbMF1dID0gbGF5ZXIuaW52ZXJzZSA/IG51bGwgOiBzdHlsZS5zbGljZSgxKTtcblx0XHR9XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IGNoYWxrO1xuXHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlc10gb2YgT2JqZWN0LmVudHJpZXMoZW5hYmxlZCkpIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3R5bGVzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEoc3R5bGVOYW1lIGluIGN1cnJlbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gQ2hhbGsgc3R5bGU6ICR7c3R5bGVOYW1lfWApO1xuXHRcdH1cblxuXHRcdGN1cnJlbnQgPSBzdHlsZXMubGVuZ3RoID4gMCA/IGN1cnJlbnRbc3R5bGVOYW1lXSguLi5zdHlsZXMpIDogY3VycmVudFtzdHlsZU5hbWVdO1xuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gKGNoYWxrLCB0ZW1wb3JhcnkpID0+IHtcblx0Y29uc3Qgc3R5bGVzID0gW107XG5cdGNvbnN0IGNodW5rcyA9IFtdO1xuXHRsZXQgY2h1bmsgPSBbXTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuXHR0ZW1wb3JhcnkucmVwbGFjZShURU1QTEFURV9SRUdFWCwgKG0sIGVzY2FwZUNoYXJhY3RlciwgaW52ZXJzZSwgc3R5bGUsIGNsb3NlLCBjaGFyYWN0ZXIpID0+IHtcblx0XHRpZiAoZXNjYXBlQ2hhcmFjdGVyKSB7XG5cdFx0XHRjaHVuay5wdXNoKHVuZXNjYXBlKGVzY2FwZUNoYXJhY3RlcikpO1xuXHRcdH0gZWxzZSBpZiAoc3R5bGUpIHtcblx0XHRcdGNvbnN0IHN0cmluZyA9IGNodW5rLmpvaW4oJycpO1xuXHRcdFx0Y2h1bmsgPSBbXTtcblx0XHRcdGNodW5rcy5wdXNoKHN0eWxlcy5sZW5ndGggPT09IDAgPyBzdHJpbmcgOiBidWlsZFN0eWxlKGNoYWxrLCBzdHlsZXMpKHN0cmluZykpO1xuXHRcdFx0c3R5bGVzLnB1c2goe2ludmVyc2UsIHN0eWxlczogcGFyc2VTdHlsZShzdHlsZSl9KTtcblx0XHR9IGVsc2UgaWYgKGNsb3NlKSB7XG5cdFx0XHRpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGV4dHJhbmVvdXMgfSBpbiBDaGFsayB0ZW1wbGF0ZSBsaXRlcmFsJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNodW5rcy5wdXNoKGJ1aWxkU3R5bGUoY2hhbGssIHN0eWxlcykoY2h1bmsuam9pbignJykpKTtcblx0XHRcdGNodW5rID0gW107XG5cdFx0XHRzdHlsZXMucG9wKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNodW5rLnB1c2goY2hhcmFjdGVyKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNodW5rcy5wdXNoKGNodW5rLmpvaW4oJycpKTtcblxuXHRpZiAoc3R5bGVzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBlcnJNZXNzYWdlID0gYENoYWxrIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWlzc2luZyAke3N0eWxlcy5sZW5ndGh9IGNsb3NpbmcgYnJhY2tldCR7c3R5bGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSAoXFxgfVxcYClgO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJNZXNzYWdlKTtcblx0fVxuXG5cdHJldHVybiBjaHVua3Muam9pbignJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IGFuc2lTdHlsZXMgPSByZXF1aXJlKCdhbnNpLXN0eWxlcycpO1xuY29uc3Qge3N0ZG91dDogc3Rkb3V0Q29sb3IsIHN0ZGVycjogc3RkZXJyQ29sb3J9ID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcbmNvbnN0IHtcblx0c3RyaW5nUmVwbGFjZUFsbCxcblx0c3RyaW5nRW5jYXNlQ1JMRldpdGhGaXJzdEluZGV4XG59ID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vLyBgc3VwcG9ydHNDb2xvci5sZXZlbGAgXHUyMTkyIGBhbnNpU3R5bGVzLmNvbG9yW25hbWVdYCBtYXBwaW5nXG5jb25zdCBsZXZlbE1hcHBpbmcgPSBbXG5cdCdhbnNpJyxcblx0J2Fuc2knLFxuXHQnYW5zaTI1NicsXG5cdCdhbnNpMTZtJ1xuXTtcblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuY29uc3QgYXBwbHlPcHRpb25zID0gKG9iamVjdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLmxldmVsICYmICEoTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxldmVsKSAmJiBvcHRpb25zLmxldmVsID49IDAgJiYgb3B0aW9ucy5sZXZlbCA8PSAzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhlIGBsZXZlbGAgb3B0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGZyb20gMCB0byAzJyk7XG5cdH1cblxuXHQvLyBEZXRlY3QgbGV2ZWwgaWYgbm90IHNldCBtYW51YWxseVxuXHRjb25zdCBjb2xvckxldmVsID0gc3Rkb3V0Q29sb3IgPyBzdGRvdXRDb2xvci5sZXZlbCA6IDA7XG5cdG9iamVjdC5sZXZlbCA9IG9wdGlvbnMubGV2ZWwgPT09IHVuZGVmaW5lZCA/IGNvbG9yTGV2ZWwgOiBvcHRpb25zLmxldmVsO1xufTtcblxuY2xhc3MgQ2hhbGtDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG5cdFx0cmV0dXJuIGNoYWxrRmFjdG9yeShvcHRpb25zKTtcblx0fVxufVxuXG5jb25zdCBjaGFsa0ZhY3RvcnkgPSBvcHRpb25zID0+IHtcblx0Y29uc3QgY2hhbGsgPSB7fTtcblx0YXBwbHlPcHRpb25zKGNoYWxrLCBvcHRpb25zKTtcblxuXHRjaGFsay50ZW1wbGF0ZSA9ICguLi5hcmd1bWVudHNfKSA9PiBjaGFsa1RhZyhjaGFsay50ZW1wbGF0ZSwgLi4uYXJndW1lbnRzXyk7XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWxrLCBDaGFsay5wcm90b3R5cGUpO1xuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhbGsudGVtcGxhdGUsIGNoYWxrKTtcblxuXHRjaGFsay50ZW1wbGF0ZS5jb25zdHJ1Y3RvciA9ICgpID0+IHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BjaGFsay5jb25zdHJ1Y3RvcigpYCBpcyBkZXByZWNhdGVkLiBVc2UgYG5ldyBjaGFsay5JbnN0YW5jZSgpYCBpbnN0ZWFkLicpO1xuXHR9O1xuXG5cdGNoYWxrLnRlbXBsYXRlLkluc3RhbmNlID0gQ2hhbGtDbGFzcztcblxuXHRyZXR1cm4gY2hhbGsudGVtcGxhdGU7XG59O1xuXG5mdW5jdGlvbiBDaGFsayhvcHRpb25zKSB7XG5cdHJldHVybiBjaGFsa0ZhY3Rvcnkob3B0aW9ucyk7XG59XG5cbmZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGFuc2lTdHlsZXMpKSB7XG5cdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRoaXMsIGNyZWF0ZVN0eWxlcihzdHlsZS5vcGVuLCBzdHlsZS5jbG9zZSwgdGhpcy5fc3R5bGVyKSwgdGhpcy5faXNFbXB0eSk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3R5bGVOYW1lLCB7dmFsdWU6IGJ1aWxkZXJ9KTtcblx0XHRcdHJldHVybiBidWlsZGVyO1xuXHRcdH1cblx0fTtcbn1cblxuc3R5bGVzLnZpc2libGUgPSB7XG5cdGdldCgpIHtcblx0XHRjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0aGlzLCB0aGlzLl9zdHlsZXIsIHRydWUpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmlzaWJsZScsIHt2YWx1ZTogYnVpbGRlcn0pO1xuXHRcdHJldHVybiBidWlsZGVyO1xuXHR9XG59O1xuXG5jb25zdCB1c2VkTW9kZWxzID0gWydyZ2InLCAnaGV4JywgJ2tleXdvcmQnLCAnaHNsJywgJ2hzdicsICdod2InLCAnYW5zaScsICdhbnNpMjU2J107XG5cbmZvciAoY29uc3QgbW9kZWwgb2YgdXNlZE1vZGVscykge1xuXHRzdHlsZXNbbW9kZWxdID0ge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IHtsZXZlbH0gPSB0aGlzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmd1bWVudHNfKSB7XG5cdFx0XHRcdGNvbnN0IHN0eWxlciA9IGNyZWF0ZVN0eWxlcihhbnNpU3R5bGVzLmNvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5jb2xvci5jbG9zZSwgdGhpcy5fc3R5bGVyKTtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUJ1aWxkZXIodGhpcywgc3R5bGVyLCB0aGlzLl9pc0VtcHR5KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG5mb3IgKGNvbnN0IG1vZGVsIG9mIHVzZWRNb2RlbHMpIHtcblx0Y29uc3QgYmdNb2RlbCA9ICdiZycgKyBtb2RlbFswXS50b1VwcGVyQ2FzZSgpICsgbW9kZWwuc2xpY2UoMSk7XG5cdHN0eWxlc1tiZ01vZGVsXSA9IHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCB7bGV2ZWx9ID0gdGhpcztcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJndW1lbnRzXykge1xuXHRcdFx0XHRjb25zdCBzdHlsZXIgPSBjcmVhdGVTdHlsZXIoYW5zaVN0eWxlcy5iZ0NvbG9yW2xldmVsTWFwcGluZ1tsZXZlbF1dW21vZGVsXSguLi5hcmd1bWVudHNfKSwgYW5zaVN0eWxlcy5iZ0NvbG9yLmNsb3NlLCB0aGlzLl9zdHlsZXIpO1xuXHRcdFx0XHRyZXR1cm4gY3JlYXRlQnVpbGRlcih0aGlzLCBzdHlsZXIsIHRoaXMuX2lzRW1wdHkpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH07XG59XG5cbmNvbnN0IHByb3RvID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoKCkgPT4ge30sIHtcblx0Li4uc3R5bGVzLFxuXHRsZXZlbDoge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dlbmVyYXRvci5sZXZlbDtcblx0XHR9LFxuXHRcdHNldChsZXZlbCkge1xuXHRcdFx0dGhpcy5fZ2VuZXJhdG9yLmxldmVsID0gbGV2ZWw7XG5cdFx0fVxuXHR9XG59KTtcblxuY29uc3QgY3JlYXRlU3R5bGVyID0gKG9wZW4sIGNsb3NlLCBwYXJlbnQpID0+IHtcblx0bGV0IG9wZW5BbGw7XG5cdGxldCBjbG9zZUFsbDtcblx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0b3BlbkFsbCA9IG9wZW47XG5cdFx0Y2xvc2VBbGwgPSBjbG9zZTtcblx0fSBlbHNlIHtcblx0XHRvcGVuQWxsID0gcGFyZW50Lm9wZW5BbGwgKyBvcGVuO1xuXHRcdGNsb3NlQWxsID0gY2xvc2UgKyBwYXJlbnQuY2xvc2VBbGw7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZW4sXG5cdFx0Y2xvc2UsXG5cdFx0b3BlbkFsbCxcblx0XHRjbG9zZUFsbCxcblx0XHRwYXJlbnRcblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZUJ1aWxkZXIgPSAoc2VsZiwgX3N0eWxlciwgX2lzRW1wdHkpID0+IHtcblx0Y29uc3QgYnVpbGRlciA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0aWYgKGlzQXJyYXkoYXJndW1lbnRzX1swXSkgJiYgaXNBcnJheShhcmd1bWVudHNfWzBdLnJhdykpIHtcblx0XHRcdC8vIENhbGxlZCBhcyBhIHRlbXBsYXRlIGxpdGVyYWwsIGZvciBleGFtcGxlOiBjaGFsay5yZWRgMiArIDMgPSB7Ym9sZCAkezIrM319YFxuXHRcdFx0cmV0dXJuIGFwcGx5U3R5bGUoYnVpbGRlciwgY2hhbGtUYWcoYnVpbGRlciwgLi4uYXJndW1lbnRzXykpO1xuXHRcdH1cblxuXHRcdC8vIFNpbmdsZSBhcmd1bWVudCBpcyBob3QgcGF0aCwgaW1wbGljaXQgY29lcmNpb24gaXMgZmFzdGVyIHRoYW4gYW55dGhpbmdcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0XHRyZXR1cm4gYXBwbHlTdHlsZShidWlsZGVyLCAoYXJndW1lbnRzXy5sZW5ndGggPT09IDEpID8gKCcnICsgYXJndW1lbnRzX1swXSkgOiBhcmd1bWVudHNfLmpvaW4oJyAnKSk7XG5cdH07XG5cblx0Ly8gV2UgYWx0ZXIgdGhlIHByb3RvdHlwZSBiZWNhdXNlIHdlIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpc1xuXHQvLyBubyB3YXkgdG8gY3JlYXRlIGEgZnVuY3Rpb24gd2l0aCBhIGRpZmZlcmVudCBwcm90b3R5cGVcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1aWxkZXIsIHByb3RvKTtcblxuXHRidWlsZGVyLl9nZW5lcmF0b3IgPSBzZWxmO1xuXHRidWlsZGVyLl9zdHlsZXIgPSBfc3R5bGVyO1xuXHRidWlsZGVyLl9pc0VtcHR5ID0gX2lzRW1wdHk7XG5cblx0cmV0dXJuIGJ1aWxkZXI7XG59O1xuXG5jb25zdCBhcHBseVN0eWxlID0gKHNlbGYsIHN0cmluZykgPT4ge1xuXHRpZiAoc2VsZi5sZXZlbCA8PSAwIHx8ICFzdHJpbmcpIHtcblx0XHRyZXR1cm4gc2VsZi5faXNFbXB0eSA/ICcnIDogc3RyaW5nO1xuXHR9XG5cblx0bGV0IHN0eWxlciA9IHNlbGYuX3N0eWxlcjtcblxuXHRpZiAoc3R5bGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0Y29uc3Qge29wZW5BbGwsIGNsb3NlQWxsfSA9IHN0eWxlcjtcblx0aWYgKHN0cmluZy5pbmRleE9mKCdcXHUwMDFCJykgIT09IC0xKSB7XG5cdFx0d2hpbGUgKHN0eWxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBSZXBsYWNlIGFueSBpbnN0YW5jZXMgYWxyZWFkeSBwcmVzZW50IHdpdGggYSByZS1vcGVuaW5nIGNvZGVcblx0XHRcdC8vIG90aGVyd2lzZSBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdW50aWwgc2FpZCBjbG9zaW5nIGNvZGVcblx0XHRcdC8vIHdpbGwgYmUgY29sb3JlZCwgYW5kIHRoZSByZXN0IHdpbGwgc2ltcGx5IGJlICdwbGFpbicuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmdSZXBsYWNlQWxsKHN0cmluZywgc3R5bGVyLmNsb3NlLCBzdHlsZXIub3Blbik7XG5cblx0XHRcdHN0eWxlciA9IHN0eWxlci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gV2UgY2FuIG1vdmUgYm90aCBuZXh0IGFjdGlvbnMgb3V0IG9mIGxvb3AsIGJlY2F1c2UgcmVtYWluaW5nIGFjdGlvbnMgaW4gbG9vcCB3b24ndCBoYXZlXG5cdC8vIGFueS92aXNpYmxlIGVmZmVjdCBvbiBwYXJ0cyB3ZSBhZGQgaGVyZS4gQ2xvc2UgdGhlIHN0eWxpbmcgYmVmb3JlIGEgbGluZWJyZWFrIGFuZCByZW9wZW5cblx0Ly8gYWZ0ZXIgbmV4dCBsaW5lIHRvIGZpeCBhIGJsZWVkIGlzc3VlIG9uIG1hY09TOiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGsvcHVsbC85MlxuXHRjb25zdCBsZkluZGV4ID0gc3RyaW5nLmluZGV4T2YoJ1xcbicpO1xuXHRpZiAobGZJbmRleCAhPT0gLTEpIHtcblx0XHRzdHJpbmcgPSBzdHJpbmdFbmNhc2VDUkxGV2l0aEZpcnN0SW5kZXgoc3RyaW5nLCBjbG9zZUFsbCwgb3BlbkFsbCwgbGZJbmRleCk7XG5cdH1cblxuXHRyZXR1cm4gb3BlbkFsbCArIHN0cmluZyArIGNsb3NlQWxsO1xufTtcblxubGV0IHRlbXBsYXRlO1xuY29uc3QgY2hhbGtUYWcgPSAoY2hhbGssIC4uLnN0cmluZ3MpID0+IHtcblx0Y29uc3QgW2ZpcnN0U3RyaW5nXSA9IHN0cmluZ3M7XG5cblx0aWYgKCFpc0FycmF5KGZpcnN0U3RyaW5nKSB8fCAhaXNBcnJheShmaXJzdFN0cmluZy5yYXcpKSB7XG5cdFx0Ly8gSWYgY2hhbGsoKSB3YXMgY2FsbGVkIGJ5IGl0c2VsZiBvciB3aXRoIGEgc3RyaW5nLFxuXHRcdC8vIHJldHVybiB0aGUgc3RyaW5nIGl0c2VsZiBhcyBhIHN0cmluZy5cblx0XHRyZXR1cm4gc3RyaW5ncy5qb2luKCcgJyk7XG5cdH1cblxuXHRjb25zdCBhcmd1bWVudHNfID0gc3RyaW5ncy5zbGljZSgxKTtcblx0Y29uc3QgcGFydHMgPSBbZmlyc3RTdHJpbmcucmF3WzBdXTtcblxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0cGFydHMucHVzaChcblx0XHRcdFN0cmluZyhhcmd1bWVudHNfW2kgLSAxXSkucmVwbGFjZSgvW3t9XFxcXF0vZywgJ1xcXFwkJicpLFxuXHRcdFx0U3RyaW5nKGZpcnN0U3RyaW5nLnJhd1tpXSlcblx0XHQpO1xuXHR9XG5cblx0aWYgKHRlbXBsYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHR0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGVzJyk7XG5cdH1cblxuXHRyZXR1cm4gdGVtcGxhdGUoY2hhbGssIHBhcnRzLmpvaW4oJycpKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENoYWxrLnByb3RvdHlwZSwgc3R5bGVzKTtcblxuY29uc3QgY2hhbGsgPSBDaGFsaygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbmNoYWxrLnN1cHBvcnRzQ29sb3IgPSBzdGRvdXRDb2xvcjtcbmNoYWxrLnN0ZGVyciA9IENoYWxrKHtsZXZlbDogc3RkZXJyQ29sb3IgPyBzdGRlcnJDb2xvci5sZXZlbCA6IDB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5jaGFsay5zdGRlcnIuc3VwcG9ydHNDb2xvciA9IHN0ZGVyckNvbG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNoYWxrO1xuIiwgIi8vIHNvdXJjZSBvZiBpbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9yZXF1aXJlLWZvb2wtd2VicGFja1xudmFyIHJlcXVpcmVGb29sV2VicGFjayA9IGV2YWwoXG4gICAgJ3R5cGVvZiByZXF1aXJlICE9PSBcXCd1bmRlZmluZWRcXCcgJyArXG4gICAgJz8gcmVxdWlyZSAnICtcbiAgICAnOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcihcXCdNb2R1bGUgXCIgKyBtb2R1bGUgKyBcIiBub3QgZm91bmQuXFwnKSB9J1xuKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRm9vbFdlYnBhY2s7XG4iLCAidmFyIHJlcXVpcmVGb29sV2VicGFjayA9IHJlcXVpcmUoJy4vcmVxdWlyZUZvb2xXZWJwYWNrJyk7XG5cbi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ZsZXhkaW5lc2gvYnJvd3Nlci1vci1ub2RlXG52YXIgaXNOb2RlID0gZnVuY3Rpb24gKG5vZGVQcm9jZXNzKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG5vZGVQcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5vZGVQcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcbiAgICBub2RlUHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcbiAgKTtcbn1cbm1vZHVsZS5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZVxuXG4vLyBkZXRlcm1pbmVzIHRoZSBKYXZhU2NyaXB0IHBsYXRmb3JtOiBicm93c2VyIG9yIG5vZGVcbm1vZHVsZS5leHBvcnRzLnBsYXRmb3JtID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIGlzTm9kZShwcm9jZXNzKVxuICA/ICdub2RlJ1xuICA6ICdicm93c2VyJztcblxuLy8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb2RlIGlzIHJ1bm5pbmcgaW4gbWFpbiB0aHJlYWQgb3Igbm90XG4vLyBub3RlIHRoYXQgaW4gbm9kZS5qcyB3ZSBoYXZlIHRvIGNoZWNrIGJvdGggd29ya2VyX3RocmVhZCBhbmQgY2hpbGRfcHJvY2Vzc1xudmFyIHdvcmtlcl90aHJlYWRzID0gdHJ5UmVxdWlyZUZvb2xXZWJwYWNrKCd3b3JrZXJfdGhyZWFkcycpO1xubW9kdWxlLmV4cG9ydHMuaXNNYWluVGhyZWFkID0gbW9kdWxlLmV4cG9ydHMucGxhdGZvcm0gPT09ICdub2RlJ1xuICA/ICgoIXdvcmtlcl90aHJlYWRzIHx8IHdvcmtlcl90aHJlYWRzLmlzTWFpblRocmVhZCkgJiYgIXByb2Nlc3MuY29ubmVjdGVkKVxuICA6IHR5cGVvZiBXaW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgY3B1cyBhdmFpbGFibGVcbm1vZHVsZS5leHBvcnRzLmNwdXMgPSBtb2R1bGUuZXhwb3J0cy5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInXG4gID8gc2VsZi5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeVxuICA6IHJlcXVpcmVGb29sV2VicGFjaygnb3MnKS5jcHVzKCkubGVuZ3RoO1xuXG5mdW5jdGlvbiB0cnlSZXF1aXJlRm9vbFdlYnBhY2sgKG1vZHVsZSkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2sobW9kdWxlKTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFByb21pc2VcbiAqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9SdWJhWGEvODUwMTM1OSBmcm9tIFJ1YmFYYSA8dHJhc2hAcnViYXhhLm9yZz5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyICAgQ2FsbGVkIGFzIGhhbmRsZXIocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pXG4gKiBAcGFyYW0ge1Byb21pc2V9IFtwYXJlbnRdICAgUGFyZW50IHByb21pc2UgZm9yIHByb3BhZ2F0aW9uIG9mIGNhbmNlbCBhbmQgdGltZW91dFxuICovXG5mdW5jdGlvbiBQcm9taXNlKGhhbmRsZXIsIHBhcmVudCkge1xuICB2YXIgbWUgPSB0aGlzO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHBhcmFtZXRlciBoYW5kbGVyKHJlc29sdmUsIHJlamVjdCkgbWlzc2luZycpO1xuICB9XG5cbiAgdmFyIF9vblN1Y2Nlc3MgPSBbXTtcbiAgdmFyIF9vbkZhaWwgPSBbXTtcblxuICAvLyBzdGF0dXNcbiAgdGhpcy5yZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLnJlamVjdGVkID0gZmFsc2U7XG4gIHRoaXMucGVuZGluZyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgb25TdWNjZXNzIGFuZCBvbkZhaWwgY2FsbGJhY2tzOiBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gICAqIE9uY2UgdGhlIHByb21pc2UgaXMgcmVzb2x2ZSwgdGhlIGZ1bmN0aW9uIF9wcm9taXNlIGlzIHJlcGxhY2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uU3VjY2Vzc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBfcHJvY2VzcyA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIF9vblN1Y2Nlc3MucHVzaChvblN1Y2Nlc3MpO1xuICAgIF9vbkZhaWwucHVzaChvbkZhaWwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gb25TdWNjZXNzIGNhbGxiYWNrIGFuZCBvcHRpb25hbGx5IGFuIG9uRmFpbCBjYWxsYmFjayB0byB0aGUgUHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblN1Y2Nlc3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRmFpbF1cbiAgICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2VcbiAgICovXG4gIHRoaXMudGhlbiA9IGZ1bmN0aW9uIChvblN1Y2Nlc3MsIG9uRmFpbCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcyA9IG9uU3VjY2VzcyA/IF90aGVuKG9uU3VjY2VzcywgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlc29sdmU7XG4gICAgICB2YXIgZiA9IG9uRmFpbCAgICA/IF90aGVuKG9uRmFpbCwgICAgcmVzb2x2ZSwgcmVqZWN0KSA6IHJlamVjdDtcblxuICAgICAgX3Byb2Nlc3MocywgZik7XG4gICAgfSwgbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Kn0gcmVzdWx0XG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIHZhciBfcmVzb2x2ZSA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSB0cnVlO1xuICAgIG1lLnJlamVjdGVkID0gZmFsc2U7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uU3VjY2Vzcy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4ocmVzdWx0KTtcbiAgICB9KTtcblxuICAgIF9wcm9jZXNzID0gZnVuY3Rpb24gKG9uU3VjY2Vzcywgb25GYWlsKSB7XG4gICAgICBvblN1Y2Nlc3MocmVzdWx0KTtcbiAgICB9O1xuXG4gICAgX3Jlc29sdmUgPSBfcmVqZWN0ID0gZnVuY3Rpb24gKCkgeyB9O1xuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIHByb21pc2VcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgKi9cbiAgdmFyIF9yZWplY3QgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAvLyB1cGRhdGUgc3RhdHVzXG4gICAgbWUucmVzb2x2ZWQgPSBmYWxzZTtcbiAgICBtZS5yZWplY3RlZCA9IHRydWU7XG4gICAgbWUucGVuZGluZyA9IGZhbHNlO1xuXG4gICAgX29uRmFpbC5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgZm4oZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgX3Byb2Nlc3MgPSBmdW5jdGlvbiAob25TdWNjZXNzLCBvbkZhaWwpIHtcbiAgICAgIG9uRmFpbChlcnJvcik7XG4gICAgfTtcblxuICAgIF9yZXNvbHZlID0gX3JlamVjdCA9IGZ1bmN0aW9uICgpIHsgfVxuXG4gICAgcmV0dXJuIG1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW5jZWwgdGUgcHJvbWlzZS4gVGhpcyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoIGEgQ2FuY2VsbGF0aW9uRXJyb3JcbiAgICogQHJldHVybnMge1Byb21pc2V9IHNlbGZcbiAgICovXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5jYW5jZWwoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBfcmVqZWN0KG5ldyBDYW5jZWxsYXRpb25FcnJvcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCBhIHRpbWVvdXQgZm9yIHRoZSBwcm9taXNlLiBJZiB0aGUgcHJvbWlzZSBpcyBub3QgcmVzb2x2ZWQgd2l0aGluXG4gICAqIHRoZSB0aW1lLCB0aGUgcHJvbWlzZSB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgYSBUaW1lb3V0RXJyb3IgaXMgdGhyb3duLlxuICAgKiBJZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBpbiB0aW1lLCB0aGUgdGltZW91dCBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgICAgIERlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gc2VsZlxuICAgKi9cbiAgdGhpcy50aW1lb3V0ID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnRpbWVvdXQoZGVsYXkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfcmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IoJ1Byb21pc2UgdGltZWQgb3V0IGFmdGVyICcgKyBkZWxheSArICcgbXMnKSk7XG4gICAgICB9LCBkZWxheSk7XG5cbiAgICAgIG1lLmFsd2F5cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWU7XG4gIH07XG5cbiAgLy8gYXR0YWNoIGhhbmRsZXIgcGFzc2luZyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9uc1xuICBoYW5kbGVyKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICBfcmVzb2x2ZShyZXN1bHQpO1xuICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBfcmVqZWN0KGVycm9yKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBnaXZlbiBjYWxsYmFjaywgdGhlbiBjYWxsIHJlc29sdmUvcmVqZWN0IGJhc2VkIG9uIHRoZSByZXR1cm5lZCByZXN1bHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF90aGVuKGNhbGxiYWNrLCByZXNvbHZlLCByZWplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlcyA9IGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcmVzWydjYXRjaCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG1ldGhvZCByZXR1cm5lZCBhIHByb21pc2VcbiAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gb25GYWlsIGNhbGxiYWNrIHRvIHRoZSBQcm9taXNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhaWxcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24gKG9uRmFpbCkge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uRmFpbCk7XG59O1xuXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgY2FsbGJhY2spXG4vLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgUHJvbWlzZS5jYXRjaChFcnJvciwgRXJyb3IsIGNhbGxiYWNrKVxuXG4vKipcbiAqIEV4ZWN1dGUgZ2l2ZW4gY2FsbGJhY2sgd2hlbiB0aGUgcHJvbWlzZSBlaXRoZXIgcmVzb2x2ZXMgb3IgcmVqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5Qcm9taXNlLnByb3RvdHlwZS5hbHdheXMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIHRoaXMudGhlbihmbiwgZm4pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIHByb3ZpZGVkIHByb21pc2VzIGFyZSByZXNvbHZlZCxcbiAqIGFuZCBmYWlscyB3aGVuIGFueSBvZiB0aGUgcHJvbWlzZXMgcmVzb2x2ZXMuXG4gKiBAcGFyYW0ge1Byb21pc2VbXX0gcHJvbWlzZXNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlXG4gKi9cblByb21pc2UuYWxsID0gZnVuY3Rpb24gKHByb21pc2VzKXtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVtYWluaW5nID0gcHJvbWlzZXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gW107XG5cbiAgICBpZiAocmVtYWluaW5nKSB7XG4gICAgICBwcm9taXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7XG4gICAgICAgIHAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdDtcbiAgICAgICAgICByZW1haW5pbmctLTtcbiAgICAgICAgICBpZiAocmVtYWluaW5nID09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZW1haW5pbmcgPSAwO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9taXNlIHJlc29sdmVyXG4gKiBAcmV0dXJucyB7e3Byb21pc2U6IFByb21pc2UsIHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9ufX0gcmVzb2x2ZXJcbiAqL1xuUHJvbWlzZS5kZWZlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlc29sdmVyID0ge307XG5cbiAgcmVzb2x2ZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXNvbHZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICByZXNvbHZlci5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHJldHVybiByZXNvbHZlcjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FuY2VsbGF0aW9uIGVycm9yXG4gKiBAcGFyYW0ge1N0cmluZ30gW21lc3NhZ2VdXG4gKiBAZXh0ZW5kcyBFcnJvclxuICovXG5mdW5jdGlvbiBDYW5jZWxsYXRpb25FcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3Byb21pc2UgY2FuY2VsbGVkJztcbiAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG59XG5cbkNhbmNlbGxhdGlvbkVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQ2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5DYW5jZWxsYXRpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdDYW5jZWxsYXRpb25FcnJvcic7XG5cblByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3IgPSBDYW5jZWxsYXRpb25FcnJvcjtcblxuXG4vKipcbiAqIENyZWF0ZSBhIHRpbWVvdXQgZXJyb3JcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWVzc2FnZV1cbiAqIEBleHRlbmRzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIFRpbWVvdXRFcnJvcihtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbn1cblxuVGltZW91dEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuVGltZW91dEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cblByb21pc2UuVGltZW91dEVycm9yID0gVGltZW91dEVycm9yO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICIvKipcbiAqIGVtYmVkZGVkV29ya2VyLmpzIGNvbnRhaW5zIGFuIGVtYmVkZGVkIHZlcnNpb24gb2Ygd29ya2VyLmpzLlxuICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLFxuICogY2hhbmdlcyBtYWRlIGluIHRoaXMgZmlsZSB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IFwiIWZ1bmN0aW9uKCl7dmFyIF9fd2VicGFja19leHBvcnRzX189e307IWZ1bmN0aW9uKCl7dmFyIGV4cG9ydHM9X193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fO2Z1bmN0aW9uIF90eXBlb2Yocil7cmV0dXJuKF90eXBlb2Y9XFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmXFxcInN5bWJvbFxcXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByfTpmdW5jdGlvbihyKXtyZXR1cm4gciYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIFN5bWJvbCYmci5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmciE9PVN5bWJvbC5wcm90b3R5cGU/XFxcInN5bWJvbFxcXCI6dHlwZW9mIHJ9KShyKX12YXIgcmVxdWlyZUZvb2xXZWJwYWNrPWV2YWwoXFxcInR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyA/IHJlcXVpcmUgOiBmdW5jdGlvbiAobW9kdWxlKSB7IHRocm93IG5ldyBFcnJvcignTW9kdWxlIFxcXFxcXFwiICsgbW9kdWxlICsgXFxcXFxcXCIgbm90IGZvdW5kLicpIH1cXFwiKSxURVJNSU5BVEVfTUVUSE9EX0lEPVxcXCJfX3dvcmtlcnBvb2wtdGVybWluYXRlX19cXFwiLHdvcmtlcj17ZXhpdDpmdW5jdGlvbigpe319LFdvcmtlclRocmVhZHMscGFyZW50UG9ydDtpZihcXFwidW5kZWZpbmVkXFxcIiE9dHlwZW9mIHNlbGYmJlxcXCJmdW5jdGlvblxcXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmXFxcImZ1bmN0aW9uXFxcIj09dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIpd29ya2VyLm9uPWZ1bmN0aW9uKHIsZSl7YWRkRXZlbnRMaXN0ZW5lcihyLGZ1bmN0aW9uKHIpe2Uoci5kYXRhKX0pfSx3b3JrZXIuc2VuZD1mdW5jdGlvbihyKXtwb3N0TWVzc2FnZShyKX07ZWxzZXtpZihcXFwidW5kZWZpbmVkXFxcIj09dHlwZW9mIHByb2Nlc3MpdGhyb3cgbmV3IEVycm9yKFxcXCJTY3JpcHQgbXVzdCBiZSBleGVjdXRlZCBhcyBhIHdvcmtlclxcXCIpO3RyeXtXb3JrZXJUaHJlYWRzPXJlcXVpcmVGb29sV2VicGFjayhcXFwid29ya2VyX3RocmVhZHNcXFwiKX1jYXRjaChlcnJvcil7aWYoXFxcIm9iamVjdFxcXCIhPT1fdHlwZW9mKGVycm9yKXx8bnVsbD09PWVycm9yfHxcXFwiTU9EVUxFX05PVF9GT1VORFxcXCIhPT1lcnJvci5jb2RlKXRocm93IGVycm9yfVdvcmtlclRocmVhZHMmJm51bGwhPT1Xb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ/KHBhcmVudFBvcnQ9V29ya2VyVGhyZWFkcy5wYXJlbnRQb3J0LHdvcmtlci5zZW5kPXBhcmVudFBvcnQucG9zdE1lc3NhZ2UuYmluZChwYXJlbnRQb3J0KSx3b3JrZXIub249cGFyZW50UG9ydC5vbi5iaW5kKHBhcmVudFBvcnQpKTood29ya2VyLm9uPXByb2Nlc3Mub24uYmluZChwcm9jZXNzKSx3b3JrZXIuc2VuZD1wcm9jZXNzLnNlbmQuYmluZChwcm9jZXNzKSx3b3JrZXIub24oXFxcImRpc2Nvbm5lY3RcXFwiLGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KDEpfSksd29ya2VyLmV4aXQ9cHJvY2Vzcy5leGl0LmJpbmQocHJvY2VzcykpfWZ1bmN0aW9uIGNvbnZlcnRFcnJvcihvKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobykucmVkdWNlKGZ1bmN0aW9uKHIsZSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse3ZhbHVlOm9bZV0sZW51bWVyYWJsZTohMH0pfSx7fSl9ZnVuY3Rpb24gaXNQcm9taXNlKHIpe3JldHVybiByJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci50aGVuJiZcXFwiZnVuY3Rpb25cXFwiPT10eXBlb2Ygci5jYXRjaH13b3JrZXIubWV0aG9kcz17fSx3b3JrZXIubWV0aG9kcy5ydW49ZnVuY3Rpb24ocixlKXtyPW5ldyBGdW5jdGlvbihcXFwicmV0dXJuIChcXFwiK3IrXFxcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcXFwiKTtyZXR1cm4gci5hcHBseShyLGUpfSx3b3JrZXIubWV0aG9kcy5tZXRob2RzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHdvcmtlci5tZXRob2RzKX07dmFyIGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbDt3b3JrZXIub24oXFxcIm1lc3NhZ2VcXFwiLGZ1bmN0aW9uKGUpe2lmKGU9PT1URVJNSU5BVEVfTUVUSE9EX0lEKXJldHVybiB3b3JrZXIuZXhpdCgwKTt0cnl7dmFyIHI9d29ya2VyLm1ldGhvZHNbZS5tZXRob2RdO2lmKCFyKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXFxcIicrZS5tZXRob2QrJ1xcXCInKTtjdXJyZW50UmVxdWVzdElkPWUuaWQ7dmFyIG89ci5hcHBseShyLGUucGFyYW1zKTtpc1Byb21pc2Uobyk/by50aGVuKGZ1bmN0aW9uKHIpe3dvcmtlci5zZW5kKHtpZDplLmlkLHJlc3VsdDpyLGVycm9yOm51bGx9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KS5jYXRjaChmdW5jdGlvbihyKXt3b3JrZXIuc2VuZCh7aWQ6ZS5pZCxyZXN1bHQ6bnVsbCxlcnJvcjpjb252ZXJ0RXJyb3Iocil9KSxjdXJyZW50UmVxdWVzdElkPW51bGx9KTood29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om8sZXJyb3I6bnVsbH0pLGN1cnJlbnRSZXF1ZXN0SWQ9bnVsbCl9Y2F0Y2gocil7d29ya2VyLnNlbmQoe2lkOmUuaWQscmVzdWx0Om51bGwsZXJyb3I6Y29udmVydEVycm9yKHIpfSl9fSksd29ya2VyLnJlZ2lzdGVyPWZ1bmN0aW9uKHIpe2lmKHIpZm9yKHZhciBlIGluIHIpci5oYXNPd25Qcm9wZXJ0eShlKSYmKHdvcmtlci5tZXRob2RzW2VdPXJbZV0pO3dvcmtlci5zZW5kKFxcXCJyZWFkeVxcXCIpfSx3b3JrZXIuZW1pdD1mdW5jdGlvbihyKXtjdXJyZW50UmVxdWVzdElkJiZ3b3JrZXIuc2VuZCh7aWQ6Y3VycmVudFJlcXVlc3RJZCxpc0V2ZW50OiEwLHBheWxvYWQ6cn0pfSxfX3dlYnBhY2tfdW51c2VkX2V4cG9ydF9fPXdvcmtlci5yZWdpc3Rlcix3b3JrZXIuZW1pdH0oKX0oKTtcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBQcm9taXNlID0gcmVxdWlyZSgnLi9Qcm9taXNlJyk7XG52YXIgZW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL2Vudmlyb25tZW50Jyk7XG52YXIgcmVxdWlyZUZvb2xXZWJwYWNrID0gcmVxdWlyZSgnLi9yZXF1aXJlRm9vbFdlYnBhY2snKTtcblxuLyoqXG4gKiBTcGVjaWFsIG1lc3NhZ2Ugc2VudCBieSBwYXJlbnQgd2hpY2ggY2F1c2VzIGEgY2hpbGQgcHJvY2VzcyB3b3JrZXIgdG8gdGVybWluYXRlIGl0c2VsZi5cbiAqIE5vdCBhIFwibWVzc2FnZSBvYmplY3RcIjsgdGhpcyBzdHJpbmcgaXMgdGhlIGVudGlyZSBtZXNzYWdlLlxuICovXG52YXIgVEVSTUlOQVRFX01FVEhPRF9JRCA9ICdfX3dvcmtlcnBvb2wtdGVybWluYXRlX18nO1xuXG4vKipcbiAqIElmIHNlbmRpbmcgYFRFUk1JTkFURV9NRVRIT0RfSURgIGRvZXMgbm90IGNhdXNlIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGV4aXQgaW4gdGhpcyBtYW55IG1pbGxpc2Vjb25kcyxcbiAqIGZvcmNlLWtpbGwgdGhlIGNoaWxkIHByb2Nlc3MuXG4gKi9cbnZhciBDSElMRF9QUk9DRVNTX0VYSVRfVElNRU9VVCA9IDEwMDA7XG5cbmZ1bmN0aW9uIGVuc3VyZVdvcmtlclRocmVhZHMoKSB7XG4gIHZhciBXb3JrZXJUaHJlYWRzID0gdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMoKVxuICBpZiAoIVdvcmtlclRocmVhZHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2w6IHdvcmtlclR5cGUgPSBcXCd0aHJlYWRcXCcgaXMgbm90IHN1cHBvcnRlZCwgTm9kZSA+PSAxMS43LjAgcmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIFdvcmtlclRocmVhZHM7XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgV29ya2VyIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlclxuZnVuY3Rpb24gZW5zdXJlV2ViV29ya2VyKCkge1xuICAvLyBXb3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBQaGFudG9tSlMgKE9yIFF0V2Via2l0KTogaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTQ1MzRcbiAgaWYgKHR5cGVvZiBXb3JrZXIgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBXb3JrZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBXb3JrZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyUG9vbDogV2ViIFdvcmtlcnMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVJlcXVpcmVXb3JrZXJUaHJlYWRzKCkge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlRm9vbFdlYnBhY2soJ3dvcmtlcl90aHJlYWRzJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvci5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIC8vIG5vIHdvcmtlcl90aHJlYWRzIGF2YWlsYWJsZSAob2xkIHZlcnNpb24gb2Ygbm9kZS5qcylcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuLy8gZ2V0IHRoZSBkZWZhdWx0IHdvcmtlciBzY3JpcHRcbmZ1bmN0aW9uIGdldERlZmF1bHRXb3JrZXIoKSB7XG4gIGlmIChlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgLy8gdGVzdCB3aGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIGFsbCBmZWF0dXJlcyB0aGF0IHdlIG5lZWRcbiAgICBpZiAodHlwZW9mIEJsb2IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jsb2Igbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5VUkwgfHwgdHlwZW9mIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTC5jcmVhdGVPYmplY3RVUkwgbm90IHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcicpO1xuICAgIH1cblxuICAgIC8vIHVzZSBlbWJlZGRlZCB3b3JrZXIuanNcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtyZXF1aXJlKCcuL2dlbmVyYXRlZC9lbWJlZGRlZFdvcmtlcicpXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XG4gICAgcmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIHVzZSBleHRlcm5hbCB3b3JrZXIuanMgaW4gY3VycmVudCBkaXJlY3RvcnlcbiAgICByZXR1cm4gX19kaXJuYW1lICsgJy93b3JrZXIuanMnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwV29ya2VyKHNjcmlwdCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAnd2ViJykgeyAvLyBicm93c2VyIG9ubHlcbiAgICBlbnN1cmVXZWJXb3JrZXIoKTtcbiAgICByZXR1cm4gc2V0dXBCcm93c2VyV29ya2VyKHNjcmlwdCwgV29ya2VyKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7IC8vIG5vZGUuanMgb25seVxuICAgIFdvcmtlclRocmVhZHMgPSBlbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy53b3JrZXJUeXBlID09PSAncHJvY2VzcycgfHwgIW9wdGlvbnMud29ya2VyVHlwZSkgeyAvLyBub2RlLmpzIG9ubHlcbiAgICByZXR1cm4gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgcmVzb2x2ZUZvcmtPcHRpb25zKG9wdGlvbnMpLCByZXF1aXJlRm9vbFdlYnBhY2soJ2NoaWxkX3Byb2Nlc3MnKSk7XG4gIH0gZWxzZSB7IC8vIG9wdGlvbnMud29ya2VyVHlwZSA9PT0gJ2F1dG8nIG9yIHVuZGVmaW5lZFxuICAgIGlmIChlbnZpcm9ubWVudC5wbGF0Zm9ybSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgICBlbnN1cmVXZWJXb3JrZXIoKTtcbiAgICAgIHJldHVybiBzZXR1cEJyb3dzZXJXb3JrZXIoc2NyaXB0LCBXb3JrZXIpO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gZW52aXJvbm1lbnQucGxhdGZvcm0gPT09ICdub2RlJ1xuICAgICAgdmFyIFdvcmtlclRocmVhZHMgPSB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcygpO1xuICAgICAgaWYgKFdvcmtlclRocmVhZHMpIHtcbiAgICAgICAgcmV0dXJuIHNldHVwV29ya2VyVGhyZWFkV29ya2VyKHNjcmlwdCwgV29ya2VyVGhyZWFkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgcmVzb2x2ZUZvcmtPcHRpb25zKG9wdGlvbnMpLCByZXF1aXJlRm9vbFdlYnBhY2soJ2NoaWxkX3Byb2Nlc3MnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwQnJvd3NlcldvcmtlcihzY3JpcHQsIFdvcmtlcikge1xuICAvLyBjcmVhdGUgdGhlIHdlYiB3b3JrZXJcbiAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoc2NyaXB0KTtcblxuICB3b3JrZXIuaXNCcm93c2VyV29ya2VyID0gdHJ1ZTtcbiAgLy8gYWRkIG5vZGUuanMgQVBJIHRvIHRoZSB3ZWIgd29ya2VyXG4gIHdvcmtlci5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgIH0pO1xuICB9O1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcbiAgcmV0dXJuIHdvcmtlcjtcbn1cblxuZnVuY3Rpb24gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXIoc2NyaXB0LCBXb3JrZXJUaHJlYWRzKSB7XG4gIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyVGhyZWFkcy5Xb3JrZXIoc2NyaXB0LCB7XG4gICAgc3Rkb3V0OiBmYWxzZSwgLy8gYXV0b21hdGljYWxseSBwaXBlIHdvcmtlci5TVERPVVQgdG8gcHJvY2Vzcy5TVERPVVRcbiAgICBzdGRlcnI6IGZhbHNlICAvLyBhdXRvbWF0aWNhbGx5IHBpcGUgd29ya2VyLlNUREVSUiB0byBwcm9jZXNzLlNUREVSUlxuICB9KTtcbiAgd29ya2VyLmlzV29ya2VyVGhyZWFkID0gdHJ1ZTtcbiAgLy8gbWFrZSB0aGUgd29ya2VyIG1pbWljIGEgY2hpbGRfcHJvY2Vzc1xuICB3b3JrZXIuc2VuZCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICB9O1xuXG4gIHdvcmtlci5raWxsID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXJtaW5hdGUoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICB3b3JrZXIuZGlzY29ubmVjdCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGVybWluYXRlKCk7XG4gIH07XG5cbiAgcmV0dXJuIHdvcmtlcjtcbn1cblxuZnVuY3Rpb24gc2V0dXBQcm9jZXNzV29ya2VyKHNjcmlwdCwgb3B0aW9ucywgY2hpbGRfcHJvY2Vzcykge1xuICAvLyBubyBXb3JrZXJUaHJlYWRzLCBmYWxsYmFjayB0byBzdWItcHJvY2VzcyBiYXNlZCB3b3JrZXJzXG4gIHZhciB3b3JrZXIgPSBjaGlsZF9wcm9jZXNzLmZvcmsoXG4gICAgc2NyaXB0LFxuICAgIG9wdGlvbnMuZm9ya0FyZ3MsXG4gICAgb3B0aW9ucy5mb3JrT3B0c1xuICApO1xuXG4gIHdvcmtlci5pc0NoaWxkUHJvY2VzcyA9IHRydWU7XG4gIHJldHVybiB3b3JrZXI7XG59XG5cbi8vIGFkZCBkZWJ1ZyBmbGFncyB0byBjaGlsZCBwcm9jZXNzZXMgaWYgdGhlIG5vZGUgaW5zcGVjdG9yIGlzIGFjdGl2ZVxuZnVuY3Rpb24gcmVzb2x2ZUZvcmtPcHRpb25zKG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgdmFyIHByb2Nlc3NFeGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbignICcpO1xuICB2YXIgaW5zcGVjdG9yQWN0aXZlID0gcHJvY2Vzc0V4ZWNBcmd2LmluZGV4T2YoJy0taW5zcGVjdCcpICE9PSAtMTtcbiAgdmFyIGRlYnVnQnJrID0gcHJvY2Vzc0V4ZWNBcmd2LmluZGV4T2YoJy0tZGVidWctYnJrJykgIT09IC0xO1xuXG4gIHZhciBleGVjQXJndiA9IFtdO1xuICBpZiAoaW5zcGVjdG9yQWN0aXZlKSB7XG4gICAgZXhlY0FyZ3YucHVzaCgnLS1pbnNwZWN0PScgKyBvcHRzLmRlYnVnUG9ydCk7XG5cbiAgICBpZiAoZGVidWdCcmspIHtcbiAgICAgIGV4ZWNBcmd2LnB1c2goJy0tZGVidWctYnJrJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5leGVjQXJndi5mb3JFYWNoKGZ1bmN0aW9uKGFyZykge1xuICAgIGlmIChhcmcuaW5kZXhPZignLS1tYXgtb2xkLXNwYWNlLXNpemUnKSA+IC0xKSB7XG4gICAgICBleGVjQXJndi5wdXNoKGFyZylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtcbiAgICBmb3JrQXJnczogb3B0cy5mb3JrQXJncyxcbiAgICBmb3JrT3B0czogT2JqZWN0LmFzc2lnbih7fSwgb3B0cy5mb3JrT3B0cywge1xuICAgICAgZXhlY0FyZ3Y6IChvcHRzLmZvcmtPcHRzICYmIG9wdHMuZm9ya09wdHMuZXhlY0FyZ3YgfHwgW10pXG4gICAgICAuY29uY2F0KGV4ZWNBcmd2KVxuICAgIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc2VyaWFsaXplZCBlcnJvciB0byBFcnJvclxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBFcnJvciB0aGF0IGhhcyBiZWVuIHNlcmlhbGl6ZWQgYW5kIHBhcnNlZCB0byBvYmplY3RcbiAqIEByZXR1cm4ge0Vycm9yfSBUaGUgZXF1aXZhbGVudCBFcnJvci5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9FcnJvciAob2JqKSB7XG4gIHZhciB0ZW1wID0gbmV3IEVycm9yKCcnKVxuICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmopXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHRlbXBbcHJvcHNbaV1dID0gb2JqW3Byb3BzW2ldXVxuICB9XG5cbiAgcmV0dXJuIHRlbXBcbn1cblxuLyoqXG4gKiBBIFdvcmtlckhhbmRsZXIgY29udHJvbHMgYSBzaW5nbGUgd29ya2VyLiBUaGlzIHdvcmtlciBjYW4gYmUgYSBjaGlsZCBwcm9jZXNzXG4gKiBvbiBub2RlLmpzIG9yIGEgV2ViV29ya2VyIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbc2NyaXB0XSBJZiBubyBzY3JpcHQgaXMgcHJvdmlkZWQsIGEgZGVmYXVsdCB3b3JrZXIgd2l0aCBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcnVuIHdpbGwgYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB7V29ya2VyUG9vbE9wdGlvbnN9IF9vcHRpb25zIFNlZSBkb2NzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gV29ya2VySGFuZGxlcihzY3JpcHQsIF9vcHRpb25zKSB7XG4gIHZhciBtZSA9IHRoaXM7XG4gIHZhciBvcHRpb25zID0gX29wdGlvbnMgfHwge307XG5cbiAgdGhpcy5zY3JpcHQgPSBzY3JpcHQgfHwgZ2V0RGVmYXVsdFdvcmtlcigpO1xuICB0aGlzLndvcmtlciA9IHNldHVwV29ya2VyKHRoaXMuc2NyaXB0LCBvcHRpb25zKTtcbiAgdGhpcy5kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydDtcbiAgdGhpcy5mb3JrT3B0cyA9IG9wdGlvbnMuZm9ya09wdHM7XG4gIHRoaXMuZm9ya0FyZ3MgPSBvcHRpb25zLmZvcmtBcmdzO1xuXG4gIC8vIFRoZSByZWFkeSBtZXNzYWdlIGlzIG9ubHkgc2VudCBpZiB0aGUgd29ya2VyLmFkZCBtZXRob2QgaXMgY2FsbGVkIChBbmQgdGhlIGRlZmF1bHQgc2NyaXB0IGlzIG5vdCB1c2VkKVxuICBpZiAoIXNjcmlwdCkge1xuICAgIHRoaXMud29ya2VyLnJlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIHF1ZXVlIGZvciByZXF1ZXN0cyB0aGF0IGFyZSByZWNlaXZlZCBiZWZvcmUgdGhlIHdvcmtlciBpcyByZWFkeVxuICB0aGlzLnJlcXVlc3RRdWV1ZSA9IFtdO1xuICB0aGlzLndvcmtlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIGlmIChtZS50ZXJtaW5hdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2UgPT09ICdzdHJpbmcnICYmIHJlc3BvbnNlID09PSAncmVhZHknKSB7XG4gICAgICBtZS53b3JrZXIucmVhZHkgPSB0cnVlO1xuICAgICAgZGlzcGF0Y2hRdWV1ZWRSZXF1ZXN0cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaW5kIHRoZSB0YXNrIGZyb20gdGhlIHByb2Nlc3NpbmcgcXVldWUsIGFuZCBydW4gdGhlIHRhc2tzIGNhbGxiYWNrXG4gICAgICB2YXIgaWQgPSByZXNwb25zZS5pZDtcbiAgICAgIHZhciB0YXNrID0gbWUucHJvY2Vzc2luZ1tpZF07XG4gICAgICBpZiAodGFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5pc0V2ZW50KSB7XG4gICAgICAgICAgaWYgKHRhc2sub3B0aW9ucyAmJiB0eXBlb2YgdGFzay5vcHRpb25zLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0YXNrLm9wdGlvbnMub24ocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgdGFzayBmcm9tIHRoZSBxdWV1ZVxuICAgICAgICAgIGRlbGV0ZSBtZS5wcm9jZXNzaW5nW2lkXTtcblxuICAgICAgICAgIC8vIHRlc3QgaWYgd2UgbmVlZCB0byB0ZXJtaW5hdGVcbiAgICAgICAgICBpZiAobWUudGVybWluYXRpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGNvbXBsZXRlIHdvcmtlciB0ZXJtaW5hdGlvbiBpZiBhbGwgdGFza3MgYXJlIGZpbmlzaGVkXG4gICAgICAgICAgICBtZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyByZXNvbHZlIHRoZSB0YXNrJ3MgcHJvbWlzZVxuICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgdGFzay5yZXNvbHZlci5yZWplY3Qob2JqZWN0VG9FcnJvcihyZXNwb25zZS5lcnJvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZXIucmVzb2x2ZShyZXNwb25zZS5yZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVqZWN0IGFsbCBydW5uaW5nIHRhc2tzIG9uIHdvcmtlciBlcnJvclxuICBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgbWUudGVybWluYXRlZCA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpZCBpbiBtZS5wcm9jZXNzaW5nKSB7XG4gICAgICBpZiAobWUucHJvY2Vzc2luZ1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZS5wcm9jZXNzaW5nW2lkXS5yZXNvbHZlci5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBtZS5wcm9jZXNzaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIC8vIHNlbmQgYWxsIHF1ZXVlZCByZXF1ZXN0cyB0byB3b3JrZXJcbiAgZnVuY3Rpb24gZGlzcGF0Y2hRdWV1ZWRSZXF1ZXN0cygpXG4gIHtcbiAgICBmb3IoY29uc3QgcmVxdWVzdCBvZiBtZS5yZXF1ZXN0UXVldWUuc3BsaWNlKDApKSB7XG4gICAgICBtZS53b3JrZXIuc2VuZChyZXF1ZXN0KTtcbiAgICB9XG4gIH1cblxuICB2YXIgd29ya2VyID0gdGhpcy53b3JrZXI7XG4gIC8vIGxpc3RlbiBmb3Igd29ya2VyIG1lc3NhZ2VzIGVycm9yIGFuZCBleGl0XG4gIHRoaXMud29ya2VyLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICB0aGlzLndvcmtlci5vbignZXhpdCcsIGZ1bmN0aW9uIChleGl0Q29kZSwgc2lnbmFsQ29kZSkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dvcmtlcnBvb2wgV29ya2VyIHRlcm1pbmF0ZWQgVW5leHBlY3RlZGx5XFxuJztcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBleGl0Q29kZTogYCcgKyBleGl0Q29kZSArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc2lnbmFsQ29kZTogYCcgKyBzaWduYWxDb2RlICsgJ2BcXG4nO1xuXG4gICAgbWVzc2FnZSArPSAnICAgIHdvcmtlcnBvb2wuc2NyaXB0OiBgJyArICBtZS5zY3JpcHQgKyAnYFxcbic7XG4gICAgbWVzc2FnZSArPSAnICAgIHNwYXduQXJnczogYCcgKyAgd29ya2VyLnNwYXduYXJncyArICdgXFxuJztcbiAgICBtZXNzYWdlICs9ICcgICAgc3Bhd25maWxlOiBgJyArIHdvcmtlci5zcGF3bmZpbGUgKyAnYFxcbidcblxuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRvdXQ6IGAnICsgd29ya2VyLnN0ZG91dCArICdgXFxuJ1xuICAgIG1lc3NhZ2UgKz0gJyAgICBzdGRlcnI6IGAnICsgd29ya2VyLnN0ZGVyciArICdgXFxuJ1xuXG4gICAgb25FcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xuICB9KTtcblxuICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpOyAvLyBxdWV1ZSB3aXRoIHRhc2tzIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuXG4gIHRoaXMudGVybWluYXRpbmcgPSBmYWxzZTtcbiAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2U7XG4gIHRoaXMudGVybWluYXRpb25IYW5kbGVyID0gbnVsbDtcbiAgdGhpcy5sYXN0SWQgPSAwO1xufVxuXG4vKipcbiAqIEdldCBhIGxpc3Qgd2l0aCBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgd29ya2VyLlxuICogQHJldHVybiB7UHJvbWlzZS48U3RyaW5nW10sIEVycm9yPn0gbWV0aG9kc1xuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS5tZXRob2RzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5leGVjKCdtZXRob2RzJyk7XG59O1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBtZXRob2Qgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzIG9uIHRoZSB3b3JrZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbXNdXG4gKiBAcGFyYW0ge3tyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbn19IFtyZXNvbHZlcl1cbiAqIEBwYXJhbSB7RXhlY09wdGlvbnN9ICBbb3B0aW9uc11cbiAqIEByZXR1cm4ge1Byb21pc2UuPCosIEVycm9yPn0gcmVzdWx0XG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihtZXRob2QsIHBhcmFtcywgcmVzb2x2ZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFyZXNvbHZlcikge1xuICAgIHJlc29sdmVyID0gUHJvbWlzZS5kZWZlcigpO1xuICB9XG5cbiAgLy8gZ2VuZXJhdGUgYSB1bmlxdWUgaWQgZm9yIHRoZSB0YXNrXG4gIHZhciBpZCA9ICsrdGhpcy5sYXN0SWQ7XG5cbiAgLy8gcmVnaXN0ZXIgYSBuZXcgdGFzayBhcyBiZWluZyBpbiBwcm9ncmVzc1xuICB0aGlzLnByb2Nlc3NpbmdbaWRdID0ge1xuICAgIGlkOiBpZCxcbiAgICByZXNvbHZlcjogcmVzb2x2ZXIsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9O1xuXG4gIC8vIGJ1aWxkIGEgSlNPTi1SUEMgcmVxdWVzdFxuICB2YXIgcmVxdWVzdCA9IHtcbiAgICBpZDogaWQsXG4gICAgbWV0aG9kOiBtZXRob2QsXG4gICAgcGFyYW1zOiBwYXJhbXNcbiAgfTtcblxuICBpZiAodGhpcy50ZXJtaW5hdGVkKSB7XG4gICAgcmVzb2x2ZXIucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIGlzIHRlcm1pbmF0ZWQnKSk7XG4gIH0gZWxzZSBpZiAodGhpcy53b3JrZXIucmVhZHkpIHtcbiAgICAvLyBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSB3b3JrZXJcbiAgICB0aGlzLndvcmtlci5zZW5kKHJlcXVlc3QpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVxdWVzdFF1ZXVlLnB1c2gocmVxdWVzdCk7XG4gIH1cblxuICAvLyBvbiBjYW5jZWxsYXRpb24sIGZvcmNlIHRoZSB3b3JrZXIgdG8gdGVybWluYXRlXG4gIHZhciBtZSA9IHRoaXM7XG4gIHJldHVybiByZXNvbHZlci5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBQcm9taXNlLlRpbWVvdXRFcnJvcikge1xuICAgICAgLy8gcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSBxdWV1ZS4gSXQgaXMgYWxyZWFkeSByZWplY3RlZCAoaGVuY2UgdGhpc1xuICAgICAgLy8gY2F0Y2ggZXZlbnQpLCBhbmQgZWxzZSBpdCB3aWxsIGJlIHJlamVjdGVkIGFnYWluIHdoZW4gdGVybWluYXRpbmdcbiAgICAgIGRlbGV0ZSBtZS5wcm9jZXNzaW5nW2lkXTtcblxuICAgICAgLy8gdGVybWluYXRlIHdvcmtlclxuICAgICAgcmV0dXJuIG1lLnRlcm1pbmF0ZUFuZE5vdGlmeSh0cnVlKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9KVxufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIHdvcmtlciBpcyB3b3JraW5nIG9yIG5vdFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB3b3JrZXIgaXMgYnVzeVxuICovXG5Xb3JrZXJIYW5kbGVyLnByb3RvdHlwZS5idXN5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wcm9jZXNzaW5nKS5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBUZXJtaW5hdGUgdGhlIHdvcmtlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXIgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFjaz1udWxsXSBJZiBwcm92aWRlZCwgd2lsbCBiZSBjYWxsZWQgd2hlbiBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gKi9cbldvcmtlckhhbmRsZXIucHJvdG90eXBlLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChmb3JjZSwgY2FsbGJhY2spIHtcbiAgdmFyIG1lID0gdGhpcztcbiAgaWYgKGZvcmNlKSB7XG4gICAgLy8gY2FuY2VsIGFsbCB0YXNrcyBpbiBwcm9ncmVzc1xuICAgIGZvciAodmFyIGlkIGluIHRoaXMucHJvY2Vzc2luZykge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZ1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmdbaWRdLnJlc29sdmVyLnJlamVjdChuZXcgRXJyb3IoJ1dvcmtlciB0ZXJtaW5hdGVkJykpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMudGVybWluYXRpb25IYW5kbGVyID0gY2FsbGJhY2s7XG4gIH1cbiAgaWYgKCF0aGlzLmJ1c3koKSkge1xuICAgIC8vIGFsbCB0YXNrcyBhcmUgZmluaXNoZWQuIGtpbGwgdGhlIHdvcmtlclxuICAgIHZhciBjbGVhbnVwID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICBtZS50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIGlmIChtZS53b3JrZXIgIT0gbnVsbCAmJiBtZS53b3JrZXIucmVtb3ZlQWxsTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIHJlbW92ZUFsbExpc3RlbmVycyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgY2hpbGRfcHJvY2Vzc1xuICAgICAgICBtZS53b3JrZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCdtZXNzYWdlJyk7XG4gICAgICB9XG4gICAgICBtZS53b3JrZXIgPSBudWxsO1xuICAgICAgbWUudGVybWluYXRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChtZS50ZXJtaW5hdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgbWUudGVybWluYXRpb25IYW5kbGVyKGVyciwgbWUpO1xuICAgICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLndvcmtlcikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLndvcmtlci5raWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtlci5raWxsZWQpIHtcbiAgICAgICAgICBjbGVhbnVwKG5ldyBFcnJvcignd29ya2VyIGFscmVhZHkga2lsbGVkIScpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53b3JrZXIuaXNDaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgICB2YXIgY2xlYW5FeGl0VGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAobWUud29ya2VyKSB7XG4gICAgICAgICAgICAgIG1lLndvcmtlci5raWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgQ0hJTERfUFJPQ0VTU19FWElUX1RJTUVPVVQpO1xuXG4gICAgICAgICAgdGhpcy53b3JrZXIub25jZSgnZXhpdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNsZWFuRXhpdFRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKG1lLndvcmtlcikge1xuICAgICAgICAgICAgICBtZS53b3JrZXIua2lsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLndvcmtlci5yZWFkeSkge1xuICAgICAgICAgICAgdGhpcy53b3JrZXIuc2VuZChURVJNSU5BVEVfTUVUSE9EX0lEKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UXVldWUucHVzaChURVJNSU5BVEVfTUVUSE9EX0lEKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3b3JrZXJfdGhyZWFkXG4gICAgICAgICAgdGhpcy53b3JrZXIua2lsbCgpO1xuICAgICAgICAgIHRoaXMud29ya2VyLmtpbGxlZCA9IHRydWU7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLndvcmtlci50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy53b3JrZXIudGVybWluYXRlKCk7IC8vIHdlYiB3b3JrZXJcbiAgICAgICAgdGhpcy53b3JrZXIua2lsbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgd29ya2VyJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNsZWFudXAoKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyB3ZSBjYW4ndCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHksIHRoZXJlIGFyZSBzdGlsbCB0YXNrcyBiZWluZyBleGVjdXRlZFxuICAgIHRoaXMudGVybWluYXRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIFRlcm1pbmF0ZSB0aGUgd29ya2VyLCByZXR1cm5pbmcgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVybWluYXRpb24gaGFzIGJlZW4gZG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAgIElmIGZhbHNlIChkZWZhdWx0KSwgdGhlIHdvcmtlciBpcyB0ZXJtaW5hdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgYWxsIHRhc2tzIGN1cnJlbnRseSBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuIElmIHRydWUsIHRoZSB3b3JrZXIgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCBpbW1lZGlhdGVseS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF0gICAgICAgIElmIHByb3ZpZGVkIGFuZCBub24temVybywgd29ya2VyIHRlcm1pbmF0aW9uIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGltZW91dCBpZiB3b3JrZXIgcHJvY2VzcyBoYXMgbm90IGJlZW4gdGVybWluYXRlZC5cbiAqIEByZXR1cm4ge1Byb21pc2UuPFdvcmtlckhhbmRsZXIsIEVycm9yPn1cbiAqL1xuV29ya2VySGFuZGxlci5wcm90b3R5cGUudGVybWluYXRlQW5kTm90aWZ5ID0gZnVuY3Rpb24gKGZvcmNlLCB0aW1lb3V0KSB7XG4gIHZhciByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICByZXNvbHZlci5wcm9taXNlLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG4gIHRoaXMudGVybWluYXRlKGZvcmNlLCBmdW5jdGlvbihlcnIsIHdvcmtlcikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJlc29sdmVyLnJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlci5yZXNvbHZlKHdvcmtlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVyLnByb21pc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdvcmtlckhhbmRsZXI7XG5tb2R1bGUuZXhwb3J0cy5fdHJ5UmVxdWlyZVdvcmtlclRocmVhZHMgPSB0cnlSZXF1aXJlV29ya2VyVGhyZWFkcztcbm1vZHVsZS5leHBvcnRzLl9zZXR1cFByb2Nlc3NXb3JrZXIgPSBzZXR1cFByb2Nlc3NXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5fc2V0dXBCcm93c2VyV29ya2VyID0gc2V0dXBCcm93c2VyV29ya2VyO1xubW9kdWxlLmV4cG9ydHMuX3NldHVwV29ya2VyVGhyZWFkV29ya2VyID0gc2V0dXBXb3JrZXJUaHJlYWRXb3JrZXI7XG5tb2R1bGUuZXhwb3J0cy5lbnN1cmVXb3JrZXJUaHJlYWRzID0gZW5zdXJlV29ya2VyVGhyZWFkcztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBNQVhfUE9SVFMgPSA2NTUzNTtcbm1vZHVsZS5leHBvcnRzID0gRGVidWdQb3J0QWxsb2NhdG9yO1xuZnVuY3Rpb24gRGVidWdQb3J0QWxsb2NhdG9yKCkge1xuICB0aGlzLnBvcnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLm5leHRBdmFpbGFibGVTdGFydGluZ0F0ID0gZnVuY3Rpb24oc3RhcnRpbmcpIHtcbiAgd2hpbGUgKHRoaXMucG9ydHNbc3RhcnRpbmddID09PSB0cnVlKSB7XG4gICAgc3RhcnRpbmcrKztcbiAgfVxuXG4gIGlmIChzdGFydGluZyA+PSBNQVhfUE9SVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclBvb2wgZGVidWcgcG9ydCBsaW1pdCByZWFjaGVkOiAnICsgc3RhcnRpbmcgKyAnPj0gJyArIE1BWF9QT1JUUyApO1xuICB9XG5cbiAgdGhpcy5wb3J0c1tzdGFydGluZ10gPSB0cnVlO1xuICB0aGlzLmxlbmd0aCsrO1xuICByZXR1cm4gc3RhcnRpbmc7XG59O1xuXG5EZWJ1Z1BvcnRBbGxvY2F0b3IucHJvdG90eXBlLnJlbGVhc2VQb3J0ID0gZnVuY3Rpb24ocG9ydCkge1xuICBkZWxldGUgdGhpcy5wb3J0c1twb3J0XTtcbiAgdGhpcy5sZW5ndGgtLTtcbn07XG5cbiIsICJ2YXIgUHJvbWlzZSA9IHJlcXVpcmUoJy4vUHJvbWlzZScpO1xudmFyIFdvcmtlckhhbmRsZXIgPSByZXF1aXJlKCcuL1dvcmtlckhhbmRsZXInKTtcbnZhciBlbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKTtcbnZhciBEZWJ1Z1BvcnRBbGxvY2F0b3IgPSByZXF1aXJlKCcuL2RlYnVnLXBvcnQtYWxsb2NhdG9yJyk7XG52YXIgREVCVUdfUE9SVF9BTExPQ0FUT1IgPSBuZXcgRGVidWdQb3J0QWxsb2NhdG9yKCk7XG4vKipcbiAqIEEgcG9vbCB0byBtYW5hZ2Ugd29ya2Vyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtzY3JpcHRdICAgT3B0aW9uYWwgd29ya2VyIHNjcmlwdFxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gW29wdGlvbnNdICBTZWUgZG9jc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFBvb2woc2NyaXB0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc2NyaXB0ID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuc2NyaXB0ID0gc2NyaXB0IHx8IG51bGw7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICAgIG9wdGlvbnMgPSBzY3JpcHQ7XG4gIH1cblxuICB0aGlzLndvcmtlcnMgPSBbXTsgIC8vIHF1ZXVlIHdpdGggYWxsIHdvcmtlcnNcbiAgdGhpcy50YXNrcyA9IFtdOyAgICAvLyBxdWV1ZSB3aXRoIHRhc2tzIGF3YWl0aW5nIGV4ZWN1dGlvblxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHRoaXMuZm9ya0FyZ3MgPSBPYmplY3QuZnJlZXplKG9wdGlvbnMuZm9ya0FyZ3MgfHwgW10pO1xuICB0aGlzLmZvcmtPcHRzID0gT2JqZWN0LmZyZWV6ZShvcHRpb25zLmZvcmtPcHRzIHx8IHt9KTtcbiAgdGhpcy5kZWJ1Z1BvcnRTdGFydCA9IChvcHRpb25zLmRlYnVnUG9ydFN0YXJ0IHx8IDQzMjEwKTtcbiAgdGhpcy5ub2RlV29ya2VyID0gb3B0aW9ucy5ub2RlV29ya2VyO1xuICB0aGlzLndvcmtlclR5cGUgPSBvcHRpb25zLndvcmtlclR5cGUgfHwgb3B0aW9ucy5ub2RlV29ya2VyIHx8ICdhdXRvJ1xuICB0aGlzLm1heFF1ZXVlU2l6ZSA9IG9wdGlvbnMubWF4UXVldWVTaXplIHx8IEluZmluaXR5O1xuXG4gIHRoaXMub25DcmVhdGVXb3JrZXIgPSBvcHRpb25zLm9uQ3JlYXRlV29ya2VyIHx8ICgoKSA9PiBudWxsKTtcbiAgdGhpcy5vblRlcm1pbmF0ZVdvcmtlciA9IG9wdGlvbnMub25UZXJtaW5hdGVXb3JrZXIgfHwgKCgpID0+IG51bGwpO1xuXG4gIC8vIGNvbmZpZ3VyYXRpb25cbiAgaWYgKG9wdGlvbnMgJiYgJ21heFdvcmtlcnMnIGluIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU1heFdvcmtlcnMob3B0aW9ucy5tYXhXb3JrZXJzKTtcbiAgICB0aGlzLm1heFdvcmtlcnMgPSBvcHRpb25zLm1heFdvcmtlcnM7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5tYXhXb3JrZXJzID0gTWF0aC5tYXgoKGVudmlyb25tZW50LmNwdXMgfHwgNCkgLSAxLCAxKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zICYmICdtaW5Xb3JrZXJzJyBpbiBvcHRpb25zKSB7XG4gICAgaWYob3B0aW9ucy5taW5Xb3JrZXJzID09PSAnbWF4Jykge1xuICAgICAgdGhpcy5taW5Xb3JrZXJzID0gdGhpcy5tYXhXb3JrZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZU1pbldvcmtlcnMob3B0aW9ucy5taW5Xb3JrZXJzKTtcbiAgICAgIHRoaXMubWluV29ya2VycyA9IG9wdGlvbnMubWluV29ya2VycztcbiAgICAgIHRoaXMubWF4V29ya2VycyA9IE1hdGgubWF4KHRoaXMubWluV29ya2VycywgdGhpcy5tYXhXb3JrZXJzKTsgICAgIC8vIGluIGNhc2UgbWluV29ya2VycyBpcyBoaWdoZXIgdGhhbiBtYXhXb3JrZXJzXG4gICAgfVxuICAgIHRoaXMuX2Vuc3VyZU1pbldvcmtlcnMoKTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kTmV4dCA9IHRoaXMuX25leHQuYmluZCh0aGlzKTtcblxuXG4gIGlmICh0aGlzLndvcmtlclR5cGUgPT09ICd0aHJlYWQnKSB7XG4gICAgV29ya2VySGFuZGxlci5lbnN1cmVXb3JrZXJUaHJlYWRzKCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEV4ZWN1dGUgYSBmdW5jdGlvbiBvbiBhIHdvcmtlci5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICpcbiAqICAgdmFyIHBvb2wgPSBuZXcgUG9vbCgpXG4gKlxuICogICAvLyBjYWxsIGEgZnVuY3Rpb24gYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXJcbiAqICAgcG9vbC5leGVjKCdmaWJvbmFjY2knLCBbNl0pXG4gKlxuICogICAvLyBvZmZsb2FkIGEgZnVuY3Rpb25cbiAqICAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAqICAgICByZXR1cm4gYSArIGJcbiAqICAgfTtcbiAqICAgcG9vbC5leGVjKGFkZCwgWzIsIDRdKVxuICogICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICogICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyBvdXRwdXRzIDZcbiAqICAgICAgIH0pXG4gKiAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICogICAgICAgfSk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmcgfCBGdW5jdGlvbn0gbWV0aG9kICBGdW5jdGlvbiBuYW1lIG9yIGZ1bmN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIHN0cmluZywgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG9uIHRoZSB3b3JrZXIgd2lsbCBiZSBleGVjdXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgbWV0aG9kYCBpcyBhIEZ1bmN0aW9uLCB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBzdHJpbmdpZmllZCBhbmQgZXhlY3V0ZWQgdmlhIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzIGJ1aWx0LWluIGZ1bmN0aW9uIGBydW4oZm4sIGFyZ3MpYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbXNdICBGdW5jdGlvbiBhcmd1bWVudHMgYXBwbGllZCB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSBbb3B0aW9uc10gIE9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJuIHtQcm9taXNlLjwqLCBFcnJvcj59IHJlc3VsdFxuICovXG5Qb29sLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24gKG1ldGhvZCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8vIHZhbGlkYXRlIHR5cGUgb2YgYXJndW1lbnRzXG4gIGlmIChwYXJhbXMgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkIGFzIGFyZ3VtZW50IFwicGFyYW1zXCInKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgIHZhciByZXNvbHZlciA9IFByb21pc2UuZGVmZXIoKTtcblxuICAgIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+PSB0aGlzLm1heFF1ZXVlU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXggcXVldWUgc2l6ZSBvZiAnICsgdGhpcy5tYXhRdWV1ZVNpemUgKyAnIHJlYWNoZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBuZXcgdGFzayB0byB0aGUgcXVldWVcbiAgICB2YXIgdGFza3MgPSB0aGlzLnRhc2tzO1xuICAgIHZhciB0YXNrID0ge1xuICAgICAgbWV0aG9kOiAgbWV0aG9kLFxuICAgICAgcGFyYW1zOiAgcGFyYW1zLFxuICAgICAgcmVzb2x2ZXI6IHJlc29sdmVyLFxuICAgICAgdGltZW91dDogbnVsbCxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9O1xuICAgIHRhc2tzLnB1c2godGFzayk7XG5cbiAgICAvLyByZXBsYWNlIHRoZSB0aW1lb3V0IG1ldGhvZCBvZiB0aGUgUHJvbWlzZSB3aXRoIG91ciBvd24sXG4gICAgLy8gd2hpY2ggc3RhcnRzIHRoZSB0aW1lciBhcyBzb29uIGFzIHRoZSB0YXNrIGlzIGFjdHVhbGx5IHN0YXJ0ZWRcbiAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gcmVzb2x2ZXIucHJvbWlzZS50aW1lb3V0O1xuICAgIHJlc29sdmVyLnByb21pc2UudGltZW91dCA9IGZ1bmN0aW9uIHRpbWVvdXQgKGRlbGF5KSB7XG4gICAgICBpZiAodGFza3MuaW5kZXhPZih0YXNrKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gdGFzayBpcyBzdGlsbCBxdWV1ZWQgLT4gc3RhcnQgdGhlIHRpbWVyIGxhdGVyIG9uXG4gICAgICAgIHRhc2sudGltZW91dCA9IGRlbGF5O1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyB0YXNrIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQgLT4gc3RhcnQgdGltZXIgaW1tZWRpYXRlbHlcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dC5jYWxsKHJlc29sdmVyLnByb21pc2UsIGRlbGF5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdHJpZ2dlciB0YXNrIGV4ZWN1dGlvblxuICAgIHRoaXMuX25leHQoKTtcblxuICAgIHJldHVybiByZXNvbHZlci5wcm9taXNlO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBzZW5kIHN0cmluZ2lmaWVkIGZ1bmN0aW9uIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgdG8gd29ya2VyXG4gICAgcmV0dXJuIHRoaXMuZXhlYygncnVuJywgW1N0cmluZyhtZXRob2QpLCBwYXJhbXNdKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgYXJndW1lbnQgXCJtZXRob2RcIicpO1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHByb3h5IGZvciBjdXJyZW50IHdvcmtlci4gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGxcbiAqIG1ldGhvZHMgYXZhaWxhYmxlIG9uIHRoZSB3b3JrZXIuIFRoZSBtZXRob2RzIGFsd2F5cyByZXR1cm4gYSBwcm9taXNlLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2UuPE9iamVjdCwgRXJyb3I+fSBwcm94eVxuICovXG5Qb29sLnByb3RvdHlwZS5wcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhcmd1bWVudHMgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHZhciBwb29sID0gdGhpcztcbiAgcmV0dXJuIHRoaXMuZXhlYygnbWV0aG9kcycpXG4gICAgICAudGhlbihmdW5jdGlvbiAobWV0aG9kcykge1xuICAgICAgICB2YXIgcHJveHkgPSB7fTtcblxuICAgICAgICBtZXRob2RzLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgIHByb3h5W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9vbC5leGVjKG1ldGhvZCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhpcyBhcnJheS5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgRnVuY3Rpb24gdGFraW5nIHR3byBhcmd1bWVudHM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxiYWNrKGN1cnJlbnRWYWx1ZSwgaW5kZXgpYFxuICogQHJldHVybiB7UHJvbWlzZS48QXJyYXk+fSBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyAgd2l0aCBhbiBBcnJheVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgYXJyYXkgZWxlbWVudHMuXG4gKi9cbi8qIFRPRE86IGltcGxlbWVudCBtYXBcblBvb2wucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChhcnJheSwgY2FsbGJhY2spIHtcbn07XG4qL1xuXG4vKipcbiAqIEdyYWIgdGhlIGZpcnN0IHRhc2sgZnJvbSB0aGUgcXVldWUsIGZpbmQgYSBmcmVlIHdvcmtlciwgYW5kIGFzc2lnbiB0aGVcbiAqIHdvcmtlciB0byB0aGUgdGFzay5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUG9vbC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnRhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAvLyB0aGVyZSBhcmUgdGFza3MgaW4gdGhlIHF1ZXVlXG5cbiAgICAvLyBmaW5kIGFuIGF2YWlsYWJsZSB3b3JrZXJcbiAgICB2YXIgd29ya2VyID0gdGhpcy5fZ2V0V29ya2VyKCk7XG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgLy8gZ2V0IHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVlXG4gICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgdmFyIHRhc2sgPSB0aGlzLnRhc2tzLnNoaWZ0KCk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSB0YXNrIGlzIHN0aWxsIHBlbmRpbmcgKGFuZCBub3QgY2FuY2VsbGVkIC0+IHByb21pc2UgcmVqZWN0ZWQpXG4gICAgICBpZiAodGFzay5yZXNvbHZlci5wcm9taXNlLnBlbmRpbmcpIHtcbiAgICAgICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgd29ya2VyXG4gICAgICAgIHZhciBwcm9taXNlID0gd29ya2VyLmV4ZWModGFzay5tZXRob2QsIHRhc2sucGFyYW1zLCB0YXNrLnJlc29sdmVyLCB0YXNrLm9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4obWUuX2JvdW5kTmV4dClcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHdvcmtlciBjcmFzaGVkIGFuZCB0ZXJtaW5hdGVkLCByZW1vdmUgaXQgZnJvbSB0aGUgcG9vbFxuICAgICAgICAgICAgaWYgKHdvcmtlci50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZS5fcmVtb3ZlV29ya2VyKHdvcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG1lLl9uZXh0KCk7IC8vIHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHN0YXJ0IHF1ZXVlZCB0aW1lciBub3dcbiAgICAgICAgaWYgKHR5cGVvZiB0YXNrLnRpbWVvdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcHJvbWlzZS50aW1lb3V0KHRhc2sudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSB0YXNrIHRha2VuIHdhcyBhbHJlYWR5IGNvbXBsZXRlIChlaXRoZXIgcmVqZWN0ZWQgb3IgcmVzb2x2ZWQpLCBzbyBqdXN0IHRyaWdnZXIgbmV4dCB0YXNrIGluIHRoZSBxdWV1ZVxuICAgICAgICBtZS5fbmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYW4gYXZhaWxhYmxlIHdvcmtlci4gSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSBhbmQgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiB3b3JrZXJzIGlzbid0IHlldCByZWFjaGVkLCBhIG5ldyB3b3JrZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIGlzIHJlYWNoZWQsXG4gKiBudWxsIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHJldHVybiB7V29ya2VySGFuZGxlciB8IG51bGx9IHdvcmtlclxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2dldFdvcmtlciA9IGZ1bmN0aW9uKCkge1xuICAvLyBmaW5kIGEgbm9uLWJ1c3kgd29ya2VyXG4gIHZhciB3b3JrZXJzID0gdGhpcy53b3JrZXJzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgd29ya2VyID0gd29ya2Vyc1tpXTtcbiAgICBpZiAod29ya2VyLmJ1c3koKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtlcnMubGVuZ3RoIDwgdGhpcy5tYXhXb3JrZXJzKSB7XG4gICAgLy8gY3JlYXRlIGEgbmV3IHdvcmtlclxuICAgIHdvcmtlciA9IHRoaXMuX2NyZWF0ZVdvcmtlckhhbmRsZXIoKTtcbiAgICB3b3JrZXJzLnB1c2god29ya2VyKTtcbiAgICByZXR1cm4gd29ya2VyO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sLlxuICogQXR0ZW1wdHMgdG8gdGVybWluYXRlIHdvcmtlciBpZiBub3QgYWxyZWFkeSB0ZXJtaW5hdGVkLCBhbmQgZW5zdXJlcyB0aGUgbWluaW11bVxuICogcG9vbCBzaXplIGlzIG1ldC5cbiAqIEBwYXJhbSB7V29ya2VySGFuZGxlcn0gd29ya2VyXG4gKiBAcmV0dXJuIHtQcm9taXNlPFdvcmtlckhhbmRsZXI+fVxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyID0gZnVuY3Rpb24od29ya2VyKSB7XG4gIHZhciBtZSA9IHRoaXM7XG5cbiAgREVCVUdfUE9SVF9BTExPQ0FUT1IucmVsZWFzZVBvcnQod29ya2VyLmRlYnVnUG9ydCk7XG4gIC8vIF9yZW1vdmVXb3JrZXIgd2lsbCBjYWxsIHRoaXMsIGJ1dCB3ZSBuZWVkIGl0IHRvIGJlIHJlbW92ZWQgc3luY2hyb25vdXNseVxuICB0aGlzLl9yZW1vdmVXb3JrZXJGcm9tTGlzdCh3b3JrZXIpO1xuICAvLyBJZiBtaW5Xb3JrZXJzIHNldCwgc3BpbiB1cCBuZXcgd29ya2VycyB0byByZXBsYWNlIHRoZSBjcmFzaGVkIG9uZXNcbiAgdGhpcy5fZW5zdXJlTWluV29ya2VycygpO1xuICAvLyB0ZXJtaW5hdGUgdGhlIHdvcmtlciAoaWYgbm90IGFscmVhZHkgdGVybWluYXRlZClcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHdvcmtlci50ZXJtaW5hdGUoZmFsc2UsIGZ1bmN0aW9uKGVycikge1xuICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICBmb3JrQXJnczogd29ya2VyLmZvcmtBcmdzLFxuICAgICAgICBmb3JrT3B0czogd29ya2VyLmZvcmtPcHRzLFxuICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgIH0pO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUod29ya2VyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIHdvcmtlciBmcm9tIHRoZSBwb29sIGxpc3QuXG4gKiBAcGFyYW0ge1dvcmtlckhhbmRsZXJ9IHdvcmtlclxuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fcmVtb3ZlV29ya2VyRnJvbUxpc3QgPSBmdW5jdGlvbih3b3JrZXIpIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIGxpc3Qgd2l0aCB3b3JrZXJzXG4gIHZhciBpbmRleCA9IHRoaXMud29ya2Vycy5pbmRleE9mKHdvcmtlcik7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICB0aGlzLndvcmtlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDbG9zZSBhbGwgYWN0aXZlIHdvcmtlcnMuIFRhc2tzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCB3aWxsIGJlIGZpbmlzaGVkIGZpcnN0LlxuICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdICAgSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgd29ya2VycyBhcmUgdGVybWluYXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcyBjdXJyZW50bHkgaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLiBJZiB0cnVlLCB0aGUgd29ya2VycyB3aWxsIGJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LlxuICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XSAgICAgICAgSWYgcHJvdmlkZWQgYW5kIG5vbi16ZXJvLCB3b3JrZXIgdGVybWluYXRpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aW1lb3V0IGlmIHdvcmtlciBwcm9jZXNzIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkLlxuICogQHJldHVybiB7UHJvbWlzZS48dm9pZCwgRXJyb3I+fVxuICovXG5Qb29sLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoZm9yY2UsIHRpbWVvdXQpIHtcbiAgdmFyIG1lID0gdGhpcztcblxuICAvLyBjYW5jZWwgYW55IHBlbmRpbmcgdGFza3NcbiAgdGhpcy50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgdGFzay5yZXNvbHZlci5yZWplY3QobmV3IEVycm9yKCdQb29sIHRlcm1pbmF0ZWQnKSk7XG4gIH0pO1xuICB0aGlzLnRhc2tzLmxlbmd0aCA9IDA7XG5cbiAgdmFyIGYgPSBmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgdGhpcy5fcmVtb3ZlV29ya2VyRnJvbUxpc3Qod29ya2VyKTtcbiAgfTtcbiAgdmFyIHJlbW92ZVdvcmtlciA9IGYuYmluZCh0aGlzKTtcblxuICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgdmFyIHdvcmtlcnMgPSB0aGlzLndvcmtlcnMuc2xpY2UoKTtcbiAgd29ya2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh3b3JrZXIpIHtcbiAgICB2YXIgdGVybVByb21pc2UgPSB3b3JrZXIudGVybWluYXRlQW5kTm90aWZ5KGZvcmNlLCB0aW1lb3V0KVxuICAgICAgLnRoZW4ocmVtb3ZlV29ya2VyKVxuICAgICAgLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgICAgbWUub25UZXJtaW5hdGVXb3JrZXIoe1xuICAgICAgICAgIGZvcmtBcmdzOiB3b3JrZXIuZm9ya0FyZ3MsXG4gICAgICAgICAgZm9ya09wdHM6IHdvcmtlci5mb3JrT3B0cyxcbiAgICAgICAgICBzY3JpcHQ6IHdvcmtlci5zY3JpcHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBwcm9taXNlcy5wdXNoKHRlcm1Qcm9taXNlKTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHN0YXRpc3RpY3Mgb24gdGFza3MgYW5kIHdvcmtlcnMuXG4gKiBAcmV0dXJuIHt7dG90YWxXb3JrZXJzOiBudW1iZXIsIGJ1c3lXb3JrZXJzOiBudW1iZXIsIGlkbGVXb3JrZXJzOiBudW1iZXIsIHBlbmRpbmdUYXNrczogbnVtYmVyLCBhY3RpdmVUYXNrczogbnVtYmVyfX0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzdGF0aXN0aWNzXG4gKi9cblBvb2wucHJvdG90eXBlLnN0YXRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG90YWxXb3JrZXJzID0gdGhpcy53b3JrZXJzLmxlbmd0aDtcbiAgdmFyIGJ1c3lXb3JrZXJzID0gdGhpcy53b3JrZXJzLmZpbHRlcihmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgcmV0dXJuIHdvcmtlci5idXN5KCk7XG4gIH0pLmxlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHRvdGFsV29ya2VyczogIHRvdGFsV29ya2VycyxcbiAgICBidXN5V29ya2VyczogICBidXN5V29ya2VycyxcbiAgICBpZGxlV29ya2VyczogICB0b3RhbFdvcmtlcnMgLSBidXN5V29ya2VycyxcblxuICAgIHBlbmRpbmdUYXNrczogIHRoaXMudGFza3MubGVuZ3RoLFxuICAgIGFjdGl2ZVRhc2tzOiAgIGJ1c3lXb3JrZXJzXG4gIH07XG59O1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIG1pbmltdW0gb2YgbWluV29ya2VycyBpcyB1cCBhbmQgcnVubmluZ1xuICogQHByb3RlY3RlZFxuICovXG5Qb29sLnByb3RvdHlwZS5fZW5zdXJlTWluV29ya2VycyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5taW5Xb3JrZXJzKSB7XG4gICAgZm9yKHZhciBpID0gdGhpcy53b3JrZXJzLmxlbmd0aDsgaSA8IHRoaXMubWluV29ya2VyczsgaSsrKSB7XG4gICAgICB0aGlzLndvcmtlcnMucHVzaCh0aGlzLl9jcmVhdGVXb3JrZXJIYW5kbGVyKCkpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IFdvcmtlckhhbmRsZXIgYW5kIHBhc3MgYWxsIG9wdGlvbnMuXG4gKiBAcmV0dXJuIHtXb3JrZXJIYW5kbGVyfVxuICogQHByaXZhdGVcbiAqL1xuUG9vbC5wcm90b3R5cGUuX2NyZWF0ZVdvcmtlckhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG92ZXJyaWRlblBhcmFtcyA9IHRoaXMub25DcmVhdGVXb3JrZXIoe1xuICAgIGZvcmtBcmdzOiB0aGlzLmZvcmtBcmdzLFxuICAgIGZvcmtPcHRzOiB0aGlzLmZvcmtPcHRzLFxuICAgIHNjcmlwdDogdGhpcy5zY3JpcHRcbiAgfSkgfHwge307XG5cbiAgcmV0dXJuIG5ldyBXb3JrZXJIYW5kbGVyKG92ZXJyaWRlblBhcmFtcy5zY3JpcHQgfHwgdGhpcy5zY3JpcHQsIHtcbiAgICBmb3JrQXJnczogb3ZlcnJpZGVuUGFyYW1zLmZvcmtBcmdzIHx8IHRoaXMuZm9ya0FyZ3MsXG4gICAgZm9ya09wdHM6IG92ZXJyaWRlblBhcmFtcy5mb3JrT3B0cyB8fCB0aGlzLmZvcmtPcHRzLFxuICAgIGRlYnVnUG9ydDogREVCVUdfUE9SVF9BTExPQ0FUT1IubmV4dEF2YWlsYWJsZVN0YXJ0aW5nQXQodGhpcy5kZWJ1Z1BvcnRTdGFydCksXG4gICAgd29ya2VyVHlwZTogdGhpcy53b3JrZXJUeXBlXG4gIH0pO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBtYXhXb3JrZXJzIG9wdGlvbiBpcyBhbiBpbnRlZ2VyID49IDFcbiAqIEBwYXJhbSB7Kn0gbWF4V29ya2Vyc1xuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBtYXhXb3JrZXJzIGhhcyBhIHZhbGlkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWF4V29ya2VycyhtYXhXb3JrZXJzKSB7XG4gIGlmICghaXNOdW1iZXIobWF4V29ya2VycykgfHwgIWlzSW50ZWdlcihtYXhXb3JrZXJzKSB8fCBtYXhXb3JrZXJzIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09wdGlvbiBtYXhXb3JrZXJzIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgPj0gMScpO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIG1pbldvcmtlcnMgb3B0aW9uIGlzIGFuIGludGVnZXIgPj0gMFxuICogQHBhcmFtIHsqfSBtaW5Xb3JrZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIHdoZW4gbWluV29ya2VycyBoYXMgYSB2YWxpZCB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU1pbldvcmtlcnMobWluV29ya2Vycykge1xuICBpZiAoIWlzTnVtYmVyKG1pbldvcmtlcnMpIHx8ICFpc0ludGVnZXIobWluV29ya2VycykgfHwgbWluV29ya2VycyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPcHRpb24gbWluV29ya2VycyBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyID49IDAnKTtcbiAgfVxufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHZhcmlhYmxlIGlzIGEgbnVtYmVyXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJucyB0cnVlIHdoZW4gdmFsdWUgaXMgYSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgbnVtYmVyIGlzIGFuIGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSkgPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbDtcbiIsICIvKipcbiAqIHdvcmtlciBtdXN0IGJlIHN0YXJ0ZWQgYXMgYSBjaGlsZCBwcm9jZXNzIG9yIGEgd2ViIHdvcmtlci5cbiAqIEl0IGxpc3RlbnMgZm9yIFJQQyBtZXNzYWdlcyBmcm9tIHRoZSBwYXJlbnQgcHJvY2Vzcy5cbiAqL1xuXG4vLyBzb3VyY2Ugb2YgaW5zcGlyYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcmVxdWlyZS1mb29sLXdlYnBhY2tcbnZhciByZXF1aXJlRm9vbFdlYnBhY2sgPSBldmFsKFxuICAgICd0eXBlb2YgcmVxdWlyZSAhPT0gXFwndW5kZWZpbmVkXFwnJyArXG4gICAgJyA/IHJlcXVpcmUnICtcbiAgICAnIDogZnVuY3Rpb24gKG1vZHVsZSkgeyB0aHJvdyBuZXcgRXJyb3IoXFwnTW9kdWxlIFwiICsgbW9kdWxlICsgXCIgbm90IGZvdW5kLlxcJykgfSdcbik7XG5cbi8qKlxuICogU3BlY2lhbCBtZXNzYWdlIHNlbnQgYnkgcGFyZW50IHdoaWNoIGNhdXNlcyB0aGUgd29ya2VyIHRvIHRlcm1pbmF0ZSBpdHNlbGYuXG4gKiBOb3QgYSBcIm1lc3NhZ2Ugb2JqZWN0XCI7IHRoaXMgc3RyaW5nIGlzIHRoZSBlbnRpcmUgbWVzc2FnZS5cbiAqL1xudmFyIFRFUk1JTkFURV9NRVRIT0RfSUQgPSAnX193b3JrZXJwb29sLXRlcm1pbmF0ZV9fJztcblxuLy8gdmFyIG5vZGVPU1BsYXRmb3JtID0gcmVxdWlyZSgnLi9lbnZpcm9ubWVudCcpLm5vZGVPU1BsYXRmb3JtO1xuXG4vLyBjcmVhdGUgYSB3b3JrZXIgQVBJIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgbWVzc2FnZXMgd2hpY2ggd29ya3MgYm90aCBvblxuLy8gbm9kZS5qcyBhbmQgaW4gdGhlIGJyb3dzZXJcbnZhciB3b3JrZXIgPSB7XG4gIGV4aXQ6IGZ1bmN0aW9uKCkge31cbn07XG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyB3b3JrZXIgaW4gdGhlIGJyb3dzZXJcbiAgd29ya2VyLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjYWxsYmFjayhtZXNzYWdlLmRhdGEpO1xuICAgIH0pXG4gIH07XG4gIHdvcmtlci5zZW5kID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICBwb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfTtcbn1cbmVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAvLyBub2RlLmpzXG5cbiAgdmFyIFdvcmtlclRocmVhZHM7XG4gIHRyeSB7XG4gICAgV29ya2VyVGhyZWFkcyA9IHJlcXVpcmVGb29sV2VicGFjaygnd29ya2VyX3RocmVhZHMnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmIGVycm9yLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xuICAgICAgLy8gbm8gd29ya2VyX3RocmVhZHMsIGZhbGxiYWNrIHRvIHN1Yi1wcm9jZXNzIGJhc2VkIHdvcmtlcnNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgaWYgKFdvcmtlclRocmVhZHMgJiZcbiAgICAvKiBpZiB0aGVyZSBpcyBhIHBhcmVudFBvcnQsIHdlIGFyZSBpbiBhIFdvcmtlclRocmVhZCAqL1xuICAgIFdvcmtlclRocmVhZHMucGFyZW50UG9ydCAhPT0gbnVsbCkge1xuICAgIHZhciBwYXJlbnRQb3J0ICA9IFdvcmtlclRocmVhZHMucGFyZW50UG9ydDtcbiAgICB3b3JrZXIuc2VuZCA9IHBhcmVudFBvcnQucG9zdE1lc3NhZ2UuYmluZChwYXJlbnRQb3J0KTtcbiAgICB3b3JrZXIub24gPSBwYXJlbnRQb3J0Lm9uLmJpbmQocGFyZW50UG9ydCk7XG4gIH0gZWxzZSB7XG4gICAgd29ya2VyLm9uID0gcHJvY2Vzcy5vbi5iaW5kKHByb2Nlc3MpO1xuICAgIHdvcmtlci5zZW5kID0gcHJvY2Vzcy5zZW5kLmJpbmQocHJvY2Vzcyk7XG4gICAgLy8gcmVnaXN0ZXIgZGlzY29ubmVjdCBoYW5kbGVyIG9ubHkgZm9yIHN1YnByb2Nlc3Mgd29ya2VyIHRvIGV4aXQgd2hlbiBwYXJlbnQgaXMga2lsbGVkIHVuZXhwZWN0ZWRseVxuICAgIHdvcmtlci5vbignZGlzY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KTtcbiAgICB3b3JrZXIuZXhpdCA9IHByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpO1xuICB9XG59XG5lbHNlIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdTY3JpcHQgbXVzdCBiZSBleGVjdXRlZCBhcyBhIHdvcmtlcicpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5yZWR1Y2UoZnVuY3Rpb24ocHJvZHVjdCwgbmFtZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvZHVjdCwgbmFtZSwge1xuXHR2YWx1ZTogZXJyb3JbbmFtZV0sXG5cdGVudW1lcmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGEgUHJvbWlzZSB2aWEgZHVjayB0eXBpbmcuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgaGF2aW5nIGZ1bmN0aW9ucyBgdGhlbmAgYW5kIGBjYXRjaGAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSAmJiAodHlwZW9mIHZhbHVlLmNhdGNoID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLy8gZnVuY3Rpb25zIGF2YWlsYWJsZSBleHRlcm5hbGx5XG53b3JrZXIubWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIHByb3ZpZGVkIGFyZ3VtZW50c1xuICogQHBhcmFtIHtTdHJpbmd9IGZuICAgICBTdHJpbmdpZmllZCBmdW5jdGlvblxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdICBGdW5jdGlvbiBhcmd1bWVudHNcbiAqIEByZXR1cm5zIHsqfVxuICovXG53b3JrZXIubWV0aG9kcy5ydW4gPSBmdW5jdGlvbiBydW4oZm4sIGFyZ3MpIHtcbiAgdmFyIGYgPSBuZXcgRnVuY3Rpb24oJ3JldHVybiAoJyArIGZuICsgJykuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsnKTtcbiAgcmV0dXJuIGYuYXBwbHkoZiwgYXJncyk7XG59O1xuXG4vKipcbiAqIEdldCBhIGxpc3Qgd2l0aCBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGlzIHdvcmtlclxuICogQHJldHVybiB7U3RyaW5nW119IG1ldGhvZHNcbiAqL1xud29ya2VyLm1ldGhvZHMubWV0aG9kcyA9IGZ1bmN0aW9uIG1ldGhvZHMoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh3b3JrZXIubWV0aG9kcyk7XG59O1xuXG52YXIgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG5cbndvcmtlci5vbignbWVzc2FnZScsIGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gIGlmIChyZXF1ZXN0ID09PSBURVJNSU5BVEVfTUVUSE9EX0lEKSB7XG4gICAgcmV0dXJuIHdvcmtlci5leGl0KDApO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIG1ldGhvZCA9IHdvcmtlci5tZXRob2RzW3JlcXVlc3QubWV0aG9kXTtcblxuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSByZXF1ZXN0LmlkO1xuICAgICAgXG4gICAgICAvLyBleGVjdXRlIHRoZSBmdW5jdGlvblxuICAgICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseShtZXRob2QsIHJlcXVlc3QucGFyYW1zKTtcblxuICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgIC8vIHByb21pc2UgcmV0dXJuZWQsIHJlc29sdmUgdGhpcyBhbmQgdGhlbiByZXR1cm5cbiAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIHdvcmtlci5zZW5kKHtcbiAgICAgICAgICAgICAgICBpZDogcmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgd29ya2VyLnNlbmQoe1xuICAgICAgICAgICAgICAgIGlkOiByZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogY29udmVydEVycm9yKGVycilcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0SWQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gaW1tZWRpYXRlIHJlc3VsdFxuICAgICAgICB3b3JrZXIuc2VuZCh7XG4gICAgICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3VycmVudFJlcXVlc3RJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1ldGhvZCBcIicgKyByZXF1ZXN0Lm1ldGhvZCArICdcIicpO1xuICAgIH1cbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgd29ya2VyLnNlbmQoe1xuICAgICAgaWQ6IHJlcXVlc3QuaWQsXG4gICAgICByZXN1bHQ6IG51bGwsXG4gICAgICBlcnJvcjogY29udmVydEVycm9yKGVycilcbiAgICB9KTtcbiAgfVxufSk7XG5cbi8qKlxuICogUmVnaXN0ZXIgbWV0aG9kcyB0byB0aGUgd29ya2VyXG4gKiBAcGFyYW0ge09iamVjdH0gbWV0aG9kc1xuICovXG53b3JrZXIucmVnaXN0ZXIgPSBmdW5jdGlvbiAobWV0aG9kcykge1xuXG4gIGlmIChtZXRob2RzKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAobWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB3b3JrZXIubWV0aG9kc1tuYW1lXSA9IG1ldGhvZHNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd29ya2VyLnNlbmQoJ3JlYWR5Jyk7XG5cbn07XG5cbndvcmtlci5lbWl0ID0gZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgaWYgKGN1cnJlbnRSZXF1ZXN0SWQpIHtcbiAgICB3b3JrZXIuc2VuZCh7XG4gICAgICBpZDogY3VycmVudFJlcXVlc3RJZCxcbiAgICAgIGlzRXZlbnQ6IHRydWUsXG4gICAgICBwYXlsb2FkXG4gICAgfSk7XG4gIH1cbn07XG5cbmlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZXhwb3J0cy5hZGQgPSB3b3JrZXIucmVnaXN0ZXI7XG4gIGV4cG9ydHMuZW1pdCA9IHdvcmtlci5lbWl0O1xufVxuIiwgInZhciBlbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgd29ya2VyIHBvb2xcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuICogQHBhcmFtIHtXb3JrZXJQb29sT3B0aW9uc30gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7UG9vbH0gcG9vbFxuICovXG5leHBvcnRzLnBvb2wgPSBmdW5jdGlvbiBwb29sKHNjcmlwdCwgb3B0aW9ucykge1xuICB2YXIgUG9vbCA9IHJlcXVpcmUoJy4vUG9vbCcpO1xuXG4gIHJldHVybiBuZXcgUG9vbChzY3JpcHQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSB3b3JrZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXIgYSBzZXQgb2YgbWV0aG9kcyB0byB0aGUgd29ya2VyLlxuICogQHBhcmFtIHtPYmplY3R9IFttZXRob2RzXVxuICovXG5leHBvcnRzLndvcmtlciA9IGZ1bmN0aW9uIHdvcmtlcihtZXRob2RzKSB7XG4gIHZhciB3b3JrZXIgPSByZXF1aXJlKCcuL3dvcmtlcicpO1xuICB3b3JrZXIuYWRkKG1ldGhvZHMpO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhbiBldmVudCB0byB0aGUgcGFyZW50IHdvcmtlciBwb29sLlxuICogQHBhcmFtIHthbnl9IHBheWxvYWQgXG4gKi9cbmV4cG9ydHMud29ya2VyRW1pdCA9IGZ1bmN0aW9uIHdvcmtlckVtaXQocGF5bG9hZCkge1xuICB2YXIgd29ya2VyID0gcmVxdWlyZSgnLi93b3JrZXInKTtcbiAgd29ya2VyLmVtaXQocGF5bG9hZCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHByb21pc2UuXG4gKiBAdHlwZSB7UHJvbWlzZX0gcHJvbWlzZVxuICovXG5leHBvcnRzLlByb21pc2UgPSByZXF1aXJlKCcuL1Byb21pc2UnKTtcblxuZXhwb3J0cy5wbGF0Zm9ybSA9IGVudmlyb25tZW50LnBsYXRmb3JtO1xuZXhwb3J0cy5pc01haW5UaHJlYWQgPSBlbnZpcm9ubWVudC5pc01haW5UaHJlYWQ7XG5leHBvcnRzLmNwdXMgPSBlbnZpcm9ubWVudC5jcHVzOyIsICJpbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG50eXBlIFN0eWxlRm4gPSAoc3RyOiBzdHJpbmcpID0+IHN0cmluZztcbmNvbnN0IHsgc3RkZXJyIH0gPSBwcm9jZXNzO1xuXG5jb25zdCBsb2dnZXIgPSAoc3RyZWFtOiBXcml0YWJsZSwgc3R5bGVzPzogU3R5bGVGbltdKSA9PiAoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gIGxldCBzdHIgPSB1dGlsLmZvcm1hdChmbXQsIC4uLmFyZ3MpO1xuICBpZiAoc3R5bGVzICYmIHN0eWxlcy5sZW5ndGgpIHtcbiAgICBzdHIgPSBzdHlsZXMucmVkdWNlKChhLCBzdHlsZSkgPT4gc3R5bGUoYSksIHN0cik7XG4gIH1cbiAgc3RyZWFtLndyaXRlKHN0ciArICdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmludCA9IGxvZ2dlcihzdGRlcnIpO1xuZXhwb3J0IGNvbnN0IGVycm9yID0gbG9nZ2VyKHN0ZGVyciwgW2NoYWxrLnJlZF0pO1xuZXhwb3J0IGNvbnN0IHdhcm5pbmcgPSBsb2dnZXIoc3RkZXJyLCBbY2hhbGsueWVsbG93XSk7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ncmVlbl0pO1xuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodCA9IGxvZ2dlcihzdGRlcnIsIFtjaGFsay5ib2xkXSk7XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuZnJvbUNhbGxiYWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykgZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGZuLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAuLi5hcmdzLFxuICAgICAgICAgIChlcnIsIHJlcykgPT4gKGVyciAhPSBudWxsKSA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShyZXMpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cblxuZXhwb3J0cy5mcm9tUHJvbWlzZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgY2IgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV1cbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncylcbiAgICBlbHNlIGZuLmFwcGx5KHRoaXMsIGFyZ3Muc2xpY2UoMCwgLTEpKS50aGVuKHIgPT4gY2IobnVsbCwgciksIGNiKVxuICB9LCAnbmFtZScsIHsgdmFsdWU6IGZuLm5hbWUgfSlcbn1cbiIsICJ2YXIgY29uc3RhbnRzID0gcmVxdWlyZSgnY29uc3RhbnRzJylcblxudmFyIG9yaWdDd2QgPSBwcm9jZXNzLmN3ZFxudmFyIGN3ZCA9IG51bGxcblxudmFyIHBsYXRmb3JtID0gcHJvY2Vzcy5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk0gfHwgcHJvY2Vzcy5wbGF0Zm9ybVxuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIWN3ZClcbiAgICBjd2QgPSBvcmlnQ3dkLmNhbGwocHJvY2VzcylcbiAgcmV0dXJuIGN3ZFxufVxudHJ5IHtcbiAgcHJvY2Vzcy5jd2QoKVxufSBjYXRjaCAoZXIpIHt9XG5cbi8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHVudGlsIG5vZGUuanMgMTIgaXMgcmVxdWlyZWRcbmlmICh0eXBlb2YgcHJvY2Vzcy5jaGRpciA9PT0gJ2Z1bmN0aW9uJykge1xuICB2YXIgY2hkaXIgPSBwcm9jZXNzLmNoZGlyXG4gIHByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZCkge1xuICAgIGN3ZCA9IG51bGxcbiAgICBjaGRpci5jYWxsKHByb2Nlc3MsIGQpXG4gIH1cbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb2Nlc3MuY2hkaXIsIGNoZGlyKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoXG5cbmZ1bmN0aW9uIHBhdGNoIChmcykge1xuICAvLyAocmUtKWltcGxlbWVudCBzb21lIHRoaW5ncyB0aGF0IGFyZSBrbm93biBidXN0ZWQgb3IgbWlzc2luZy5cblxuICAvLyBsY2htb2QsIGJyb2tlbiBwcmlvciB0byAwLjYuMlxuICAvLyBiYWNrLXBvcnQgdGhlIGZpeCBoZXJlLlxuICBpZiAoY29uc3RhbnRzLmhhc093blByb3BlcnR5KCdPX1NZTUxJTksnKSAmJlxuICAgICAgcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC9edjBcXC42XFwuWzAtMl18XnYwXFwuNVxcLi8pKSB7XG4gICAgcGF0Y2hMY2htb2QoZnMpXG4gIH1cblxuICAvLyBsdXRpbWVzIGltcGxlbWVudGF0aW9uLCBvciBuby1vcFxuICBpZiAoIWZzLmx1dGltZXMpIHtcbiAgICBwYXRjaEx1dGltZXMoZnMpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ3JhY2VmdWwtZnMvaXNzdWVzLzRcbiAgLy8gQ2hvd24gc2hvdWxkIG5vdCBmYWlsIG9uIGVpbnZhbCBvciBlcGVybSBpZiBub24tcm9vdC5cbiAgLy8gSXQgc2hvdWxkIG5vdCBmYWlsIG9uIGVub3N5cyBldmVyLCBhcyB0aGlzIGp1c3QgaW5kaWNhdGVzXG4gIC8vIHRoYXQgYSBmcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGludGVuZGVkIG9wZXJhdGlvbi5cblxuICBmcy5jaG93biA9IGNob3duRml4KGZzLmNob3duKVxuICBmcy5mY2hvd24gPSBjaG93bkZpeChmcy5mY2hvd24pXG4gIGZzLmxjaG93biA9IGNob3duRml4KGZzLmxjaG93bilcblxuICBmcy5jaG1vZCA9IGNobW9kRml4KGZzLmNobW9kKVxuICBmcy5mY2htb2QgPSBjaG1vZEZpeChmcy5mY2htb2QpXG4gIGZzLmxjaG1vZCA9IGNobW9kRml4KGZzLmxjaG1vZClcblxuICBmcy5jaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuY2hvd25TeW5jKVxuICBmcy5mY2hvd25TeW5jID0gY2hvd25GaXhTeW5jKGZzLmZjaG93blN5bmMpXG4gIGZzLmxjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMubGNob3duU3luYylcblxuICBmcy5jaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuY2htb2RTeW5jKVxuICBmcy5mY2htb2RTeW5jID0gY2htb2RGaXhTeW5jKGZzLmZjaG1vZFN5bmMpXG4gIGZzLmxjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMubGNobW9kU3luYylcblxuICBmcy5zdGF0ID0gc3RhdEZpeChmcy5zdGF0KVxuICBmcy5mc3RhdCA9IHN0YXRGaXgoZnMuZnN0YXQpXG4gIGZzLmxzdGF0ID0gc3RhdEZpeChmcy5sc3RhdClcblxuICBmcy5zdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLnN0YXRTeW5jKVxuICBmcy5mc3RhdFN5bmMgPSBzdGF0Rml4U3luYyhmcy5mc3RhdFN5bmMpXG4gIGZzLmxzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmxzdGF0U3luYylcblxuICAvLyBpZiBsY2htb2QvbGNob3duIGRvIG5vdCBleGlzdCwgdGhlbiBtYWtlIHRoZW0gbm8tb3BzXG4gIGlmIChmcy5jaG1vZCAmJiAhZnMubGNobW9kKSB7XG4gICAgZnMubGNobW9kID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG1vZFN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG4gIGlmIChmcy5jaG93biAmJiAhZnMubGNob3duKSB7XG4gICAgZnMubGNob3duID0gZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkLCBjYikge1xuICAgICAgaWYgKGNiKSBwcm9jZXNzLm5leHRUaWNrKGNiKVxuICAgIH1cbiAgICBmcy5sY2hvd25TeW5jID0gZnVuY3Rpb24gKCkge31cbiAgfVxuXG4gIC8vIG9uIFdpbmRvd3MsIEEvViBzb2Z0d2FyZSBjYW4gbG9jayB0aGUgZGlyZWN0b3J5LCBjYXVzaW5nIHRoaXNcbiAgLy8gdG8gZmFpbCB3aXRoIGFuIEVBQ0NFUyBvciBFUEVSTSBpZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIG5ld2x5XG4gIC8vIGNyZWF0ZWQgZmlsZXMuICBUcnkgYWdhaW4gb24gZmFpbHVyZSwgZm9yIHVwIHRvIDYwIHNlY29uZHMuXG5cbiAgLy8gU2V0IHRoZSB0aW1lb3V0IHRoaXMgbG9uZyBiZWNhdXNlIHNvbWUgV2luZG93cyBBbnRpLVZpcnVzLCBzdWNoIGFzIFBhcml0eVxuICAvLyBiaXQ5LCBtYXkgbG9jayBmaWxlcyBmb3IgdXAgdG8gYSBtaW51dGUsIGNhdXNpbmcgbnBtIHBhY2thZ2UgaW5zdGFsbFxuICAvLyBmYWlsdXJlcy4gQWxzbywgdGFrZSBjYXJlIHRvIHlpZWxkIHRoZSBzY2hlZHVsZXIuIFdpbmRvd3Mgc2NoZWR1bGluZyBnaXZlc1xuICAvLyBDUFUgdG8gYSBidXN5IGxvb3BpbmcgcHJvY2Vzcywgd2hpY2ggY2FuIGNhdXNlIHRoZSBwcm9ncmFtIGNhdXNpbmcgdGhlIGxvY2tcbiAgLy8gY29udGVudGlvbiB0byBiZSBzdGFydmVkIG9mIENQVSBieSBub2RlLCBzbyB0aGUgY29udGVudGlvbiBkb2Vzbid0IHJlc29sdmUuXG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgZnMucmVuYW1lID0gdHlwZW9mIGZzLnJlbmFtZSAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlbmFtZVxuICAgIDogKGZ1bmN0aW9uIChmcyRyZW5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbmFtZSAoZnJvbSwgdG8sIGNiKSB7XG4gICAgICAgIHZhciBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgdmFyIGJhY2tvZmYgPSAwO1xuICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIGZ1bmN0aW9uIENCIChlcikge1xuICAgICAgICAgIGlmIChlclxuICAgICAgICAgICAgICAmJiAoZXIuY29kZSA9PT0gXCJFQUNDRVNcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsICJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtXG5cbm1vZHVsZS5leHBvcnRzID0gbGVnYWN5XG5cbmZ1bmN0aW9uIGxlZ2FjeSAoZnMpIHtcbiAgcmV0dXJuIHtcbiAgICBSZWFkU3RyZWFtOiBSZWFkU3RyZWFtLFxuICAgIFdyaXRlU3RyZWFtOiBXcml0ZVN0cmVhbVxuICB9XG5cbiAgZnVuY3Rpb24gUmVhZFN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkU3RyZWFtKSkgcmV0dXJuIG5ldyBSZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpO1xuXG4gICAgU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMuZmQgPSBudWxsO1xuICAgIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3InO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5idWZmZXJTaXplID0gNjQgKiAxMDI0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZykgdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIGlmICh0aGlzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuc3RhcnQpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdzdGFydCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuZCA9IEluZmluaXR5O1xuICAgICAgfSBlbHNlIGlmICgnbnVtYmVyJyAhPT0gdHlwZW9mIHRoaXMuZW5kKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignZW5kIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgPiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPD0gZW5kJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mZCAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fcmVhZCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMub3Blbih0aGlzLnBhdGgsIHRoaXMuZmxhZ3MsIHRoaXMubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIHNlbGYucmVhZGFibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmZkID0gZmQ7XG4gICAgICBzZWxmLmVtaXQoJ29wZW4nLCBmZCk7XG4gICAgICBzZWxmLl9yZWFkKCk7XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIFdyaXRlU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKSkgcmV0dXJuIG5ldyBXcml0ZVN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMuZmxhZ3MgPSAndyc7XG4gICAgdGhpcy5lbmNvZGluZyA9ICdiaW5hcnknO1xuICAgIHRoaXMubW9kZSA9IDQzODsgLyo9MDY2NiovXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBNaXhpbiBvcHRpb25zIGludG8gdGhpc1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgIHRoaXNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhcnQgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgbXVzdCBiZSA+PSB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZmQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX29wZW4gPSBmcy5vcGVuO1xuICAgICAgdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3BlbiwgdGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIHVuZGVmaW5lZF0pO1xuICAgICAgdGhpcy5mbHVzaCgpO1xuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lXG5cbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmouX19wcm90b19fXG59XG5cbmZ1bmN0aW9uIGNsb25lIChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JylcbiAgICByZXR1cm4gb2JqXG5cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdClcbiAgICB2YXIgY29weSA9IHsgX19wcm90b19fOiBnZXRQcm90b3R5cGVPZihvYmopIH1cbiAgZWxzZVxuICAgIHZhciBjb3B5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvcHksIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gIH0pXG5cbiAgcmV0dXJuIGNvcHlcbn1cbiIsICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuLy8gVGhpcyBpcyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vcm1hbGl6ZS9telxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LTIwMTYgSm9uYXRoYW4gT25nIG1lQGpvbmdsZWJlcnJ5LmNvbSBhbmQgQ29udHJpYnV0b3JzXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuY29uc3QgYXBpID0gW1xuICAnYWNjZXNzJyxcbiAgJ2FwcGVuZEZpbGUnLFxuICAnY2htb2QnLFxuICAnY2hvd24nLFxuICAnY2xvc2UnLFxuICAnY29weUZpbGUnLFxuICAnZmNobW9kJyxcbiAgJ2ZjaG93bicsXG4gICdmZGF0YXN5bmMnLFxuICAnZnN0YXQnLFxuICAnZnN5bmMnLFxuICAnZnRydW5jYXRlJyxcbiAgJ2Z1dGltZXMnLFxuICAnbGNobW9kJyxcbiAgJ2xjaG93bicsXG4gICdsaW5rJyxcbiAgJ2xzdGF0JyxcbiAgJ21rZGlyJyxcbiAgJ21rZHRlbXAnLFxuICAnb3BlbicsXG4gICdvcGVuZGlyJyxcbiAgJ3JlYWRkaXInLFxuICAncmVhZEZpbGUnLFxuICAncmVhZGxpbmsnLFxuICAncmVhbHBhdGgnLFxuICAncmVuYW1lJyxcbiAgJ3JtJyxcbiAgJ3JtZGlyJyxcbiAgJ3N0YXQnLFxuICAnc3ltbGluaycsXG4gICd0cnVuY2F0ZScsXG4gICd1bmxpbmsnLFxuICAndXRpbWVzJyxcbiAgJ3dyaXRlRmlsZSdcbl0uZmlsdGVyKGtleSA9PiB7XG4gIC8vIFNvbWUgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgb24gc29tZSBzeXN0ZW1zLiBFeDpcbiAgLy8gZnMub3BlbmRpciB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MTIuMTIuMFxuICAvLyBmcy5ybSB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MTQuMTQuMFxuICAvLyBmcy5sY2hvd24gaXMgbm90IGF2YWlsYWJsZSBvbiBhdCBsZWFzdCBzb21lIExpbnV4XG4gIHJldHVybiB0eXBlb2YgZnNba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xufSlcblxuLy8gRXhwb3J0IGFsbCBrZXlzOlxuT2JqZWN0LmtleXMoZnMpLmZvckVhY2goa2V5ID0+IHtcbiAgaWYgKGtleSA9PT0gJ3Byb21pc2VzJykge1xuICAgIC8vIGZzLnByb21pc2VzIGlzIGEgZ2V0dGVyIHByb3BlcnR5IHRoYXQgdHJpZ2dlcnMgRXhwZXJpbWVudGFsV2FybmluZ1xuICAgIC8vIERvbid0IHJlLWV4cG9ydCBpdCBoZXJlLCB0aGUgZ2V0dGVyIGlzIGRlZmluZWQgaW4gXCJsaWIvaW5kZXguanNcIlxuICAgIHJldHVyblxuICB9XG4gIGV4cG9ydHNba2V5XSA9IGZzW2tleV1cbn0pXG5cbi8vIFVuaXZlcnNhbGlmeSBhc3luYyBtZXRob2RzOlxuYXBpLmZvckVhY2gobWV0aG9kID0+IHtcbiAgZXhwb3J0c1ttZXRob2RdID0gdShmc1ttZXRob2RdKVxufSlcblxuLy8gV2UgZGlmZmVyIGZyb20gbXovZnMgaW4gdGhhdCB3ZSBzdGlsbCBzaGlwIHRoZSBvbGQsIGJyb2tlbiwgZnMuZXhpc3RzKClcbi8vIHNpbmNlIHdlIGFyZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBuYXRpdmUgbW9kdWxlXG5leHBvcnRzLmV4aXN0cyA9IGZ1bmN0aW9uIChmaWxlbmFtZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzKGZpbGVuYW1lLCByZXNvbHZlKVxuICB9KVxufVxuXG4vLyBmcy5yZWFkKCksIGZzLndyaXRlKCksICYgZnMud3JpdGV2KCkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBkdWUgdG8gbXVsdGlwbGUgY2FsbGJhY2sgYXJnc1xuXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLnJlYWQoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaylcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLnJlYWQoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCAoZXJyLCBieXRlc1JlYWQsIGJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNSZWFkLCBidWZmZXIgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyBGdW5jdGlvbiBzaWduYXR1cmUgY2FuIGJlXG4vLyBmcy53cml0ZShmZCwgYnVmZmVyWywgb2Zmc2V0WywgbGVuZ3RoWywgcG9zaXRpb25dXV0sIGNhbGxiYWNrKVxuLy8gT1Jcbi8vIGZzLndyaXRlKGZkLCBzdHJpbmdbLCBwb3NpdGlvblssIGVuY29kaW5nXV0sIGNhbGxiYWNrKVxuLy8gV2UgbmVlZCB0byBoYW5kbGUgYm90aCBjYXNlcywgc28gd2UgdXNlIC4uLmFyZ3NcbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy53cml0ZShmZCwgYnVmZmVyLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy53cml0ZShmZCwgYnVmZmVyLCAuLi5hcmdzLCAoZXJyLCBieXRlc1dyaXR0ZW4sIGJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXIgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vLyBmcy53cml0ZXYgb25seSBhdmFpbGFibGUgaW4gTm9kZSB2MTIuOS4wK1xuaWYgKHR5cGVvZiBmcy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4gIC8vIHMud3JpdGV2KGZkLCBidWZmZXJzWywgcG9zaXRpb25dLCBjYWxsYmFjaylcbiAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIG9wdGlvbmFsIGFyZywgc28gd2UgdXNlIC4uLmFyZ3NcbiAgZXhwb3J0cy53cml0ZXYgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGZzLndyaXRldihmZCwgYnVmZmVycywgLi4uYXJncylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzLCAoZXJyLCBieXRlc1dyaXR0ZW4sIGJ1ZmZlcnMpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlcnMgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG4vLyBmcy5yZWFscGF0aC5uYXRpdmUgb25seSBhdmFpbGFibGUgaW4gTm9kZSB2OS4yK1xuaWYgKHR5cGVvZiBmcy5yZWFscGF0aC5uYXRpdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgZXhwb3J0cy5yZWFscGF0aC5uYXRpdmUgPSB1KGZzLnJlYWxwYXRoLm5hdGl2ZSlcbn1cbiIsICJtb2R1bGUuZXhwb3J0cyA9IHIgPT4ge1xuICBjb25zdCBuID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJykubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKVxuICByID0gci5zcGxpdCgnLicpLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgcmV0dXJuIG5bMF0gPiByWzBdIHx8IChuWzBdID09PSByWzBdICYmIChuWzFdID4gclsxXSB8fCAoblsxXSA9PT0gclsxXSAmJiBuWzJdID49IHJbMl0pKSlcbn1cbiIsICIvLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tYWtlLWRpclxuLy8gQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuJ3VzZSBzdHJpY3QnXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGF0TGVhc3ROb2RlID0gcmVxdWlyZSgnYXQtbGVhc3Qtbm9kZScpXG5cbmNvbnN0IHVzZU5hdGl2ZVJlY3Vyc2l2ZU9wdGlvbiA9IGF0TGVhc3ROb2RlKCcxMC4xMi4wJylcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84OTg3XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8xMDg4XG5jb25zdCBjaGVja1BhdGggPSBwdGggPT4ge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycyA9IC9bPD46XCJ8PypdLy50ZXN0KHB0aC5yZXBsYWNlKHBhdGgucGFyc2UocHRoKS5yb290LCAnJykpXG5cbiAgICBpZiAocGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7cHRofWApXG4gICAgICBlcnJvci5jb2RlID0gJ0VJTlZBTCdcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NPcHRpb25zID0gb3B0aW9ucyA9PiB7XG4gIGNvbnN0IGRlZmF1bHRzID0geyBtb2RlOiAwbzc3NyB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIG9wdGlvbnMgPSB7IG1vZGU6IG9wdGlvbnMgfVxuICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4ub3B0aW9ucyB9XG59XG5cbmNvbnN0IHBlcm1pc3Npb25FcnJvciA9IHB0aCA9PiB7XG4gIC8vIFRoaXMgcmVwbGljYXRlcyB0aGUgZXhjZXB0aW9uIG9mIGBmcy5ta2RpcmAgd2l0aCBuYXRpdmUgdGhlXG4gIC8vIGByZWN1c2l2ZWAgb3B0aW9uIHdoZW4gcnVuIG9uIGFuIGludmFsaWQgZHJpdmUgdW5kZXIgV2luZG93cy5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYG9wZXJhdGlvbiBub3QgcGVybWl0dGVkLCBta2RpciAnJHtwdGh9J2ApXG4gIGVycm9yLmNvZGUgPSAnRVBFUk0nXG4gIGVycm9yLmVycm5vID0gLTQwNDhcbiAgZXJyb3IucGF0aCA9IHB0aFxuICBlcnJvci5zeXNjYWxsID0gJ21rZGlyJ1xuICByZXR1cm4gZXJyb3Jcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChpbnB1dCwgb3B0aW9ucykgPT4ge1xuICBjaGVja1BhdGgoaW5wdXQpXG4gIG9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXG4gIGlmICh1c2VOYXRpdmVSZWN1cnNpdmVPcHRpb24pIHtcbiAgICBjb25zdCBwdGggPSBwYXRoLnJlc29sdmUoaW5wdXQpXG5cbiAgICByZXR1cm4gZnMubWtkaXIocHRoLCB7XG4gICAgICBtb2RlOiBvcHRpb25zLm1vZGUsXG4gICAgICByZWN1cnNpdmU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbWFrZSA9IGFzeW5jIHB0aCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHB0aCwgb3B0aW9ucy5tb2RlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgaWYgKHBhdGguZGlybmFtZShwdGgpID09PSBwdGgpIHtcbiAgICAgICAgICB0aHJvdyBwZXJtaXNzaW9uRXJyb3IocHRoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ251bGwgYnl0ZXMnKSkge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBtYWtlKHBhdGguZGlybmFtZShwdGgpKVxuICAgICAgICByZXR1cm4gbWFrZShwdGgpXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChwdGgpXG4gICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIC8vIFRoaXMgZXJyb3IgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgdXNlclxuICAgICAgICAgIC8vIGl0IGlzIGNhdWdodCBiZWxvdywgYW5kIHRoZSBvcmlnaW5hbCBlcnJvciBpcyB0aHJvd25cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYXRoIGlzIG5vdCBhIGRpcmVjdG9yeScpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlKHBhdGgucmVzb2x2ZShpbnB1dCkpXG59XG5cbm1vZHVsZS5leHBvcnRzLm1ha2VEaXJTeW5jID0gKGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChpbnB1dClcbiAgb3B0aW9ucyA9IHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cbiAgaWYgKHVzZU5hdGl2ZVJlY3Vyc2l2ZU9wdGlvbikge1xuICAgIGNvbnN0IHB0aCA9IHBhdGgucmVzb2x2ZShpbnB1dClcblxuICAgIHJldHVybiBmcy5ta2RpclN5bmMocHRoLCB7XG4gICAgICBtb2RlOiBvcHRpb25zLm1vZGUsXG4gICAgICByZWN1cnNpdmU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgbWFrZSA9IHB0aCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZzLm1rZGlyU3luYyhwdGgsIG9wdGlvbnMubW9kZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFUEVSTScpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGlmIChwYXRoLmRpcm5hbWUocHRoKSA9PT0gcHRoKSB7XG4gICAgICAgICAgdGhyb3cgcGVybWlzc2lvbkVycm9yKHB0aClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdudWxsIGJ5dGVzJykpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgbWFrZShwYXRoLmRpcm5hbWUocHRoKSlcbiAgICAgICAgcmV0dXJuIG1ha2UocHRoKVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHB0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIC8vIFRoaXMgZXJyb3IgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgdXNlclxuICAgICAgICAgIC8vIGl0IGlzIGNhdWdodCBiZWxvdywgYW5kIHRoZSBvcmlnaW5hbCBlcnJvciBpcyB0aHJvd25cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYXRoIGlzIG5vdCBhIGRpcmVjdG9yeScpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlKHBhdGgucmVzb2x2ZShpbnB1dCkpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHsgbWFrZURpcjogX21ha2VEaXIsIG1ha2VEaXJTeW5jIH0gPSByZXF1aXJlKCcuL21ha2UtZGlyJylcbmNvbnN0IG1ha2VEaXIgPSB1KF9tYWtlRGlyKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWtkaXJzOiBtYWtlRGlyLFxuICBta2RpcnNTeW5jOiBtYWtlRGlyU3luYyxcbiAgLy8gYWxpYXNcbiAgbWtkaXJwOiBtYWtlRGlyLFxuICBta2RpcnBTeW5jOiBtYWtlRGlyU3luYyxcbiAgZW5zdXJlRGlyOiBtYWtlRGlyLFxuICBlbnN1cmVEaXJTeW5jOiBtYWtlRGlyU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcblxuZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKSB7XG4gIC8vIGlmICghSEFTX01JTExJU19SRVMpIHJldHVybiBmcy51dGltZXMocGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaylcbiAgZnMub3BlbihwYXRoLCAncisnLCAoZXJyLCBmZCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgZnMuZnV0aW1lcyhmZCwgYXRpbWUsIG10aW1lLCBmdXRpbWVzRXJyID0+IHtcbiAgICAgIGZzLmNsb3NlKGZkLCBjbG9zZUVyciA9PiB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZnV0aW1lc0VyciB8fCBjbG9zZUVycilcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gdXRpbWVzTWlsbGlzU3luYyAocGF0aCwgYXRpbWUsIG10aW1lKSB7XG4gIGNvbnN0IGZkID0gZnMub3BlblN5bmMocGF0aCwgJ3IrJylcbiAgZnMuZnV0aW1lc1N5bmMoZmQsIGF0aW1lLCBtdGltZSlcbiAgcmV0dXJuIGZzLmNsb3NlU3luYyhmZClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHV0aW1lc01pbGxpcyxcbiAgdXRpbWVzTWlsbGlzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IGF0TGVhc3ROb2RlID0gcmVxdWlyZSgnYXQtbGVhc3Qtbm9kZScpXG5cbmNvbnN0IG5vZGVTdXBwb3J0c0JpZ0ludCA9IGF0TGVhc3ROb2RlKCcxMC41LjAnKVxuY29uc3Qgc3RhdCA9IChmaWxlKSA9PiBub2RlU3VwcG9ydHNCaWdJbnQgPyBmcy5zdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pIDogZnMuc3RhdChmaWxlKVxuY29uc3Qgc3RhdFN5bmMgPSAoZmlsZSkgPT4gbm9kZVN1cHBvcnRzQmlnSW50ID8gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSkgOiBmcy5zdGF0U3luYyhmaWxlKVxuXG5mdW5jdGlvbiBnZXRTdGF0cyAoc3JjLCBkZXN0KSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdChzcmMpLFxuICAgIHN0YXQoZGVzdCkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBudWxsXG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICBdKS50aGVuKChbc3JjU3RhdCwgZGVzdFN0YXRdKSA9PiAoeyBzcmNTdGF0LCBkZXN0U3RhdCB9KSlcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdHNTeW5jIChzcmMsIGRlc3QpIHtcbiAgbGV0IGRlc3RTdGF0XG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG4gIHRyeSB7XG4gICAgZGVzdFN0YXQgPSBzdGF0U3luYyhkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdDogbnVsbCB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQgfVxufVxuXG5mdW5jdGlvbiBjaGVja1BhdGhzIChzcmMsIGRlc3QsIGZ1bmNOYW1lLCBjYikge1xuICB1dGlsLmNhbGxiYWNraWZ5KGdldFN0YXRzKShzcmMsIGRlc3QsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0c1xuICAgIGlmIChkZXN0U3RhdCAmJiBhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKCdTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLicpKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmIGlzU3JjU3ViZGlyKHNyYywgZGVzdCkpIHtcbiAgICAgIHJldHVybiBjYihuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKSlcbiAgICB9XG4gICAgcmV0dXJuIGNiKG51bGwsIHsgc3JjU3RhdCwgZGVzdFN0YXQgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdClcbiAgaWYgKGRlc3RTdGF0ICYmIGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuJylcbiAgfVxuICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmIGlzU3JjU3ViZGlyKHNyYywgZGVzdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuLy8gcmVjdXJzaXZlbHkgY2hlY2sgaWYgZGVzdCBwYXJlbnQgaXMgYSBzdWJkaXJlY3Rvcnkgb2Ygc3JjLlxuLy8gSXQgd29ya3MgZm9yIGFsbCBmaWxlIHR5cGVzIGluY2x1ZGluZyBzeW1saW5rcyBzaW5jZSBpdFxuLy8gY2hlY2tzIHRoZSBzcmMgYW5kIGRlc3QgaW5vZGVzLiBJdCBzdGFydHMgZnJvbSB0aGUgZGVlcGVzdFxuLy8gcGFyZW50IGFuZCBzdG9wcyBvbmNlIGl0IHJlYWNoZXMgdGhlIHNyYyBwYXJlbnQgb3IgdGhlIHJvb3QgcGF0aC5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50UGF0aHMgKHNyYywgc3JjU3RhdCwgZGVzdCwgZnVuY05hbWUsIGNiKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm4gY2IoKVxuICBjb25zdCBjYWxsYmFjayA9IChlcnIsIGRlc3RTdGF0KSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIGNiKClcbiAgICAgIHJldHVybiBjYihlcnIpXG4gICAgfVxuICAgIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgICByZXR1cm4gY2IobmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSkpXG4gICAgfVxuICAgIHJldHVybiBjaGVja1BhcmVudFBhdGhzKHNyYywgc3JjU3RhdCwgZGVzdFBhcmVudCwgZnVuY05hbWUsIGNiKVxuICB9XG4gIGlmIChub2RlU3VwcG9ydHNCaWdJbnQpIGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSwgY2FsbGJhY2spXG4gIGVsc2UgZnMuc3RhdChkZXN0UGFyZW50LCBjYWxsYmFjaylcbn1cblxuZnVuY3Rpb24gY2hlY2tQYXJlbnRQYXRoc1N5bmMgKHNyYywgc3JjU3RhdCwgZGVzdCwgZnVuY05hbWUpIHtcbiAgY29uc3Qgc3JjUGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShzcmMpKVxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShkZXN0KSlcbiAgaWYgKGRlc3RQYXJlbnQgPT09IHNyY1BhcmVudCB8fCBkZXN0UGFyZW50ID09PSBwYXRoLnBhcnNlKGRlc3RQYXJlbnQpLnJvb3QpIHJldHVyblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRTeW5jKGRlc3RQYXJlbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVyblxuICAgIHRocm93IGVyclxuICB9XG4gIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZGVzdFN0YXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0UGFyZW50LCBmdW5jTmFtZSlcbn1cblxuZnVuY3Rpb24gYXJlSWRlbnRpY2FsIChzcmNTdGF0LCBkZXN0U3RhdCkge1xuICBpZiAoZGVzdFN0YXQuaW5vICYmIGRlc3RTdGF0LmRldiAmJiBkZXN0U3RhdC5pbm8gPT09IHNyY1N0YXQuaW5vICYmIGRlc3RTdGF0LmRldiA9PT0gc3JjU3RhdC5kZXYpIHtcbiAgICBpZiAobm9kZVN1cHBvcnRzQmlnSW50IHx8IGRlc3RTdGF0LmlubyA8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICAvLyBkZWZpbml0aXZlIGFuc3dlclxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gVXNlIGFkZGl0aW9uYWwgaGV1cmlzdGljcyBpZiB3ZSBjYW4ndCB1c2UgJ2JpZ2ludCcuXG4gICAgLy8gRGlmZmVyZW50ICdpbm8nIGNvdWxkIGJlIHJlcHJlc2VudGVkIHRoZSBzYW1lIGlmIHRoZXkgYXJlID49IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG4gICAgLy8gU2VlIGlzc3VlIDY1N1xuICAgIGlmIChkZXN0U3RhdC5zaXplID09PSBzcmNTdGF0LnNpemUgJiZcbiAgICAgICAgZGVzdFN0YXQubW9kZSA9PT0gc3JjU3RhdC5tb2RlICYmXG4gICAgICAgIGRlc3RTdGF0Lm5saW5rID09PSBzcmNTdGF0Lm5saW5rICYmXG4gICAgICAgIGRlc3RTdGF0LmF0aW1lTXMgPT09IHNyY1N0YXQuYXRpbWVNcyAmJlxuICAgICAgICBkZXN0U3RhdC5tdGltZU1zID09PSBzcmNTdGF0Lm10aW1lTXMgJiZcbiAgICAgICAgZGVzdFN0YXQuY3RpbWVNcyA9PT0gc3JjU3RhdC5jdGltZU1zICYmXG4gICAgICAgIGRlc3RTdGF0LmJpcnRodGltZU1zID09PSBzcmNTdGF0LmJpcnRodGltZU1zKSB7XG4gICAgICAvLyBoZXVyaXN0aWMgYW5zd2VyXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gcmV0dXJuIHRydWUgaWYgZGVzdCBpcyBhIHN1YmRpciBvZiBzcmMsIG90aGVyd2lzZSBmYWxzZS5cbi8vIEl0IG9ubHkgY2hlY2tzIHRoZSBwYXRoIHN0cmluZ3MuXG5mdW5jdGlvbiBpc1NyY1N1YmRpciAoc3JjLCBkZXN0KSB7XG4gIGNvbnN0IHNyY0FyciA9IHBhdGgucmVzb2x2ZShzcmMpLnNwbGl0KHBhdGguc2VwKS5maWx0ZXIoaSA9PiBpKVxuICBjb25zdCBkZXN0QXJyID0gcGF0aC5yZXNvbHZlKGRlc3QpLnNwbGl0KHBhdGguc2VwKS5maWx0ZXIoaSA9PiBpKVxuICByZXR1cm4gc3JjQXJyLnJlZHVjZSgoYWNjLCBjdXIsIGkpID0+IGFjYyAmJiBkZXN0QXJyW2ldID09PSBjdXIsIHRydWUpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjaGVja1BhdGhzLFxuICBjaGVja1BhdGhzU3luYyxcbiAgY2hlY2tQYXJlbnRQYXRocyxcbiAgY2hlY2tQYXJlbnRQYXRoc1N5bmMsXG4gIGlzU3JjU3ViZGlyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1N5bmNcbmNvbnN0IHV0aW1lc01pbGxpc1N5bmMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1N5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5U3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBjb25zb2xlLndhcm4oYGZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XFxuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5YClcbiAgfVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgZGVzdFN0YXQgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnY29weScpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnY29weScpXG4gIHJldHVybiBoYW5kbGVGaWx0ZXJBbmRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlckFuZENvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdFBhcmVudCkpIG1rZGlyc1N5bmMoZGVzdFBhcmVudClcbiAgcmV0dXJuIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBzdGFydENvcHkgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHN0YXRTeW5jID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXRTeW5jIDogZnMubHN0YXRTeW5jXG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBvbkZpbGUgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIG1heUNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuZnVuY3Rpb24gbWF5Q29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAob3B0cy5vdmVyd3JpdGUpIHtcbiAgICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgfSBlbHNlIGlmIChvcHRzLmVycm9yT25FeGlzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7ZGVzdH0nIGFscmVhZHkgZXhpc3RzYClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLmNvcHlGaWxlU3luYyhzcmMsIGRlc3QpXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykgaGFuZGxlVGltZXN0YW1wcyhzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdClcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY1N0YXQubW9kZSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZXN0YW1wcyAoc3JjTW9kZSwgc3JjLCBkZXN0KSB7XG4gIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gIC8vIG90aGVyd2lzZSBvcGVuIGZhaWxzIHdpdGggRVBFUk0gd2hlbiBpbnZva2VkIHdpdGggJ3IrJ1xuICAvLyAodGhyb3VnaCB1dGltZXMgY2FsbClcbiAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY01vZGUpKSBtYWtlRmlsZVdyaXRhYmxlKGRlc3QsIHNyY01vZGUpXG4gIHJldHVybiBzZXREZXN0VGltZXN0YW1wcyhzcmMsIGRlc3QpXG59XG5cbmZ1bmN0aW9uIGZpbGVJc05vdFdyaXRhYmxlIChzcmNNb2RlKSB7XG4gIHJldHVybiAoc3JjTW9kZSAmIDBvMjAwKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBtYWtlRmlsZVdyaXRhYmxlIChkZXN0LCBzcmNNb2RlKSB7XG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlIHwgMG8yMDApXG59XG5cbmZ1bmN0aW9uIHNldERlc3RNb2RlIChkZXN0LCBzcmNNb2RlKSB7XG4gIHJldHVybiBmcy5jaG1vZFN5bmMoZGVzdCwgc3JjTW9kZSlcbn1cblxuZnVuY3Rpb24gc2V0RGVzdFRpbWVzdGFtcHMgKHNyYywgZGVzdCkge1xuICAvLyBUaGUgaW5pdGlhbCBzcmNTdGF0LmF0aW1lIGNhbm5vdCBiZSB0cnVzdGVkXG4gIC8vIGJlY2F1c2UgaXQgaXMgbW9kaWZpZWQgYnkgdGhlIHJlYWQoMikgc3lzdGVtIGNhbGxcbiAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgY29uc3QgdXBkYXRlZFNyY1N0YXQgPSBmcy5zdGF0U3luYyhzcmMpXG4gIHJldHVybiB1dGltZXNNaWxsaXNTeW5jKGRlc3QsIHVwZGF0ZWRTcmNTdGF0LmF0aW1lLCB1cGRhdGVkU3JjU3RhdC5tdGltZSlcbn1cblxuZnVuY3Rpb24gb25EaXIgKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFkZXN0U3RhdCkgcmV0dXJuIG1rRGlyQW5kQ29weShzcmNTdGF0Lm1vZGUsIHNyYywgZGVzdCwgb3B0cylcbiAgaWYgKGRlc3RTdGF0ICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7ZGVzdH0nIHdpdGggZGlyZWN0b3J5ICcke3NyY30nLmApXG4gIH1cbiAgcmV0dXJuIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBta0RpckFuZENvcHkgKHNyY01vZGUsIHNyYywgZGVzdCwgb3B0cykge1xuICBmcy5ta2RpclN5bmMoZGVzdClcbiAgY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBjb3B5RGlyIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMucmVhZGRpclN5bmMoc3JjKS5mb3JFYWNoKGl0ZW0gPT4gY29weURpckl0ZW0oaXRlbSwgc3JjLCBkZXN0LCBvcHRzKSlcbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgY29uc3QgeyBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmNJdGVtLCBkZXN0SXRlbSwgJ2NvcHknKVxuICByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmNJdGVtLCBkZXN0SXRlbSwgb3B0cylcbn1cblxuZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGZzLnJlYWRsaW5rU3luYyhzcmMpXG4gIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgcmVzb2x2ZWRTcmMgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWRTcmMpXG4gIH1cblxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9IGVsc2Uge1xuICAgIGxldCByZXNvbHZlZERlc3RcbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWREZXN0ID0gZnMucmVhZGxpbmtTeW5jKGRlc3QpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgICAgLy8gV2luZG93cyBtYXkgdGhyb3cgVU5LTk9XTiBlcnJvci4gSWYgZGVzdCBhbHJlYWR5IGV4aXN0cyxcbiAgICAgIC8vIGZzIHRocm93cyBlcnJvciBhbnl3YXksIHNvIG5vIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpdCBoZXJlLlxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRUlOVkFMJyB8fCBlcnIuY29kZSA9PT0gJ1VOS05PV04nKSByZXR1cm4gZnMuc3ltbGlua1N5bmMocmVzb2x2ZWRTcmMsIGRlc3QpXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gICAgfVxuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIHByZXZlbnQgY29weSBpZiBzcmMgaXMgYSBzdWJkaXIgb2YgZGVzdCBzaW5jZSB1bmxpbmtpbmdcbiAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgLy8gYW5kIHRoZXJlZm9yZSBhIGJyb2tlbiBzeW1saW5rIHdvdWxkIGJlIGNyZWF0ZWQuXG4gICAgaWYgKGZzLnN0YXRTeW5jKGRlc3QpLmlzRGlyZWN0b3J5KCkgJiYgc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKVxuICAgIH1cbiAgICByZXR1cm4gY29weUxpbmsocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUxpbmsgKHJlc29sdmVkU3JjLCBkZXN0KSB7XG4gIGZzLnVubGlua1N5bmMoZGVzdClcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW5jXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5U3luYzogcmVxdWlyZSgnLi9jb3B5LXN5bmMnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuZnVuY3Rpb24gcGF0aEV4aXN0cyAocGF0aCkge1xuICByZXR1cm4gZnMuYWNjZXNzKHBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXRoRXhpc3RzOiB1KHBhdGhFeGlzdHMpLFxuICBwYXRoRXhpc3RzU3luYzogZnMuZXhpc3RzU3luY1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlycyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1xuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuY29uc3QgdXRpbWVzTWlsbGlzID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKS51dGltZXNNaWxsaXNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5IChzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJyAmJiAhY2IpIHtcbiAgICBjYiA9IG9wdHNcbiAgICBvcHRzID0ge31cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgb3B0cy5jbG9iYmVyID0gJ2Nsb2JiZXInIGluIG9wdHMgPyAhIW9wdHMuY2xvYmJlciA6IHRydWUgLy8gZGVmYXVsdCB0byB0cnVlIGZvciBub3dcbiAgb3B0cy5vdmVyd3JpdGUgPSAnb3ZlcndyaXRlJyBpbiBvcHRzID8gISFvcHRzLm92ZXJ3cml0ZSA6IG9wdHMuY2xvYmJlciAvLyBvdmVyd3JpdGUgZmFsbHMgYmFjayB0byBjbG9iYmVyXG5cbiAgLy8gV2FybiBhYm91dCB1c2luZyBwcmVzZXJ2ZVRpbWVzdGFtcHMgb24gMzItYml0IG5vZGVcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzICYmIHByb2Nlc3MuYXJjaCA9PT0gJ2lhMzInKSB7XG4gICAgY29uc29sZS53YXJuKGBmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OWApXG4gIH1cblxuICBzdGF0LmNoZWNrUGF0aHMoc3JjLCBkZXN0LCAnY29weScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IHNyY1N0YXQsIGRlc3RTdGF0IH0gPSBzdGF0c1xuICAgIHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JywgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBpZiAob3B0cy5maWx0ZXIpIHJldHVybiBoYW5kbGVGaWx0ZXIoY2hlY2tQYXJlbnREaXIsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgICAgcmV0dXJuIGNoZWNrUGFyZW50RGlyKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyZW50RGlyIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIHBhdGhFeGlzdHMoZGVzdFBhcmVudCwgKGVyciwgZGlyRXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gc3RhcnRDb3B5KGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIG1rZGlycyhkZXN0UGFyZW50LCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBzdGFydENvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlRmlsdGVyIChvbkluY2x1ZGUsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIFByb21pc2UucmVzb2x2ZShvcHRzLmZpbHRlcihzcmMsIGRlc3QpKS50aGVuKGluY2x1ZGUgPT4ge1xuICAgIGlmIChpbmNsdWRlKSByZXR1cm4gb25JbmNsdWRlKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIHJldHVybiBjYigpXG4gIH0sIGVycm9yID0+IGNiKGVycm9yKSlcbn1cblxuZnVuY3Rpb24gc3RhcnRDb3B5IChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAob3B0cy5maWx0ZXIpIHJldHVybiBoYW5kbGVGaWx0ZXIoZ2V0U3RhdHMsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICByZXR1cm4gZ2V0U3RhdHMoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBzdGF0ID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXQgOiBmcy5sc3RhdFxuICBzdGF0KHNyYywgKGVyciwgc3JjU3RhdCkgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG5cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpKSByZXR1cm4gb25EaXIoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG4gICAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZpbGUoKSB8fFxuICAgICAgICAgICAgIHNyY1N0YXQuaXNDaGFyYWN0ZXJEZXZpY2UoKSB8fFxuICAgICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgcmV0dXJuIG1heUNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIG1heUNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGluayhkZXN0LCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKVxuICAgIH0pXG4gIH0gZWxzZSBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKSlcbiAgfSBlbHNlIHJldHVybiBjYigpXG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLmNvcHlGaWxlKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykgcmV0dXJuIGhhbmRsZVRpbWVzdGFtcHNBbmRNb2RlKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBjYilcbiAgICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZXN0YW1wc0FuZE1vZGUgKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIHtcbiAgICByZXR1cm4gbWFrZUZpbGVXcml0YWJsZShkZXN0LCBzcmNNb2RlLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBzZXREZXN0VGltZXN0YW1wc0FuZE1vZGUoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYilcbiAgICB9KVxuICB9XG4gIHJldHVybiBzZXREZXN0VGltZXN0YW1wc0FuZE1vZGUoc3JjTW9kZSwgc3JjLCBkZXN0LCBjYilcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUsIGNiKSB7XG4gIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlIHwgMG8yMDAsIGNiKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wc0FuZE1vZGUgKHNyY01vZGUsIHNyYywgZGVzdCwgY2IpIHtcbiAgc2V0RGVzdFRpbWVzdGFtcHMoc3JjLCBkZXN0LCBlcnIgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBzZXREZXN0TW9kZSAoZGVzdCwgc3JjTW9kZSwgY2IpIHtcbiAgcmV0dXJuIGZzLmNobW9kKGRlc3QsIHNyY01vZGUsIGNiKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0LCBjYikge1xuICAvLyBUaGUgaW5pdGlhbCBzcmNTdGF0LmF0aW1lIGNhbm5vdCBiZSB0cnVzdGVkXG4gIC8vIGJlY2F1c2UgaXQgaXMgbW9kaWZpZWQgYnkgdGhlIHJlYWQoMikgc3lzdGVtIGNhbGxcbiAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgZnMuc3RhdChzcmMsIChlcnIsIHVwZGF0ZWRTcmNTdGF0KSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gdXRpbWVzTWlsbGlzKGRlc3QsIHVwZGF0ZWRTcmNTdGF0LmF0aW1lLCB1cGRhdGVkU3JjU3RhdC5tdGltZSwgY2IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG9uRGlyIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgaWYgKGRlc3RTdGF0ICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke2Rlc3R9JyB3aXRoIGRpcmVjdG9yeSAnJHtzcmN9Jy5gKSlcbiAgfVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMsIGNiKVxufVxuXG5mdW5jdGlvbiBta0RpckFuZENvcHkgKHNyY01vZGUsIHNyYywgZGVzdCwgb3B0cywgY2IpIHtcbiAgZnMubWtkaXIoZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvcHlEaXIoc3JjLCBkZXN0LCBvcHRzLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiBzZXREZXN0TW9kZShkZXN0LCBzcmNNb2RlLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb3B5RGlyIChzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLnJlYWRkaXIoc3JjLCAoZXJyLCBpdGVtcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIGNvcHlEaXJJdGVtcyhpdGVtcywgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW1zIChpdGVtcywgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBpdGVtID0gaXRlbXMucG9wKClcbiAgaWYgKCFpdGVtKSByZXR1cm4gY2IoKVxuICByZXR1cm4gY29weURpckl0ZW0oaXRlbXMsIGl0ZW0sIHNyYywgZGVzdCwgb3B0cywgY2IpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXJJdGVtIChpdGVtcywgaXRlbSwgc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgc3RhdC5jaGVja1BhdGhzKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIChlcnIsIHN0YXRzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0c1xuICAgIHN0YXJ0Q29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgcmV0dXJuIGNvcHlEaXJJdGVtcyhpdGVtcywgc3JjLCBkZXN0LCBvcHRzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBvbkxpbmsgKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMsIGNiKSB7XG4gIGZzLnJlYWRsaW5rKHNyYywgKGVyciwgcmVzb2x2ZWRTcmMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgICB9XG5cbiAgICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgICByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLnJlYWRsaW5rKGRlc3QsIChlcnIsIHJlc29sdmVkRGVzdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgICAgICAvLyBXaW5kb3dzIG1heSB0aHJvdyBVTktOT1dOIGVycm9yLiBJZiBkZXN0IGFscmVhZHkgZXhpc3RzLFxuICAgICAgICAgIC8vIGZzIHRocm93cyBlcnJvciBhbnl3YXksIHNvIG5vIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpdCBoZXJlLlxuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgICAgICAgIHJldHVybiBjYihlcnIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7cmVzb2x2ZWRTcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3Jlc29sdmVkRGVzdH0nLmApKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG8gbm90IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAgICAgLy8gYW5kIHRoZXJlZm9yZSBhIGJyb2tlbiBzeW1saW5rIHdvdWxkIGJlIGNyZWF0ZWQuXG4gICAgICAgIGlmIChkZXN0U3RhdC5pc0RpcmVjdG9yeSgpICYmIHN0YXQuaXNTcmNTdWJkaXIocmVzb2x2ZWREZXN0LCByZXNvbHZlZFNyYykpIHtcbiAgICAgICAgICByZXR1cm4gY2IobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weUxpbmsocmVzb2x2ZWRTcmMsIGRlc3QsIGNiKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCwgY2IpIHtcbiAgZnMudW5saW5rKGRlc3QsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gZnMuc3ltbGluayhyZXNvbHZlZFNyYywgZGVzdCwgY2IpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogdShyZXF1aXJlKCcuL2NvcHknKSlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBpc1dpbmRvd3MgPSAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJylcblxuZnVuY3Rpb24gZGVmYXVsdHMgKG9wdGlvbnMpIHtcbiAgY29uc3QgbWV0aG9kcyA9IFtcbiAgICAndW5saW5rJyxcbiAgICAnY2htb2QnLFxuICAgICdzdGF0JyxcbiAgICAnbHN0YXQnLFxuICAgICdybWRpcicsXG4gICAgJ3JlYWRkaXInXG4gIF1cbiAgbWV0aG9kcy5mb3JFYWNoKG0gPT4ge1xuICAgIG9wdGlvbnNbbV0gPSBvcHRpb25zW21dIHx8IGZzW21dXG4gICAgbSA9IG0gKyAnU3luYydcbiAgICBvcHRpb25zW21dID0gb3B0aW9uc1ttXSB8fCBmc1ttXVxuICB9KVxuXG4gIG9wdGlvbnMubWF4QnVzeVRyaWVzID0gb3B0aW9ucy5tYXhCdXN5VHJpZXMgfHwgM1xufVxuXG5mdW5jdGlvbiByaW1yYWYgKHAsIG9wdGlvbnMsIGNiKSB7XG4gIGxldCBidXN5VHJpZXMgPSAwXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICBhc3NlcnQocCwgJ3JpbXJhZjogbWlzc2luZyBwYXRoJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwLCAnc3RyaW5nJywgJ3JpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGNiLCAnZnVuY3Rpb24nLCAncmltcmFmOiBjYWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCcpXG4gIGFzc2VydChvcHRpb25zLCAncmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQnKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIG9wdGlvbnMsICdvYmplY3QnLCAncmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QnKVxuXG4gIGRlZmF1bHRzKG9wdGlvbnMpXG5cbiAgcmltcmFmXyhwLCBvcHRpb25zLCBmdW5jdGlvbiBDQiAoZXIpIHtcbiAgICBpZiAoZXIpIHtcbiAgICAgIGlmICgoZXIuY29kZSA9PT0gJ0VCVVNZJyB8fCBlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSAmJlxuICAgICAgICAgIGJ1c3lUcmllcyA8IG9wdGlvbnMubWF4QnVzeVRyaWVzKSB7XG4gICAgICAgIGJ1c3lUcmllcysrXG4gICAgICAgIGNvbnN0IHRpbWUgPSBidXN5VHJpZXMgKiAxMDBcbiAgICAgICAgLy8gdHJ5IGFnYWluLCB3aXRoIHRoZSBzYW1lIGV4YWN0IGNhbGxiYWNrIGFzIHRoaXMgb25lLlxuICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiByaW1yYWZfKHAsIG9wdGlvbnMsIENCKSwgdGltZSlcbiAgICAgIH1cblxuICAgICAgLy8gYWxyZWFkeSBnb25lXG4gICAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIGVyID0gbnVsbFxuICAgIH1cblxuICAgIGNiKGVyKVxuICB9KVxufVxuXG4vLyBUd28gcG9zc2libGUgc3RyYXRlZ2llcy5cbi8vIDEuIEFzc3VtZSBpdCdzIGEgZmlsZS4gIHVubGluayBpdCwgdGhlbiBkbyB0aGUgZGlyIHN0dWZmIG9uIEVQRVJNIG9yIEVJU0RJUlxuLy8gMi4gQXNzdW1lIGl0J3MgYSBkaXJlY3RvcnkuICByZWFkZGlyLCB0aGVuIGRvIHRoZSBmaWxlIHN0dWZmIG9uIEVOT1RESVJcbi8vXG4vLyBCb3RoIHJlc3VsdCBpbiBhbiBleHRyYSBzeXNjYWxsIHdoZW4geW91IGd1ZXNzIHdyb25nLiAgSG93ZXZlciwgdGhlcmVcbi8vIGFyZSBsaWtlbHkgZmFyIG1vcmUgbm9ybWFsIGZpbGVzIGluIHRoZSB3b3JsZCB0aGFuIGRpcmVjdG9yaWVzLiAgVGhpc1xuLy8gaXMgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBhIHRoZSBhdmVyYWdlIG51bWJlciBvZiBmaWxlcyBwZXJcbi8vIGRpcmVjdG9yeSBpcyA+PSAxLlxuLy9cbi8vIElmIGFueW9uZSBldmVyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB0aGVuIEkgZ3Vlc3MgdGhlIHN0cmF0ZWd5IGNvdWxkXG4vLyBiZSBtYWRlIGNvbmZpZ3VyYWJsZSBzb21laG93LiAgQnV0IHVudGlsIHRoZW4sIFlBR05JLlxuZnVuY3Rpb24gcmltcmFmXyAocCwgb3B0aW9ucywgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIC8vIHN1bm9zIGxldHMgdGhlIHJvb3QgdXNlciB1bmxpbmsgZGlyZWN0b3JpZXMsIHdoaWNoIGlzLi4uIHdlaXJkLlxuICAvLyBzbyB3ZSBoYXZlIHRvIGxzdGF0IGhlcmUgYW5kIG1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpci5cbiAgb3B0aW9ucy5sc3RhdChwLCAoZXIsIHN0KSA9PiB7XG4gICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm4gY2IobnVsbClcbiAgICB9XG5cbiAgICAvLyBXaW5kb3dzIGNhbiBFUEVSTSBvbiBzdGF0LiAgTGlmZSBpcyBzdWZmZXJpbmcuXG4gICAgaWYgKGVyICYmIGVyLmNvZGUgPT09ICdFUEVSTScgJiYgaXNXaW5kb3dzKSB7XG4gICAgICByZXR1cm4gZml4V2luRVBFUk0ocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgIH1cblxuICAgIGlmIChzdCAmJiBzdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgIH1cblxuICAgIG9wdGlvbnMudW5saW5rKHAsIGVyID0+IHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbClcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICAgIHJldHVybiAoaXNXaW5kb3dzKVxuICAgICAgICAgICAgPyBmaXhXaW5FUEVSTShwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgICAgICA6IHJtZGlyKHAsIG9wdGlvbnMsIGVyLCBjYilcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VJU0RJUicpIHtcbiAgICAgICAgICByZXR1cm4gcm1kaXIocCwgb3B0aW9ucywgZXIsIGNiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2IoZXIpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gZml4V2luRVBFUk0gKHAsIG9wdGlvbnMsIGVyLCBjYikge1xuICBhc3NlcnQocClcbiAgYXNzZXJ0KG9wdGlvbnMpXG4gIGFzc2VydCh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG5cbiAgb3B0aW9ucy5jaG1vZChwLCAwbzY2NiwgZXIyID0+IHtcbiAgICBpZiAoZXIyKSB7XG4gICAgICBjYihlcjIuY29kZSA9PT0gJ0VOT0VOVCcgPyBudWxsIDogZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuc3RhdChwLCAoZXIzLCBzdGF0cykgPT4ge1xuICAgICAgICBpZiAoZXIzKSB7XG4gICAgICAgICAgY2IoZXIzLmNvZGUgPT09ICdFTk9FTlQnID8gbnVsbCA6IGVyKVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICBybWRpcihwLCBvcHRpb25zLCBlciwgY2IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy51bmxpbmsocCwgY2IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBmaXhXaW5FUEVSTVN5bmMgKHAsIG9wdGlvbnMsIGVyKSB7XG4gIGxldCBzdGF0c1xuXG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcblxuICB0cnkge1xuICAgIG9wdGlvbnMuY2htb2RTeW5jKHAsIDBvNjY2KVxuICB9IGNhdGNoIChlcjIpIHtcbiAgICBpZiAoZXIyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHN0YXRzID0gb3B0aW9ucy5zdGF0U3luYyhwKVxuICB9IGNhdGNoIChlcjMpIHtcbiAgICBpZiAoZXIzLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLnVubGlua1N5bmMocClcbiAgfVxufVxuXG5mdW5jdGlvbiBybWRpciAocCwgb3B0aW9ucywgb3JpZ2luYWxFciwgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIC8vIHRyeSB0byBybWRpciBmaXJzdCwgYW5kIG9ubHkgcmVhZGRpciBvbiBFTk9URU1QVFkgb3IgRUVYSVNUIChTdW5PUylcbiAgLy8gaWYgd2UgZ3Vlc3NlZCB3cm9uZywgYW5kIGl0J3Mgbm90IGEgZGlyZWN0b3J5LCB0aGVuXG4gIC8vIHJhaXNlIHRoZSBvcmlnaW5hbCBlcnJvci5cbiAgb3B0aW9ucy5ybWRpcihwLCBlciA9PiB7XG4gICAgaWYgKGVyICYmIChlci5jb2RlID09PSAnRU5PVEVNUFRZJyB8fCBlci5jb2RlID09PSAnRUVYSVNUJyB8fCBlci5jb2RlID09PSAnRVBFUk0nKSkge1xuICAgICAgcm1raWRzKHAsIG9wdGlvbnMsIGNiKVxuICAgIH0gZWxzZSBpZiAoZXIgJiYgZXIuY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICBjYihvcmlnaW5hbEVyKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYihlcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJta2lkcyAocCwgb3B0aW9ucywgY2IpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBhc3NlcnQodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuXG4gIG9wdGlvbnMucmVhZGRpcihwLCAoZXIsIGZpbGVzKSA9PiB7XG4gICAgaWYgKGVyKSByZXR1cm4gY2IoZXIpXG5cbiAgICBsZXQgbiA9IGZpbGVzLmxlbmd0aFxuICAgIGxldCBlcnJTdGF0ZVxuXG4gICAgaWYgKG4gPT09IDApIHJldHVybiBvcHRpb25zLnJtZGlyKHAsIGNiKVxuXG4gICAgZmlsZXMuZm9yRWFjaChmID0+IHtcbiAgICAgIHJpbXJhZihwYXRoLmpvaW4ocCwgZiksIG9wdGlvbnMsIGVyID0+IHtcbiAgICAgICAgaWYgKGVyclN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyKSByZXR1cm4gY2IoZXJyU3RhdGUgPSBlcilcbiAgICAgICAgaWYgKC0tbiA9PT0gMCkge1xuICAgICAgICAgIG9wdGlvbnMucm1kaXIocCwgY2IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gdGhpcyBsb29rcyBzaW1wbGVyLCBhbmQgaXMgc3RyaWN0bHkgKmZhc3RlciosIGJ1dCB3aWxsXG4vLyB0aWUgdXAgdGhlIEphdmFTY3JpcHQgdGhyZWFkIGFuZCBmYWlsIG9uIGV4Y2Vzc2l2ZWx5XG4vLyBkZWVwIGRpcmVjdG9yeSB0cmVlcy5cbmZ1bmN0aW9uIHJpbXJhZlN5bmMgKHAsIG9wdGlvbnMpIHtcbiAgbGV0IHN0XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgZGVmYXVsdHMob3B0aW9ucylcblxuICBhc3NlcnQocCwgJ3JpbXJhZjogbWlzc2luZyBwYXRoJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwLCAnc3RyaW5nJywgJ3JpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICBhc3NlcnQob3B0aW9ucywgJ3JpbXJhZjogbWlzc2luZyBvcHRpb25zJylcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBvcHRpb25zLCAnb2JqZWN0JywgJ3JpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0JylcblxuICB0cnkge1xuICAgIHN0ID0gb3B0aW9ucy5sc3RhdFN5bmMocClcbiAgfSBjYXRjaCAoZXIpIHtcbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFdpbmRvd3MgY2FuIEVQRVJNIG9uIHN0YXQuICBMaWZlIGlzIHN1ZmZlcmluZy5cbiAgICBpZiAoZXIuY29kZSA9PT0gJ0VQRVJNJyAmJiBpc1dpbmRvd3MpIHtcbiAgICAgIGZpeFdpbkVQRVJNU3luYyhwLCBvcHRpb25zLCBlcilcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHN1bm9zIGxldHMgdGhlIHJvb3QgdXNlciB1bmxpbmsgZGlyZWN0b3JpZXMsIHdoaWNoIGlzLi4uIHdlaXJkLlxuICAgIGlmIChzdCAmJiBzdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBybWRpclN5bmMocCwgb3B0aW9ucywgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy51bmxpbmtTeW5jKHApXG4gICAgfVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmIChlci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmIChlci5jb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICByZXR1cm4gaXNXaW5kb3dzID8gZml4V2luRVBFUk1TeW5jKHAsIG9wdGlvbnMsIGVyKSA6IHJtZGlyU3luYyhwLCBvcHRpb25zLCBlcilcbiAgICB9IGVsc2UgaWYgKGVyLmNvZGUgIT09ICdFSVNESVInKSB7XG4gICAgICB0aHJvdyBlclxuICAgIH1cbiAgICBybWRpclN5bmMocCwgb3B0aW9ucywgZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcm1kaXJTeW5jIChwLCBvcHRpb25zLCBvcmlnaW5hbEVyKSB7XG4gIGFzc2VydChwKVxuICBhc3NlcnQob3B0aW9ucylcblxuICB0cnkge1xuICAgIG9wdGlvbnMucm1kaXJTeW5jKHApXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgaWYgKGVyLmNvZGUgPT09ICdFTk9URElSJykge1xuICAgICAgdGhyb3cgb3JpZ2luYWxFclxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSA9PT0gJ0VOT1RFTVBUWScgfHwgZXIuY29kZSA9PT0gJ0VFWElTVCcgfHwgZXIuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgcm1raWRzU3luYyhwLCBvcHRpb25zKVxuICAgIH0gZWxzZSBpZiAoZXIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgIHRocm93IGVyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJta2lkc1N5bmMgKHAsIG9wdGlvbnMpIHtcbiAgYXNzZXJ0KHApXG4gIGFzc2VydChvcHRpb25zKVxuICBvcHRpb25zLnJlYWRkaXJTeW5jKHApLmZvckVhY2goZiA9PiByaW1yYWZTeW5jKHBhdGguam9pbihwLCBmKSwgb3B0aW9ucykpXG5cbiAgaWYgKGlzV2luZG93cykge1xuICAgIC8vIFdlIG9ubHkgZW5kIHVwIGhlcmUgb25jZSB3ZSBnb3QgRU5PVEVNUFRZIGF0IGxlYXN0IG9uY2UsIGFuZFxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUgcmVtb3ZlZCBhbGwgdGhlIGtpZHMuXG4gICAgLy8gU28sIHdlIGtub3cgdGhhdCBpdCB3b24ndCBiZSBFTk9FTlQgb3IgRU5PVERJUiBvciBhbnl0aGluZyBlbHNlLlxuICAgIC8vIHRyeSByZWFsbHkgaGFyZCB0byBkZWxldGUgc3R1ZmYgb24gd2luZG93cywgYmVjYXVzZSBpdCBoYXMgYVxuICAgIC8vIFBST0ZPVU5ETFkgYW5ub3lpbmcgaGFiaXQgb2Ygbm90IGNsb3NpbmcgaGFuZGxlcyBwcm9tcHRseSB3aGVuXG4gICAgLy8gZmlsZXMgYXJlIGRlbGV0ZWQsIHJlc3VsdGluZyBpbiBzcHVyaW91cyBFTk9URU1QVFkgZXJyb3JzLlxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICBkbyB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXQgPSBvcHRpb25zLnJtZGlyU3luYyhwLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gcmV0XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IDUwMCkgLy8gZ2l2ZSB1cCBhZnRlciA1MDBtc1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJldCA9IG9wdGlvbnMucm1kaXJTeW5jKHAsIG9wdGlvbnMpXG4gICAgcmV0dXJuIHJldFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmltcmFmXG5yaW1yYWYuc3luYyA9IHJpbXJhZlN5bmNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgcmltcmFmID0gcmVxdWlyZSgnLi9yaW1yYWYnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiB1KHJpbXJhZiksXG4gIHJlbW92ZVN5bmM6IHJpbXJhZi5zeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcmVtb3ZlID0gcmVxdWlyZSgnLi4vcmVtb3ZlJylcblxuY29uc3QgZW1wdHlEaXIgPSB1KGZ1bmN0aW9uIGVtcHR5RGlyIChkaXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge31cbiAgZnMucmVhZGRpcihkaXIsIChlcnIsIGl0ZW1zKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIG1rZGlyLm1rZGlycyhkaXIsIGNhbGxiYWNrKVxuXG4gICAgaXRlbXMgPSBpdGVtcy5tYXAoaXRlbSA9PiBwYXRoLmpvaW4oZGlyLCBpdGVtKSlcblxuICAgIGRlbGV0ZUl0ZW0oKVxuXG4gICAgZnVuY3Rpb24gZGVsZXRlSXRlbSAoKSB7XG4gICAgICBjb25zdCBpdGVtID0gaXRlbXMucG9wKClcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgIHJlbW92ZS5yZW1vdmUoaXRlbSwgZXJyID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgZGVsZXRlSXRlbSgpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn0pXG5cbmZ1bmN0aW9uIGVtcHR5RGlyU3luYyAoZGlyKSB7XG4gIGxldCBpdGVtc1xuICB0cnkge1xuICAgIGl0ZW1zID0gZnMucmVhZGRpclN5bmMoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIH1cblxuICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGl0ZW0gPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIHJlbW92ZS5yZW1vdmVTeW5jKGl0ZW0pXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlbXB0eURpclN5bmMsXG4gIGVtcHR5ZGlyU3luYzogZW1wdHlEaXJTeW5jLFxuICBlbXB0eURpcixcbiAgZW1wdHlkaXI6IGVtcHR5RGlyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuXG5mdW5jdGlvbiBjcmVhdGVGaWxlIChmaWxlLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBtYWtlRmlsZSAoKSB7XG4gICAgZnMud3JpdGVGaWxlKGZpbGUsICcnLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9KVxuICB9XG5cbiAgZnMuc3RhdChmaWxlLCAoZXJyLCBzdGF0cykgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGhhbmRsZS1jYWxsYmFjay1lcnJcbiAgICBpZiAoIWVyciAmJiBzdGF0cy5pc0ZpbGUoKSkgcmV0dXJuIGNhbGxiYWNrKClcbiAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgICBmcy5zdGF0KGRpciwgKGVyciwgc3RhdHMpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBtYWtlIGl0XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpciwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgICBtYWtlRmlsZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkgbWFrZUZpbGUoKVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnlcbiAgICAgICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgICAgIGZzLnJlYWRkaXIoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKVxuICB9IGNhdGNoIHt9XG4gIGlmIChzdGF0cyAmJiBzdGF0cy5pc0ZpbGUoKSkgcmV0dXJuXG5cbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIHRyeSB7XG4gICAgaWYgKCFmcy5zdGF0U3luYyhkaXIpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIHBhcmVudCBpcyBub3QgYSBkaXJlY3RvcnlcbiAgICAgIC8vIFRoaXMgaXMganVzdCB0byBjYXVzZSBhbiBpbnRlcm5hbCBFTk9URElSIGVycm9yIHRvIGJlIHRocm93blxuICAgICAgZnMucmVhZGRpclN5bmMoZGlyKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gSWYgdGhlIHN0YXQgY2FsbCBhYm92ZSBmYWlsZWQgYmVjYXVzZSB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdFTk9FTlQnKSBta2Rpci5ta2RpcnNTeW5jKGRpcilcbiAgICBlbHNlIHRocm93IGVyclxuICB9XG5cbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUZpbGU6IHUoY3JlYXRlRmlsZSksXG4gIGNyZWF0ZUZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgbWtkaXIgPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG5mdW5jdGlvbiBjcmVhdGVMaW5rIChzcmNwYXRoLCBkc3RwYXRoLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBtYWtlTGluayAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICAgIGZzLmxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgZXJyID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBjYWxsYmFjayhudWxsKVxuICAgIH0pXG4gIH1cblxuICBwYXRoRXhpc3RzKGRzdHBhdGgsIChlcnIsIGRlc3RpbmF0aW9uRXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICBpZiAoZGVzdGluYXRpb25FeGlzdHMpIHJldHVybiBjYWxsYmFjayhudWxsKVxuICAgIGZzLmxzdGF0KHNyY3BhdGgsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBwYXRoRXhpc3RzKGRpciwgKGVyciwgZGlyRXhpc3RzKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGlmIChkaXJFeGlzdHMpIHJldHVybiBtYWtlTGluayhzcmNwYXRoLCBkc3RwYXRoKVxuICAgICAgICBta2Rpci5ta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgICAgbWFrZUxpbmsoc3JjcGF0aCwgZHN0cGF0aClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgY29uc3QgZGVzdGluYXRpb25FeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRzdHBhdGgpXG4gIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlTGluaycpXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZGlyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChkaXJFeGlzdHMpIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBta2Rpci5ta2RpcnNTeW5jKGRpcilcblxuICByZXR1cm4gZnMubGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUxpbms6IHUoY3JlYXRlTGluayksXG4gIGNyZWF0ZUxpbmtTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aEV4aXN0cyA9IHJlcXVpcmUoJy4uL3BhdGgtZXhpc3RzJykucGF0aEV4aXN0c1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5mdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGlmIChwYXRoLmlzQWJzb2x1dGUoc3JjcGF0aCkpIHtcbiAgICByZXR1cm4gZnMubHN0YXQoc3JjcGF0aCwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICB9KVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgY29uc3QgcmVsYXRpdmVUb0RzdCA9IHBhdGguam9pbihkc3RkaXIsIHNyY3BhdGgpXG4gICAgcmV0dXJuIHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdCwgKGVyciwgZXhpc3RzKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgIHRvQ3dkOiByZWxhdGl2ZVRvRHN0LFxuICAgICAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZnMubHN0YXQoc3JjcGF0aCwgKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UucmVwbGFjZSgnbHN0YXQnLCAnZW5zdXJlU3ltbGluaycpXG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgICAgICAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHN5bWxpbmtQYXRoc1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgbGV0IGV4aXN0c1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRzdGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgIGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMocmVsYXRpdmVUb0RzdClcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgICAgdG9Ec3Q6IHNyY3BhdGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgICAgaWYgKCFleGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3ltbGlua1BhdGhzLFxuICBzeW1saW5rUGF0aHNTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuXG5mdW5jdGlvbiBzeW1saW5rVHlwZSAoc3JjcGF0aCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gdHlwZSA6IGNhbGxiYWNrXG4gIHR5cGUgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gZmFsc2UgOiB0eXBlXG4gIGlmICh0eXBlKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgdHlwZSlcbiAgZnMubHN0YXQoc3JjcGF0aCwgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2sobnVsbCwgJ2ZpbGUnKVxuICAgIHR5cGUgPSAoc3RhdHMgJiYgc3RhdHMuaXNEaXJlY3RvcnkoKSkgPyAnZGlyJyA6ICdmaWxlJ1xuICAgIGNhbGxiYWNrKG51bGwsIHR5cGUpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHN5bWxpbmtUeXBlU3luYyAoc3JjcGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcblxuICBpZiAodHlwZSkgcmV0dXJuIHR5cGVcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLmxzdGF0U3luYyhzcmNwYXRoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cbiAgcmV0dXJuIChzdGF0cyAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSA/ICdkaXInIDogJ2ZpbGUnXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rVHlwZSxcbiAgc3ltbGlua1R5cGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgX21rZGlycyA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBta2RpcnMgPSBfbWtkaXJzLm1rZGlyc1xuY29uc3QgbWtkaXJzU3luYyA9IF9ta2RpcnMubWtkaXJzU3luY1xuXG5jb25zdCBfc3ltbGlua1BhdGhzID0gcmVxdWlyZSgnLi9zeW1saW5rLXBhdGhzJylcbmNvbnN0IHN5bWxpbmtQYXRocyA9IF9zeW1saW5rUGF0aHMuc3ltbGlua1BhdGhzXG5jb25zdCBzeW1saW5rUGF0aHNTeW5jID0gX3N5bWxpbmtQYXRocy5zeW1saW5rUGF0aHNTeW5jXG5cbmNvbnN0IF9zeW1saW5rVHlwZSA9IHJlcXVpcmUoJy4vc3ltbGluay10eXBlJylcbmNvbnN0IHN5bWxpbmtUeXBlID0gX3N5bWxpbmtUeXBlLnN5bWxpbmtUeXBlXG5jb25zdCBzeW1saW5rVHlwZVN5bmMgPSBfc3ltbGlua1R5cGUuc3ltbGlua1R5cGVTeW5jXG5cbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuZnVuY3Rpb24gY3JlYXRlU3ltbGluayAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gdHlwZSA6IGNhbGxiYWNrXG4gIHR5cGUgPSAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpID8gZmFsc2UgOiB0eXBlXG5cbiAgcGF0aEV4aXN0cyhkc3RwYXRoLCAoZXJyLCBkZXN0aW5hdGlvbkV4aXN0cykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGRlc3RpbmF0aW9uRXhpc3RzKSByZXR1cm4gY2FsbGJhY2sobnVsbClcbiAgICBzeW1saW5rUGF0aHMoc3JjcGF0aCwgZHN0cGF0aCwgKGVyciwgcmVsYXRpdmUpID0+IHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgICAgIHN5bWxpbmtUeXBlKHJlbGF0aXZlLnRvQ3dkLCB0eXBlLCAoZXJyLCB0eXBlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICAgICAgICBwYXRoRXhpc3RzKGRpciwgKGVyciwgZGlyRXhpc3RzKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICBpZiAoZGlyRXhpc3RzKSByZXR1cm4gZnMuc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaylcbiAgICAgICAgICBta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgICAgICAgIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSwgY2FsbGJhY2spXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ltbGlua1N5bmMgKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpIHtcbiAgY29uc3QgZGVzdGluYXRpb25FeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRzdHBhdGgpXG4gIGlmIChkZXN0aW5hdGlvbkV4aXN0cykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IHJlbGF0aXZlID0gc3ltbGlua1BhdGhzU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgdHlwZSA9IHN5bWxpbmtUeXBlU3luYyhyZWxhdGl2ZS50b0N3ZCwgdHlwZSlcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IGV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoZGlyKVxuICBpZiAoZXhpc3RzKSByZXR1cm4gZnMuc3ltbGlua1N5bmMoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSlcbiAgbWtkaXJzU3luYyhkaXIpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlU3ltbGluazogdShjcmVhdGVTeW1saW5rKSxcbiAgY3JlYXRlU3ltbGlua1N5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZmlsZSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCBsaW5rID0gcmVxdWlyZSgnLi9saW5rJylcbmNvbnN0IHN5bWxpbmsgPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlOiBmaWxlLmNyZWF0ZUZpbGUsXG4gIGNyZWF0ZUZpbGVTeW5jOiBmaWxlLmNyZWF0ZUZpbGVTeW5jLFxuICBlbnN1cmVGaWxlOiBmaWxlLmNyZWF0ZUZpbGUsXG4gIGVuc3VyZUZpbGVTeW5jOiBmaWxlLmNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbms6IGxpbmsuY3JlYXRlTGluayxcbiAgY3JlYXRlTGlua1N5bmM6IGxpbmsuY3JlYXRlTGlua1N5bmMsXG4gIGVuc3VyZUxpbms6IGxpbmsuY3JlYXRlTGluayxcbiAgZW5zdXJlTGlua1N5bmM6IGxpbmsuY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluazogc3ltbGluay5jcmVhdGVTeW1saW5rLFxuICBjcmVhdGVTeW1saW5rU3luYzogc3ltbGluay5jcmVhdGVTeW1saW5rU3luYyxcbiAgZW5zdXJlU3ltbGluazogc3ltbGluay5jcmVhdGVTeW1saW5rLFxuICBlbnN1cmVTeW1saW5rU3luYzogc3ltbGluay5jcmVhdGVTeW1saW5rU3luY1xufVxuIiwgImZ1bmN0aW9uIHN0cmluZ2lmeSAob2JqLCB7IEVPTCA9ICdcXG4nLCBmaW5hbEVPTCA9IHRydWUsIHJlcGxhY2VyID0gbnVsbCwgc3BhY2VzIH0gPSB7fSkge1xuICBjb25zdCBFT0YgPSBmaW5hbEVPTCA/IEVPTCA6ICcnXG4gIGNvbnN0IHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIsIHNwYWNlcylcblxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcbi9nLCBFT0wpICsgRU9GXG59XG5cbmZ1bmN0aW9uIHN0cmlwQm9tIChjb250ZW50KSB7XG4gIC8vIHdlIGRvIHRoaXMgYmVjYXVzZSBKU09OLnBhcnNlIHdvdWxkIGNvbnZlcnQgaXQgdG8gYSB1dGY4IHN0cmluZyBpZiBlbmNvZGluZyB3YXNuJ3Qgc3BlY2lmaWVkXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCd1dGY4JylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfVxuIiwgImxldCBfZnNcbnRyeSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbn0gY2F0Y2ggKF8pIHtcbiAgX2ZzID0gcmVxdWlyZSgnZnMnKVxufVxuY29uc3QgdW5pdmVyc2FsaWZ5ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JylcbmNvbnN0IHsgc3RyaW5naWZ5LCBzdHJpcEJvbSB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmFzeW5jIGZ1bmN0aW9uIF9yZWFkRmlsZSAoZmlsZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc2hvdWxkVGhyb3cgPSAndGhyb3dzJyBpbiBvcHRpb25zID8gb3B0aW9ucy50aHJvd3MgOiB0cnVlXG5cbiAgbGV0IGRhdGEgPSBhd2FpdCB1bml2ZXJzYWxpZnkuZnJvbUNhbGxiYWNrKGZzLnJlYWRGaWxlKShmaWxlLCBvcHRpb25zKVxuXG4gIGRhdGEgPSBzdHJpcEJvbShkYXRhKVxuXG4gIGxldCBvYmpcbiAgdHJ5IHtcbiAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEsIG9wdGlvbnMgPyBvcHRpb25zLnJldml2ZXIgOiBudWxsKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgdGhyb3cgZXJyXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5jb25zdCByZWFkRmlsZSA9IHVuaXZlcnNhbGlmeS5mcm9tUHJvbWlzZShfcmVhZEZpbGUpXG5cbmZ1bmN0aW9uIHJlYWRGaWxlU3luYyAoZmlsZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogb3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc2hvdWxkVGhyb3cgPSAndGhyb3dzJyBpbiBvcHRpb25zID8gb3B0aW9ucy50aHJvd3MgOiB0cnVlXG5cbiAgdHJ5IHtcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLCBvcHRpb25zKVxuICAgIGNvbnRlbnQgPSBzdHJpcEJvbShjb250ZW50KVxuICAgIHJldHVybiBKU09OLnBhcnNlKGNvbnRlbnQsIG9wdGlvbnMucmV2aXZlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfd3JpdGVGaWxlIChmaWxlLCBvYmosIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBmcyA9IG9wdGlvbnMuZnMgfHwgX2ZzXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KG9iaiwgb3B0aW9ucylcblxuICBhd2FpdCB1bml2ZXJzYWxpZnkuZnJvbUNhbGxiYWNrKGZzLndyaXRlRmlsZSkoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5jb25zdCB3cml0ZUZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3dyaXRlRmlsZSlcblxuZnVuY3Rpb24gd3JpdGVGaWxlU3luYyAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG4gIC8vIG5vdCBzdXJlIGlmIGZzLndyaXRlRmlsZVN5bmMgcmV0dXJucyBhbnl0aGluZywgYnV0IGp1c3QgaW4gY2FzZVxuICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyhmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbmNvbnN0IGpzb25maWxlID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBqc29uZmlsZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBqc29uRmlsZSA9IHJlcXVpcmUoJ2pzb25maWxlJylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGpzb25maWxlIGV4cG9ydHNcbiAgcmVhZEpzb246IGpzb25GaWxlLnJlYWRGaWxlLFxuICByZWFkSnNvblN5bmM6IGpzb25GaWxlLnJlYWRGaWxlU3luYyxcbiAgd3JpdGVKc29uOiBqc29uRmlsZS53cml0ZUZpbGUsXG4gIHdyaXRlSnNvblN5bmM6IGpzb25GaWxlLndyaXRlRmlsZVN5bmNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5cbmZ1bmN0aW9uIG91dHB1dEZpbGUgKGZpbGUsIGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZ1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgcGF0aEV4aXN0cyhkaXIsIChlcnIsIGl0RG9lcykgPT4ge1xuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpXG4gICAgaWYgKGl0RG9lcykgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spXG5cbiAgICBta2Rpci5ta2RpcnMoZGlyLCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycilcblxuICAgICAgZnMud3JpdGVGaWxlKGZpbGUsIGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBvdXRwdXRGaWxlU3luYyAoZmlsZSwgLi4uYXJncykge1xuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgIHJldHVybiBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG4gIH1cbiAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgLi4uYXJncylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG91dHB1dEZpbGU6IHUob3V0cHV0RmlsZSksXG4gIG91dHB1dEZpbGVTeW5jXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdqc29uZmlsZS91dGlscycpXG5jb25zdCB7IG91dHB1dEZpbGUgfSA9IHJlcXVpcmUoJy4uL291dHB1dCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG91dHB1dEpzb24gKGZpbGUsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucylcblxuICBhd2FpdCBvdXRwdXRGaWxlKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRwdXRKc29uXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdqc29uZmlsZS91dGlscycpXG5jb25zdCB7IG91dHB1dEZpbGVTeW5jIH0gPSByZXF1aXJlKCcuLi9vdXRwdXQnKVxuXG5mdW5jdGlvbiBvdXRwdXRKc29uU3luYyAoZmlsZSwgZGF0YSwgb3B0aW9ucykge1xuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucylcblxuICBvdXRwdXRGaWxlU3luYyhmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblN5bmNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBqc29uRmlsZSA9IHJlcXVpcmUoJy4vanNvbmZpbGUnKVxuXG5qc29uRmlsZS5vdXRwdXRKc29uID0gdShyZXF1aXJlKCcuL291dHB1dC1qc29uJykpXG5qc29uRmlsZS5vdXRwdXRKc29uU3luYyA9IHJlcXVpcmUoJy4vb3V0cHV0LWpzb24tc3luYycpXG4vLyBhbGlhc2VzXG5qc29uRmlsZS5vdXRwdXRKU09OID0ganNvbkZpbGUub3V0cHV0SnNvblxuanNvbkZpbGUub3V0cHV0SlNPTlN5bmMgPSBqc29uRmlsZS5vdXRwdXRKc29uU3luY1xuanNvbkZpbGUud3JpdGVKU09OID0ganNvbkZpbGUud3JpdGVKc29uXG5qc29uRmlsZS53cml0ZUpTT05TeW5jID0ganNvbkZpbGUud3JpdGVKc29uU3luY1xuanNvbkZpbGUucmVhZEpTT04gPSBqc29uRmlsZS5yZWFkSnNvblxuanNvbkZpbGUucmVhZEpTT05TeW5jID0ganNvbkZpbGUucmVhZEpzb25TeW5jXG5cbm1vZHVsZS5leHBvcnRzID0ganNvbkZpbGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5U3luYyA9IHJlcXVpcmUoJy4uL2NvcHktc3luYycpLmNvcHlTeW5jXG5jb25zdCByZW1vdmVTeW5jID0gcmVxdWlyZSgnLi4vcmVtb3ZlJykucmVtb3ZlU3luY1xuY29uc3QgbWtkaXJwU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlycFN5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBtb3ZlU3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdtb3ZlJylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcbiAgbWtkaXJwU3luYyhwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIHJldHVybiBkb1JlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gZG9SZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGlmIChvdmVyd3JpdGUpIHtcbiAgICByZW1vdmVTeW5jKGRlc3QpXG4gICAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxuICBpZiAoZnMuZXhpc3RzU3luYyhkZXN0KSkgdGhyb3cgbmV3IEVycm9yKCdkZXN0IGFscmVhZHkgZXhpc3RzLicpXG4gIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUpXG59XG5cbmZ1bmN0aW9uIHJlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUpIHtcbiAgdHJ5IHtcbiAgICBmcy5yZW5hbWVTeW5jKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB0aHJvdyBlcnJcbiAgICByZXR1cm4gbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWVcbiAgfVxuICBjb3B5U3luYyhzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiByZW1vdmVTeW5jKHNyYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlU3luY1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZVN5bmM6IHJlcXVpcmUoJy4vbW92ZS1zeW5jJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5ID0gcmVxdWlyZSgnLi4vY29weScpLmNvcHlcbmNvbnN0IHJlbW92ZSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVxuY29uc3QgbWtkaXJwID0gcmVxdWlyZSgnLi4vbWtkaXJzJykubWtkaXJwXG5jb25zdCBwYXRoRXhpc3RzID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKS5wYXRoRXhpc3RzXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZSAoc3JjLCBkZXN0LCBvcHRzLCBjYikge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHNcbiAgICBvcHRzID0ge31cbiAgfVxuXG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIHN0YXQuY2hlY2tQYXRocyhzcmMsIGRlc3QsICdtb3ZlJywgKGVyciwgc3RhdHMpID0+IHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGNvbnN0IHsgc3JjU3RhdCB9ID0gc3RhdHNcbiAgICBzdGF0LmNoZWNrUGFyZW50UGF0aHMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScsIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgbWtkaXJwKHBhdGguZGlybmFtZShkZXN0KSwgZXJyID0+IHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gZG9SZW5hbWUgKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYikge1xuICBpZiAob3ZlcndyaXRlKSB7XG4gICAgcmV0dXJuIHJlbW92ZShkZXN0LCBlcnIgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHJldHVybiByZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICAgIH0pXG4gIH1cbiAgcGF0aEV4aXN0cyhkZXN0LCAoZXJyLCBkZXN0RXhpc3RzKSA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBpZiAoZGVzdEV4aXN0cykgcmV0dXJuIGNiKG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKSlcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBjYilcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgZnMucmVuYW1lKHNyYywgZGVzdCwgZXJyID0+IHtcbiAgICBpZiAoIWVycikgcmV0dXJuIGNiKClcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHJldHVybiBjYihlcnIpXG4gICAgcmV0dXJuIG1vdmVBY3Jvc3NEZXZpY2Uoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGNiKVxuICB9KVxufVxuXG5mdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSwgY2IpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBvdmVyd3JpdGUsXG4gICAgZXJyb3JPbkV4aXN0OiB0cnVlXG4gIH1cbiAgY29weShzcmMsIGRlc3QsIG9wdHMsIGVyciA9PiB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICByZXR1cm4gcmVtb3ZlKHNyYywgY2IpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbUNhbGxiYWNrXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogdShyZXF1aXJlKCcuL21vdmUnKSlcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIEV4cG9ydCBwcm9taXNlaWZpZWQgZ3JhY2VmdWwtZnM6XG4gIC4uLnJlcXVpcmUoJy4vZnMnKSxcbiAgLy8gRXhwb3J0IGV4dHJhIG1ldGhvZHM6XG4gIC4uLnJlcXVpcmUoJy4vY29weS1zeW5jJyksXG4gIC4uLnJlcXVpcmUoJy4vY29weScpLFxuICAuLi5yZXF1aXJlKCcuL2VtcHR5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW5zdXJlJyksXG4gIC4uLnJlcXVpcmUoJy4vanNvbicpLFxuICAuLi5yZXF1aXJlKCcuL21rZGlycycpLFxuICAuLi5yZXF1aXJlKCcuL21vdmUtc3luYycpLFxuICAuLi5yZXF1aXJlKCcuL21vdmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9vdXRwdXQnKSxcbiAgLi4ucmVxdWlyZSgnLi9wYXRoLWV4aXN0cycpLFxuICAuLi5yZXF1aXJlKCcuL3JlbW92ZScpXG59XG5cbi8vIEV4cG9ydCBmcy5wcm9taXNlcyBhcyBhIGdldHRlciBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IHRyaWdnZXJcbi8vIEV4cGVyaW1lbnRhbFdhcm5pbmcgYmVmb3JlIGZzLnByb21pc2VzIGlzIGFjdHVhbGx5IGFjY2Vzc2VkLlxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmcywgJ3Byb21pc2VzJykpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAncHJvbWlzZXMnLCB7XG4gICAgZ2V0ICgpIHsgcmV0dXJuIGZzLnByb21pc2VzIH1cbiAgfSlcbn1cbiIsICJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5jb25zdCBDREtfT1VURElSX1BSRUZJWCA9ICdjZGstaW50ZWcub3V0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGludGVncmF0aW9uIHRlc3RcbiAqXG4gKiBUaGlzIHR5cGUgaXMgYSBkYXRhLW9ubHkgc3RydWN0dXJlLCBzbyBpdCBjYW4gdHJpdmlhbGx5IGJlIHBhc3NlZCB0byB3b3JrZXJzLlxuICogRGVyaXZlZCBhdHRyaWJ1dGVzIGFyZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBgSW50ZWdUZXN0YCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGZpbGUgdG8gcnVuXG4gICAqXG4gICAqIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgd2UgZGlzY292ZXJlZCB0aGlzIHRlc3QgZnJvbVxuICAgKlxuICAgKiBQYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzY292ZXJ5Um9vdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlcml2ZWQgaW5mb3JtYXRpb24gZm9yIEludGVnVGVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVnVGVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBydW5cbiAgICpcbiAgICogUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBmaWxlIHRvIHJ1blxuICAgKlxuICAgKiBSZWxhdGl2ZSBmcm9tIHRoZSBcImRpc2NvdmVyeSByb290XCIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFic29sdXRlRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5vcm1hbGl6ZWQgbmFtZSBvZiB0aGUgdGVzdC4gVGhpcyBuYW1lXG4gICAqIHdpbGwgYmUgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGF0IGRpcmVjdG9yeSB0aGUgdG9vbFxuICAgKiBpcyBydW4gZnJvbS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub3JtYWxpemVkVGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRGlyZWN0b3J5IHRoZSB0ZXN0IGlzIGluXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgbmFtZSBmb3IgdGhlIHRlc3RcbiAgICpcbiAgICogRGVwZW5kcyBvbiB0aGUgZGlzY292ZXJ5IGRpcmVjdG9yeS5cbiAgICpcbiAgICogTG9va3MgbGlrZSBgaW50ZWcubXl0ZXN0YCBvciBgcGFja2FnZS90ZXN0L2ludGVnLm15dGVzdGAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBvZiB0aGUgc25hcHNob3QgZGlyZWN0b3J5IGZvciB0aGlzIHRlc3RcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzbmFwc2hvdERpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSB0ZW1wb3Jhcnkgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhpcyB0ZXN0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVtcG9yYXJ5T3V0cHV0RGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGluZm86IEludGVnVGVzdEluZm8pIHtcbiAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUgPSBwYXRoLnJlc29sdmUoaW5mby5maWxlTmFtZSk7XG4gICAgdGhpcy5maWxlTmFtZSA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgaW5mby5maWxlTmFtZSk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXRoLnBhcnNlKHRoaXMuZmlsZU5hbWUpO1xuICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSA9IHBhdGgucmVsYXRpdmUoaW5mby5kaXNjb3ZlcnlSb290LCBpbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmRpcmVjdG9yeSA9IHBhcnNlZC5kaXI7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIHBhY2thZ2UgZGlyZWN0b3J5IHRoZW4ganVzdCB1c2UgdGhlIGZpbGVOYW1lXG4gICAgLy8gYXMgdGhlIHRlc3RuYW1lLCBidXQgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBwYXJlbnQgZGlyZWN0b3J5IHdpdGhcbiAgICAvLyBtdWx0aXBsZSBwYWNrYWdlcyB0aGVuIHVzZSB0aGUgZGlyZWN0b3J5L2ZpbGVuYW1lIGFzIHRoZSB0ZXN0bmFtZVxuICAgIC8vXG4gICAgLy8gTG9va3MgZWl0aGVyIGxpa2UgYGludGVnLm15dGVzdGAgb3IgYHBhY2thZ2UvdGVzdC9pbnRlZy5teXRlc3RgLlxuICAgIGNvbnN0IHJlbERpc2NvdmVyeVJvb3QgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGluZm8uZGlzY292ZXJ5Um9vdCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuZGlyZWN0b3J5ID09PSBwYXRoLmpvaW4ocmVsRGlzY292ZXJ5Um9vdCwgJ3Rlc3QnKSB8fCB0aGlzLmRpcmVjdG9yeSA9PT0gcGF0aC5qb2luKHJlbERpc2NvdmVyeVJvb3QpXG4gICAgICA/IHBhcnNlZC5uYW1lXG4gICAgICA6IHBhdGguam9pbihwYXRoLnJlbGF0aXZlKHRoaXMuaW5mby5kaXNjb3ZlcnlSb290LCBwYXJzZWQuZGlyKSwgcGFyc2VkLm5hbWUpO1xuXG4gICAgY29uc3QgbmFrZWRUZXN0TmFtZSA9IHBhcnNlZC5uYW1lLnNsaWNlKDYpOyAvLyBMZWF2ZSBuYW1lIHdpdGhvdXQgJ2ludGVnLicgYW5kICcudHMnXG4gICAgdGhpcy5ub3JtYWxpemVkVGVzdE5hbWUgPSBwYXJzZWQubmFtZTtcbiAgICB0aGlzLnNuYXBzaG90RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtuYWtlZFRlc3ROYW1lfS5pbnRlZy5zbmFwc2hvdGApO1xuICAgIHRoaXMudGVtcG9yYXJ5T3V0cHV0RGlyID0gcGF0aC5qb2luKHRoaXMuZGlyZWN0b3J5LCBgJHtDREtfT1VURElSX1BSRUZJWH0uJHtuYWtlZFRlc3ROYW1lfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0ZXN0IG1hdGNoZXMgdGhlIHVzZXItZ2l2ZW4gbmFtZVxuICAgKlxuICAgKiBXZSBhcmUgdmVyeSBsZW5pZW50IGhlcmUuIEEgbmFtZSBtYXRjaGVzIGlmIGl0IG1hdGNoZXM6XG4gICAqXG4gICAqIC0gVGhlIENXRC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBkaXNjb3Zlcnkgcm9vdC1yZWxhdGl2ZSBmaWxlbmFtZVxuICAgKiAtIFRoZSBzdWl0ZSBuYW1lXG4gICAqIC0gVGhlIGFic29sdXRlIGZpbGVuYW1lXG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlcyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgIHRoaXMuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSxcbiAgICAgIHRoaXMudGVzdE5hbWUsXG4gICAgICB0aGlzLmFic29sdXRlRmlsZU5hbWUsXG4gICAgXS5pbmNsdWRlcyhuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1biBjYW4gYmUgcHJvdmlkZWQgaW4gYSBmaWxlXG4gKiBpbnN0ZWFkIG9mIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gdGhlIGxpc3Qgb2YgdGVzdHNcbiAgICogcHJvdmlkZWQgd2lsbCBiZSBleGNsdWRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgdGVzdHMgdG8gaW5jbHVkZSAob3IgZXhjbHVkZSBpZiBgZXhjbHVkZT10cnVlYClcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdyYXRpb25UZXN0cyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGZpbGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgdGVzdFxuICAgKiB0byBlaXRoZXIgcnVuIG9yIGV4Y2x1ZGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIEludGVncmF0aW9uIFRlc3RzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEludGVnVGVzdFtdPiB7XG4gICAgY29uc3QgZmlsZTogSW50ZWdyYXRpb25UZXN0RmlsZUNvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgICBjb25zdCBmb3VuZFRlc3RzID0gYXdhaXQgdGhpcy5kaXNjb3ZlcigpO1xuXG4gICAgY29uc3QgYWxsVGVzdHMgPSB0aGlzLmZpbHRlclRlc3RzKGZvdW5kVGVzdHMsIGZpbGUudGVzdHMsIGZpbGUuZXhjbHVkZSk7XG5cbiAgICByZXR1cm4gYWxsVGVzdHM7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVzZXIgcHJvdmlkZXMgYSBsaXN0IG9mIHRlc3RzLCB0aGVzZSBjYW4gZWl0aGVyIGJlIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIG9yIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLlxuICAgKlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBpbmNsdWRlIHRoZW4gd2UgZGlzY292ZXIgYWxsIGF2YWlsYWJsZSB0ZXN0cyBhbmQgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgcHJvdmlkZWQgdmFsaWQgdGVzdHMuXG4gICAqICAgSWYgdGhleSBoYXZlIHByb3ZpZGVkIGEgdGVzdCBuYW1lIHRoYXQgd2UgZG9uJ3QgZmluZCwgdGhlbiB3ZSB3cml0ZSBvdXQgdGhhdCBlcnJvciBtZXNzYWdlLlxuICAgKiAtIElmIGl0IGlzIGEgbGlzdCBvZiB0ZXN0cyB0byBleGNsdWRlLCB0aGVuIHdlIGRpc2NvdmVyIGFsbCBhdmFpbGFibGUgdGVzdHMgYW5kIGZpbHRlciBvdXQgdGhlIHRlc3RzIHRoYXQgd2VyZSBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgZmlsdGVyVGVzdHMoZGlzY292ZXJlZFRlc3RzOiBJbnRlZ1Rlc3RbXSwgcmVxdWVzdGVkVGVzdHM/OiBzdHJpbmdbXSwgZXhjbHVkZT86IGJvb2xlYW4pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgaWYgKCFyZXF1ZXN0ZWRUZXN0cykge1xuICAgICAgcmV0dXJuIGRpc2NvdmVyZWRUZXN0cztcbiAgICB9XG5cblxuICAgIGNvbnN0IGFsbFRlc3RzID0gZGlzY292ZXJlZFRlc3RzLmZpbHRlcih0ID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0ZWRUZXN0cy5zb21lKHBhdHRlcm4gPT4gdC5tYXRjaGVzKHBhdHRlcm4pKTtcbiAgICAgIHJldHVybiBtYXRjaGVzICE9PSAhIWV4Y2x1ZGU7IC8vIExvb2tzIHdlaXJkIGJ1dCBpcyBlcXVhbCB0byAobWF0Y2hlcyAmJiAhZXhjbHVkZSkgfHwgKCFtYXRjaGVzICYmIGV4Y2x1ZGUpXG4gICAgfSk7XG5cbiAgICAvLyBJZiBub3QgZXhjbHVkaW5nLCBhbGwgcGF0dGVybnMgbXVzdCBoYXZlIG1hdGNoZWQgYXQgbGVhc3Qgb25lIHRlc3RcbiAgICBpZiAoIWV4Y2x1ZGUpIHtcbiAgICAgIGNvbnN0IHVubWF0Y2hlZFBhdHRlcm5zID0gcmVxdWVzdGVkVGVzdHMuZmlsdGVyKHBhdHRlcm4gPT4gIWRpc2NvdmVyZWRUZXN0cy5zb21lKHQgPT4gdC5tYXRjaGVzKHBhdHRlcm4pKSk7XG4gICAgICBmb3IgKGNvbnN0IHVubWF0Y2hlZCBvZiB1bm1hdGNoZWRQYXR0ZXJucykge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgTm8gc3VjaCBpbnRlZyB0ZXN0OiAke3VubWF0Y2hlZH1cXG5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh1bm1hdGNoZWRQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBBdmFpbGFibGUgdGVzdHM6ICR7ZGlzY292ZXJlZFRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignICcpfVxcbmApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFRlc3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgdGVzdHMgdG8gbG9vayBmb3IsIG90aGVyd2lzZVxuICAgKiBpdCB3aWxsIGxvb2sgZm9yIGFsbCB0ZXN0cyBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICpcbiAgICogQHBhcmFtIHRlc3RzIFRlc3RzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSwgdW5kZWZpbmVkIG1lYW5zIGluY2x1ZGUgYWxsIHRlc3RzLlxuICAgKiBAcGFyYW0gZXhjbHVkZSBXaGV0aGVyIHRoZSAndGVzdHMnIGxpc3QgaXMgaW5jbHVzaXZlIG9yIGV4Y2x1c2l2ZSAoaW5jbHVzaXZlIGJ5IGRlZmF1bHQpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZyb21DbGlBcmdzKHRlc3RzPzogc3RyaW5nW10sIGV4Y2x1ZGU/OiBib29sZWFuKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGRpc2NvdmVyZWRUZXN0cyA9IGF3YWl0IHRoaXMuZGlzY292ZXIoKTtcblxuICAgIGNvbnN0IGFsbFRlc3RzID0gdGhpcy5maWx0ZXJUZXN0cyhkaXNjb3ZlcmVkVGVzdHMsIHRlc3RzLCBleGNsdWRlKTtcblxuICAgIHJldHVybiBhbGxUZXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGlzY292ZXIoKTogUHJvbWlzZTxJbnRlZ1Rlc3RbXT4ge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5yZWFkVHJlZSgpO1xuICAgIGNvbnN0IGludGVncyA9IGZpbGVzLmZpbHRlcihmaWxlTmFtZSA9PiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5zdGFydHNXaXRoKCdpbnRlZy4nKSAmJiBwYXRoLmJhc2VuYW1lKGZpbGVOYW1lKS5lbmRzV2l0aCgnLmpzJykpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoaW50ZWdzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdChmaWxlczogc3RyaW5nW10pOiBJbnRlZ1Rlc3RbXSB7XG4gICAgcmV0dXJuIGZpbGVzLm1hcChmaWxlTmFtZSA9PiBuZXcgSW50ZWdUZXN0KHsgZGlzY292ZXJ5Um9vdDogdGhpcy5kaXJlY3RvcnksIGZpbGVOYW1lIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFRyZWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGZpbGUpO1xuICAgICAgICBjb25zdCBzdGF0ZiA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpO1xuICAgICAgICBpZiAoc3RhdGYuaXNGaWxlKCkpIHsgcmV0LnB1c2goZnVsbFBhdGgpOyB9XG4gICAgICAgIGlmIChzdGF0Zi5pc0RpcmVjdG9yeSgpKSB7IGF3YWl0IHJlY3Vyc2UocGF0aC5qb2luKGZ1bGxQYXRoKSk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCByZWN1cnNlKHRoaXMuZGlyZWN0b3J5KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcblxuLyoqXG4gKiBUaGUgYWdncmVnYXRlIHJlc3VsdHMgZnJvbSBydW5uaW5nIGFzc2VydGlvbnMgb24gYSB0ZXN0IGNhc2VcbiAqL1xuZXhwb3J0IHR5cGUgQXNzZXJ0aW9uUmVzdWx0cyA9IHsgW2lkOiBzdHJpbmddOiBBc3NlcnRpb25SZXN1bHQgfTtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGluZGl2aWR1YWwgYXNzZXJ0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXJ0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gbWVzc2FnZS4gSWYgdGhlIGFzc2VydGlvbiBmYWlsZWQsIHRoaXMgd2lsbFxuICAgKiBpbmNsdWRlIHRoZSByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFzc2VydGlvbiBzdWNjZWVkZWQgb3IgZmFpbGVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdzdWNjZXNzJyB8ICdmYWlsJztcbn1cblxuLyoqXG4gKiBDb25maWcgZm9yIGFuIGludGVncmF0aW9uIHRlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RXb3JrZXJDb25maWcgZXh0ZW5kcyBJbnRlZ1Rlc3RJbmZvIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdHJ1Y3RpdmVDaGFuZ2VzPzogRGVzdHJ1Y3RpdmVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvbiBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlc3RydWN0aXZlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBsb2dpY2FsSWQgb2YgdGhlIHJlc291cmNlIHdpdGggYSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhY2sgdGhhdCBjb250YWlucyB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGltcGFjdCBvZiB0aGUgZGVzdHJ1Y3RpdmUgY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBpbXBhY3Q6IFJlc291cmNlSW1wYWN0O1xufVxuXG5cbi8qKlxuICogUmVwcmVzZW50cyBpbnRlZ3JhdGlvbiB0ZXN0cyBtZXRyaWNzIGZvciBhIGdpdmVuIHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyTWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB0ZXN0IHdhcyBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHdvcmtlci5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWwgdGVzdCBkdXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQgdGhlXG4gICAqIHdvcmtlciBleGVjdXRlZC5cbiAgICpcbiAgICogTWFwIG9mIHRlc3ROYW1lIHRvIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgdGhhdCB3YXMgdXNlZCB0byBydW4gdGhlIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJldGFpbiBmYWlsZWQgc25hcHNob3QgY29tcGFyaXNvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2UgbW9kZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCByZXN1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdCYXRjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmFpbGVkIHRlc3RzXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRUZXN0czogSW50ZWdUZXN0SW5mb1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEludGVncmF0aW9uIHRlc3QgbWV0cmljcy4gRWFjaCBlbnRyeSBpbiB0aGVcbiAgICogbGlzdCByZXByZXNlbnRzIG1ldHJpY3MgZnJvbSBhIHNpbmdsZSB3b3JrZXIgKGFjY291bnQgKyByZWdpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW107XG59XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBydW5cbiAgICogaW4gdGhpcyBiYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHRoZSBzdGFja3MgYXQgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBpcyBzZXQgdG8gYHRydWVgIHRoZSBzbmFwc2hvdCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQgX3dpdGhvdXRfIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogVGhlIHJlc3VsdGluZyBzbmFwc2hvdCBTSE9VTEQgTk9UIGJlIGNoZWNrZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBvZiB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gICAqIEhpZ2hlciBudW1iZXIgbWVhbnMgbW9yZSBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVXb3JrZmxvdz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBwb3NzaWJsZSByZWFzb25zIGZvciBhIGRpYWdub3N0aWNcbiAqL1xuZXhwb3J0IGVudW0gRGlhZ25vc3RpY1JlYXNvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZVxuICAgKiBpcyBub3QgZXhpc3Rpbmcgc25hcHNob3RcbiAgICovXG4gIE5PX1NOQVBTSE9UID0gJ05PX1NOQVBTSE9UJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkXG4gICAqL1xuICBURVNUX0ZBSUxFRCA9ICdURVNUX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAqL1xuICBURVNUX0VSUk9SID0gJ1RFU1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGUgYWN0dWFsXG4gICAqIHNuYXBzaG90IHdhcyBkaWZmZXJlbnQgdGhhbiB0aGUgZXhwZWN0ZWQgc25hcHNob3RcbiAgICovXG4gIFNOQVBTSE9UX0ZBSUxFRCA9ICdTTkFQU0hPVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZXhlY3V0aW5nIGl0XG4gICAqL1xuICBTTkFQU0hPVF9FUlJPUiA9ICdTTkFQU0hPVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgU05BUFNIT1RfU1VDQ0VTUyA9ICdTTkFQU0hPVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBURVNUX1NVQ0NFU1MgPSAnVEVTVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBmYWlsZWRcbiAgICovXG4gIEFTU0VSVElPTl9GQUlMRUQgPSAnQVNTRVJUSU9OX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBkaWFnbm9zdGljc1xuICogVGhpcyBpcyB1c2VkIHRvIHJlcG9ydCBiYWNrIHRoZSBzdGF0dXMgb2YgZWFjaCB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpdCB0b29rIHRvIHJ1biB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFzb24gZm9yIHRoZSBkaWFnbm9zdGljXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERpYWdub3N0aWNSZWFzb247XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gcHJpbnRcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZXNzYWdlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTdW1tYXJ5KHRvdGFsOiBudW1iZXIsIGZhaWxlZDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsucmVkKGZhaWxlZCksIGNoYWxrLnJlZCgnZmFpbGVkJyksIHRvdGFsKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIucHJpbnQoJyVzOiAgICAlcyAlcywgJXMgdG90YWwnLCBjaGFsay5ib2xkKCdUZXN0cycpLCBjaGFsay5ncmVlbih0b3RhbCksIGNoYWxrLmdyZWVuKCdwYXNzZWQnKSwgdG90YWwpO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBhc3NlcnRpb24gcmVzdWx0cyBzbyB0aGF0IHRoZSByZXN1bHRzIGNhbiBiZVxuICogcHJpbnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzOiBBc3NlcnRpb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpXG4gICAgLm1hcCgoW2lkLCByZXN1bHRdKSA9PiBmb3JtYXQoJyVzJXMnLCBpZCwgcmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gYCAtICR7cmVzdWx0LnN0YXR1c31gIDogYFxcbiR7cmVzdWx0Lm1lc3NhZ2V9YCkpXG4gICAgLmpvaW4oJ1xcbiAgICAgICcpO1xufVxuXG4vKipcbiAqIFByaW50IG91dCB0aGUgcmVzdWx0cyBmcm9tIHRlc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFJlc3VsdHMoZGlhZ25vc3RpYzogRGlhZ25vc3RpYyk6IHZvaWQge1xuICBzd2l0Y2ggKGRpYWdub3N0aWMucmVhc29uKSB7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX1NVQ0NFU1M6XG4gICAgICBsb2dnZXIuc3VjY2VzcygnICBVTkNIQU5HRUQgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgU1VDQ0VTUyAgICAlcyAlc1xcbiAgICAgICcsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uTk9fU05BUFNIT1Q6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgTkVXICAgICAgICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBDSEFOR0VEICAgICVzICVzXFxuICAgICAgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBkaWFnbm9zdGljLm1lc3NhZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0VSUk9SOlxuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0VSUk9SOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEVSUk9SICAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRkFJTEVEICAgICAlcyAlc1xcbiAgICAgICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgZGlhZ25vc3RpYy5tZXNzYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5BU1NFUlRJT05fRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEFTU0VSVCAgICAgJXMgJXNcXG4gICAgICAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGRpYWdub3N0aWMubWVzc2FnZSk7XG4gICAgICBicmVhaztcbiAgfVxuICBmb3IgKGNvbnN0IGFkZGwgb2YgZGlhZ25vc3RpYy5hZGRpdGlvbmFsTWVzc2FnZXMgPz8gW10pIHtcbiAgICBsb2dnZXIucHJpbnQoYCAgICAgICR7YWRkbH1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMYWdnYXJkcyh0ZXN0TmFtZXM6IFNldDxzdHJpbmc+KSB7XG4gIGNvbnN0IHBhcnRzID0gW1xuICAgICcgICcsXG4gICAgYFdhaXRpbmcgZm9yICR7dGVzdE5hbWVzLnNpemV9IG1vcmVgLFxuICAgIHRlc3ROYW1lcy5zaXplIDwgMTAgPyBbJygnLCBBcnJheS5mcm9tKHRlc3ROYW1lcykuam9pbignLCAnKSwgJyknXS5qb2luKCcnKSA6ICcnLFxuICBdO1xuXG4gIGxvZ2dlci5wcmludChjaGFsay5ncmV5KHBhcnRzLmZpbHRlcih4ID0+IHgpLmpvaW4oJyAnKSkpO1xufVxuIiwgIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIENESyBFeGVjXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuLyoqXG4gKiBPdXIgb3duIGV4ZWN1dGUgZnVuY3Rpb24gd2hpY2ggZG9lc24ndCB1c2Ugc2hlbGxzIGFuZCBzdHJpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kTGluZTogc3RyaW5nW10sIG9wdGlvbnM6IHsgY3dkPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhbiwgZW52PzogYW55IH0gPSB7IH0pOiBhbnkge1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKGNvbW1hbmRMaW5lWzBdLCBjb21tYW5kTGluZS5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgb3B0aW9ucy52ZXJib3NlID8gJ2luaGVyaXQnIDogJ3BpcGUnXSwgLy8gaW5oZXJpdCBTVERFUlIgaW4gdmVyYm9zZSBtb2RlXG4gICAgZW52OiB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgIH0sXG4gICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgfSk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHsgdGhyb3cgcHJvYy5lcnJvcjsgfVxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvY2Vzcy5zdGRlcnIpIHsgLy8gd2lsbCBiZSAnbnVsbCcgaW4gdmVyYm9zZSBtb2RlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShwcm9jLnN0ZGVycik7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBleGl0ZWQgd2l0aCAke3Byb2Muc3RhdHVzID8gYHN0YXR1cyAke3Byb2Muc3RhdHVzfWAgOiBgc2lnbmFsICR7cHJvYy5zaWduYWx9YH1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dCA9IHByb2Muc3Rkb3V0LnRvU3RyaW5nKCd1dGYtOCcpLnRyaW0oKTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogQ2hhaW4gY29tbWFuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNvbW1hbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kcy5maWx0ZXIoYyA9PiAhIWMpLmpvaW4oJyAmJiAnKTtcbn1cblxuLyoqXG4gKiBTcGxpdCBjb21tYW5kIHRvIGNodW5rcyBieSBzcGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2h1bmtzKGNvbW1hbmQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaCgvKD86W15cXHNcIl0rfFwiW15cIl0qXCIpKy9nKTtcbiAgcmV0dXJuIHJlc3VsdCA/PyBbXTtcbn1cblxuXG4vKipcbiAqIEEgY2xhc3MgaG9sZGluZyBhIHNldCBvZiBpdGVtcyB3aGljaCBhcmUgYmVpbmcgY3Jvc3NlZCBvZmYgaW4gdGltZVxuICpcbiAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGNyb3NzIG9mZiBhIG5ldyBpdGVtLCBwcmludCB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtMaXN0PEE+IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZW1haW5pbmcgPSBuZXcgU2V0KHRoaXMuaXRlbXMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IEFbXSwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBXb3JrTGlzdE9wdGlvbnM8QT4gPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyA2MF8wMDA7XG4gICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3Jvc3NPZmYoaXRlbTogQSkge1xuICAgIHRoaXMucmVtYWluaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmICh0aGlzLnJlbWFpbmluZy5zaXplID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvbmUoKSB7XG4gICAgdGhpcy5yZW1haW5pbmcuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVUaW1lcigpIHtcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlcG9ydCgpLCB0aGlzLnRpbWVvdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnQoKSB7XG4gICAgdGhpcy5vcHRpb25zLm9uVGltZW91dD8uKHRoaXMucmVtYWluaW5nKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtMaXN0T3B0aW9uczxBPiB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHJlcGx5IHdpdGggcmVtYWluaW5nIGl0ZW1zXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGltZW91dCBoaXRzXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoeDogU2V0PEE+KSA9PiB2b2lkO1xufSIsICJpbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmludFJlc3VsdHMsIHByaW50U3VtbWFyeSwgSW50ZWdCYXRjaFJlc3BvbnNlLCBJbnRlZ1Rlc3RPcHRpb25zLCBJbnRlZ1J1bm5lck1ldHJpY3MgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdCBiYXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdEJhdGNoUmVxdWVzdCBleHRlbmRzIEludGVnVGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gdG8gcnVuIHRoaXMgYmF0Y2ggaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIHdoZW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyBhbGwgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RSdW5PcHRpb25zIGV4dGVuZHMgSW50ZWdUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzIGFjcm9zcy5cbiAgICogVGhpcyBhbGxvd3MgdGhlIHJ1bm5lciB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWxcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEFXUyBwcm9maWxlcy4gVGhpcyB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgcmVnaW9uc2BcbiAgICogdG8gcnVuIHRlc3RzIGluIHBhcmFsbGVsIGFjcm9zcyBhY2NvdW50cyArIHJlZ2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JrZXJwb29sIHRvIHVzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9vbDogd29ya2VycG9vbC5Xb3JrZXJQb29sO1xufVxuXG4vKipcbiAqIFJ1biBJbnRlZ3JhdGlvbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkludGVncmF0aW9uVGVzdHMob3B0aW9uczogSW50ZWdUZXN0UnVuT3B0aW9ucyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuLCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3NbXSB9PiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgZm9yIGZhaWxlZCB0ZXN0cy4uLlxcbicpO1xuICBsb2dnZXIucHJpbnQoXG4gICAgJ1J1bm5pbmcgaW4gcGFyYWxsZWwgYWNyb3NzICVzcmVnaW9uczogJXMnLFxuICAgIG9wdGlvbnMucHJvZmlsZXMgPyBgcHJvZmlsZXMgJHtvcHRpb25zLnByb2ZpbGVzLmpvaW4oJywgJyl9IGFuZCBgOiAnJyxcbiAgICBvcHRpb25zLnJlZ2lvbnMuam9pbignLCAnKSk7XG4gIGNvbnN0IHRvdGFsVGVzdHMgPSBvcHRpb25zLnRlc3RzLmxlbmd0aDtcblxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzSW5QYXJhbGxlbChvcHRpb25zKTtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuVGVzdCBSZXN1bHRzOiBcXG4nKTtcbiAgcHJpbnRTdW1tYXJ5KHRvdGFsVGVzdHMsIHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGgpO1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHJlc3BvbnNlcy5mYWlsZWRUZXN0cy5sZW5ndGggPT09IDAsXG4gICAgbWV0cmljczogcmVzcG9uc2VzLm1ldHJpY3MsXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHdvcmtlciBmb3IgYSBzaW5nbGUgYWNjb3VudCArIHJlZ2lvblxuICovXG5pbnRlcmZhY2UgQWNjb3VudFdvcmtlciB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB3b3JrZXIgc2hvdWxkIHJ1biBpblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSB0aGF0IHRoZSB3b3JrZXIgc2hvdWxkIHVzZVxuICAgKiBUaGlzIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSAnLS1wcm9maWxlJyBvcHRpb24gdG8gdGhlIENESyBDTElcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgQWNjb3VudFdvcmtlcnMgYmFzZWQgb24gdGhlIGxpc3Qgb2YgcmVnaW9ucyBhbmQgcHJvZmlsZXNcbiAqIGdpdmVuIHRvIHRoZSBDTEkuXG4gKi9cbmZ1bmN0aW9uIGdldEFjY291bnRXb3JrZXJzKHJlZ2lvbnM6IHN0cmluZ1tdLCBwcm9maWxlcz86IHN0cmluZ1tdKTogQWNjb3VudFdvcmtlcltdIHtcbiAgY29uc3Qgd29ya2VyczogQWNjb3VudFdvcmtlcltdID0gW107XG4gIGZ1bmN0aW9uIHB1c2hXb3JrZXIocHJvZmlsZT86IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICAgIHdvcmtlcnMucHVzaCh7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgcHJvZmlsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBpZiAocHJvZmlsZXMgJiYgcHJvZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBwcm9maWxlcyA/PyBbXSkge1xuICAgICAgcHVzaFdvcmtlcihwcm9maWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHVzaFdvcmtlcigpO1xuICB9XG4gIHJldHVybiB3b3JrZXJzO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBzZXQgb2YgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwgYWNyb3NzIGEgbGlzdCBvZiBBV1MgcmVnaW9ucy5cbiAqIE9ubHkgYSBzaW5nbGUgdGVzdCBjYW4gYmUgcnVuIGF0IGEgdGltZSBpbiBhIGdpdmVuIHJlZ2lvbi4gT25jZSBhIHJlZ2lvblxuICogaXMgZG9uZSBydW5uaW5nIGEgdGVzdCwgdGhlIG5leHQgdGVzdCB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBxdWV1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSW50ZWdyYXRpb25UZXN0c0luUGFyYWxsZWwoXG4gIG9wdGlvbnM6IEludGVnVGVzdFJ1bk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnQmF0Y2hSZXNwb25zZT4ge1xuXG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucy50ZXN0cztcbiAgY29uc3QgcmVzdWx0czogSW50ZWdCYXRjaFJlc3BvbnNlID0ge1xuICAgIG1ldHJpY3M6IFtdLFxuICAgIGZhaWxlZFRlc3RzOiBbXSxcbiAgfTtcbiAgY29uc3QgYWNjb3VudFdvcmtlcnM6IEFjY291bnRXb3JrZXJbXSA9IGdldEFjY291bnRXb3JrZXJzKG9wdGlvbnMucmVnaW9ucywgb3B0aW9ucy5wcm9maWxlcyk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdCh3b3JrZXI6IEFjY291bnRXb3JrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBxdWV1ZS5wb3AoKTtcbiAgICAgIGlmICghdGVzdCkgYnJlYWs7XG4gICAgICBjb25zdCB0ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgbG9nZ2VyLmhpZ2hsaWdodChgUnVubmluZyB0ZXN0ICR7dGVzdC5maWxlTmFtZX0gaW4gJHt3b3JrZXIucHJvZmlsZSA/IHdvcmtlci5wcm9maWxlICsgJy8nIDogJyd9JHt3b3JrZXIucmVnaW9ufWApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IEludGVnVGVzdEluZm9bXVtdID0gYXdhaXQgb3B0aW9ucy5wb29sLmV4ZWMoJ2ludGVnVGVzdFdvcmtlcicsIFt7XG4gICAgICAgIHJlZ2lvbjogd29ya2VyLnJlZ2lvbixcbiAgICAgICAgcHJvZmlsZTogd29ya2VyLnByb2ZpbGUsXG4gICAgICAgIHRlc3RzOiBbdGVzdF0sXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogb3B0aW9ucy51cGRhdGVXb3JrZmxvdyxcbiAgICAgIH1dLCB7XG4gICAgICAgIG9uOiBwcmludFJlc3VsdHMsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy5mYWlsZWRUZXN0cy5wdXNoKC4uLmZsYXR0ZW4ocmVzcG9uc2UpKTtcbiAgICAgIHRlc3RzW3Rlc3QuZmlsZU5hbWVdID0gKERhdGUubm93KCkgLSB0ZXN0U3RhcnQpIC8gMTAwMDtcbiAgICB9IHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBtZXRyaWNzOiBJbnRlZ1J1bm5lck1ldHJpY3MgPSB7XG4gICAgICByZWdpb246IHdvcmtlci5yZWdpb24sXG4gICAgICBwcm9maWxlOiB3b3JrZXIucHJvZmlsZSxcbiAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICB0ZXN0cyxcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0cy5tZXRyaWNzLnB1c2gobWV0cmljcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ya2VycyA9IGFjY291bnRXb3JrZXJzLm1hcCgod29ya2VyKSA9PiBydW5UZXN0KHdvcmtlcikpO1xuICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzKTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iLCAiaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgSW50ZWdUZXN0IH0gZnJvbSAnLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IGZsYXR0ZW4sIFdvcmtMaXN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcHJpbnRTdW1tYXJ5LCBwcmludFJlc3VsdHMsIEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBwcmludExhZ2dhcmRzIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIFJ1biBTbmFwc2hvdCB0ZXN0c1xuICogRmlyc3QgYmF0Y2ggdXAgdGhlIHRlc3RzLiBCeSBkZWZhdWx0IHRoZXJlIHdpbGwgYmUgMyB0ZXN0cyBwZXIgYmF0Y2guXG4gKiBVc2UgYSB3b3JrZXJwb29sIHRvIHJ1biB0aGUgYmF0Y2hlcyBpbiBwYXJhbGxlbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNuYXBzaG90VGVzdHMoXG4gIHBvb2w6IHdvcmtlcnBvb2wuV29ya2VyUG9vbCxcbiAgdGVzdHM6IEludGVnVGVzdFtdLFxuICBvcHRpb25zOiBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4pOiBQcm9taXNlPEludGVnVGVzdFdvcmtlckNvbmZpZ1tdPiB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJ1xcblZlcmlmeWluZyBpbnRlZ3JhdGlvbiB0ZXN0IHNuYXBzaG90cy4uLlxcbicpO1xuXG4gIGNvbnN0IHRvZG8gPSBuZXcgV29ya0xpc3QodGVzdHMubWFwKHQgPT4gdC50ZXN0TmFtZSksIHtcbiAgICBvblRpbWVvdXQ6IHByaW50TGFnZ2FyZHMsXG4gIH0pO1xuXG4gIGNvbnN0IGZhaWxlZFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdGVzdHMubWFwKCh0ZXN0KSA9PiBwb29sLmV4ZWMoJ3NuYXBzaG90VGVzdFdvcmtlcicsIFt0ZXN0LmluZm8gLyogRGVoeWRyYXRlIGNsYXNzIC0+IGRhdGEgKi8sIG9wdGlvbnNdLCB7XG4gICAgICBvbjogKHgpID0+IHtcbiAgICAgICAgdG9kby5jcm9zc09mZih4LnRlc3ROYW1lKTtcbiAgICAgICAgcHJpbnRSZXN1bHRzKHgpO1xuICAgICAgfSxcbiAgICB9KSksXG4gICk7XG4gIHRvZG8uZG9uZSgpO1xuICBjb25zdCB0ZXN0c1RvUnVuID0gZmxhdHRlbihmYWlsZWRUZXN0cyk7XG5cbiAgbG9nZ2VyLmhpZ2hsaWdodCgnXFxuU25hcHNob3QgUmVzdWx0czogXFxuJyk7XG4gIHByaW50U3VtbWFyeSh0ZXN0cy5sZW5ndGgsIHRlc3RzVG9SdW4ubGVuZ3RoKTtcbiAgcmV0dXJuIHRlc3RzVG9SdW47XG5cbn1cbiIsICJleHBvcnQgKiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVnLXRlc3Qtd29ya2VyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctc25hcHNob3Qtd29ya2VyJztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgc2hpbTtcbmNsYXNzIFkxOE4ge1xuICAgIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAgICAgLy8gY29uZmlndXJhYmxlIG9wdGlvbnMuXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLmRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5IHx8ICcuL2xvY2FsZXMnO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzID0gdHlwZW9mIG9wdHMudXBkYXRlRmlsZXMgPT09ICdib29sZWFuJyA/IG9wdHMudXBkYXRlRmlsZXMgOiB0cnVlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IG9wdHMubG9jYWxlIHx8ICdlbic7XG4gICAgICAgIHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlID0gdHlwZW9mIG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlID09PSAnYm9vbGVhbicgPyBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA6IHRydWU7XG4gICAgICAgIC8vIGludGVybmFsIHN0dWZmLlxuICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlID0gW107XG4gICAgfVxuICAgIF9fKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnZ2VkTGl0ZXJhbChhcmd1bWVudHNbMF0sIC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNiID0gY2IgfHwgZnVuY3Rpb24gKCkgeyB9OyAvLyBub29wLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdID0gc3RyO1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIFt0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdIHx8IHN0cl0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgX19uKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGxldCBzdHIgPSBxdWFudGl0eSA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xuICAgICAgICBpZiAodGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXTtcbiAgICAgICAgICAgIHN0ciA9IGVudHJ5W3F1YW50aXR5ID09PSAxID8gJ29uZScgOiAnb3RoZXInXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdID0ge1xuICAgICAgICAgICAgICAgIG9uZTogc2luZ3VsYXIsXG4gICAgICAgICAgICAgICAgb3RoZXI6IHBsdXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYSAlZCBwbGFjZWhvbGRlciBpcyBwcm92aWRlZCwgYWRkIHF1YW50aXR5XG4gICAgICAgIC8vIHRvIHRoZSBhcmd1bWVudHMgZXhwYW5kZWQgYnkgdXRpbC5mb3JtYXQuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtzdHJdO1xuICAgICAgICBpZiAofnN0ci5pbmRleE9mKCclZCcpKVxuICAgICAgICAgICAgdmFsdWVzLnB1c2gocXVhbnRpdHkpO1xuICAgICAgICByZXR1cm4gc2hpbS5mb3JtYXQuYXBwbHkoc2hpbS5mb3JtYXQsIHZhbHVlcy5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBzZXRMb2NhbGUobG9jYWxlKSB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgIH1cbiAgICBnZXRMb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfdGFnZ2VkTGl0ZXJhbChwYXJ0cywgLi4uYXJncykge1xuICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgc3RyICs9IHBhcnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9fLmFwcGx5KHRoaXMsIFtzdHJdLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7XG4gICAgfVxuICAgIF9lbnF1ZXVlV3JpdGUod29yaykge1xuICAgICAgICB0aGlzLndyaXRlUXVldWUucHVzaCh3b3JrKTtcbiAgICAgICAgaWYgKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgIH1cbiAgICBfcHJvY2Vzc1dyaXRlUXVldWUoKSB7XG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgY29uc3Qgd29yayA9IHRoaXMud3JpdGVRdWV1ZVswXTtcbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmUgdGhlIGVucXVldWVkIHdvcmsuXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeSA9IHdvcmsuZGlyZWN0b3J5O1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB3b3JrLmxvY2FsZTtcbiAgICAgICAgY29uc3QgY2IgPSB3b3JrLmNiO1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMb2NhbGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlW2xvY2FsZV0sIG51bGwsIDIpO1xuICAgICAgICBzaGltLmZzLndyaXRlRmlsZShsYW5ndWFnZUZpbGUsIHNlcmlhbGl6ZWRMb2NhbGUsICd1dGYtOCcsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIF90aGlzLndyaXRlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChfdGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlYWRMb2NhbGVGaWxlKCkge1xuICAgICAgICBsZXQgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgYnVuZGxlciBzdWNoIGFzIHdlYnBhY2ssIHJlYWRGaWxlU3luYyBtYXkgbm90IGJlIGRlZmluZWQ6XG4gICAgICAgICAgICBpZiAoc2hpbS5mcy5yZWFkRmlsZVN5bmMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSBKU09OLnBhcnNlKHNoaW0uZnMucmVhZEZpbGVTeW5jKGxhbmd1YWdlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID0gJ3N5bnRheCBlcnJvciBpbiAnICsgbGFuZ3VhZ2VGaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJylcbiAgICAgICAgICAgICAgICBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0gPSBsb2NhbGVMb29rdXA7XG4gICAgfVxuICAgIF9yZXNvbHZlTG9jYWxlRmlsZShkaXJlY3RvcnksIGxvY2FsZSkge1xuICAgICAgICBsZXQgZmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZSArICcuanNvbicpO1xuICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgJiYgIXRoaXMuX2ZpbGVFeGlzdHNTeW5jKGZpbGUpICYmIH5sb2NhbGUubGFzdEluZGV4T2YoJ18nKSkge1xuICAgICAgICAgICAgLy8gYXR0ZW1wdCBmYWxsYmFjayB0byBsYW5ndWFnZSBvbmx5XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUuc3BsaXQoJ18nKVswXSArICcuanNvbicpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeGlzdHNTeW5jKGxhbmd1YWdlRmlsZSkpXG4gICAgICAgICAgICAgICAgZmlsZSA9IGxhbmd1YWdlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gICAgX2ZpbGVFeGlzdHNTeW5jKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHNoaW0uZXhpc3RzKGZpbGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHkxOG4kMShvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cblxudmFyIG5vZGVQbGF0Zm9ybVNoaW0gPSB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jOiBmcy5yZWFkRmlsZVN5bmMsXG4gICAgICAgIHdyaXRlRmlsZTogZnMud3JpdGVGaWxlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIHJlc29sdmU6IHBhdGgucmVzb2x2ZSxcbiAgICBleGlzdHM6IChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gICAgcmV0dXJuIHkxOG4kMShvcHRzLCBub2RlUGxhdGZvcm1TaGltKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0geTE4bjtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgY29uc3QgaXNDYW1lbENhc2UgPSBzdHIgIT09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPT0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFpc0NhbWVsQ2FzZSkge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHN0ci5pbmRleE9mKCctJykgPT09IC0xICYmIHN0ci5pbmRleE9mKCdfJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgY2FtZWxjYXNlID0gJyc7XG4gICAgICAgIGxldCBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbGVhZGluZ0h5cGhlbnMgPSBzdHIubWF0Y2goL14tKy8pO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVhZGluZ0h5cGhlbnMgPyBsZWFkaW5nSHlwaGVuc1swXS5sZW5ndGggOiAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgY2hyID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChuZXh0Q2hyVXBwZXIpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjaHIgPSBjaHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpICE9PSAwICYmIChjaHIgPT09ICctJyB8fCBjaHIgPT09ICdfJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q2hyVXBwZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hyICE9PSAnLScgJiYgY2hyICE9PSAnXycpIHtcbiAgICAgICAgICAgICAgICBjYW1lbGNhc2UgKz0gY2hyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW1lbGNhc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIsIGpvaW5TdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlcmNhc2UgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICBqb2luU3RyaW5nID0gam9pblN0cmluZyB8fCAnLSc7XG4gICAgbGV0IG5vdENhbWVsY2FzZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNockxvd2VyID0gbG93ZXJjYXNlLmNoYXJBdChpKTtcbiAgICAgICAgY29uc3QgY2hyU3RyaW5nID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGNockxvd2VyICE9PSBjaHJTdHJpbmcgJiYgaSA+IDApIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBgJHtqb2luU3RyaW5nfSR7bG93ZXJjYXNlLmNoYXJBdChpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGNoclN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm90Q2FtZWxjYXNlO1xufVxuZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG5cbmZ1bmN0aW9uIHRva2VuaXplQXJnU3RyaW5nKGFyZ1N0cmluZykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZ1N0cmluZy5tYXAoZSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycgPyBlICsgJycgOiBlKTtcbiAgICB9XG4gICAgYXJnU3RyaW5nID0gYXJnU3RyaW5nLnRyaW0oKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IHByZXZDID0gbnVsbDtcbiAgICBsZXQgYyA9IG51bGw7XG4gICAgbGV0IG9wZW5pbmcgPSBudWxsO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgYXJnU3RyaW5nLmxlbmd0aDsgaWkrKykge1xuICAgICAgICBwcmV2QyA9IGM7XG4gICAgICAgIGMgPSBhcmdTdHJpbmcuY2hhckF0KGlpKTtcbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgaWYgKCEocHJldkMgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKGMgPT09IFwiJ1wiIHx8IGMgPT09ICdcIicpICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gYztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3NbaV0pXG4gICAgICAgICAgICBhcmdzW2ldID0gJyc7XG4gICAgICAgIGFyZ3NbaV0gKz0gYztcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG59XG5cbnZhciBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleTtcbihmdW5jdGlvbiAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkpIHtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIlNUUklOR1wiXSA9IFwic3RyaW5nXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJOVU1CRVJcIl0gPSBcIm51bWJlclwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG59KShEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB8fCAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgPSB7fSkpO1xuXG5sZXQgbWl4aW47XG5jbGFzcyBZYXJnc1BhcnNlciB7XG4gICAgY29uc3RydWN0b3IoX21peGluKSB7XG4gICAgICAgIG1peGluID0gX21peGluO1xuICAgIH1cbiAgICBwYXJzZShhcmdzSW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYWxpYXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFycmF5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib29sZWFuOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvZXJjZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVudlByZWZpeDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbmFyZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bWJlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgX186IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGtleTogdW5kZWZpbmVkXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJnc0lucHV0KTtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IGNvbWJpbmVBbGlhc2VzKE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5hbGlhcykpO1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAnYm9vbGVhbi1uZWdhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnY2FtZWwtY2FzZS1leHBhbnNpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NvbWJpbmUtYXJyYXlzJzogZmFsc2UsXG4gICAgICAgICAgICAnZG90LW5vdGF0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5JzogdHJ1ZSxcbiAgICAgICAgICAgICdmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2dyZWVkeS1hcnJheXMnOiB0cnVlLFxuICAgICAgICAgICAgJ2hhbHQtYXQtbm9uLW9wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgJ25hcmdzLWVhdHMtb3B0aW9ucyc6IGZhbHNlLFxuICAgICAgICAgICAgJ25lZ2F0aW9uLXByZWZpeCc6ICduby0nLFxuICAgICAgICAgICAgJ3BhcnNlLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3NldC1wbGFjZWhvbGRlci1rZXknOiBmYWxzZSxcbiAgICAgICAgICAgICdzaG9ydC1vcHRpb24tZ3JvdXBzJzogdHJ1ZSxcbiAgICAgICAgICAgICdzdHJpcC1hbGlhc2VkJzogZmFsc2UsXG4gICAgICAgICAgICAnc3RyaXAtZGFzaGVkJzogZmFsc2UsXG4gICAgICAgICAgICAndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnOiBmYWxzZVxuICAgICAgICB9LCBvcHRzLmNvbmZpZ3VyYXRpb24pO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgb3B0cy5kZWZhdWx0KTtcbiAgICAgICAgY29uc3QgY29uZmlnT2JqZWN0cyA9IG9wdHMuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgZW52UHJlZml4ID0gb3B0cy5lbnZQcmVmaXg7XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzT3B0aW9uID0gY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICBjb25zdCBub3RGbGFnc0FyZ3YgPSBub3RGbGFnc09wdGlvbiA/ICctLScgOiAnXyc7XG4gICAgICAgIGNvbnN0IG5ld0FsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBfXyA9IG9wdHMuX18gfHwgbWl4aW4uZm9ybWF0O1xuICAgICAgICBjb25zdCBmbGFncyA9IHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBhcnJheXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBib29sczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIHN0cmluZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBudW1iZXJzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY291bnRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbm9ybWFsaXplOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29uZmlnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5hcmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgY29lcmNpb25zOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAga2V5czogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmUgPSAvXi0oWzAtOV0rKFxcLlswLTldKyk/fFxcLlswLTldKykkLztcbiAgICAgICAgY29uc3QgbmVnYXRlZEJvb2xlYW4gPSBuZXcgUmVnRXhwKCdeLS0nICsgY29uZmlndXJhdGlvblsnbmVnYXRpb24tcHJlZml4J10gKyAnKC4rKScpO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5hcnJheSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKG9wdCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHQua2V5IDogb3B0O1xuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IE9iamVjdC5rZXlzKG9wdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUZsYWdLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICBib29sZWFuOiAnYm9vbHMnLFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmc6ICdzdHJpbmdzJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiAnbnVtYmVycydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUZsYWdLZXlzW2tleV07XG4gICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikucG9wKCk7XG4gICAgICAgICAgICBpZiAoYXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZsYWdzW2Fzc2lnbm1lbnRdW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3MuYXJyYXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ib29sZWFuIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ib29sc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuc3RyaW5nIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5udW1iZXIgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm51bWJlcnNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmNvdW50IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5jb3VudHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm5vcm1hbGl6ZSB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Mubm9ybWFsaXplW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMubmFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMubmFyZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MubmFyZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29lcmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb2VyY2UpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29lcmNpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMuY29uZmlnKSB8fCB0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KG9wdHMuY29uZmlnKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXMpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1thbGlhc10gPSBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbGV0IG5vdEZsYWdzID0gW107XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIHsgXzogW10gfSk7XG4gICAgICAgIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkQXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLS0nKTtcbiAgICAgICAgICAgIGxldCBicm9rZW47XG4gICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgbGV0IGxldHRlcnM7XG4gICAgICAgICAgICBsZXQgbTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgaWYgKGFyZyAhPT0gJy0tJyAmJiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRydW5jYXRlZEFyZy5tYXRjaCgvLS0tKyg9fCQpLykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKz0vKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pICYmIGNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpID8gW2ZhbHNlXSA6IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIW5leHQubWF0Y2goL14tLykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rPS8pKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAhbmV4dC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVteLV0rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbGV0dGVyc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKG5leHQsIGZsYWdzLmJvb2xzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgZGVmYXVsdFZhbHVlKGxldHRlcnNbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgKCEvXigtfC0tKVteLV0vLnRlc3QobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tWzAtOV0kLykgJiZcbiAgICAgICAgICAgICAgICBhcmcubWF0Y2gobmVnYXRpdmUpICYmXG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGFyZy5zbGljZSgxKSwgZmxhZ3MuYm9vbHMpKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpO1xuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3RGbGFnc09wdGlvbiAmJiBub3RGbGFncy5sZW5ndGgpXG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0gPSBbXTtcbiAgICAgICAgbm90RmxhZ3MuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBhcmd2W25vdEZsYWdzQXJndl0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgY29uZmlndXJhdGlvblsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnLS0nICYmIGtleS5pbmNsdWRlcygnLScpKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3Zba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzdHJpcC1hbGlhc2VkJ10pIHtcbiAgICAgICAgICAgIFtdLmNvbmNhdCguLi5PYmplY3Qua2V5cyhhbGlhc2VzKS5tYXAoayA9PiBhbGlhc2VzW2tdKSkuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10gJiYgYWxpYXMuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhcy5zcGxpdCgnLicpLm1hcChwcm9wID0+IGNhbWVsQ2FzZShwcm9wKSkuam9pbignLicpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXNdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHVzaFBvc2l0aW9uYWwoYXJnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUNvZXJjZWROdW1iZXIgPSBtYXliZUNvZXJjZU51bWJlcignXycsIGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8ucHVzaChtYXliZUNvZXJjZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdE5hcmdzKGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBpaTtcbiAgICAgICAgICAgIGxldCB0b0VhdCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIHRvRWF0ID0gdHlwZW9mIHRvRWF0ICE9PSAnbnVtYmVyJyB8fCBpc05hTih0b0VhdCkgPyAxIDogdG9FYXQ7XG4gICAgICAgICAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdBcmd1bWVudCB1bmV4cGVjdGVkIGZvcjogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIC0gKGkgKyAxKSArIGF2YWlsYWJsZSA8IHRvRWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gdG9FYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgYXJncy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzW2lpXS5tYXRjaCgvXi1bXjAtOV0vKSB8fCBhcmdzW2lpXS5tYXRjaChuZWdhdGl2ZSkgfHwgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnc1tpaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKys7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlIDwgdG9FYXQpXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb25zdW1lZCA9IE1hdGgubWluKGF2YWlsYWJsZSwgdG9FYXQpO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgY29uc3VtZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGlpID0gaSArIDE7IGlpIDwgKGNvbnN1bWVkICsgaSArIDEpOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChpICsgY29uc3VtZWQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVhdEFycmF5KGksIGtleSwgYXJncywgYXJnQWZ0ZXJFcXVhbFNpZ24pIHtcbiAgICAgICAgICAgIGxldCBhcmdzVG9TZXQgPSBbXTtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gYXJnQWZ0ZXJFcXVhbFNpZ24gfHwgYXJnc1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBuYXJnc0NvdW50ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkKG5leHQpIHx8XG4gICAgICAgICAgICAgICAgKGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiAvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFyZ3NDb3VudCAmJiB0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgKChuYXJnc0NvdW50ICYmIGFyZ3NUb1NldC5sZW5ndGggPCBuYXJnc0NvdW50KSB8fFxuICAgICAgICAgICAgICAgIChpc05hTihuYXJnc0NvdW50KSAmJiBhcmdzVG9TZXQubGVuZ3RoID09PSAwKSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzVG9TZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0QXJnKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdEtleSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIHNwbGl0S2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gW10uY29uY2F0KHNwbGl0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgYS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBrZXlQcm9wZXJ0aWVzID0ga2V5UHJvcGVydGllcy5jb25jYXQoYSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBba2V5XS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndlJldHVybiwga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG1peGluLm5vcm1hbGl6ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYWRkTmV3QWxpYXMoa2V5LCBhbGlhcykge1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1trZXldICYmIGZsYWdzLmFsaWFzZXNba2V5XS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldID0gW2FsaWFzXTtcbiAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2FsaWFzXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2FsaWFzXSAmJiBmbGFncy5hbGlhc2VzW2FsaWFzXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoYWxpYXMsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlKGtleSwgdmFsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodmFsWzBdID09PSBcIidcIiB8fCB2YWxbMF0gPT09ICdcIicpICYmXG4gICAgICAgICAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxLCB2YWwubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiYgKGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsLm1hcCgodmFsKSA9PiB7IHJldHVybiBtaXhpbi5ub3JtYWxpemUodmFsKTsgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1peGluLm5vcm1hbGl6ZSh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gJiYga2V5ID09PSAnXycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSAmJiAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENvZXJjZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcih2YWx1ZSkgJiYgY29uZmlndXJhdGlvblsncGFyc2UtbnVtYmVycyddICYmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENvZXJjZU51bWJlciB8fCAoIWlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5udW1iZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWcoYXJndikge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGNvbmZpZ0xvb2t1cCwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY29uZmlncykuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGFyZ3ZbY29uZmlnS2V5XSB8fCBjb25maWdMb29rdXBbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbmZpZ1BhdGggPSBtaXhpbi5yZXNvbHZlKG1peGluLmN3ZCgpLCBjb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVDb25maWcgPSBmbGFncy5jb25maWdzW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVDb25maWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSByZXNvbHZlQ29uZmlnKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1peGluLnJlcXVpcmUocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3QoY29uZmlnLCBwcmV2KSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEtleSA9IHByZXYgPyBwcmV2ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkoYXJndiwgZnVsbEtleS5zcGxpdCgnLicpKSB8fCAoY2hlY2tBbGxBbGlhc2VzKGZ1bGxLZXksIGZsYWdzLmFycmF5cykgJiYgY29uZmlndXJhdGlvblsnY29tYmluZS1hcnJheXMnXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhmdWxsS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gZW52VmFyLnNwbGl0KCdfXycpLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleXMuam9pbignLicpLCBlbnZbZW52VmFyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyhhcmd2KSB7XG4gICAgICAgICAgICBsZXQgY29lcmNlO1xuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb2VyY2UgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb2VyY2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvZXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgY29lcmNlKGFyZ3Zba2V5XSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXS5jb25jYXQoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdLCBrZXkpKS5mb3JFYWNoKGFsaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuYWRkKGFsaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYWxpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJLZXlzKGFyZ3YpIHtcbiAgICAgICAgICAgIGZsYWdzLmtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc2FuaXRpemVLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG9ba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XS5wdXNoKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHt9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzYW5pdGl6ZUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgY29uc3QgaXNUeXBlQXJyYXkgPSBjaGVja0FsbEFsaWFzZXMoa2V5cy5qb2luKCcuJyksIGZsYWdzLmFycmF5cyk7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBkdXBsaWNhdGUgPSBjb25maWd1cmF0aW9uWydkdXBsaWNhdGUtYXJndW1lbnRzLWFycmF5J107XG4gICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICgoIWlzVW5kZWZpbmVkKG9ba2V5XSkgJiYgZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMSkgfHwgKEFycmF5LmlzQXJyYXkob1trZXldKSAmJiBvW2tleV0ubGVuZ3RoID09PSBmbGFncy5uYXJnc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBpbmNyZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGluY3JlbWVudChvW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBpc1R5cGVBcnJheSAmJiBpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gY29uZmlndXJhdGlvblsnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJ10gPyBvW2tleV0uY29uY2F0KHZhbHVlKSA6IChBcnJheS5pc0FycmF5KG9ba2V5XVswXSkgPyBvW2tleV0gOiBbb1trZXldXSkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZHVwbGljYXRlICYmIEJvb2xlYW4oaXNUeXBlQXJyYXkpID09PSBCb29sZWFuKGlzVmFsdWVBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBvW2tleV0uY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9ba2V5XSA9PT0gdW5kZWZpbmVkICYmIGlzVHlwZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaXNWYWx1ZUFycmF5ID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZHVwbGljYXRlICYmICEob1trZXldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpKSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IFtvW2tleV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbXS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvLS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhbWVsQ2FzZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gZGVjYW1lbGl6ZSh4LCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1t4XSA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0uZmlsdGVyKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggIT09IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZyk7XG4gICAgICAgICAgICBjb25zdCBzZXRBbGlhcyA9IHRvQ2hlY2suZmluZChrZXkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBzZXRBbGlhcyA/IGZsYWdbc2V0QWxpYXNdIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQW55RmxhZyhrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzS2V5cyA9IE9iamVjdC5rZXlzKGZsYWdzKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3NLZXlzLm1hcChrID0+IGZsYWdzW2tdKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmxhZykgPyBmbGFnLmluY2x1ZGVzKGtleSkgOiBmbGFnW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNGbGFnc01hdGNoaW5nKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoLi4ucGF0dGVybnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBoYXNBbnlGbGFnKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0FsbFNob3J0RmxhZ3MoYXJnKSB7XG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQWxsU2hvcnRGbGFncyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmxhZ1dpdGhFcXVhbHMgPSAvXi0rKFtePV0rPyk9W1xcc1xcU10qJC87XG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5EaWdpdHMgPSAvXi0rKFtePV0rP1xcZCspJC87XG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5Ob25Xb3JkQ2hhcmFjdGVycyA9IC9eLSsoW149XSs/KVxcVysuKiQvO1xuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBndWVzc1R5cGUoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklORztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVI7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZmluZChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5hcnJheS4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMubmFyZy4nLCBrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBmbGFncy5hbGlhc2VzKSxcbiAgICAgICAgICAgIGFyZ3Y6IE9iamVjdC5hc3NpZ24oYXJndlJldHVybiwgYXJndiksXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdGVkOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0ZWQpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgbmV3QWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgbmV3QWxpYXNlcylcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21iaW5lQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgY29uc3QgYWxpYXNBcnJheXMgPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGV0IGNoYW5nZSA9IHRydWU7XG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgd2hpbGUgKGNoYW5nZSkge1xuICAgICAgICBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhbGlhc0FycmF5cy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhbGlhc0FycmF5c1tpXS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzQXJyYXlzW2lpXS5pbmRleE9mKHYpICE9PSAtMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5c1tpXSA9IGFsaWFzQXJyYXlzW2ldLmNvbmNhdChhbGlhc0FycmF5c1tpaV0pO1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0FycmF5cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuZnVuY3Rpb24gaW5jcmVtZW50KG9yaWcpIHtcbiAgICByZXR1cm4gb3JpZyAhPT0gdW5kZWZpbmVkID8gb3JpZyArIDEgOiAxO1xufVxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMTA7XG5pZiAocHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihwcm9jZXNzLnZlcnNpb24ubWF0Y2goL3YoW14uXSspLylbMV0pO1xuICAgIGlmIChtYWpvciA8IG1pbk5vZGVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IEVycm9yKGB5YXJncyBwYXJzZXIgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zYCk7XG4gICAgfVxufVxuY29uc3QgZW52ID0gcHJvY2VzcyA/IHByb2Nlc3MuZW52IDoge307XG5jb25zdCBwYXJzZXIgPSBuZXcgWWFyZ3NQYXJzZXIoe1xuICAgIGN3ZDogcHJvY2Vzcy5jd2QsXG4gICAgZW52OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBlbnY7XG4gICAgfSxcbiAgICBmb3JtYXQ6IHV0aWwuZm9ybWF0LFxuICAgIG5vcm1hbGl6ZTogcGF0aC5ub3JtYWxpemUsXG4gICAgcmVzb2x2ZTogcGF0aC5yZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdvbmx5IC5qc29uIGNvbmZpZyBmaWxlcyBhcmUgc3VwcG9ydGVkIGluIEVTTScpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5jb25zdCB5YXJnc1BhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihhcmdzLCBvcHRzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG4gICAgcmV0dXJuIHJlc3VsdC5hcmd2O1xufTtcbnlhcmdzUGFyc2VyLmRldGFpbGVkID0gZnVuY3Rpb24gKGFyZ3MsIG9wdHMpIHtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGFyZ3Muc2xpY2UoKSwgb3B0cyk7XG59O1xueWFyZ3NQYXJzZXIuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xueWFyZ3NQYXJzZXIuZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemU7XG55YXJnc1BhcnNlci5sb29rc0xpa2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXI7XG5cbm1vZHVsZS5leHBvcnRzID0geWFyZ3NQYXJzZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICh7b25seUZpcnN0ID0gZmFsc2V9ID0ge30pID0+IHtcblx0Y29uc3QgcGF0dGVybiA9IFtcblx0XHQnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBhbnNpUmVnZXggPSByZXF1aXJlKCdhbnNpLXJlZ2V4Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nID0+IHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnID8gc3RyaW5nLnJlcGxhY2UoYW5zaVJlZ2V4KCksICcnKSA6IHN0cmluZztcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSB5b2RhICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IGlzRnVsbHdpZHRoQ29kZVBvaW50ID0gY29kZVBvaW50ID0+IHtcblx0aWYgKE51bWJlci5pc05hTihjb2RlUG9pbnQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gQ29kZSBwb2ludHMgYXJlIGRlcml2ZWQgZnJvbTpcblx0Ly8gaHR0cDovL3d3dy51bml4Lm9yZy9QdWJsaWMvVU5JREFUQS9FYXN0QXNpYW5XaWR0aC50eHRcblx0aWYgKFxuXHRcdGNvZGVQb2ludCA+PSAweDExMDAgJiYgKFxuXHRcdFx0Y29kZVBvaW50IDw9IDB4MTE1RiB8fCAvLyBIYW5ndWwgSmFtb1xuXHRcdFx0Y29kZVBvaW50ID09PSAweDIzMjkgfHwgLy8gTEVGVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHRjb2RlUG9pbnQgPT09IDB4MjMyQSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG5cdFx0XHQvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudCAuLiBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzXG5cdFx0XHQoMHgyRTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgzMjQ3ICYmIGNvZGVQb2ludCAhPT0gMHgzMDNGKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG5cdFx0XHQoMHgzMjUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHg0REJGKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAuLiBZaSBSYWRpY2Fsc1xuXHRcdFx0KDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0XHRcdC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUFcblx0XHRcdCgweEE5NjAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEE5N0MpIHx8XG5cdFx0XHQvLyBIYW5ndWwgU3lsbGFibGVzXG5cdFx0XHQoMHhBQzAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhEN0EzKSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBoc1xuXHRcdFx0KDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0XHRcdC8vIFZlcnRpY2FsIEZvcm1zXG5cdFx0XHQoMHhGRTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRTE5KSB8fFxuXHRcdFx0Ly8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuXHRcdFx0KDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0XHRcdC8vIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zXG5cdFx0XHQoMHhGRjAxIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhGRjYwKSB8fFxuXHRcdFx0KDB4RkZFMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkZFNikgfHxcblx0XHRcdC8vIEthbmEgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHRcdFx0Ly8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuXHRcdFx0KDB4MUYyMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjUxKSB8fFxuXHRcdFx0Ly8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAuLiBUZXJ0aWFyeSBJZGVvZ3JhcGhpYyBQbGFuZVxuXHRcdFx0KDB4MjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDNGRkZEKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGlzRnVsbHdpZHRoQ29kZVBvaW50O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG4gIHJldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzMpXFx1REI0MFxcdURDN0Z8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQ1xcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NcXHVERkZCfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRlxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXwoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRnxcXHVEODNEW1xcdURDNjZcXHVEQzY3XXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF0pXFx1RkUwRnxcXHVEODNDXFx1REZGQlxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZCXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkNcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpXFx1RDgzQ1xcdURGRkJ8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRlxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZFXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY5KSg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZCXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1MjAwRCg/OlxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHUyMDBEKD86XFx1RDgzRFxcdURDNjZcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjkpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRdKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXwoPzooPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KVxcdUZFMEZ8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDYtXFx1RERERF0pKD86KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFxcdTIwMERbXFx1MjY0MFxcdTI2NDJdKXxcXHVEODNDXFx1REZGNFxcdTIwMERcXHUyNjIwKVxcdUZFMEZ8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHxcXHVEODNEXFx1REMxNVxcdTIwMERcXHVEODNFXFx1RERCQXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERjZcXHVEODNDXFx1RERFNnxbI1xcKjAtOV1cXHVGRTBGXFx1MjBFM3xcXHVEODNDXFx1RERFNyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERUEoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVEXFx1RERGNy1cXHVEREZBXSl8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVEREY3KD86XFx1RDgzQ1tcXHVEREVBXFx1RERGNFxcdURERjhcXHVEREZBXFx1RERGQ10pfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUQoPzpcXHVEODNDW1xcdURERjBcXHVEREYyXFx1RERGM1xcdURERjdcXHVEREY5XFx1RERGQV0pfFxcdUQ4M0NcXHVEREU5KD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUMoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVFXFx1RERGMS1cXHVEREYzXFx1RERGNS1cXHVEREZBXFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGOCg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREVBXFx1RERFQy1cXHVEREY0XFx1RERGNy1cXHVEREY5XFx1RERGQlxcdURERkQtXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkIoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQVxcdURERUNcXHVEREVFXFx1RERGM1xcdURERkFdKXxcXHVEODNDXFx1RERGMyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXSl8XFx1RDgzQ1xcdURERTgoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRVxcdURERjAtXFx1RERGNVxcdURERjdcXHVEREZBLVxcdURERkZdKXxcXHVEODNDXFx1RERGMSg/OlxcdUQ4M0NbXFx1RERFNi1cXHVEREU4XFx1RERFRVxcdURERjBcXHVEREY3LVxcdURERkJcXHVEREZFXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREZDKD86XFx1RDgzQ1tcXHVEREVCXFx1RERGOF0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM2XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMi1cXHVEREQ1XSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OltcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MEFcXHUyNzBCXFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc1N1xcdTI3OTUtXFx1Mjc5N1xcdTI3QjBcXHUyN0JGXFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NV18XFx1RDgzQ1tcXHVEQzA0XFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY3Q1xcdURGN0UtXFx1REY5M1xcdURGQTAtXFx1REZDQVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjRcXHVERkY4LVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVEQzNFXFx1REM0MFxcdURDNDItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREN0FcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREZCLVxcdURFNEZcXHVERTgwLVxcdURFQzVcXHVERUNDXFx1REVEMC1cXHVERUQyXFx1REVENVxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pfCg/OlsjXFwqMC05XFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0U5LVxcdTIzRjNcXHUyM0Y4LVxcdTIzRkFcXHUyNEMyXFx1MjVBQVxcdTI1QUJcXHUyNUI2XFx1MjVDMFxcdTI1RkItXFx1MjVGRVxcdTI2MDAtXFx1MjYwNFxcdTI2MEVcXHUyNjExXFx1MjYxNFxcdTI2MTVcXHUyNjE4XFx1MjYxRFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJBXFx1MjYyRVxcdTI2MkZcXHUyNjM4LVxcdTI2M0FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NUZcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdFXFx1MjY3RlxcdTI2OTItXFx1MjY5N1xcdTI2OTlcXHUyNjlCXFx1MjY5Q1xcdTI2QTBcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkIwXFx1MjZCMVxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkM4XFx1MjZDRVxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RDRcXHUyNkU5XFx1MjZFQVxcdTI2RjAtXFx1MjZGNVxcdTI2RjctXFx1MjZGQVxcdTI2RkRcXHUyNzAyXFx1MjcwNVxcdTI3MDgtXFx1MjcwRFxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MjhcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc2M1xcdTI3NjRcXHUyNzk1LVxcdTI3OTdcXHUyN0ExXFx1MjdCMFxcdTI3QkZcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVcXHUzMDMwXFx1MzAzRFxcdTMyOTdcXHUzMjk5XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVEREU2LVxcdURERkZcXHVERTAxXFx1REUwMlxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjFcXHVERjI0LVxcdURGOTNcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUUtXFx1REZGMFxcdURGRjMtXFx1REZGNVxcdURGRjctXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDRkRcXHVEQ0ZGLVxcdUREM0RcXHVERDQ5LVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDZGXFx1REQ3MFxcdURENzMtXFx1REQ3QVxcdUREODdcXHVERDhBLVxcdUREOERcXHVERDkwXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkEtXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0ItXFx1REVEMlxcdURFRDVcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVFQlxcdURFRUNcXHVERUYwXFx1REVGMy1cXHVERUZBXFx1REZFMC1cXHVERkVCXXxcXHVEODNFW1xcdUREMEQtXFx1REQzQVxcdUREM0MtXFx1REQ0NVxcdURENDctXFx1REQ3MVxcdURENzMtXFx1REQ3NlxcdUREN0EtXFx1RERBMlxcdUREQTUtXFx1RERBQVxcdUREQUUtXFx1RERDQVxcdUREQ0QtXFx1RERGRlxcdURFNzAtXFx1REU3M1xcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4MlxcdURFOTAtXFx1REU5NV0pXFx1RkUwRnwoPzpbXFx1MjYxRFxcdTI2RjlcXHUyNzBBLVxcdTI3MERdfFxcdUQ4M0NbXFx1REY4NVxcdURGQzItXFx1REZDNFxcdURGQzdcXHVERkNBLVxcdURGQ0NdfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2LVxcdURDNzhcXHVEQzdDXFx1REM4MS1cXHVEQzgzXFx1REM4NS1cXHVEQzg3XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDI2XFx1REQzMC1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBpc0Z1bGx3aWR0aENvZGVQb2ludCA9IHJlcXVpcmUoJ2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Jyk7XG5jb25zdCBlbW9qaVJlZ2V4ID0gcmVxdWlyZSgnZW1vamktcmVnZXgnKTtcblxuY29uc3Qgc3RyaW5nV2lkdGggPSBzdHJpbmcgPT4ge1xuXHRpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycgfHwgc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cblx0aWYgKHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGVtb2ppUmVnZXgoKSwgJyAgJyk7XG5cblx0bGV0IHdpZHRoID0gMDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNvZGUgPSBzdHJpbmcuY29kZVBvaW50QXQoaSk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGUgPD0gMHgxRiB8fCAoY29kZSA+PSAweDdGICYmIGNvZGUgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlID49IDB4MzAwICYmIGNvZGUgPD0gMHgzNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFN1cnJvZ2F0ZXNcblx0XHRpZiAoY29kZSA+IDB4RkZGRikge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHdpZHRoICs9IGlzRnVsbHdpZHRoQ29kZVBvaW50KGNvZGUpID8gMiA6IDE7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1dpZHRoO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ1dpZHRoO1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IHN0cmluZ1dpZHRoID0gcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyk7XG5jb25zdCBzdHJpcEFuc2kgPSByZXF1aXJlKCdzdHJpcC1hbnNpJyk7XG5jb25zdCBhbnNpU3R5bGVzID0gcmVxdWlyZSgnYW5zaS1zdHlsZXMnKTtcblxuY29uc3QgRVNDQVBFUyA9IG5ldyBTZXQoW1xuXHQnXFx1MDAxQicsXG5cdCdcXHUwMDlCJ1xuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5cbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaSA9IGNvZGUgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0NTSX0ke2NvZGV9JHtBTlNJX1NHUl9URVJNSU5BVE9SfWA7XG5jb25zdCB3cmFwQW5zaUh5cGVybGluayA9IHVyaSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfRVNDQVBFX0xJTkt9JHt1cml9JHtBTlNJX0VTQ0FQRV9CRUxMfWA7XG5cbi8vIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHdvcmRzIHNwbGl0IG9uICcgJywgaWdub3Jpbmdcbi8vIHRoZSBleHRyYSBjaGFyYWN0ZXJzIGFkZGVkIGJ5IGFuc2kgZXNjYXBlIGNvZGVzXG5jb25zdCB3b3JkTGVuZ3RocyA9IHN0cmluZyA9PiBzdHJpbmcuc3BsaXQoJyAnKS5tYXAoY2hhcmFjdGVyID0+IHN0cmluZ1dpZHRoKGNoYXJhY3RlcikpO1xuXG4vLyBXcmFwIGEgbG9uZyB3b3JkIGFjcm9zcyBtdWx0aXBsZSByb3dzXG4vLyBBbnNpIGVzY2FwZSBjb2RlcyBkbyBub3QgY291bnQgdG93YXJkcyBsZW5ndGhcbmNvbnN0IHdyYXBXb3JkID0gKHJvd3MsIHdvcmQsIGNvbHVtbnMpID0+IHtcblx0Y29uc3QgY2hhcmFjdGVycyA9IFsuLi53b3JkXTtcblxuXHRsZXQgaXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0bGV0IGlzSW5zaWRlTGlua0VzY2FwZSA9IGZhbHNlO1xuXHRsZXQgdmlzaWJsZSA9IHN0cmluZ1dpZHRoKHN0cmlwQW5zaShyb3dzW3Jvd3MubGVuZ3RoIC0gMV0pKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBjaGFyYWN0ZXJzLnNsaWNlKGluZGV4ICsgMSkuam9pbignJykuc3RhcnRzV2l0aChBTlNJX0VTQ0FQRV9MSU5LKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJbnNpZGVFc2NhcGUpIHtcblx0XHRcdGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcblx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gQU5TSV9FU0NBUEVfQkVMTCkge1xuXHRcdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBBTlNJX1NHUl9URVJNSU5BVE9SKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZpc2libGUgKz0gY2hhcmFjdGVyTGVuZ3RoO1xuXG5cdFx0aWYgKHZpc2libGUgPT09IGNvbHVtbnMgJiYgaW5kZXggPCBjaGFyYWN0ZXJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cdH1cblxuXHQvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3Qgcm93IHdlIGNvcHkgb3ZlciBpcyBvbmx5XG5cdC8vIGFuc2kgZXNjYXBlIGNoYXJhY3RlcnMsIGhhbmRsZSB0aGlzIGVkZ2UtY2FzZVxuXHRpZiAoIXZpc2libGUgJiYgcm93c1tyb3dzLmxlbmd0aCAtIDFdLmxlbmd0aCA+IDAgJiYgcm93cy5sZW5ndGggPiAxKSB7XG5cdFx0cm93c1tyb3dzLmxlbmd0aCAtIDJdICs9IHJvd3MucG9wKCk7XG5cdH1cbn07XG5cbi8vIFRyaW1zIHNwYWNlcyBmcm9tIGEgc3RyaW5nIGlnbm9yaW5nIGludmlzaWJsZSBzZXF1ZW5jZXNcbmNvbnN0IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQgPSBzdHJpbmcgPT4ge1xuXHRjb25zdCB3b3JkcyA9IHN0cmluZy5zcGxpdCgnICcpO1xuXHRsZXQgbGFzdCA9IHdvcmRzLmxlbmd0aDtcblxuXHR3aGlsZSAobGFzdCA+IDApIHtcblx0XHRpZiAoc3RyaW5nV2lkdGgod29yZHNbbGFzdCAtIDFdKSA+IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGxhc3QtLTtcblx0fVxuXG5cdGlmIChsYXN0ID09PSB3b3Jkcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gc3RyaW5nO1xuXHR9XG5cblx0cmV0dXJuIHdvcmRzLnNsaWNlKDAsIGxhc3QpLmpvaW4oJyAnKSArIHdvcmRzLnNsaWNlKGxhc3QpLmpvaW4oJycpO1xufTtcblxuLy8gVGhlIHdyYXAtYW5zaSBtb2R1bGUgY2FuIGJlIGludm9rZWQgaW4gZWl0aGVyICdoYXJkJyBvciAnc29mdCcgd3JhcCBtb2RlXG4vL1xuLy8gJ2hhcmQnIHdpbGwgbmV2ZXIgYWxsb3cgYSBzdHJpbmcgdG8gdGFrZSB1cCBtb3JlIHRoYW4gY29sdW1ucyBjaGFyYWN0ZXJzXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoXG5jb25zdCBleGVjID0gKHN0cmluZywgY29sdW1ucywgb3B0aW9ucyA9IHt9KSA9PiB7XG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlICYmIHN0cmluZy50cmltKCkgPT09ICcnKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0bGV0IHJldHVyblZhbHVlID0gJyc7XG5cdGxldCBlc2NhcGVDb2RlO1xuXHRsZXQgZXNjYXBlVXJsO1xuXG5cdGNvbnN0IGxlbmd0aHMgPSB3b3JkTGVuZ3RocyhzdHJpbmcpO1xuXHRsZXQgcm93cyA9IFsnJ107XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIHdvcmRdIG9mIHN0cmluZy5zcGxpdCgnICcpLmVudHJpZXMoKSkge1xuXHRcdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV0udHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3Nbcm93cy5sZW5ndGggLSAxXSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQpO1xuXHR9XG5cblx0Y29uc3QgcHJlID0gWy4uLnJvd3Muam9pbignXFxuJyldO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBjaGFyYWN0ZXJdIG9mIHByZS5lbnRyaWVzKCkpIHtcblx0XHRyZXR1cm5WYWx1ZSArPSBjaGFyYWN0ZXI7XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0Y29uc3Qge2dyb3Vwc30gPSBuZXcgUmVnRXhwKGAoPzpcXFxcJHtBTlNJX0NTSX0oPzxjb2RlPlxcXFxkKyltfFxcXFwke0FOU0lfRVNDQVBFX0xJTkt9KD88dXJpPi4qKSR7QU5TSV9FU0NBUEVfQkVMTH0pYCkuZXhlYyhwcmUuc2xpY2UoaW5kZXgpLmpvaW4oJycpKSB8fCB7Z3JvdXBzOiB7fX07XG5cdFx0XHRpZiAoZ3JvdXBzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBjb2RlID0gTnVtYmVyLnBhcnNlRmxvYXQoZ3JvdXBzLmNvZGUpO1xuXHRcdFx0XHRlc2NhcGVDb2RlID0gY29kZSA9PT0gRU5EX0NPREUgPyB1bmRlZmluZWQgOiBjb2RlO1xuXHRcdFx0fSBlbHNlIGlmIChncm91cHMudXJpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZXNjYXBlVXJsID0gZ3JvdXBzLnVyaS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBncm91cHMudXJpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGNvZGUgPSBhbnNpU3R5bGVzLmNvZGVzLmdldChOdW1iZXIoZXNjYXBlQ29kZSkpO1xuXG5cdFx0aWYgKHByZVtpbmRleCArIDFdID09PSAnXFxuJykge1xuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluaygnJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2koY29kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLy8gRm9yIGVhY2ggbmV3bGluZSwgaW52b2tlIHRoZSBtZXRob2Qgc2VwYXJhdGVseVxubW9kdWxlLmV4cG9ydHMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zKSA9PiB7XG5cdHJldHVybiBTdHJpbmcoc3RyaW5nKVxuXHRcdC5ub3JtYWxpemUoKVxuXHRcdC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmNsYXNzIFVJIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy53aWR0aCA9IG9wdHMud2lkdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IChfYSA9IG9wdHMud3JhcCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIHNwYW4oLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5kaXYoLi4uYXJncyk7XG4gICAgICAgIGNvbHMuc3BhbiA9IHRydWU7XG4gICAgfVxuICAgIHJlc2V0T3V0cHV0KCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG4gICAgZGl2KC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpdignJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud3JhcCAmJiB0aGlzLnNob3VsZEFwcGx5TGF5b3V0RFNMKC4uLmFyZ3MpICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlMYXlvdXREU0woYXJnc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29scyA9IGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xGcm9tU3RyaW5nKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3dzLnB1c2goY29scyk7XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cbiAgICBzaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIC9bXFx0XFxuXS8udGVzdChhcmdzWzBdKTtcbiAgICB9XG4gICAgYXBwbHlMYXlvdXREU0woc3RyKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChyb3cgPT4gcm93LnNwbGl0KCdcXHQnKSk7XG4gICAgICAgIGxldCBsZWZ0Q29sdW1uV2lkdGggPSAwO1xuICAgICAgICAvLyBzaW1wbGUgaGV1cmlzdGljIGZvciBsYXlvdXQsIG1ha2Ugc3VyZSB0aGVcbiAgICAgICAgLy8gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cCBhbG9uZyB0aGUgbGVmdC1oYW5kLlxuICAgICAgICAvLyBkb24ndCBhbGxvdyB0aGUgZmlyc3QgY29sdW1uIHRvIHRha2UgdXAgbW9yZVxuICAgICAgICAvLyB0aGFuIDUwJSBvZiB0aGUgc2NyZWVuLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPiAxICYmIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pID4gbGVmdENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGVmdENvbHVtbldpZHRoID0gTWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLndpZHRoICogMC41KSwgbWl4aW4uc3RyaW5nV2lkdGgoY29sdW1uc1swXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSB0YWJsZTpcbiAgICAgICAgLy8gIHJlcGxhY2luZyAnICcgd2l0aCBwYWRkaW5nIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgLy8gIHVzaW5nIHRoZSBhbGdvcml0aG1pY2FsbHkgZ2VuZXJhdGVkIHdpZHRoLlxuICAgICAgICByb3dzLmZvckVhY2goY29sdW1ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpdiguLi5jb2x1bW5zLm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHIudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiB0aGlzLm1lYXN1cmVQYWRkaW5nKHIpLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogKGkgPT09IDAgJiYgY29sdW1ucy5sZW5ndGggPiAxKSA/IGxlZnRDb2x1bW5XaWR0aCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgY29sRnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyh0ZXh0KVxuICAgICAgICB9O1xuICAgIH1cbiAgICBtZWFzdXJlUGFkZGluZyhzdHIpIHtcbiAgICAgICAgLy8gbWVhc3VyZSBwYWRkaW5nIHdpdGhvdXQgYW5zaSBlc2NhcGUgY29kZXNcbiAgICAgICAgY29uc3Qgbm9BbnNpID0gbWl4aW4uc3RyaXBBbnNpKHN0cik7XG4gICAgICAgIHJldHVybiBbMCwgbm9BbnNpLm1hdGNoKC9cXHMqJC8pWzBdLmxlbmd0aCwgMCwgbm9BbnNpLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aF07XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dUb1N0cmluZyhyb3csIGxpbmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGRvbid0IGRpc3BsYXkgYW55IGxpbmVzIHdpdGggdGhlXG4gICAgICAgIC8vIGhpZGRlbiBmbGFnIHNldC5cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gIWxpbmUuaGlkZGVuKVxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUudGV4dClcbiAgICAgICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcm93VG9TdHJpbmcocm93LCBsaW5lcykge1xuICAgICAgICB0aGlzLnJhc3Rlcml6ZShyb3cpLmZvckVhY2goKHJyb3csIHIpID0+IHtcbiAgICAgICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgICAgIHJyb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gcm93W2NdOyAvLyB0aGUgd2lkdGggd2l0aCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBXaWR0aCA9IHRoaXMubmVnYXRlUGFkZGluZyhyb3dbY10pOyAvLyB0aGUgd2lkdGggd2l0aG91dCBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIGxldCB0cyA9IGNvbDsgLy8gdGVtcG9yYXJ5IHN0cmluZyB1c2VkIGR1cmluZyBhbGlnbm1lbnQvcGFkZGluZy5cbiAgICAgICAgICAgICAgICBpZiAod3JhcFdpZHRoID4gbWl4aW4uc3RyaW5nV2lkdGgoY29sKSkge1xuICAgICAgICAgICAgICAgICAgICB0cyArPSAnICcucmVwZWF0KHdyYXBXaWR0aCAtIG1peGluLnN0cmluZ1dpZHRoKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhbGlnbiB0aGUgc3RyaW5nIHdpdGhpbiBpdHMgY29sdW1uLlxuICAgICAgICAgICAgICAgIGlmIChyb3dbY10uYWxpZ24gJiYgcm93W2NdLmFsaWduICE9PSAnbGVmdCcgJiYgdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZuID0gYWxpZ25bcm93W2NdLmFsaWduXTtcbiAgICAgICAgICAgICAgICAgICAgdHMgPSBmbih0cywgd3JhcFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1peGluLnN0cmluZ1dpZHRoKHRzKSA8IHdyYXBXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCgod2lkdGggfHwgMCkgLSBtaXhpbi5zdHJpbmdXaWR0aCh0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhcHBseSBib3JkZXIgYW5kIHBhZGRpbmcgdG8gc3RyaW5nLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSByb3dbY10ucGFkZGluZyB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbbGVmdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9ICcgJy5yZXBlYXQocGFkZGluZ1tsZWZ0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJ3wgJyk7XG4gICAgICAgICAgICAgICAgc3RyICs9IHRzO1xuICAgICAgICAgICAgICAgIHN0ciArPSBhZGRCb3JkZXIocm93W2NdLCB0cywgJyB8Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRpbmdbcmlnaHRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbcmlnaHRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgcHJpb3Igcm93IGlzIHNwYW4sIHRyeSB0byByZW5kZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gY3VycmVudCByb3cgb24gdGhlIHByaW9yIGxpbmUuXG4gICAgICAgICAgICAgICAgaWYgKHIgPT09IDAgJiYgbGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnJlbmRlcklubGluZShzdHIsIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLlxuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dDogc3RyLnJlcGxhY2UoLyArJC8sICcnKSxcbiAgICAgICAgICAgICAgICBzcGFuOiByb3cuc3BhblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBmdWxsICdzb3VyY2UnIGNhbiByZW5kZXIgaW5cbiAgICAvLyB0aGUgdGFyZ2V0IGxpbmUsIGRvIHNvLlxuICAgIHJlbmRlcklubGluZShzb3VyY2UsIHByZXZpb3VzTGluZSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaCgvXiAqLyk7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwcmV2aW91c0xpbmUudGV4dDtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGV4dFdpZHRoID0gbWl4aW4uc3RyaW5nV2lkdGgodGFyZ2V0LnRyaW1SaWdodCgpKTtcbiAgICAgICAgaWYgKCFwcmV2aW91c0xpbmUuc3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB3ZSdyZSBub3QgYXBwbHlpbmcgd3JhcHBpbmcgbG9naWMsXG4gICAgICAgIC8vIGp1c3QgYWx3YXlzIGFwcGVuZCB0byB0aGUgc3Bhbi5cbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCArIHNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVhZGluZ1doaXRlc3BhY2UgPCB0YXJnZXRUZXh0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNMaW5lLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0YXJnZXQudHJpbVJpZ2h0KCkgKyAnICcucmVwZWF0KGxlYWRpbmdXaGl0ZXNwYWNlIC0gdGFyZ2V0VGV4dFdpZHRoKSArIHNvdXJjZS50cmltTGVmdCgpO1xuICAgIH1cbiAgICByYXN0ZXJpemUocm93KSB7XG4gICAgICAgIGNvbnN0IHJyb3dzID0gW107XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuY29sdW1uV2lkdGhzKHJvdyk7XG4gICAgICAgIGxldCB3cmFwcGVkO1xuICAgICAgICAvLyB3b3JkIHdyYXAgYWxsIGNvbHVtbnMsIGFuZCBjcmVhdGVcbiAgICAgICAgLy8gYSBkYXRhLXN0cnVjdHVyZSB0aGF0IGlzIGVhc3kgdG8gcmFzdGVyaXplLlxuICAgICAgICByb3cuZm9yRWFjaCgoY29sLCBjKSA9PiB7XG4gICAgICAgICAgICAvLyBsZWF2ZSByb29tIGZvciBsZWZ0IGFuZCByaWdodCBwYWRkaW5nLlxuICAgICAgICAgICAgY29sLndpZHRoID0gd2lkdGhzW2NdO1xuICAgICAgICAgICAgaWYgKHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBtaXhpbi53cmFwKGNvbC50ZXh0LCB0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSwgeyBoYXJkOiB0cnVlIH0pLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBjb2wudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCgnLicgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyAnLicpO1xuICAgICAgICAgICAgICAgIHdyYXBwZWQucHVzaChcIidcIiArICctJy5yZXBlYXQodGhpcy5uZWdhdGVQYWRkaW5nKGNvbCkgKyAyKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFkZCB0b3AgYW5kIGJvdHRvbSBwYWRkaW5nLlxuICAgICAgICAgICAgaWYgKGNvbC5wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC51bnNoaWZ0KC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1t0b3BdIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goLi4ubmV3IEFycmF5KGNvbC5wYWRkaW5nW2JvdHRvbV0gfHwgMCkuZmlsbCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcHBlZC5mb3JFYWNoKChzdHIsIHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJyb3dzW3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJyb3dzLnB1c2goW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycm93ID0gcnJvd3Nbcl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJyb3dbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnJvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBycm93LnB1c2goc3RyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJyb3dzO1xuICAgIH1cbiAgICBuZWdhdGVQYWRkaW5nKGNvbCkge1xuICAgICAgICBsZXQgd3JhcFdpZHRoID0gY29sLndpZHRoIHx8IDA7XG4gICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgd3JhcFdpZHRoIC09IChjb2wucGFkZGluZ1tsZWZ0XSB8fCAwKSArIChjb2wucGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSA0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwV2lkdGg7XG4gICAgfVxuICAgIGNvbHVtbldpZHRocyhyb3cpIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHJldHVybiByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aCB8fCBtaXhpbi5zdHJpbmdXaWR0aChjb2wudGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdW5zZXQgPSByb3cubGVuZ3RoO1xuICAgICAgICBsZXQgcmVtYWluaW5nV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAvLyBjb2x1bW4gd2lkdGhzIGNhbiBiZSBzZXQgaW4gY29uZmlnLlxuICAgICAgICBjb25zdCB3aWR0aHMgPSByb3cubWFwKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQtLTtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSBjb2wud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbnkgdW5zZXQgd2lkdGhzIHNob3VsZCBiZSBjYWxjdWxhdGVkLlxuICAgICAgICBjb25zdCB1bnNldFdpZHRoID0gdW5zZXQgPyBNYXRoLmZsb29yKHJlbWFpbmluZ1dpZHRoIC8gdW5zZXQpIDogMDtcbiAgICAgICAgcmV0dXJuIHdpZHRocy5tYXAoKHcsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodW5zZXRXaWR0aCwgX21pbldpZHRoKHJvd1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHc7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZEJvcmRlcihjb2wsIHRzLCBzdHlsZSkge1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIGlmICgvWy4nXS0rWy4nXS8udGVzdCh0cykpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHMudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnICAnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4vLyBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHdpZHRoIG9mXG4vLyBhIGNvbHVtbiwgYmFzZWQgb24gcGFkZGluZyBwcmVmZXJlbmNlcy5cbmZ1bmN0aW9uIF9taW5XaWR0aChjb2wpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29sLnBhZGRpbmcgfHwgW107XG4gICAgY29uc3QgbWluV2lkdGggPSAxICsgKHBhZGRpbmdbbGVmdF0gfHwgMCkgKyAocGFkZGluZ1tyaWdodF0gfHwgMCk7XG4gICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIG1pbldpZHRoICsgNDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbldpZHRoO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHN0cldpZHRoID49IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIHJldHVybiAnICcucmVwZWF0KCh3aWR0aCAtIHN0cldpZHRoKSA+PiAxKSArIHN0cjtcbn1cbmxldCBtaXhpbjtcbmZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cblxuLy8gQm9vdHN0cmFwIGNsaXVpIHdpdGggQ29tbW9uSlMgZGVwZW5kZW5jaWVzOlxuY29uc3Qgc3RyaW5nV2lkdGggPSByZXF1aXJlKCdzdHJpbmctd2lkdGgnKTtcbmNvbnN0IHN0cmlwQW5zaSA9IHJlcXVpcmUoJ3N0cmlwLWFuc2knKTtcbmNvbnN0IHdyYXAgPSByZXF1aXJlKCd3cmFwLWFuc2knKTtcbmZ1bmN0aW9uIHVpKG9wdHMpIHtcbiAgICByZXR1cm4gY2xpdWkob3B0cywge1xuICAgICAgICBzdHJpbmdXaWR0aCxcbiAgICAgICAgc3RyaXBBbnNpLFxuICAgICAgICB3cmFwXG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdWk7XG4iLCAiY29uc3QgeyBkaXJuYW1lLCByZXNvbHZlIH0gPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCB7IHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9ID0gcmVxdWlyZSgnZnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhcnQsIGNhbGxiYWNrKSB7XG5cdGxldCBkaXIgPSByZXNvbHZlKCcuJywgc3RhcnQpO1xuXHRsZXQgdG1wLCBzdGF0cyA9IHN0YXRTeW5jKGRpcik7XG5cblx0aWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0ZGlyID0gZGlybmFtZShkaXIpO1xuXHR9XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHR0bXAgPSBjYWxsYmFjayhkaXIsIHJlYWRkaXJTeW5jKGRpcikpO1xuXHRcdGlmICh0bXApIHJldHVybiByZXNvbHZlKGRpciwgdG1wKTtcblx0XHRkaXIgPSBkaXJuYW1lKHRtcCA9IGRpcik7XG5cdFx0aWYgKHRtcCA9PT0gZGlyKSBicmVhaztcblx0fVxufVxuIiwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKSxcbiAgam9pbiA9IHJlcXVpcmUoJ3BhdGgnKS5qb2luLFxuICByZXNvbHZlID0gcmVxdWlyZSgncGF0aCcpLnJlc29sdmUsXG4gIGRpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykuZGlybmFtZSxcbiAgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZXh0ZW5zaW9uczogWydqcycsICdqc29uJywgJ2NvZmZlZSddLFxuICAgIHJlY3Vyc2U6IHRydWUsXG4gICAgcmVuYW1lOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcbiAgICB2aXNpdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH07XG5cbmZ1bmN0aW9uIGNoZWNrRmlsZUluY2x1c2lvbihwYXRoLCBmaWxlbmFtZSwgb3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIC8vIHZlcmlmeSBmaWxlIGhhcyB2YWxpZCBleHRlbnNpb25cbiAgICAobmV3IFJlZ0V4cCgnXFxcXC4oJyArIG9wdGlvbnMuZXh0ZW5zaW9ucy5qb2luKCd8JykgKyAnKSQnLCAnaScpLnRlc3QoZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5pbmNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIHBhc3Nlc1xuICAgICEob3B0aW9ucy5pbmNsdWRlICYmIG9wdGlvbnMuaW5jbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhb3B0aW9ucy5pbmNsdWRlLnRlc3QocGF0aCkpICYmXG5cbiAgICAvLyBpZiBvcHRpb25zLmluY2x1ZGUgaXMgYSBmdW5jdGlvbiwgZXZhbHVhdGUgaXQgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aCBwYXNzZXNcbiAgICAhKG9wdGlvbnMuaW5jbHVkZSAmJiB0eXBlb2Ygb3B0aW9ucy5pbmNsdWRlID09PSAnZnVuY3Rpb24nICYmICFvcHRpb25zLmluY2x1ZGUocGF0aCwgZmlsZW5hbWUpKSAmJlxuXG4gICAgLy8gaWYgb3B0aW9ucy5leGNsdWRlIGlzIGEgUmVnRXhwLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIG9wdGlvbnMuZXhjbHVkZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBvcHRpb25zLmV4Y2x1ZGUudGVzdChwYXRoKSkgJiZcblxuICAgIC8vIGlmIG9wdGlvbnMuZXhjbHVkZSBpcyBhIGZ1bmN0aW9uLCBldmFsdWF0ZSBpdCBhbmQgbWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgcGFzc1xuICAgICEob3B0aW9ucy5leGNsdWRlICYmIHR5cGVvZiBvcHRpb25zLmV4Y2x1ZGUgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5leGNsdWRlKHBhdGgsIGZpbGVuYW1lKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZURpcmVjdG9yeShtLCBwYXRoLCBvcHRpb25zKSB7XG4gIHZhciByZXR2YWwgPSB7fTtcblxuICAvLyBwYXRoIGlzIG9wdGlvbmFsXG4gIGlmIChwYXRoICYmICFvcHRpb25zICYmIHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSBwYXRoO1xuICAgIHBhdGggPSBudWxsO1xuICB9XG5cbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW3Byb3BdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0aW9uc1twcm9wXSA9IGRlZmF1bHRPcHRpb25zW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vIHBhdGggd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoZSBlcXVpdmVsYW50IG9mIF9fZGlybmFtZSBmcm9tIGNhbGxlclxuICAvLyBvdGhlcndpc2UsIHJlc29sdmUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZXF1aXZhbGVudCBvZiBfX2Rpcm5hbWVcbiAgcGF0aCA9ICFwYXRoID8gZGlybmFtZShtLmZpbGVuYW1lKSA6IHJlc29sdmUoZGlybmFtZShtLmZpbGVuYW1lKSwgcGF0aCk7XG5cbiAgLy8gZ2V0IHRoZSBwYXRoIG9mIGVhY2ggZmlsZSBpbiBzcGVjaWZpZWQgZGlyZWN0b3J5LCBhcHBlbmQgdG8gY3VycmVudCB0cmVlIG5vZGUsIHJlY3Vyc2VcbiAgZnMucmVhZGRpclN5bmMocGF0aCkuZm9yRWFjaChmdW5jdGlvbiAoZmlsZW5hbWUpIHtcbiAgICB2YXIgam9pbmVkID0gam9pbihwYXRoLCBmaWxlbmFtZSksXG4gICAgICBmaWxlcyxcbiAgICAgIGtleSxcbiAgICAgIG9iajtcblxuICAgIGlmIChmcy5zdGF0U3luYyhqb2luZWQpLmlzRGlyZWN0b3J5KCkgJiYgb3B0aW9ucy5yZWN1cnNlKSB7XG4gICAgICAvLyB0aGlzIG5vZGUgaXMgYSBkaXJlY3Rvcnk7IHJlY3Vyc2VcbiAgICAgIGZpbGVzID0gcmVxdWlyZURpcmVjdG9yeShtLCBqb2luZWQsIG9wdGlvbnMpO1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBkaXJlY3Rvcmllc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbGVzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dmFsW29wdGlvbnMucmVuYW1lKGZpbGVuYW1lLCBqb2luZWQsIGZpbGVuYW1lKV0gPSBmaWxlcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGpvaW5lZCAhPT0gbS5maWxlbmFtZSAmJiBjaGVja0ZpbGVJbmNsdXNpb24oam9pbmVkLCBmaWxlbmFtZSwgb3B0aW9ucykpIHtcbiAgICAgICAgLy8gaGFzaCBub2RlIGtleSBzaG91bGRuJ3QgaW5jbHVkZSBmaWxlIGV4dGVuc2lvblxuICAgICAgICBrZXkgPSBmaWxlbmFtZS5zdWJzdHJpbmcoMCwgZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSk7XG4gICAgICAgIG9iaiA9IG0ucmVxdWlyZShqb2luZWQpO1xuICAgICAgICByZXR2YWxbb3B0aW9ucy5yZW5hbWUoa2V5LCBqb2luZWQsIGZpbGVuYW1lKV0gPSBvcHRpb25zLnZpc2l0KG9iaiwgam9pbmVkLCBmaWxlbmFtZSkgfHwgb2JqO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJldHZhbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlRGlyZWN0b3J5O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0T3B0aW9ucztcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcblxuY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBZRXJyb3IpO1xuICAgIH1cbn1cblxubGV0IHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncyA9IFtdO1xubGV0IHNoaW07XG5mdW5jdGlvbiBhcHBseUV4dGVuZHMoY29uZmlnLCBjd2QsIG1lcmdlRXh0ZW5kcywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgbGV0IGRlZmF1bHRDb25maWcgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2V4dGVuZHMnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5leHRlbmRzICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgICAgICBjb25zdCBpc1BhdGggPSAvXFwuanNvbnxcXC4uKnJjJC8udGVzdChjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGxldCBwYXRoVG9EZWZhdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpc1BhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IHJlcXVpcmUucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiByZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbWFuZChjbWQpIHtcbiAgICBjb25zdCBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZCA9IGNtZC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgY29uc3Qgc3BsaXRDb21tYW5kID0gZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQuc3BsaXQoL1xccysoPyFbXltdKl18W148XSo+KS8pO1xuICAgIGNvbnN0IGJyZWdleCA9IC9cXC4qW1xcXVs8Pl0vZztcbiAgICBjb25zdCBmaXJzdENvbW1hbmQgPSBzcGxpdENvbW1hbmQuc2hpZnQoKTtcbiAgICBpZiAoIWZpcnN0Q29tbWFuZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGZvdW5kIGluOiAke2NtZH1gKTtcbiAgICBjb25zdCBwYXJzZWRDb21tYW5kID0ge1xuICAgICAgICBjbWQ6IGZpcnN0Q29tbWFuZC5yZXBsYWNlKGJyZWdleCwgJycpLFxuICAgICAgICBkZW1hbmRlZDogW10sXG4gICAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9O1xuICAgIHNwbGl0Q29tbWFuZC5mb3JFYWNoKChjbWQsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoL1xcLitbXFxdPl0vLnRlc3QoY21kKSAmJiBpID09PSBzcGxpdENvbW1hbmQubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICAgICAgaWYgKC9eXFxbLy50ZXN0KGNtZCkpIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQub3B0aW9uYWwucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZENvbW1hbmQ7XG59XG5cbmNvbnN0IHBvc2l0aW9uTmFtZSA9IFsnZmlyc3QnLCAnc2Vjb25kJywgJ3RoaXJkJywgJ2ZvdXJ0aCcsICdmaWZ0aCcsICdzaXh0aCddO1xuZnVuY3Rpb24gYXJnc2VydChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFt7IGRlbWFuZGVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sIGFyZzEsIGFyZzJdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNvbW1hbmQoYGNtZCAke2FyZzF9YCksXG4gICAgICAgICAgICAgICAgYXJnMixcbiAgICAgICAgICAgICAgICBhcmczLFxuICAgICAgICAgICAgXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgW3BhcnNlZCwgY2FsbGVyQXJndW1lbnRzLCBfbGVuZ3RoXSA9IHBhcnNlQXJncygpO1xuICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChjYWxsZXJBcmd1bWVudHMpO1xuICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGggJiYgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBfbGVuZ3RoIHx8IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgTm90IGVub3VnaCBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkICR7cGFyc2VkLmRlbWFuZGVkLmxlbmd0aH0gYnV0IHJlY2VpdmVkICR7YXJncy5sZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsQ29tbWFuZHMgPSBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoICsgcGFyc2VkLm9wdGlvbmFsLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IHRvdGFsQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgbWF4ICR7dG90YWxDb21tYW5kc30gYnV0IHJlY2VpdmVkICR7bGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkZW1hbmRlZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBkZW1hbmRlZC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBkZW1hbmRlZC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvcHRpb25hbCA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gb3B0aW9uYWwuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgb3B0aW9uYWwuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG59XG5mdW5jdGlvbiBndWVzc1R5cGUoYXJnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgYXJnO1xufVxuZnVuY3Rpb24gYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBhbGxvd2VkVHlwZXMsIHBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IFlFcnJvcihgSW52YWxpZCAke3Bvc2l0aW9uTmFtZVtwb3NpdGlvbl0gfHwgJ21hbnlpdGgnfSBhcmd1bWVudC4gRXhwZWN0ZWQgJHthbGxvd2VkVHlwZXMuam9pbignIG9yICcpfSBidXQgcmVjZWl2ZWQgJHtvYnNlcnZlZFR5cGV9LmApO1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHNoaW0sIG1lc3NhZ2UpIHtcbiAgICBzaGltLmFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5mdW5jdGlvbiBvYmplY3RLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBvYmpGaWx0ZXIob3JpZ2luYWwgPSB7fSwgZmlsdGVyID0gKCkgPT4gdHJ1ZSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIG9iamVjdEtleXMob3JpZ2luYWwpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlcihrZXksIG9yaWdpbmFsW2tleV0pKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG9yaWdpbmFsW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnbG9iYWxNaWRkbGV3YXJlRmFjdG9yeShnbG9iYWxNaWRkbGV3YXJlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gZmFsc2UpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrW2ldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdtaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFja1tpXS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnbG9iYWxNaWRkbGV3YXJlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBnbG9iYWxNaWRkbGV3YXJlLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG59XG5mdW5jdGlvbiBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpIHtcbiAgICBpZiAoIWNvbW1hbmRNaWRkbGV3YXJlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIGNvbW1hbmRNaWRkbGV3YXJlLm1hcChtaWRkbGV3YXJlID0+IHtcbiAgICAgICAgbWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgY29uc3QgYmVmb3JlVmFsaWRhdGlvbkVycm9yID0gbmV3IEVycm9yKCdtaWRkbGV3YXJlIGNhbm5vdCByZXR1cm4gYSBwcm9taXNlIHdoZW4gYXBwbHlCZWZvcmVWYWxpZGF0aW9uIGlzIHRydWUnKTtcbiAgICByZXR1cm4gbWlkZGxld2FyZXMucmVkdWNlKChhY2MsIG1pZGRsZXdhcmUpID0+IHtcbiAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbHlCZWZvcmVWYWxpZGF0aW9uICE9PSBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGluaXRpYWxPYmosXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZShpbml0aWFsT2JqLCB5YXJncyksXG4gICAgICAgICAgICBdKSlcbiAgICAgICAgICAgICAgICAudGhlbigoW2luaXRpYWxPYmosIG1pZGRsZXdhcmVPYmpdKSA9PiBPYmplY3QuYXNzaWduKGluaXRpYWxPYmosIG1pZGRsZXdhcmVPYmopKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG1pZGRsZXdhcmUoYWNjLCB5YXJncyk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlVmFsaWRhdGlvbiAmJiBpc1Byb21pc2UocmVzdWx0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBiZWZvcmVWYWxpZGF0aW9uRXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50aGVuKG1pZGRsZXdhcmVPYmogPT4gT2JqZWN0LmFzc2lnbihhY2MsIG1pZGRsZXdhcmVPYmopKVxuICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihhY2MsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9LCBhcmd2KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5mdW5jdGlvbiBoaWRlQmluKGFyZ3YpIHtcbiAgICByZXR1cm4gYXJndi5zbGljZShnZXRQcm9jZXNzQXJndkJpbkluZGV4KCkgKyAxKTtcbn1cbmZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpXTtcbn1cblxudmFyIHByb2Nlc3NBcmd2ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhpZGVCaW46IGhpZGVCaW4sXG4gIGdldFByb2Nlc3NBcmd2QmluOiBnZXRQcm9jZXNzQXJndkJpblxufSk7XG5cbmZ1bmN0aW9uIHdoaWNoTW9kdWxlKGV4cG9ydGVkKSB7XG4gICAgaWYgKHR5cGVvZiByZXF1aXJlID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDAsIGZpbGVzID0gT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSksIG1vZDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1vZCA9IHJlcXVpcmUuY2FjaGVbZmlsZXNbaV1dO1xuICAgICAgICBpZiAobW9kLmV4cG9ydHMgPT09IGV4cG9ydGVkKVxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmZ1bmN0aW9uIGNvbW1hbmQoeWFyZ3MsIHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlID0gW10sIHNoaW0pIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGhhbmRsZXJzID0ge307XG4gICAgbGV0IGFsaWFzTWFwID0ge307XG4gICAgbGV0IGRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYuYWRkSGFuZGxlciA9IGZ1bmN0aW9uIGFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgY29tbWFuZE1pZGRsZXdhcmUsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlciB8fCAoKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSkge1xuICAgICAgICAgICAgICAgIFtjbWQsIC4uLmFsaWFzZXNdID0gY21kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkpIHtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShjbWQuY29tbWFuZCkgfHwgdHlwZW9mIGNtZC5jb21tYW5kID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY21kLmNvbW1hbmRcbiAgICAgICAgICAgICAgICA6IG1vZHVsZU5hbWUoY21kKTtcbiAgICAgICAgICAgIGlmIChjbWQuYWxpYXNlcylcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gW10uY29uY2F0KGNvbW1hbmQpLmNvbmNhdChjbWQuYWxpYXNlcyk7XG4gICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIoY29tbWFuZCwgZXh0cmFjdERlc2MoY21kKSwgY21kLmJ1aWxkZXIsIGNtZC5oYW5kbGVyLCBjbWQubWlkZGxld2FyZXMsIGNtZC5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgc2VsZi5hZGRIYW5kbGVyKFtjbWRdLmNvbmNhdChhbGlhc2VzKSwgZGVzY3JpcHRpb24sIGJ1aWxkZXIuYnVpbGRlciwgYnVpbGRlci5oYW5kbGVyLCBidWlsZGVyLm1pZGRsZXdhcmVzLCBidWlsZGVyLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ29tbWFuZCA9IHBhcnNlQ29tbWFuZChjbWQpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGFsaWFzZXMubWFwKGFsaWFzID0+IHBhcnNlQ29tbWFuZChhbGlhcykuY21kKTtcbiAgICAgICAgICAgIGxldCBpc0RlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFsaWFzZXMgPSBbcGFyc2VkQ29tbWFuZC5jbWRdLmNvbmNhdChhbGlhc2VzKS5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKERFRkFVTFRfTUFSS0VSLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcnNlZEFsaWFzZXMubGVuZ3RoID09PSAwICYmIGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBwYXJzZWRBbGlhc2VzLnB1c2goJyQwJyk7XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5jbWQgPSBwYXJzZWRBbGlhc2VzWzBdO1xuICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBwYXJzZWRBbGlhc2VzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCBwYXJzZWRDb21tYW5kLmNtZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBjbWQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgICAgICBidWlsZGVyOiBidWlsZGVyIHx8IHt9LFxuICAgICAgICAgICAgICAgIG1pZGRsZXdhcmVzLFxuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQsXG4gICAgICAgICAgICAgICAgZGVtYW5kZWQ6IHBhcnNlZENvbW1hbmQuZGVtYW5kZWQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHBhcnNlZENvbW1hbmQub3B0aW9uYWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdClcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IGhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5hZGREaXJlY3RvcnkgPSBmdW5jdGlvbiBhZGREaXJlY3RvcnkoZGlyLCBjb250ZXh0LCByZXEsIGNhbGxlckZpbGUsIG9wdHMpIHtcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5yZWN1cnNlICE9PSAnYm9vbGVhbicpXG4gICAgICAgICAgICBvcHRzLnJlY3Vyc2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdHMuZXh0ZW5zaW9ucykpXG4gICAgICAgICAgICBvcHRzLmV4dGVuc2lvbnMgPSBbJ2pzJ107XG4gICAgICAgIGNvbnN0IHBhcmVudFZpc2l0ID0gdHlwZW9mIG9wdHMudmlzaXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnZpc2l0IDogKG8pID0+IG87XG4gICAgICAgIG9wdHMudmlzaXQgPSBmdW5jdGlvbiB2aXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0ZWQgPSBwYXJlbnRWaXNpdChvYmosIGpvaW5lZCwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAofmNvbnRleHQuZmlsZXMuaW5kZXhPZihqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGVzLnB1c2goam9pbmVkKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFkZEhhbmRsZXIodmlzaXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmlzaXRlZDtcbiAgICAgICAgfTtcbiAgICAgICAgc2hpbS5yZXF1aXJlRGlyZWN0b3J5KHsgcmVxdWlyZTogcmVxLCBmaWxlbmFtZTogY2FsbGVyRmlsZSB9LCBkaXIsIG9wdHMpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gbW9kdWxlTmFtZShvYmopIHtcbiAgICAgICAgY29uc3QgbW9kID0gd2hpY2hNb2R1bGUob2JqKTtcbiAgICAgICAgaWYgKCFtb2QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgbmFtZSBnaXZlbiBmb3IgbW9kdWxlOiAke3NoaW0uaW5zcGVjdChvYmopfWApO1xuICAgICAgICByZXR1cm4gY29tbWFuZEZyb21GaWxlbmFtZShtb2QuZmlsZW5hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21tYW5kRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiBzaGltLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHNoaW0ucGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjLCB9KSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdCBvZiBbZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJyB8fCB0ZXN0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRlc3QsIHRydWUsIHNoaW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IE9iamVjdC5rZXlzKGhhbmRsZXJzKS5jb25jYXQoT2JqZWN0LmtleXMoYWxpYXNNYXApKTtcbiAgICBzZWxmLmdldENvbW1hbmRIYW5kbGVycyA9ICgpID0+IGhhbmRsZXJzO1xuICAgIHNlbGYuaGFzRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAhIWRlZmF1bHRDb21tYW5kO1xuICAgIHNlbGYucnVuQ29tbWFuZCA9IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4KSB7XG4gICAgICAgIGxldCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRIYW5kbGVyID0gaGFuZGxlcnNbY29tbWFuZF0gfHwgaGFuZGxlcnNbYWxpYXNNYXBbY29tbWFuZF1dIHx8IGRlZmF1bHRDb21tYW5kO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldENvbnRleHQoKTtcbiAgICAgICAgbGV0IG51bUZpbGVzID0gY3VycmVudENvbnRleHQuZmlsZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGxldCBpbm5lckFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJPdXRwdXQgPSBidWlsZGVyKHlhcmdzLnJlc2V0KHBhcnNlZC5hbGlhc2VzKSk7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0gaXNZYXJnc0luc3RhbmNlKGJ1aWxkZXJPdXRwdXQpID8gYnVpbGRlck91dHB1dCA6IHlhcmdzO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lcllhcmdzID0geWFyZ3MucmVzZXQocGFyc2VkLmFsaWFzZXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0VXNhZ2VJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgICAgIC51c2FnZSh1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IGlubmVyWWFyZ3MuX3BhcnNlQXJncyhudWxsLCBudWxsLCB0cnVlLCBjb21tYW5kSW5kZXgpO1xuICAgICAgICAgICAgYWxpYXNlcyA9IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXAgPSBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGdsb2JhbE1pZGRsZXdhcmVcbiAgICAgICAgICAgIC5zbGljZSgwKVxuICAgICAgICAgICAgLmNvbmNhdChjb21tYW5kSGFuZGxlci5taWRkbGV3YXJlcyk7XG4gICAgICAgIGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgdHJ1ZSk7XG4gICAgICAgIGlmICgheWFyZ3MuX2hhc091dHB1dCgpKSB7XG4gICAgICAgICAgICB5YXJncy5fcnVuVmFsaWRhdGlvbihpbm5lckFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHlhcmdzLnBhcnNlZC5lcnJvciwgIWNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kSGFuZGxlci5oYW5kbGVyICYmICF5YXJncy5faGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLl9zZXRIYXNPdXRwdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEheWFyZ3MuZ2V0T3B0aW9ucygpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgICAgIHlhcmdzLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyUmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdCA9IGlubmVyQXJndi50aGVuKGFyZ3YgPT4gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihhcmd2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyUmVzdWx0ID0gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihpbm5lckFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZpbmlzaENvbW1hbmQgPSB5YXJncy5nZXRIYW5kbGVyRmluaXNoQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jYWNoZUhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlclJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyRmluaXNoQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5mYWlsKG51bGwsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5jbGVhckNhY2hlZEhlbHBNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckZpbmlzaENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQoaGFuZGxlclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wb3AoKTtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmZ1bGxDb21tYW5kcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBudW1GaWxlcyA9IGN1cnJlbnRDb250ZXh0LmZpbGVzLmxlbmd0aCAtIG51bUZpbGVzO1xuICAgICAgICBpZiAobnVtRmlsZXMgPiAwKVxuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZmlsZXMuc3BsaWNlKG51bUZpbGVzICogLTEsIG51bUZpbGVzKTtcbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSB7XG4gICAgICAgIHJldHVybiAoIXlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZURpc2FibGVkKCkgJiZcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS5nZXRVc2FnZSgpLmxlbmd0aCA9PT0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGMgPSBERUZBVUxUX01BUktFUi50ZXN0KGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKVxuICAgICAgICAgICAgPyBjb21tYW5kSGFuZGxlci5vcmlnaW5hbC5yZXBsYWNlKERFRkFVTFRfTUFSS0VSLCAnJykudHJpbSgpXG4gICAgICAgICAgICA6IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsO1xuICAgICAgICBjb25zdCBwYyA9IHBhcmVudENvbW1hbmRzLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhREVGQVVMVF9NQVJLRVIudGVzdChjKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBjLnB1c2goYyk7XG4gICAgICAgIHJldHVybiBgJDAgJHtwYy5qb2luKCcgJyl9YDtcbiAgICB9XG4gICAgc2VsZi5ydW5EZWZhdWx0QnVpbGRlck9uID0gZnVuY3Rpb24gKHlhcmdzKSB7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGRlZmF1bHRDb21tYW5kLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdChkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRDb21tYW5kLm9yaWdpbmFsXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzLmdldFVzYWdlSW5zdGFuY2UoKS51c2FnZShjb21tYW5kU3RyaW5nLCBkZWZhdWx0Q29tbWFuZC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGRlZmF1bHRDb21tYW5kLmJ1aWxkZXI7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIoeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHlhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgYXJndiwgY29udGV4dCkge1xuICAgICAgICBhcmd2Ll8gPSBhcmd2Ll8uc2xpY2UoY29udGV4dC5jb21tYW5kcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZCA9IGNvbW1hbmRIYW5kbGVyLmRlbWFuZGVkLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IGNvbW1hbmRIYW5kbGVyLm9wdGlvbmFsLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIHZhbGlkYXRpb24ucG9zaXRpb25hbENvdW50KGRlbWFuZGVkLmxlbmd0aCwgYXJndi5fLmxlbmd0aCk7XG4gICAgICAgIHdoaWxlIChkZW1hbmRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IGRlbWFuZGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICBwb3B1bGF0ZVBvc2l0aW9uYWwobWF5YmUsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3YuXyA9IGNvbnRleHQuY29tbWFuZHMuY29uY2F0KGFyZ3YuXy5tYXAoYSA9PiAnJyArIGEpKTtcbiAgICAgICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBzZWxmLmNtZFRvUGFyc2VPcHRpb25zKGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsKSk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbmFsTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZVBvc2l0aW9uYWwocG9zaXRpb25hbCwgYXJndiwgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBjb25zdCBjbWQgPSBwb3NpdGlvbmFsLmNtZFswXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uYWwudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IGFyZ3YuXy5zcGxpY2UoMCkubWFwKFN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aClcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBbU3RyaW5nKGFyZ3YuXy5zaGlmdCgpKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHlhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdCA9IE9iamVjdC5hc3NpZ24ocGFyc2VPcHRpb25zLmRlZmF1bHQsIG9wdGlvbnMuZGVmYXVsdCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlT3B0aW9ucy5hbGlhcykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XSA9IChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pLmNvbmNhdChwYXJzZU9wdGlvbnMuYWxpYXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5hcnJheSA9IG9wdGlvbnMuYXJyYXkuY29uY2F0KHBhcnNlT3B0aW9ucy5hcnJheSk7XG4gICAgICAgIG9wdGlvbnMuY29uZmlnID0ge307XG4gICAgICAgIGNvbnN0IHVucGFyc2VkID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XS5tYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10pXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5W2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2goYC0tJHtrZXl9YCk7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdW5wYXJzZWQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHNoaW0uUGFyc2VyLmRldGFpbGVkKHVucGFyc2VkLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHBhcnNlZC5lcnJvcikge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwocGFyc2VkLmVycm9yLm1lc3NhZ2UsIHBhcnNlZC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxLZXlzLnB1c2goLi4ucGFyc2VkLmFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlZC5hcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uYWxLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmFsTWFwW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGYuY21kVG9QYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiAoY21kU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb21tYW5kKGNtZFN0cmluZyk7XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBkLmNtZDtcbiAgICAgICAgICAgIGlmIChkLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVtYW5kW2NtZF0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IG8uY21kO1xuICAgICAgICAgICAgaWYgKG8udmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGVycyA9IHt9O1xuICAgICAgICBhbGlhc01hcCA9IHt9O1xuICAgICAgICBkZWZhdWx0Q29tbWFuZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSAoKSA9PiB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBoYW5kbGVycywgYWxpYXNNYXAsIGRlZmF1bHRDb21tYW5kIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIGlmIChjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjbWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNtZCk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB1c2FnZSh5YXJncywgeTE4biwgc2hpbSkge1xuICAgIGNvbnN0IF9fID0geTE4bi5fXztcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgY29uc3QgZmFpbHMgPSBbXTtcbiAgICBzZWxmLmZhaWxGbiA9IGZ1bmN0aW9uIGZhaWxGbihmKSB7XG4gICAgICAgIGZhaWxzLnB1c2goZik7XG4gICAgfTtcbiAgICBsZXQgZmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkFyZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtlbmFibGVkLCBtZXNzYWdlXSA9IHBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgc2hvd0hlbHBPbkZhaWwgPSBlbmFibGVkO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBmYWlsdXJlT3V0cHV0ID0gZmFsc2U7XG4gICAgc2VsZi5mYWlsID0gZnVuY3Rpb24gZmFpbChtc2csIGVycikge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5fZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgZmFpbHNbaV0obXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldEV4aXRQcm9jZXNzKCkpXG4gICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0hlbHBPbkZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc2hvd0hlbHAoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZyB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChmYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5faGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IHVzYWdlcyA9IFtdO1xuICAgIGxldCB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgc2VsZi51c2FnZSA9IChtc2csIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcy5wdXNoKFttc2csIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlcztcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlRGlzYWJsZWQ7XG4gICAgfTtcbiAgICBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfXygnUG9zaXRpb25hbHM6Jyk7XG4gICAgfTtcbiAgICBsZXQgZXhhbXBsZXMgPSBbXTtcbiAgICBzZWxmLmV4YW1wbGUgPSAoY21kLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBleGFtcGxlcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMubWFwKGNtZEFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBjbWRBcnJheVsyXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWRBcnJheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJycsIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZF0pO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IGNvbW1hbmRzO1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSB7fTtcbiAgICBzZWxmLmRlc2NyaWJlID0gZnVuY3Rpb24gZGVzY3JpYmUoa2V5T3JLZXlzLCBkZXNjKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgICAgICAgIGtleU9yS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywgZGVzYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5T3JLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5T3JLZXlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywga2V5T3JLZXlzW2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2tleU9yS2V5c10gPSBkZXNjO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldERlc2NyaXB0aW9ucyA9ICgpID0+IGRlc2NyaXB0aW9ucztcbiAgICBsZXQgZXBpbG9ncyA9IFtdO1xuICAgIHNlbGYuZXBpbG9nID0gbXNnID0+IHtcbiAgICAgICAgZXBpbG9ncy5wdXNoKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgd3JhcFNldCA9IGZhbHNlO1xuICAgIGxldCB3cmFwO1xuICAgIHNlbGYud3JhcCA9IGNvbHMgPT4ge1xuICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgd3JhcCA9IGNvbHM7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRXcmFwKCkge1xuICAgICAgICBpZiAoIXdyYXBTZXQpIHtcbiAgICAgICAgICAgIHdyYXAgPSB3aW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgd3JhcFNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdyYXA7XG4gICAgfVxuICAgIGNvbnN0IGRlZmVyWTE4bkxvb2t1cFByZWZpeCA9ICdfX3lhcmdzU3RyaW5nX186JztcbiAgICBzZWxmLmRlZmVyWTE4bkxvb2t1cCA9IHN0ciA9PiBkZWZlclkxOG5Mb29rdXBQcmVmaXggKyBzdHI7XG4gICAgc2VsZi5oZWxwID0gZnVuY3Rpb24gaGVscCgpIHtcbiAgICAgICAgaWYgKGNhY2hlZEhlbHBNZXNzYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgICAgICBub3JtYWxpemVBbGlhc2VzKCk7XG4gICAgICAgIGNvbnN0IGJhc2UkMCA9IHlhcmdzLmN1c3RvbVNjcmlwdE5hbWVcbiAgICAgICAgICAgID8geWFyZ3MuJDBcbiAgICAgICAgICAgIDogc2hpbS5wYXRoLmJhc2VuYW1lKHlhcmdzLiQwKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0geWFyZ3MuZ2V0R3JvdXBzKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGxldCBrZXlzID0gW107XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZXNjcmlwdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRDb21tYW5kcykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0KSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKTtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ18nKVxuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGNvbnN0IHRoZVdyYXAgPSBnZXRXcmFwKCk7XG4gICAgICAgIGNvbnN0IHVpID0gc2hpbS5jbGl1aSh7XG4gICAgICAgICAgICB3aWR0aDogdGhlV3JhcCxcbiAgICAgICAgICAgIHdyYXA6ICEhdGhlV3JhcCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdXNhZ2VEaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHVzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB1c2FnZXMuZm9yRWFjaCh1c2FnZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdihgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMV19YCwgcGFkZGluZzogWzEsIDAsIDAsIDBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSA8JHtfXygnY29tbWFuZCcpfT5cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gWyR7X18oJ2NvbW1hbmQnKX1dXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWkuZGl2KGAke3V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdDb21tYW5kczonKSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjb250ZXh0LmNvbW1hbmRzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYCR7Y29udGV4dC5jb21tYW5kcy5qb2luKCcgJyl9IGBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgaWYgKHlhcmdzLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc29ydC1jb21tYW5kcyddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gYCR7YmFzZSQwfSAke3BhcmVudENvbW1hbmRzfSR7Y29tbWFuZFswXS5yZXBsYWNlKC9eXFwkMCA/LywgJycpfWA7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbW1hbmRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFdpZHRoKGNvbW1hbmRzLCB0aGVXcmFwLCBgJHtiYXNlJDB9JHtwYXJlbnRDb21tYW5kc31gKSArIDQsXG4gICAgICAgICAgICAgICAgfSwgeyB0ZXh0OiBjb21tYW5kWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpbnRzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbMl0pXG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZWZhdWx0Jyl9XWApO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzNdICYmIGNvbW1hbmRbM10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdhbGlhc2VzOicpfSAke2NvbW1hbmRbM10uam9pbignLCAnKX1dYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZFs0XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkOiAlcycsIGNvbW1hbmRbNF0pfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzLnB1c2goYFske19fKCdkZXByZWNhdGVkJyl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGhpbnRzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAwLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxpYXNLZXlzID0gKE9iamVjdC5rZXlzKG9wdGlvbnMuYWxpYXMpIHx8IFtdKS5jb25jYXQoT2JqZWN0LmtleXMoeWFyZ3MucGFyc2VkLm5ld0FsaWFzZXMpIHx8IFtdKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiAheWFyZ3MucGFyc2VkLm5ld0FsaWFzZXNba2V5XSAmJlxuICAgICAgICAgICAgYWxpYXNLZXlzLmV2ZXJ5KGFsaWFzID0+IChvcHRpb25zLmFsaWFzW2FsaWFzXSB8fCBbXSkuaW5kZXhPZihrZXkpID09PSAtMSkpO1xuICAgICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBfXygnT3B0aW9uczonKTtcbiAgICAgICAgaWYgKCFncm91cHNbZGVmYXVsdEdyb3VwXSlcbiAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdID0gW107XG4gICAgICAgIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgb3B0aW9ucy5hbGlhcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApO1xuICAgICAgICBjb25zdCBpc0xvbmdTd2l0Y2ggPSAoc3cpID0+IC9eLS0vLnRlc3QoZ2V0VGV4dChzdykpO1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRHcm91cHMgPSBPYmplY3Qua2V5cyhncm91cHMpXG4gICAgICAgICAgICAuZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cHNbZ3JvdXBOYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSBncm91cHNbZ3JvdXBOYW1lXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZmlsdGVySGlkZGVuT3B0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKH5hbGlhc0tleXMuaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBhbGlhc0tleTsgKGFsaWFzS2V5ID0gYWxpYXNLZXlzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKH4ob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0tleTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBub3JtYWxpemVkS2V5cyB9KSA9PiBub3JtYWxpemVkS2V5cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgLm1hcCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN3aXRjaGVzID0gbm9ybWFsaXplZEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1trZXldID0gW2tleV1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChvcHRpb25zLmFsaWFzW2tleV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lID09PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCgvXlswLTldJC8udGVzdChzdylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3cubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLScpICsgc3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKHN3MSwgc3cyKSA9PiBpc0xvbmdTd2l0Y2goc3cxKSA9PT0gaXNMb25nU3dpdGNoKHN3MilcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXNMb25nU3dpdGNoKHN3MSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtMSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzaG9ydFN3aXRjaGVzVXNlZCA9IGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgIC5zb21lKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiAhbm9ybWFsaXplZEtleXMuZXZlcnkoa2V5ID0+IGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkpO1xuICAgICAgICBpZiAoc2hvcnRTd2l0Y2hlc1VzZWQpIHtcbiAgICAgICAgICAgIGRpc3BsYXllZEdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzW2tleV0gPSBhZGRJbmRlbnRhdGlvbihzd2l0Y2hlc1trZXldLCAnLXgsICcubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGxheWVkR3JvdXBzLmZvckVhY2goKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgdWkuZGl2KGdyb3VwTmFtZSk7XG4gICAgICAgICAgICBub3JtYWxpemVkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga3N3aXRjaCA9IHN3aXRjaGVzW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGRlc2MgPSBkZXNjcmlwdGlvbnNba2V5XSB8fCAnJztcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKH5kZXNjLmxhc3RJbmRleE9mKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmNvdW50LmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuc3RyaW5nLmluZGV4T2Yoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5hcnJheS5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm51bWJlci5pbmRleE9mKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSlcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmJvb2xlYW4uaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAofm9wdGlvbnMuY291bnQuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLnN0cmluZy5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLm5vcm1hbGl6ZS5pbmRleE9mKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKH5vcHRpb25zLmFycmF5LmluZGV4T2YoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh+b3B0aW9ucy5udW1iZXIuaW5kZXhPZihhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgYWxpYXNlcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApIHtcbiAgICAgICAgbGV0IGdyb3VwZWRLZXlzID0gW107XG4gICAgICAgIGxldCB0b0NoZWNrID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwZWRLZXlzID0gZ3JvdXBlZEtleXMuY29uY2F0KGdyb3Vwc1tncm91cF0pO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0b0NoZWNrID0gW2tleV0uY29uY2F0KGFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXRvQ2hlY2suc29tZShrID0+IGdyb3VwZWRLZXlzLmluZGV4T2YoaykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cGVkS2V5cztcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlsdGVySGlkZGVuT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICh5YXJncy5nZXRPcHRpb25zKCkuaGlkZGVuT3B0aW9ucy5pbmRleE9mKGtleSkgPCAwIHx8XG4gICAgICAgICAgICB5YXJncy5wYXJzZWQuYXJndlt5YXJncy5nZXRPcHRpb25zKCkuc2hvd0hpZGRlbk9wdF0pO1xuICAgIH1cbiAgICBzZWxmLnNob3dIZWxwID0gKGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHNlbGYuaGVscCgpKTtcbiAgICB9O1xuICAgIHNlbGYuZnVuY3Rpb25EZXNjcmlwdGlvbiA9IGZuID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmbi5uYW1lXG4gICAgICAgICAgICA/IHNoaW0uUGFyc2VyLmRlY2FtZWxpemUoZm4ubmFtZSwgJy0nKVxuICAgICAgICAgICAgOiBfXygnZ2VuZXJhdGVkLXZhbHVlJyk7XG4gICAgICAgIHJldHVybiBbJygnLCBkZXNjcmlwdGlvbiwgJyknXS5qb2luKCcnKTtcbiAgICB9O1xuICAgIHNlbGYuc3RyaW5naWZpZWRWYWx1ZXMgPSBmdW5jdGlvbiBzdHJpbmdpZmllZFZhbHVlcyh2YWx1ZXMsIHNlcGFyYXRvcikge1xuICAgICAgICBsZXQgc3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvciB8fCAnLCAnO1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdLmNvbmNhdCh2YWx1ZXMpO1xuICAgICAgICBpZiAoIXZhbHVlcyB8fCAhYXJyYXkubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgYXJyYXkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gc2VwO1xuICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZWZhdWx0U3RyaW5nKHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IGBbJHtfXygnZGVmYXVsdDonKX0gYDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWRlZmF1bHREZXNjcmlwdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7c3RyaW5nfV1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aW5kb3dXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSA4MDtcbiAgICAgICAgaWYgKHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIHNoaW0ucHJvY2Vzcy5zdGRDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgdmVyc2lvbiA9IG51bGw7XG4gICAgc2VsZi52ZXJzaW9uID0gdmVyID0+IHtcbiAgICAgICAgdmVyc2lvbiA9IHZlcjtcbiAgICB9O1xuICAgIHNlbGYuc2hvd1ZlcnNpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLl9nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBsb2dnZXIubG9nKHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBpc0luZGVudGVkVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGFkZEluZGVudGF0aW9uKHRleHQsIGluZGVudCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KVxuICAgICAgICA/IHsgdGV4dDogdGV4dC50ZXh0LCBpbmRlbnRhdGlvbjogdGV4dC5pbmRlbnRhdGlvbiArIGluZGVudCB9XG4gICAgICAgIDogeyB0ZXh0LCBpbmRlbnRhdGlvbjogaW5kZW50IH07XG59XG5mdW5jdGlvbiBnZXRJbmRlbnRhdGlvbih0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC5pbmRlbnRhdGlvbiA6IDA7XG59XG5mdW5jdGlvbiBnZXRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LnRleHQgOiB0ZXh0O1xufVxuXG5jb25zdCBjb21wbGV0aW9uU2hUZW1wbGF0ZSA9IGAjIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hfcHJvZmlsZSBvbiBPU1guXG4jXG5feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgIHR5cGVfbGlzdD0kKHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHthcmdzW0BdfVwiKVxuXG4gICAgQ09NUFJFUExZPSggJChjb21wZ2VuIC1XIFwiXFwke3R5cGVfbGlzdH1cIiAtLSBcXCR7Y3VyX3dvcmR9KSApXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGRlZmF1bHQgLUYgX3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuIyMjLWVuZC17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG5gO1xuY29uc3QgY29tcGxldGlvblpzaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hyY1xuIyAgICBvciB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly56c2hfcHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgbG9jYWwgcmVwbHlcbiAgbG9jYWwgc2k9JElGU1xuICBJRlM9JCdcXG4nIHJlcGx5PSgkKENPTVBfQ1dPUkQ9XCIkKChDVVJSRU5ULTEpKVwiIENPTVBfTElORT1cIiRCVUZGRVJcIiBDT01QX1BPSU5UPVwiJENVUlNPUlwiIHt7YXBwX3BhdGh9fSAtLWdldC15YXJncy1jb21wbGV0aW9ucyBcIlxcJHt3b3Jkc1tAXX1cIikpXG4gIElGUz0kc2lcbiAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG59XG5jb21wZGVmIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5cbmZ1bmN0aW9uIGNvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgY29uc3Qgc2VsZiA9IHtcbiAgICAgICAgY29tcGxldGlvbktleTogJ2dldC15YXJncy1jb21wbGV0aW9ucycsXG4gICAgfTtcbiAgICBsZXQgYWxpYXNlcztcbiAgICBzZWxmLnNldFBhcnNlZCA9IGZ1bmN0aW9uIHNldFBhcnNlZChwYXJzZWQpIHtcbiAgICAgICAgYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH07XG4gICAgY29uc3QgenNoU2hlbGwgPSAoc2hpbS5nZXRFbnYoJ1NIRUxMJykgJiYgc2hpbS5nZXRFbnYoJ1NIRUxMJykuaW5kZXhPZignenNoJykgIT09IC0xKSB8fFxuICAgICAgICAoc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykgJiYgc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykuaW5kZXhPZignenNoJykgIT09IC0xKTtcbiAgICBzZWxmLmdldENvbXBsZXRpb24gPSBmdW5jdGlvbiBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGFyZ3MubGVuZ3RoID8gYXJnc1thcmdzLmxlbmd0aCAtIDFdIDogJyc7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB5YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSB5YXJncy5nZXRDb250ZXh0KCkuY29tbWFuZHM7XG4gICAgICAgIGZ1bmN0aW9uIHJ1bkNvbXBsZXRpb25GdW5jdGlvbihhcmd2KSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChjb21wbGV0aW9uRnVuY3Rpb24sIG51bGwsIHNoaW0pO1xuICAgICAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlKGFyZ3YpXG4gICAgICAgICAgICAgICAgPyBhcmd2LnRoZW4ocnVuQ29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIDogcnVuQ29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gY29tbWFuZC5nZXRDb21tYW5kSGFuZGxlcnMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnNbYXJnc1tpXV0gJiYgaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyO1xuICAgICAgICAgICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHlhcmdzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIoeSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5LmFyZ3Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY3VycmVudC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgcGFyZW50Q29tbWFuZHNbcGFyZW50Q29tbWFuZHMubGVuZ3RoIC0gMV0gIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHVzYWdlLmdldENvbW1hbmRzKCkuZm9yRWFjaCh1c2FnZUNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcGFyc2VDb21tYW5kKHVzYWdlQ29tbWFuZFswXSkuY21kO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmluZGV4T2YoY29tbWFuZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB1c2FnZUNvbW1hbmRbMV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNvbW1hbmROYW1lLnJlcGxhY2UoLzovZywgJ1xcXFw6JykgKyAnOicgKyBkZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Lm1hdGNoKC9eLS8pIHx8IChjdXJyZW50ID09PSAnJyAmJiBjb21wbGV0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcyA9IHVzYWdlLmdldERlc2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMua2V5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVnYWJsZSA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydib29sZWFuLW5lZ2F0aW9uJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGtleUFuZEFsaWFzZXMgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSlcbiAgICAgICAgICAgICAgICAgICAga2V5QW5kQWxpYXNlcyA9IGtleUFuZEFsaWFzZXMuY29uY2F0KGtleUFuZEFsaWFzZXMubWFwKGtleSA9PiBgbm8tJHtrZXl9YCkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlT3B0aW9uS2V5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RJbkFyZ3MgPSBrZXlBbmRBbGlhc2VzLmV2ZXJ5KHZhbCA9PiBhcmdzLmluZGV4T2YoYC0tJHt2YWx9YCkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vdEluQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRzQnlUd29EYXNoZXMgPSAocykgPT4gL14tLS8udGVzdChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGFzaGVzID0gIXN0YXJ0c0J5VHdvRGFzaGVzKGN1cnJlbnQpICYmIGlzU2hvcnRPcHRpb24oa2V5KSA/ICctJyA6ICctLSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXpzaFNoZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcGxldGVPcHRpb25LZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYWJsZSAmJiAhIW9wdGlvbnMuZGVmYXVsdFtrZXldKVxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU9wdGlvbktleShgbm8tJHtrZXl9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb25lKGNvbXBsZXRpb25zKTtcbiAgICB9O1xuICAgIHNlbGYuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0ID0gZnVuY3Rpb24gZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgbGV0IHNjcmlwdCA9IHpzaFNoZWxsXG4gICAgICAgICAgICA/IGNvbXBsZXRpb25ac2hUZW1wbGF0ZVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uU2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNoaW0ucGF0aC5iYXNlbmFtZSgkMCk7XG4gICAgICAgIGlmICgkMC5tYXRjaCgvXFwuanMkLykpXG4gICAgICAgICAgICAkMCA9IGAuLyR7JDB9YDtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX25hbWV9fS9nLCBuYW1lKTtcbiAgICAgICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL3t7Y29tcGxldGlvbl9jb21tYW5kfX0vZywgY21kKTtcbiAgICAgICAgcmV0dXJuIHNjcmlwdC5yZXBsYWNlKC97e2FwcF9wYXRofX0vZywgJDApO1xuICAgIH07XG4gICAgbGV0IGNvbXBsZXRpb25GdW5jdGlvbiA9IG51bGw7XG4gICAgc2VsZi5yZWdpc3RlckZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb21wbGV0aW9uRnVuY3Rpb24gPSBmbjtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cblxuZnVuY3Rpb24gbGV2ZW5zaHRlaW4oYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXRyaXhbaV0gPSBbaV07XG4gICAgfVxuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMSkpIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xufVxuXG5jb25zdCBzcGVjaWFsS2V5cyA9IFsnJDAnLCAnLS0nLCAnXyddO1xuZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHkxOG4sIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHkxOG4uX187XG4gICAgY29uc3QgX19uID0geTE4bi5fX247XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIHNlbGYubm9uT3B0aW9uQ291bnQgPSBmdW5jdGlvbiBub25PcHRpb25Db3VudChhcmd2KSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxDb3VudCA9IGFyZ3YuXy5sZW5ndGggKyAoYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10ubGVuZ3RoIDogMCk7XG4gICAgICAgIGNvbnN0IF9zID0gcG9zaXRpb25hbENvdW50IC0geWFyZ3MuZ2V0Q29udGV4dCgpLmNvbW1hbmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXyAmJlxuICAgICAgICAgICAgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbiB8fCBfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpKSB7XG4gICAgICAgICAgICBpZiAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQwL2csIF9zLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDEvLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCAnVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWF4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucG9zaXRpb25hbENvdW50ID0gZnVuY3Rpb24gcG9zaXRpb25hbENvdW50KHJlcXVpcmVkLCBvYnNlcnZlZCkge1xuICAgICAgICBpZiAob2JzZXJ2ZWQgPCByZXF1aXJlZCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsICdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCBvYnNlcnZlZCwgb2JzZXJ2ZWQgKyAnJywgcmVxdWlyZWQgKyAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVkQXJndW1lbnRzID0gZnVuY3Rpb24gcmVxdWlyZWRBcmd1bWVudHMoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IG1pc3NpbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyB8fCB7fTtcbiAgICAgICAgICAgICAgICBtaXNzaW5nW2tleV0gPSBkZW1hbmRlZE9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWlzc2luZykge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNncyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWlzc2luZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBtaXNzaW5nW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBjdXN0b21Nc2dzLmluZGV4T2YobXNnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tTXNncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNnID0gY3VzdG9tTXNncy5sZW5ndGggPyBgXFxuJHtjdXN0b21Nc2dzLmpvaW4oJ1xcbicpfWAgOiAnJztcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAlcycsICdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50czogJXMnLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5sZW5ndGgsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmpvaW4oJywgJykgKyBjdXN0b21Nc2cpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQXJndW1lbnRzID0gZnVuY3Rpb24gdW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kLCBjaGVja1Bvc2l0aW9uYWxzID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzLmdldENvbW1hbmRJbnN0YW5jZSgpLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRDb250ZXh0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwb3NpdGlvbmFsTWFwLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5YXJncy5fZ2V0UGFyc2VDb250ZXh0KCksIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSkge1xuICAgICAgICAgICAgICAgIHVua25vd24ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgY29tbWFuZEtleXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGlzRGVmYXVsdENvbW1hbmQpKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGFyZ3VtZW50OiAlcycsICdVbmtub3duIGFyZ3VtZW50czogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYudW5rbm93bkNvbW1hbmRzID0gZnVuY3Rpb24gdW5rbm93bkNvbW1hbmRzKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJncy5nZXRDb21tYW5kSW5zdGFuY2UoKS5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0Q29udGV4dCgpO1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fCBjb21tYW5kS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhcmd2Ll8uc2xpY2UoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRLZXlzLmluZGV4T2YoJycgKyBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGNvbW1hbmQ6ICVzJywgJ1Vua25vd24gY29tbWFuZHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24uam9pbignLCAnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3ID0gZnVuY3Rpb24gaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGlhc2VzLCBrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzO1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgW2tleSwgLi4uYWxpYXNlc1trZXldXSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3QWxpYXNlcywgYSkgfHxcbiAgICAgICAgICAgICAgICAhbmV3QWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBjaGVja3MgPSBbXTtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gY2hlY2soZiwgZ2xvYmFsKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHtcbiAgICAgICAgICAgIGZ1bmM6IGYsXG4gICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi5jdXN0b21DaGVja3MgPSBmdW5jdGlvbiBjdXN0b21DaGVja3MoYXJndiwgYWxpYXNlcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgZjsgKGYgPSBjaGVja3NbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZnVuYyA9IGYuZnVuYztcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGFyZ3YsIGFsaWFzZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyciwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGZ1bmMudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKHJlc3VsdC50b1N0cmluZygpLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgaW1wbGllZCA9IHt9O1xuICAgIHNlbGYuaW1wbGllcyA9IGZ1bmN0aW9uIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fG51bWJlcnxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbXBsaWVzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFpbXBsaWVkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmltcGxpZXMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh2YWx1ZSwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0SW1wbGllZCA9IGZ1bmN0aW9uIGdldEltcGxpZWQoKSB7XG4gICAgICAgIHJldHVybiBpbXBsaWVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24ga2V5RXhpc3RzKGFyZ3YsIHZhbCkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICAgICAgdmFsID0gaXNOYU4obnVtKSA/IHZhbCA6IG51bTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWwgPSBhcmd2Ll8ubGVuZ3RoID49IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwubWF0Y2goL14tLW5vLS4rLykpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5tYXRjaCgvXi0tbm8tKC4rKS8pWzFdO1xuICAgICAgICAgICAgdmFsID0gIWFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3ZbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBsZXZlbnNodGVpbihjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNoZWNrcyA9IGNoZWNrcy5maWx0ZXIoYyA9PiBjLmdsb2JhbCk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNoZWNrcyxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjaGVja3MsIGNvbmZsaWN0aW5nIH0gPSBmcm96ZW4pO1xuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59XG5cbmxldCBzaGltJDE7XG5mdW5jdGlvbiBZYXJnc1dpdGhTaGltKF9zaGltKSB7XG4gICAgc2hpbSQxID0gX3NoaW07XG4gICAgcmV0dXJuIFlhcmdzO1xufVxuZnVuY3Rpb24gWWFyZ3MocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkID0gc2hpbSQxLnByb2Nlc3MuY3dkKCksIHBhcmVudFJlcXVpcmUpIHtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgbGV0IGNvbW1hbmQkMTtcbiAgICBsZXQgY29tcGxldGlvbiQxID0gbnVsbDtcbiAgICBsZXQgZ3JvdXBzID0ge307XG4gICAgY29uc3QgZ2xvYmFsTWlkZGxld2FyZSA9IFtdO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBjb25zdCBwcmVzZXJ2ZWRHcm91cHMgPSB7fTtcbiAgICBsZXQgdXNhZ2UkMTtcbiAgICBsZXQgdmFsaWRhdGlvbiQxO1xuICAgIGxldCBoYW5kbGVyRmluaXNoQ29tbWFuZCA9IG51bGw7XG4gICAgY29uc3QgeTE4biA9IHNoaW0kMS55MThuO1xuICAgIHNlbGYubWlkZGxld2FyZSA9IGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5KGdsb2JhbE1pZGRsZXdhcmUsIHNlbGYpO1xuICAgIHNlbGYuc2NyaXB0TmFtZSA9IGZ1bmN0aW9uIChzY3JpcHROYW1lKSB7XG4gICAgICAgIHNlbGYuY3VzdG9tU2NyaXB0TmFtZSA9IHRydWU7XG4gICAgICAgIHNlbGYuJDAgPSBzY3JpcHROYW1lO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCBkZWZhdWx0JDA7XG4gICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3Qoc2hpbSQxLnByb2Nlc3MuYXJndigpWzBdKSkge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMSwgMik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkZWZhdWx0JDAgPSBzaGltJDEucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMCwgMSk7XG4gICAgfVxuICAgIHNlbGYuJDAgPSBkZWZhdWx0JDBcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHJlYmFzZShjd2QsIHgpO1xuICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAudHJpbSgpO1xuICAgIGlmIChzaGltJDEuZ2V0RW52KCdfJykgJiYgc2hpbSQxLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IHNoaW0kMS5nZXRFbnYoJ18nKSkge1xuICAgICAgICBzZWxmLiQwID0gc2hpbSQxXG4gICAgICAgICAgICAuZ2V0RW52KCdfJylcbiAgICAgICAgICAgIC5yZXBsYWNlKGAke3NoaW0kMS5wYXRoLmRpcm5hbWUoc2hpbSQxLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHsgcmVzZXRzOiAtMSwgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdLCBmaWxlczogW10gfTtcbiAgICBzZWxmLmdldENvbnRleHQgPSAoKSA9PiBjb250ZXh0O1xuICAgIGxldCBoYXNPdXRwdXQgPSBmYWxzZTtcbiAgICBsZXQgZXhpdEVycm9yID0gbnVsbDtcbiAgICBzZWxmLmV4aXQgPSAoY29kZSwgZXJyKSA9PiB7XG4gICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgIGV4aXRFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgc2hpbSQxLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9O1xuICAgIGxldCBjb21wbGV0aW9uQ29tbWFuZCA9IG51bGw7XG4gICAgc2VsZi5jb21wbGV0aW9uID0gZnVuY3Rpb24gKGNtZCwgZGVzYywgZm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ3xib29sZWFufGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2NtZCwgZGVzYywgZm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbiA9IGRlc2M7XG4gICAgICAgICAgICBkZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRpb25Db21tYW5kID0gY21kIHx8IGNvbXBsZXRpb25Db21tYW5kIHx8ICdjb21wbGV0aW9uJztcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmNvbW1hbmQoY29tcGxldGlvbkNvbW1hbmQsIGRlc2MpO1xuICAgICAgICBpZiAoZm4pXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgc2VsZi5yZXNldE9wdGlvbnMgPSBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXRPcHRpb25zKGFsaWFzZXMgPSB7fSkge1xuICAgICAgICBjb250ZXh0LnJlc2V0cysrO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdG1wT3B0aW9ucyA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbCA/IG9wdGlvbnMubG9jYWwgOiBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gb3B0aW9ucy5jb25maWdPYmplY3RzXG4gICAgICAgICAgICA/IG9wdGlvbnMuY29uZmlnT2JqZWN0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHByZXNlcnZlZEdyb3VwcywgT2JqZWN0LmtleXMoZ3JvdXBzKS5yZWR1Y2UoKGFjYywgZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGdyb3VwcyA9IHt9O1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnY29lcmNlJyxcbiAgICAgICAgICAgICdkZXByZWNhdGVkT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGFycmF5T3B0aW9ucy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IChvcHRpb25zW2tdIHx8IFtdKS5maWx0ZXIoKGspID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RPcHRpb25zLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSBvYmpGaWx0ZXIob3B0aW9uc1trXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgb3B0aW9ucyA9IHRtcE9wdGlvbnM7XG4gICAgICAgIHVzYWdlJDEgPSB1c2FnZSQxID8gdXNhZ2UkMS5yZXNldChsb2NhbExvb2t1cCkgOiB1c2FnZShzZWxmLCB5MThuLCBzaGltJDEpO1xuICAgICAgICB2YWxpZGF0aW9uJDEgPSB2YWxpZGF0aW9uJDFcbiAgICAgICAgICAgID8gdmFsaWRhdGlvbiQxLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiB2YWxpZGF0aW9uKHNlbGYsIHVzYWdlJDEsIHkxOG4sIHNoaW0kMSk7XG4gICAgICAgIGNvbW1hbmQkMSA9IGNvbW1hbmQkMVxuICAgICAgICAgICAgPyBjb21tYW5kJDEucmVzZXQoKVxuICAgICAgICAgICAgOiBjb21tYW5kKHNlbGYsIHVzYWdlJDEsIHZhbGlkYXRpb24kMSwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSQxKTtcbiAgICAgICAgaWYgKCFjb21wbGV0aW9uJDEpXG4gICAgICAgICAgICBjb21wbGV0aW9uJDEgPSBjb21wbGV0aW9uKHNlbGYsIHVzYWdlJDEsIGNvbW1hbmQkMSwgc2hpbSQxKTtcbiAgICAgICAgY29tcGxldGlvbkNvbW1hbmQgPSBudWxsO1xuICAgICAgICBvdXRwdXQgPSAnJztcbiAgICAgICAgZXhpdEVycm9yID0gbnVsbDtcbiAgICAgICAgaGFzT3V0cHV0ID0gZmFsc2U7XG4gICAgICAgIHNlbGYucGFyc2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5yZXNldE9wdGlvbnMoKTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IG9wdGlvbnMuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgc3RyaWN0LFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHMsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQsXG4gICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICBleGl0RXJyb3IsXG4gICAgICAgICAgICBoYXNPdXRwdXQsXG4gICAgICAgICAgICBwYXJzZWQ6IHNlbGYucGFyc2VkLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICAgICAgdXNhZ2UkMS5mcmVlemUoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmZyZWV6ZSgpO1xuICAgICAgICBjb21tYW5kJDEuZnJlZXplKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBmcm96ZW5zLnBvcCgpO1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChmcm96ZW4sIHVuZGVmaW5lZCwgc2hpbSQxKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgICh7XG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0cyxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzLFxuICAgICAgICAgICAgZ3JvdXBzLFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgZXhpdEVycm9yLFxuICAgICAgICAgICAgaGFzT3V0cHV0LFxuICAgICAgICAgICAgcGFyc2VkOiBzZWxmLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdCxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kLFxuICAgICAgICAgICAgcGFyc2VGbixcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCxcbiAgICAgICAgICAgIGhhbmRsZXJGaW5pc2hDb21tYW5kLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gY29uZmlnT2JqZWN0cztcbiAgICAgICAgdXNhZ2UkMS51bmZyZWV6ZSgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEudW5mcmVlemUoKTtcbiAgICAgICAgY29tbWFuZCQxLnVuZnJlZXplKCk7XG4gICAgfVxuICAgIHNlbGYuYm9vbGVhbiA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2Jvb2xlYW4nLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFycmF5ID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnYXJyYXknLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLm51bWJlciA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ251bWJlcicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYubm9ybWFsaXplID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRBcnJheSgnbm9ybWFsaXplJywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb3VudCA9IGZ1bmN0aW9uIChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXkoJ2NvdW50Jywga2V5cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdzdHJpbmcnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnJlcXVpcmVzQXJnID0gZnVuY3Rpb24gKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZ3xvYmplY3Q+IFtudW1iZXJdJywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYucmVxdWlyZXNBcmcsICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuc2tpcFZhbGlkYXRpb24gPSBmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludEFycmF5KCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludEFycmF5KHR5cGUsIGtleXMpIHtcbiAgICAgICAga2V5cyA9IFtdLmNvbmNhdChrZXlzKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxmLm5hcmdzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3R8YXJyYXk+IFtudW1iZXJdJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYubmFyZ3MsICduYXJnJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jaG9pY2VzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuY2hvaWNlcywgJ2Nob2ljZXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmFsaWFzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KHNlbGYuYWxpYXMsICdhbGlhcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVmYXVsdCA9IHNlbGYuZGVmYXVsdHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbKl0gW3N0cmluZ10nLCBba2V5LCB2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydFNpbmdsZUtleShrZXksIHNoaW0kMSk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0pXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IHVzYWdlJDEuZnVuY3Rpb25EZXNjcmlwdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZWZhdWx0LCAnZGVmYXVsdCcsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiAoa2V5LCBkZXNjKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXksIGRlc2NdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc2V0S2V5KGtleSwgdHJ1ZSk7XG4gICAgICAgIHVzYWdlJDEuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBzZXRLZXkoa2V5LCBzZXQpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNldEtleSwgJ2tleScsIGtleSwgc2V0KTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkoc2VsZi5kZW1hbmRPcHRpb24sICdkZW1hbmRlZE9wdGlvbnMnLCBrZXlzLCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgc2VsZi5kZW1hbmRPcHRpb24gPSBkZW1hbmRPcHRpb247XG4gICAgc2VsZi5jb2VyY2UgPSBmdW5jdGlvbiAoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5KHNlbGYuY29lcmNlLCAnY29lcmNlJywga2V5cywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnNbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5KGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgcG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXVtrZXldID0gKG9wdGlvbnNbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkoYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgc2FuaXRpemVLZXkoa2V5KSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhbml0aXplS2V5KGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJylcbiAgICAgICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWxldGVGcm9tUGFyc2VySGludE9iamVjdChvcHRpb25LZXkpIHtcbiAgICAgICAgb2JqZWN0S2V5cyhvcHRpb25zKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gb3B0aW9uc1toaW50S2V5XTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKH5oaW50LmluZGV4T2Yob3B0aW9uS2V5KSlcbiAgICAgICAgICAgICAgICAgICAgaGludC5zcGxpY2UoaGludC5pbmRleE9mKG9wdGlvbktleSksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhpbnRbb3B0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSB1c2FnZSQxLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIHNlbGYuY29uZmlnID0gZnVuY3Rpb24gY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIGN3ZCwgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIHNoaW0kMSk7XG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZ09iamVjdHMgPSAob3B0aW9ucy5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoa2V5LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdba10gPSBwYXJzZUZuIHx8IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZXhhbXBsZSA9IGZ1bmN0aW9uIChjbWQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgY21kLmZvckVhY2goZXhhbXBsZVBhcmFtcyA9PiBzZWxmLmV4YW1wbGUoLi4uZXhhbXBsZVBhcmFtcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXNhZ2UkMS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5jb21tYW5kID0gZnVuY3Rpb24gKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbW1hbmQkMS5hZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmNvbW1hbmREaXIgPSBmdW5jdGlvbiAoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBwYXJlbnRSZXF1aXJlIHx8IHNoaW0kMS5yZXF1aXJlO1xuICAgICAgICBjb21tYW5kJDEuYWRkRGlyZWN0b3J5KGRpciwgc2VsZi5nZXRDb250ZXh0KCksIHJlcSwgc2hpbSQxLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmQgPSBzZWxmLnJlcXVpcmVkID0gc2VsZi5yZXF1aXJlID0gZnVuY3Rpb24gZGVtYW5kKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1heCkpIHtcbiAgICAgICAgICAgIG1heC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIHNoaW0kMSk7XG4gICAgICAgICAgICBzZWxmLmRlbWFuZENvbW1hbmQoa2V5cywgbWF4LCBtc2csIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwobXNnLCB0cnVlLCBzaGltJDEpO1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRlbWFuZE9wdGlvbihrZXlzLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnID09PSB0cnVlIHx8IHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5kZW1hbmRDb21tYW5kID0gZnVuY3Rpb24gZGVtYW5kQ29tbWFuZChtaW4gPSAxLCBtYXgsIG1pbk1zZywgbWF4TXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tudW1iZXJdIFtudW1iZXJ8c3RyaW5nXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXSBbc3RyaW5nfG51bGx8dW5kZWZpbmVkXScsIFttaW4sIG1heCwgbWluTXNnLCBtYXhNc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtaW5Nc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmdsb2JhbCgnXycsIGZhbHNlKTtcbiAgICAgICAgb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzLl8gPSB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBtaW5Nc2csXG4gICAgICAgICAgICBtYXhNc2csXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZW1hbmRlZE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZE9wdGlvbnM7XG4gICAgfTtcbiAgICBzZWxmLmdldERlbWFuZGVkQ29tbWFuZHMgPSAoKSA9PiB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH07XG4gICAgc2VsZi5kZXByZWNhdGVPcHRpb24gPSBmdW5jdGlvbiBkZXByZWNhdGVPcHRpb24ob3B0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmd8Ym9vbGVhbl0nLCBbb3B0aW9uLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXByZWNhdGVkT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRlcHJlY2F0ZWRPcHRpb25zO1xuICAgIH07XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtudW1iZXJ8c3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRpb24kMS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuY29uZmxpY3RzID0gZnVuY3Rpb24gKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmNvbmZsaWN0cyhrZXkxLCBrZXkyKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnVzYWdlID0gZnVuY3Rpb24gKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgc2hpbSQxKTtcbiAgICAgICAgICAgIGlmICgobXNnIHx8ICcnKS5tYXRjaCgvXlxcJDAoIHwkKS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZChtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy51c2FnZSgpIGRlc2NyaXB0aW9uIG11c3Qgc3RhcnQgd2l0aCAkMCBpZiBiZWluZyB1c2VkIGFzIGFsaWFzIGZvciAuY29tbWFuZCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1c2FnZSQxLnVzYWdlKG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5lcGlsb2d1ZSA9IHNlbGYuZXBpbG9nID0gZnVuY3Rpb24gKG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFttc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5lcGlsb2cobXNnKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdXNhZ2UkMS5mYWlsRm4oZik7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5vbkZpbmlzaENvbW1hbmQgPSBmdW5jdGlvbiAoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb24+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaGFuZGxlckZpbmlzaENvbW1hbmQgPSBmO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0SGFuZGxlckZpbmlzaENvbW1hbmQgPSAoKSA9PiBoYW5kbGVyRmluaXNoQ29tbWFuZDtcbiAgICBzZWxmLmNoZWNrID0gZnVuY3Rpb24gKGYsIF9nbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgX2dsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY2hlY2soZiwgX2dsb2JhbCAhPT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2xvYmFsID0gZnVuY3Rpb24gZ2xvYmFsKGdsb2JhbHMsIGdsb2JhbCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbYm9vbGVhbl0nLCBbZ2xvYmFscywgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGdsb2JhbHMgPSBbXS5jb25jYXQoZ2xvYmFscyk7XG4gICAgICAgIGlmIChnbG9iYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvY2FsID0gb3B0aW9ucy5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NhbC5pbmRleE9mKGcpID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLnBrZ0NvbmYgPSBmdW5jdGlvbiBwa2dDb25mKGtleSwgcm9vdFBhdGgpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ10nLCBba2V5LCByb290UGF0aF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBsZXQgY29uZiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBrZ1VwKHJvb3RQYXRoIHx8IGN3ZCk7XG4gICAgICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25mID0gYXBwbHlFeHRlbmRzKG9ialtrZXldLCByb290UGF0aCB8fCBjd2QsIHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBzaGltJDEpO1xuICAgICAgICAgICAgb3B0aW9ucy5jb25maWdPYmplY3RzID0gKG9wdGlvbnMuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGNvbmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgcGtncyA9IHt9O1xuICAgIGZ1bmN0aW9uIHBrZ1VwKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAocGtnc1tucGF0aF0pXG4gICAgICAgICAgICByZXR1cm4gcGtnc1tucGF0aF07XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzdGFydERpciA9IHJvb3RQYXRoIHx8IHNoaW0kMS5tYWluRmlsZW5hbWU7XG4gICAgICAgICAgICBpZiAoIXJvb3RQYXRoICYmIHNoaW0kMS5wYXRoLmV4dG5hbWUoc3RhcnREaXIpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnREaXIgPSBzaGltJDEucGF0aC5kaXJuYW1lKHN0YXJ0RGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gc2hpbSQxLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBzaGltJDEpO1xuICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShzaGltJDEucmVhZEZpbGVTeW5jKHBrZ0pzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX25vb3ApIHsgfVxuICAgICAgICBwa2dzW25wYXRoXSA9IG9iaiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHBrZ3NbbnBhdGhdO1xuICAgIH1cbiAgICBsZXQgcGFyc2VGbiA9IG51bGw7XG4gICAgbGV0IHBhcnNlQ29udGV4dCA9IG51bGw7XG4gICAgc2VsZi5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZnJlZXplKCk7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3YgPSBzZWxmLl9wYXJzZUFyZ3MocHJvY2Vzc0FyZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gc2VsZi5wYXJzZWQ7XG4gICAgICAgICAgICB1bmZyZWV6ZSgpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dCA9IHNob3J0Q2lyY3VpdDtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IF9wYXJzZUZuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBwYXJzZUZuID0gc2hvcnRDaXJjdWl0O1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG9ydENpcmN1aXQpXG4gICAgICAgICAgICBwcm9jZXNzQXJncyA9IGFyZ3M7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgZXhpdFByb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2VsZi5fcGFyc2VBcmdzKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29tcGxldGlvbiQxLnNldFBhcnNlZChzZWxmLnBhcnNlZCk7XG4gICAgICAgIGlmIChwYXJzZUZuKVxuICAgICAgICAgICAgcGFyc2VGbihleGl0RXJyb3IsIHBhcnNlZCwgb3V0cHV0KTtcbiAgICAgICAgdW5mcmVlemUoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9O1xuICAgIHNlbGYuX2dldFBhcnNlQ29udGV4dCA9ICgpID0+IHBhcnNlQ29udGV4dCB8fCB7fTtcbiAgICBzZWxmLl9oYXNQYXJzZUNhbGxiYWNrID0gKCkgPT4gISFwYXJzZUZuO1xuICAgIHNlbGYub3B0aW9uID0gc2VsZi5vcHRpb25zID0gZnVuY3Rpb24gb3B0aW9uKGtleSwgb3B0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbb2JqZWN0XScsIFtrZXksIG9wdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgc2VsZi5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHNlbGYubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlbGYuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBvcHQuZGVmYXVsdERlc2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5za2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2tpcFZhbGlkYXRpb24oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBvcHQuZGVzY3JpYmUgfHwgb3B0LmRlc2NyaXB0aW9uIHx8IG9wdC5kZXNjO1xuICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIGRlc2MpO1xuICAgICAgICAgICAgaWYgKG9wdC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhpZGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQucmVxdWlyZXNBcmcpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlcXVpcmVzQXJnKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldE9wdGlvbnMgPSAoKSA9PiBvcHRpb25zO1xuICAgIHNlbGYucG9zaXRpb25hbCA9IGZ1bmN0aW9uIChrZXksIG9wdHMpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gPG9iamVjdD4nLCBba2V5LCBvcHRzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChjb250ZXh0LnJlc2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIi5wb3NpdGlvbmFsKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGluIGEgY29tbWFuZCdzIGJ1aWxkZXIgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkT3B0cyA9IFtcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2ltcGxpZXMnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnY29uZmxpY3RzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgJ2Rlc2NyaWJlJyxcbiAgICAgICAgICAgICdkZXNjJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICBdO1xuICAgICAgICBvcHRzID0gb2JqRmlsdGVyKG9wdHMsIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBsZXQgYWNjZXB0ID0gc3VwcG9ydGVkT3B0cy5pbmRleE9mKGspICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmRleE9mKHYpID09PSAtMSlcbiAgICAgICAgICAgICAgICBhY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBhY2NlcHQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IGNvbnRleHQuZnVsbENvbW1hbmRzW2NvbnRleHQuZnVsbENvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSBmdWxsQ29tbWFuZFxuICAgICAgICAgICAgPyBjb21tYW5kJDEuY21kVG9QYXJzZU9wdGlvbnMoZnVsbENvbW1hbmQpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhcnJheTogW10sXG4gICAgICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgICAgIGRlbWFuZDoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICBvYmplY3RLZXlzKHBhcnNlT3B0aW9ucykuZm9yRWFjaChwayA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZU9wdGlvbiA9IHBhcnNlT3B0aW9uc1twa107XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZU9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb24uaW5kZXhPZihrZXkpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uW2tleV0gJiYgIShwayBpbiBvcHRzKSlcbiAgICAgICAgICAgICAgICAgICAgb3B0c1twa10gPSBwYXJzZU9wdGlvbltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ncm91cChrZXksIHVzYWdlJDEuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHNlbGYub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfTtcbiAgICBzZWxmLmdyb3VwID0gZnVuY3Rpb24gZ3JvdXAob3B0cywgZ3JvdXBOYW1lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IDxzdHJpbmc+JywgW29wdHMsIGdyb3VwTmFtZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHByZXNlcnZlZEdyb3Vwc1tncm91cE5hbWVdIHx8IGdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICBpZiAocHJlc2VydmVkR3JvdXBzW2dyb3VwTmFtZV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBwcmVzZXJ2ZWRHcm91cHNbZ3JvdXBOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0ge307XG4gICAgICAgIGdyb3Vwc1tncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0R3JvdXBzID0gKCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZ3JvdXBzLCBwcmVzZXJ2ZWRHcm91cHMpO1xuICAgIHNlbGYuZW52ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dJywgW3ByZWZpeF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAocHJlZml4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0aW9ucy5lbnZQcmVmaXggPSBwcmVmaXggfHwgJyc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi53cmFwID0gZnVuY3Rpb24gKGNvbHMpIHtcbiAgICAgICAgYXJnc2VydCgnPG51bWJlcnxudWxsfHVuZGVmaW5lZD4nLCBbY29sc10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB1c2FnZSQxLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IHN0cmljdCA9IGZhbHNlO1xuICAgIHNlbGYuc3RyaWN0ID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0ID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3QgPSAoKSA9PiBzdHJpY3Q7XG4gICAgbGV0IHN0cmljdENvbW1hbmRzID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RDb21tYW5kcyA9IGZ1bmN0aW9uIChlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHN0cmljdENvbW1hbmRzID0gZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRTdHJpY3RDb21tYW5kcyA9ICgpID0+IHN0cmljdENvbW1hbmRzO1xuICAgIGxldCBzdHJpY3RPcHRpb25zID0gZmFsc2U7XG4gICAgc2VsZi5zdHJpY3RPcHRpb25zID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgc3RyaWN0T3B0aW9ucyA9IGVuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIHNlbGYuZ2V0U3RyaWN0T3B0aW9ucyA9ICgpID0+IHN0cmljdE9wdGlvbnM7XG4gICAgbGV0IHBhcnNlckNvbmZpZyA9IHt9O1xuICAgIHNlbGYucGFyc2VyQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlckNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBwYXJzZXJDb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uID0gKCkgPT4gcGFyc2VyQ29uZmlnO1xuICAgIHNlbGYuc2hvd0hlbHAgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFzZWxmLnBhcnNlZClcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyk7XG4gICAgICAgIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXNldHMrKztcbiAgICAgICAgICAgIGNvbW1hbmQkMS5ydW5EZWZhdWx0QnVpbGRlck9uKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uT3B0ID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSBmdW5jdGlvbiB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodmVyc2lvbk9wdCkge1xuICAgICAgICAgICAgZGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QodmVyc2lvbk9wdCk7XG4gICAgICAgICAgICB1c2FnZSQxLnZlcnNpb24odW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHZlcnNpb25PcHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2ZXIgPSBndWVzc1ZlcnNpb24oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmVyc2lvbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIG1zZyA9IG1zZyB8fCB1c2FnZSQxLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyB2ZXJzaW9uIG51bWJlcicpO1xuICAgICAgICB1c2FnZSQxLnZlcnNpb24odmVyIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIHNlbGYuYm9vbGVhbih2ZXJzaW9uT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZSh2ZXJzaW9uT3B0LCBtc2cpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGd1ZXNzVmVyc2lvbigpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gcGtnVXAoKTtcbiAgICAgICAgcmV0dXJuIG9iai52ZXJzaW9uIHx8ICd1bmtub3duJztcbiAgICB9XG4gICAgbGV0IGhlbHBPcHQgPSBudWxsO1xuICAgIHNlbGYuYWRkSGVscE9wdCA9IHNlbGYuaGVscCA9IGZ1bmN0aW9uIGFkZEhlbHBPcHQob3B0LCBtc2cpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhlbHBPcHQgPSAnaGVscCc7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGhlbHBPcHQpIHtcbiAgICAgICAgICAgIGRlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0KGhlbHBPcHQpO1xuICAgICAgICAgICAgaGVscE9wdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGhlbHBPcHQgPSB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRIZWxwT3B0O1xuICAgICAgICBzZWxmLmJvb2xlYW4oaGVscE9wdCk7XG4gICAgICAgIHNlbGYuZGVzY3JpYmUoaGVscE9wdCwgbXNnIHx8IHVzYWdlJDEuZGVmZXJZMThuTG9va3VwKCdTaG93IGhlbHAnKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdFNob3dIaWRkZW5PcHQgPSAnc2hvdy1oaWRkZW4nO1xuICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IGRlZmF1bHRTaG93SGlkZGVuT3B0O1xuICAgIHNlbGYuYWRkU2hvd0hpZGRlbk9wdCA9IHNlbGYuc2hvd0hpZGRlbiA9IGZ1bmN0aW9uIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvd0hpZGRlbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdFNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHNlbGYuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgc2VsZi5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgdXNhZ2UkMS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGlkZGVuIG9wdGlvbnMnKSk7XG4gICAgICAgIG9wdGlvbnMuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5oaWRlID0gZnVuY3Rpb24gaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIG9wdGlvbnMuaGlkZGVuT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHVzYWdlJDEuc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGV4aXRQcm9jZXNzID0gdHJ1ZTtcbiAgICBzZWxmLmV4aXRQcm9jZXNzID0gZnVuY3Rpb24gKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGV4aXRQcm9jZXNzID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldEV4aXRQcm9jZXNzID0gKCkgPT4gZXhpdFByb2Nlc3M7XG4gICAgc2VsZi5zaG93Q29tcGxldGlvblNjcmlwdCA9IGZ1bmN0aW9uICgkMCwgY21kKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmddIFtzdHJpbmddJywgWyQwLCBjbWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgJDAgPSAkMCB8fCBzZWxmLiQwO1xuICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uJDEuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgY29tcGxldGlvbkNvbW1hbmQgfHwgJ2NvbXBsZXRpb24nKSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21wbGV0aW9uID0gZnVuY3Rpb24gKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiA8ZnVuY3Rpb24+JywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29tcGxldGlvbiQxLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgfTtcbiAgICBzZWxmLmxvY2FsZSA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10nLCBbbG9jYWxlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICghbG9jYWxlKSB7XG4gICAgICAgICAgICBndWVzc0xvY2FsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHkxOG4uZ2V0TG9jYWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGV0ZWN0TG9jYWxlID0gZmFsc2U7XG4gICAgICAgIHkxOG4uc2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi51cGRhdGVTdHJpbmdzID0gc2VsZi51cGRhdGVMb2NhbGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBmYWxzZTtcbiAgICAgICAgeTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZGV0ZWN0TG9jYWxlID0gdHJ1ZTtcbiAgICBzZWxmLmRldGVjdExvY2FsZSA9IGZ1bmN0aW9uIChkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBkZXRlY3RMb2NhbGUgPSBkZXRlY3Q7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXREZXRlY3RMb2NhbGUgPSAoKSA9PiBkZXRlY3RMb2NhbGU7XG4gICAgY29uc3QgX2xvZ2dlciA9IHtcbiAgICAgICAgbG9nKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi5faGFzUGFyc2VDYWxsYmFjaygpKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoKVxuICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXFxuJztcbiAgICAgICAgICAgIG91dHB1dCArPSBhcmdzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl9oYXNQYXJzZUNhbGxiYWNrKCkpXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgIGhhc091dHB1dCA9IHRydWU7XG4gICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xcbic7XG4gICAgICAgICAgICBvdXRwdXQgKz0gYXJncy5qb2luKCcgJyk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBzZWxmLl9nZXRMb2dnZXJJbnN0YW5jZSA9ICgpID0+IF9sb2dnZXI7XG4gICAgc2VsZi5faGFzT3V0cHV0ID0gKCkgPT4gaGFzT3V0cHV0O1xuICAgIHNlbGYuX3NldEhhc091dHB1dCA9ICgpID0+IHtcbiAgICAgICAgaGFzT3V0cHV0ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGxldCByZWNvbW1lbmRDb21tYW5kcztcbiAgICBzZWxmLnJlY29tbWVuZENvbW1hbmRzID0gZnVuY3Rpb24gKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICByZWNvbW1lbmRDb21tYW5kcyA9IHJlY29tbWVuZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlSW5zdGFuY2UgPSAoKSA9PiB1c2FnZSQxO1xuICAgIHNlbGYuZ2V0VmFsaWRhdGlvbkluc3RhbmNlID0gKCkgPT4gdmFsaWRhdGlvbiQxO1xuICAgIHNlbGYuZ2V0Q29tbWFuZEluc3RhbmNlID0gKCkgPT4gY29tbWFuZCQxO1xuICAgIHNlbGYudGVybWluYWxXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBzaGltJDEucHJvY2Vzcy5zdGRDb2x1bW5zO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICdhcmd2Jywge1xuICAgICAgICBnZXQ6ICgpID0+IHNlbGYuX3BhcnNlQXJncyhwcm9jZXNzQXJncyksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgc2VsZi5fcGFyc2VBcmdzID0gZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX2NhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFfY2FsbGVkRnJvbUNvbW1hbmQ7XG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IHByb2Nlc3NBcmdzO1xuICAgICAgICBvcHRpb25zLl9fID0geTE4bi5fXztcbiAgICAgICAgb3B0aW9ucy5jb25maWd1cmF0aW9uID0gc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEhb3B0aW9ucy5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gc2hpbSQxLlBhcnNlci5kZXRhaWxlZChhcmdzLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiBPYmplY3QuYXNzaWduKHsgJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyc6IGZhbHNlIH0sIGNvbmZpZyksXG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGFyZ3YgPSBwYXJzZWQuYXJndjtcbiAgICAgICAgaWYgKHBhcnNlQ29udGV4dClcbiAgICAgICAgICAgIGFyZ3YgPSBPYmplY3QuYXNzaWduKHt9LCBhcmd2LCBwYXJzZUNvbnRleHQpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGFyZ3YuJDAgPSBzZWxmLiQwO1xuICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGd1ZXNzTG9jYWxlKCk7XG4gICAgICAgICAgICBpZiAoc2hvcnRDaXJjdWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3RQcm9jZXNzKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoZWxwT3B0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbaGVscE9wdF1cbiAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhbGlhc2VzW2hlbHBPcHRdIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5sZW5ndGggPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAofmhlbHBDbWRzLmluZGV4T2YoJycgKyBhcmd2Ll9bYXJndi5fLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3ZbaGVscE9wdF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJLZXlzID0gY29tbWFuZCQxLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSBjb21wbGV0aW9uJDEuY29tcGxldGlvbktleSBpbiBhcmd2O1xuICAgICAgICAgICAgY29uc3Qgc2tpcFJlY29tbWVuZGF0aW9uID0gYXJndltoZWxwT3B0XSB8fCByZXF1ZXN0Q29tcGxldGlvbnM7XG4gICAgICAgICAgICBjb25zdCBza2lwRGVmYXVsdENvbW1hbmQgPSBza2lwUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICAgICAgICAoaGFuZGxlcktleXMubGVuZ3RoID4gMSB8fCBoYW5kbGVyS2V5c1swXSAhPT0gJyQwJyk7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0VW5rbm93bkNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tYW5kSW5kZXggfHwgMCwgY21kOyBhcmd2Ll9baV0gIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBTdHJpbmcoYXJndi5fW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+aGFuZGxlcktleXMuaW5kZXhPZihjbWQpICYmIGNtZCAhPT0gY29tcGxldGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBjb21tYW5kJDEucnVuQ29tbWFuZChjbWQsIHNlbGYsIHBhcnNlZCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RVbmtub3duQ29tbWFuZCAmJiBjbWQgIT09IGNvbXBsZXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RVbmtub3duQ29tbWFuZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCQxLmhhc0RlZmF1bHRDb21tYW5kKCkgJiYgIXNraXBEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3N0UHJvY2Vzcyhpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29tbWVuZENvbW1hbmRzICYmIGZpcnN0VW5rbm93bkNvbW1hbmQgJiYgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGlvbkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgfmFyZ3YuXy5pbmRleE9mKGNvbXBsZXRpb25Db21tYW5kKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kJDEuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcERlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gY29tbWFuZCQxLnJ1bkNvbW1hbmQobnVsbCwgc2VsZiwgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChleGl0UHJvY2VzcylcbiAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uQXJncyA9IGFyZ3Muc2xpY2UoYXJncy5pbmRleE9mKGAtLSR7Y29tcGxldGlvbiQxLmNvbXBsZXRpb25LZXl9YCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uJDEuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgIXBvcHVsYXRlRG91YmxlRGFzaCwgX2NhbGxlZEZyb21Db21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGFzT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoZWxwT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93SGVscCgnbG9nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSB2ZXJzaW9uT3B0ICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXRQcm9jZXNzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UkMS5zaG93VmVyc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGl0KDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIG9wdGlvbnMuc2tpcFZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gT2JqZWN0LmtleXMoYXJndikuc29tZShrZXkgPT4gb3B0aW9ucy5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1blZhbGlkYXRpb24oYXJndiwgYWxpYXNlcywge30sIHBhcnNlZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgdXNhZ2UkMS5mYWlsKGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi5fcG9zdFByb2Nlc3MoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBfY2FsbGVkRnJvbUNvbW1hbmQpO1xuICAgIH07XG4gICAgc2VsZi5fcG9zdFByb2Nlc3MgPSBmdW5jdGlvbiAoYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBjYWxsZWRGcm9tQ29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmICghcG9wdWxhdGVEb3VibGVEYXNoKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fY29weURvdWJsZURhc2goYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHNlbGYuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSB8fFxuICAgICAgICAgICAgc2VsZi5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwYXJzZVBvc2l0aW9uYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBhcmd2ID0gc2VsZi5fcGFyc2VQb3NpdGlvbmFsTnVtYmVycyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX2NvcHlEb3VibGVEYXNoID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfTtcbiAgICBzZWxmLl9wYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gZnVuY3Rpb24gKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddIDogYXJndi5fO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyAoYXJnID0gYXJnc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hpbSQxLlBhcnNlci5sb29rc0xpa2VOdW1iZXIoYXJnKSAmJlxuICAgICAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHthcmd9YCkpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBOdW1iZXIoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9O1xuICAgIHNlbGYuX3J1blZhbGlkYXRpb24gPSBmdW5jdGlvbiBydW5WYWxpZGF0aW9uKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIHBhcnNlRXJyb3JzLCBpc0RlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHBhcnNlRXJyb3JzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEucmVxdWlyZWRBcmd1bWVudHMoYXJndik7XG4gICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3RyaWN0Q29tbWFuZHMpIHtcbiAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gdmFsaWRhdGlvbiQxLnVua25vd25Db21tYW5kcyhhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaWN0ICYmICFmYWlsZWRTdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgaXNEZWZhdWx0Q29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RyaWN0T3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGlvbiQxLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywge30sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGlvbiQxLmN1c3RvbUNoZWNrcyhhcmd2LCBhbGlhc2VzKTtcbiAgICAgICAgdmFsaWRhdGlvbiQxLmxpbWl0ZWRDaG9pY2VzKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuaW1wbGljYXRpb25zKGFyZ3YpO1xuICAgICAgICB2YWxpZGF0aW9uJDEuY29uZmxpY3RpbmcoYXJndik7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBndWVzc0xvY2FsZSgpIHtcbiAgICAgICAgaWYgKCFkZXRlY3RMb2NhbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHNoaW0kMS5nZXRFbnYoJ0xDX0FMTCcpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQ19NRVNTQUdFUycpIHx8XG4gICAgICAgICAgICBzaGltJDEuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIHNoaW0kMS5nZXRFbnYoJ0xBTkdVQUdFJykgfHxcbiAgICAgICAgICAgICdlbl9VUyc7XG4gICAgICAgIHNlbGYubG9jYWxlKGxvY2FsZS5yZXBsYWNlKC9bLjpdLiovLCAnJykpO1xuICAgIH1cbiAgICBzZWxmLmhlbHAoKTtcbiAgICBzZWxmLnZlcnNpb24oKTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmNvbnN0IHJlYmFzZSA9IChiYXNlLCBkaXIpID0+IHNoaW0kMS5wYXRoLnJlbGF0aXZlKGJhc2UsIGRpcik7XG5mdW5jdGlvbiBpc1lhcmdzSW5zdGFuY2UoeSkge1xuICAgIHJldHVybiAhIXkgJiYgdHlwZW9mIHkuX3BhcnNlQXJncyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9hLCBfYjtcbmNvbnN0IHsgcmVhZEZpbGVTeW5jIH0gPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBpbnNwZWN0IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCB7IHJlc29sdmUgfSA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHkxOG4gPSByZXF1aXJlKCd5MThuJyk7XG5jb25zdCBQYXJzZXIgPSByZXF1aXJlKCd5YXJncy1wYXJzZXInKTtcbnZhciBjanNQbGF0Zm9ybVNoaW0gPSB7XG4gICAgYXNzZXJ0OiB7XG4gICAgICAgIG5vdFN0cmljdEVxdWFsOiBhc3NlcnQubm90U3RyaWN0RXF1YWwsXG4gICAgICAgIHN0cmljdEVxdWFsOiBhc3NlcnQuc3RyaWN0RXF1YWwsXG4gICAgfSxcbiAgICBjbGl1aTogcmVxdWlyZSgnY2xpdWknKSxcbiAgICBmaW5kVXA6IHJlcXVpcmUoJ2VzY2FsYWRlL3N5bmMnKSxcbiAgICBnZXRFbnY6IChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG4gICAgfSxcbiAgICBnZXRDYWxsZXJGaWxlOiByZXF1aXJlKCdnZXQtY2FsbGVyLWZpbGUnKSxcbiAgICBnZXRQcm9jZXNzQXJndkJpbjogZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gICAgaW5zcGVjdCxcbiAgICBtYWluRmlsZW5hbWU6IChfYiA9IChfYSA9IHJlcXVpcmUgPT09IG51bGwgfHwgcmVxdWlyZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVxdWlyZS5tYWluKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmlsZW5hbWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHByb2Nlc3MuY3dkKCksXG4gICAgUGFyc2VyLFxuICAgIHBhdGg6IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICBwcm9jZXNzOiB7XG4gICAgICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICAgICAgZXhlY1BhdGg6ICgpID0+IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgIGV4aXQ6IChjb2RlKSA9PiB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRUaWNrOiBwcm9jZXNzLm5leHRUaWNrLFxuICAgICAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1uc1xuICAgICAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gICAgcmVhZEZpbGVTeW5jLFxuICAgIHJlcXVpcmU6IHJlcXVpcmUsXG4gICAgcmVxdWlyZURpcmVjdG9yeTogcmVxdWlyZSgncmVxdWlyZS1kaXJlY3RvcnknKSxcbiAgICBzdHJpbmdXaWR0aDogcmVxdWlyZSgnc3RyaW5nLXdpZHRoJyksXG4gICAgeTE4bjogeTE4bih7XG4gICAgICAgIGRpcmVjdG9yeTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9sb2NhbGVzJyksXG4gICAgICAgIHVwZGF0ZUZpbGVzOiBmYWxzZSxcbiAgICB9KSxcbn07XG5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gcHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OXG4gICAgPyBOdW1iZXIocHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA6IDEwO1xuaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9uKSB7XG4gICAgY29uc3QgbWFqb3IgPSBOdW1iZXIocHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC92KFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3Mgc3VwcG9ydHMgYSBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBvZiAke21pbk5vZGVWZXJzaW9ufS4gUmVhZCBvdXIgdmVyc2lvbiBzdXBwb3J0IHBvbGljeTogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG5jb25zdCBQYXJzZXIkMSA9IHJlcXVpcmUoJ3lhcmdzLXBhcnNlcicpO1xuY29uc3QgWWFyZ3MkMSA9IFlhcmdzV2l0aFNoaW0oY2pzUGxhdGZvcm1TaGltKTtcbnZhciBjanMgPSB7XG4gICAgYXBwbHlFeHRlbmRzLFxuICAgIGNqc1BsYXRmb3JtU2hpbSxcbiAgICBZYXJnczogWWFyZ3MkMSxcbiAgICBhcmdzZXJ0LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVGYWN0b3J5LFxuICAgIGlzUHJvbWlzZSxcbiAgICBvYmpGaWx0ZXIsXG4gICAgcGFyc2VDb21tYW5kLFxuICAgIFBhcnNlcjogUGFyc2VyJDEsXG4gICAgcHJvY2Vzc0FyZ3YsXG4gICAgcmViYXNlLFxuICAgIFlFcnJvcixcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2pzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGNsYXNzaWMgc2luZ2xldG9uIHlhcmdzIEFQSSwgdG8gdXNlIHlhcmdzXG4vLyB3aXRob3V0IHJ1bm5pbmcgYXMgYSBzaW5nbGV0b24gZG86XG4vLyByZXF1aXJlKCd5YXJncy95YXJncycpKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbmNvbnN0IHtZYXJncywgcHJvY2Vzc0FyZ3Z9ID0gcmVxdWlyZSgnLi9idWlsZC9pbmRleC5janMnKTtcblxuQXJndihwcm9jZXNzQXJndi5oaWRlQmluKHByb2Nlc3MuYXJndikpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFyZ3Y7XG5cbmZ1bmN0aW9uIEFyZ3YocHJvY2Vzc0FyZ3MsIGN3ZCkge1xuICBjb25zdCBhcmd2ID0gWWFyZ3MocHJvY2Vzc0FyZ3MsIGN3ZCwgcmVxdWlyZSk7XG4gIHNpbmdsZXRvbmlmeShhcmd2KTtcbiAgcmV0dXJuIGFyZ3Y7XG59XG5cbi8qICBIYWNrIGFuIGluc3RhbmNlIG9mIEFyZ3Ygd2l0aCBwcm9jZXNzLmFyZ3YgaW50byBBcmd2XG4gICAgc28gcGVvcGxlIGNhbiBkb1xuICAgIHJlcXVpcmUoJ3lhcmdzJykoWyctLWJlZWJsZT0xJywnLXonLCd6aXp6bGUnXSkuYXJndlxuICAgIHRvIHBhcnNlIGEgbGlzdCBvZiBhcmdzIGFuZFxuICAgIHJlcXVpcmUoJ3lhcmdzJykuYXJndlxuICAgIHRvIGdldCBhIHBhcnNlZCB2ZXJzaW9uIG9mIHByb2Nlc3MuYXJndi5cbiovXG5mdW5jdGlvbiBzaW5nbGV0b25pZnkoaW5zdCkge1xuICBPYmplY3Qua2V5cyhpbnN0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2FyZ3YnKSB7XG4gICAgICBBcmd2Ll9fZGVmaW5lR2V0dGVyX18oa2V5LCBpbnN0Ll9fbG9va3VwR2V0dGVyX18oa2V5KSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBBcmd2W2tleV0gPSBpbnN0W2tleV0uYmluZChpbnN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXJndi5fX2RlZmluZUdldHRlcl9fKCckMCcsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc3QuJDA7XG4gICAgICB9KTtcbiAgICAgIEFyZ3YuX19kZWZpbmVHZXR0ZXJfXygncGFyc2VkJywgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zdC5wYXJzZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEludGVncmF0aW9uVGVzdHMsIEludGVnVGVzdEluZm8sIEludGVnVGVzdCB9IGZyb20gJy4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IHJ1blNuYXBzaG90VGVzdHMsIHJ1bkludGVncmF0aW9uVGVzdHMsIEludGVnUnVubmVyTWV0cmljcywgSW50ZWdUZXN0V29ya2VyQ29uZmlnLCBEZXN0cnVjdGl2ZUNoYW5nZSB9IGZyb20gJy4vd29ya2Vycyc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvMTkyOVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2VzYnVpbGQvaXNzdWVzLzE0OTJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCB5YXJncyA9IHJlcXVpcmUoJ3lhcmdzJyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignbGlzdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ0xpc3QgdGVzdHMgaW5zdGVhZCBvZiBydW5uaW5nIHRoZW0nIH0pXG4gICAgLm9wdGlvbignY2xlYW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdHJ1ZSwgZGVzYzogJ1NraXBzIHN0YWNrIGNsZWFuIHVwIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnbWF4LXdvcmtlcnMnLCB7IHR5cGU6ICdudW1iZXInLCBkZXNjOiAnVGhlIG1heCBudW1iZXIgb2Ygd29ya2VycG9vbCB3b3JrZXJzIHRvIHVzZSB3aGVuIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwnLCBkZWZhdWx0OiAxNiB9KVxuICAgIC5vcHRpb25zKCdleGNsdWRlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdSdW4gYWxsIHRlc3RzIGluIHRoZSBkaXJlY3RvcnksIGV4Y2VwdCB0aGUgc3BlY2lmaWVkIFRFU1RzJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9ucygnZnJvbS1maWxlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1JlYWQgVEVTVCBuYW1lcyBmcm9tIGEgZmlsZSAob25lIFRFU1QgcGVyIGxpbmUpJyB9KVxuICAgIC5vcHRpb24oJ2luc3BlY3QtZmFpbHVyZXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ0tlZXAgdGhlIGludGVnIHRlc3QgY2xvdWQgYXNzZW1ibHkgaWYgYSBmYWlsdXJlIG9jY3VycyBmb3IgaW5zcGVjdGlvbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdJZiB0aGlzIGlzIFwidHJ1ZVwiIHRoZW4gdGhlIHN0YWNrIHVwZGF0ZSB3b3JrZmxvdyB3aWxsIGJlIGRpc2FibGVkJyB9KVxuICAgIC5zdHJpY3QoKVxuICAgIC5hcmd2O1xuXG4gIGNvbnN0IHBvb2wgPSB3b3JrZXJwb29sLnBvb2wocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xpYi93b3JrZXJzL2V4dHJhY3QvaW5kZXguanMnKSwge1xuICAgIG1heFdvcmtlcnM6IGFyZ3ZbJ21heC13b3JrZXJzJ10sXG4gIH0pO1xuXG4gIC8vIGxpc3Qgb2YgaW50ZWdyYXRpb24gdGVzdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkXG4gIGNvbnN0IHRlc3RzVG9SdW46IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSA9IFtdO1xuICBjb25zdCB0ZXN0c0Zyb21BcmdzOiBJbnRlZ1Rlc3RbXSA9IFtdO1xuICBjb25zdCBwYXJhbGxlbFJlZ2lvbnMgPSBhcnJheUZyb21ZYXJncyhhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10pO1xuICBjb25zdCB0ZXN0UmVnaW9uczogc3RyaW5nW10gPSBwYXJhbGxlbFJlZ2lvbnMgPz8gWyd1cy1lYXN0LTEnLCAndXMtZWFzdC0yJywgJ3VzLXdlc3QtMiddO1xuICBjb25zdCBwcm9maWxlcyA9IGFycmF5RnJvbVlhcmdzKGFyZ3YucHJvZmlsZXMpO1xuICBjb25zdCBydW5VcGRhdGVPbkZhaWxlZCA9IGFyZ3ZbJ3VwZGF0ZS1vbi1mYWlsZWQnXSA/PyBmYWxzZTtcbiAgY29uc3QgZnJvbUZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFyZ3ZbJ2Zyb20tZmlsZSddO1xuICBjb25zdCBleGNsdWRlOiBib29sZWFuID0gYXJndi5leGNsdWRlO1xuXG4gIGxldCBmYWlsZWRTbmFwc2hvdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gW107XG4gIGlmIChhcmd2WydtYXgtd29ya2VycyddIDwgdGVzdFJlZ2lvbnMubGVuZ3RoICogKHByb2ZpbGVzID8/IFsxXSkubGVuZ3RoKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1lvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gJXMgdGVzdHMgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGhhdmUgJXMgd29ya2Vycy4gTm90IGFsbCBvZiB5b3VyIHByb2ZpbGVzK3JlZ2lvbnMgd2lsbCBiZSB1dGlsaXplZCcsIGFyZ3YucHJvZmlsZXMgKiBhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10sIGFyZ3ZbJ21heC13b3JrZXJzJ10pO1xuICB9XG5cbiAgbGV0IHRlc3RzU3VjY2VlZGVkID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgaWYgKGFyZ3YubGlzdCkge1xuICAgICAgY29uc3QgdGVzdHMgPSBhd2FpdCBuZXcgSW50ZWdyYXRpb25UZXN0cyhhcmd2LmRpcmVjdG9yeSkuZnJvbUNsaUFyZ3MoKTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRlc3RzLm1hcCh0ID0+IHQuZGlzY292ZXJ5UmVsYXRpdmVGaWxlTmFtZSkuam9pbignXFxuJykgKyAnXFxuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YuXy5sZW5ndGggPiAwICYmIGZyb21GaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgbGlzdCBvZiB0ZXN0cyBjYW5ub3QgYmUgcHJvdmlkZWQgaWYgXCItLWZyb20tZmlsZVwiIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICAgID8gKGF3YWl0IGZzLnJlYWRGaWxlKGZyb21GaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSkpLnNwbGl0KCdcXG4nKS5maWx0ZXIoeCA9PiB4KVxuICAgICAgOiAoYXJndi5fLmxlbmd0aCA+IDAgPyBhcmd2Ll8gOiB1bmRlZmluZWQpOyAvLyAndW5kZWZpbmVkJyBtZWFucyBubyByZXF1ZXN0XG5cbiAgICB0ZXN0c0Zyb21BcmdzLnB1c2goLi4uKGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKHBhdGgucmVzb2x2ZShhcmd2LmRpcmVjdG9yeSkpLmZyb21DbGlBcmdzKHJlcXVlc3RlZFRlc3RzLCBleGNsdWRlKSkpO1xuXG4gICAgLy8gYWx3YXlzIHJ1biBzbmFwc2hvdCB0ZXN0cywgYnV0IGlmICctLWZvcmNlJyBpcyBwYXNzZWQgdGhlblxuICAgIC8vIHJ1biBpbnRlZ3JhdGlvbiB0ZXN0cyBvbiBhbGwgZmFpbGVkIHRlc3RzLCBub3QganVzdCB0aG9zZSB0aGF0XG4gICAgLy8gZmFpbGVkIHNuYXBzaG90IHRlc3RzXG4gICAgZmFpbGVkU25hcHNob3RzID0gYXdhaXQgcnVuU25hcHNob3RUZXN0cyhwb29sLCB0ZXN0c0Zyb21BcmdzLCB7XG4gICAgICByZXRhaW46IGFyZ3ZbJ2luc3BlY3QtZmFpbHVyZXMnXSxcbiAgICAgIHZlcmJvc2U6IEJvb2xlYW4oYXJndi52ZXJib3NlKSxcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICBkZXN0cnVjdGl2ZUNoYW5nZXMucHVzaCguLi5mYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyA/PyBbXSk7XG4gICAgfVxuICAgIGlmICghYXJndi5mb3JjZSkge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLmZhaWxlZFNuYXBzaG90cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGFueSBvZiB0aGUgdGVzdCBmYWlsZWQgc25hcHNob3QgdGVzdHMsIGtlZXAgdGhvc2UgcmVzdWx0c1xuICAgICAgLy8gYW5kIG1lcmdlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRlc3RzIGZyb20gYXJnc1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICB9XG5cbiAgICAvLyBydW4gaW50ZWdyYXRpb24gdGVzdHMgaWYgYC0tdXBkYXRlLW9uLWZhaWxlZGAgT1IgYC0tZm9yY2VgIGlzIHVzZWRcbiAgICBpZiAocnVuVXBkYXRlT25GYWlsZWQgfHwgYXJndi5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgdGVzdHM6IHRlc3RzVG9SdW4sXG4gICAgICAgIHJlZ2lvbnM6IHRlc3RSZWdpb25zLFxuICAgICAgICBwcm9maWxlcyxcbiAgICAgICAgY2xlYW46IGFyZ3YuY2xlYW4sXG4gICAgICAgIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddLFxuICAgICAgICB2ZXJib3NpdHk6IGFyZ3YudmVyYm9zZSxcbiAgICAgICAgdXBkYXRlV29ya2Zsb3c6ICFhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddLFxuICAgICAgfSk7XG4gICAgICB0ZXN0c1N1Y2NlZWRlZCA9IHN1Y2Nlc3M7XG5cblxuICAgICAgaWYgKGFyZ3YuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKGFyZ3YudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdm9pZCBwb29sLnRlcm1pbmF0ZSgpO1xuICB9XG5cbiAgaWYgKGRlc3RydWN0aXZlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoZGVzdHJ1Y3RpdmVDaGFuZ2VzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFydW5VcGRhdGVPbkZhaWxlZCkge1xuICAgICAgbWVzc2FnZSA9ICdUbyByZS1ydW4gZmFpbGVkIHRlc3RzIHJ1bjogeWFybiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gcHJpbnREZXN0cnVjdGl2ZUNoYW5nZXMoY2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSk6IHZvaWQge1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBUaGlzIHRlc3QgY29udGFpbnMgJXMgISEhJywgY2hhbGsuYm9sZCgnZGVzdHJ1Y3RpdmUgY2hhbmdlcycpKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCcgICAgU3RhY2s6ICVzIC0gUmVzb3VyY2U6ICVzIC0gSW1wYWN0OiAlcycsIGNoYW5nZS5zdGFja05hbWUsIGNoYW5nZS5sb2dpY2FsSWQsIGNoYW5nZS5pbXBhY3QpO1xuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuaW5nKCchISEgSWYgdGhlc2UgZGVzdHJ1Y3RpdmUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LCBwbGVhc2UgaW5kaWNhdGUgdGhpcyBvbiB0aGUgUFIgISEhJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRNZXRyaWNzKG1ldHJpY3M6IEludGVnUnVubmVyTWV0cmljc1tdKTogdm9pZCB7XG4gIGxvZ2dlci5oaWdobGlnaHQoJyAgIC0tLSBJbnRlZ3JhdGlvbiB0ZXN0IG1ldHJpY3MgLS0tJyk7XG4gIGNvbnN0IHNvcnRlZE1ldHJpY3MgPSBtZXRyaWNzLnNvcnQoKGEsIGIpID0+IGEuZHVyYXRpb24gLSBiLmR1cmF0aW9uKTtcbiAgc29ydGVkTWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgbG9nZ2VyLnByaW50KCdQcm9maWxlICVzICsgUmVnaW9uICVzIHRvdGFsIHRpbWU6ICVzJywgbWV0cmljLnByb2ZpbGUsIG1ldHJpYy5yZWdpb24sIG1ldHJpYy5kdXJhdGlvbik7XG4gICAgY29uc3Qgc29ydGVkVGVzdHMgPSBPYmplY3QuZW50cmllcyhtZXRyaWMudGVzdHMpLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICBzb3J0ZWRUZXN0cy5mb3JFYWNoKHRlc3QgPT4gbG9nZ2VyLnByaW50KCcgICVzOiAlcycsIHRlc3RbMF0sIHRlc3RbMV0pKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgWWFyZ3MgaW5wdXQgYXJyYXkgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlXG4gKiBtb2RlbCAodGVsbGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFic2VuY2UgYW5kIGFuIGVtcHR5IGFycmF5KVxuICpcbiAqIC0gQW4gZW1wdHkgYXJyYXkgaXMgdGhlIGRlZmF1bHQgY2FzZSwgbWVhbmluZyB0aGUgdXNlciBkaWRuJ3QgcGFzcyBhbnkgYXJndW1lbnRzLiBXZSByZXR1cm5cbiAqICAgdW5kZWZpbmVkLlxuICogLSBJZiB0aGUgdXNlciBwYXNzZWQgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLCB0aGV5IGRpZCBzb21ldGhpbmcgbGlrZSBgLS1hcnJheT1gLCB3aGljaCB3ZSdsbFxuICogICB0YWtlIHRvIG1lYW4gdGhleSBwYXNzZWQgYW4gZW1wdHkgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RnJvbVlhcmdzKHhzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIHJldHVybiB4cy5maWx0ZXIoeCA9PiB4ICE9PSAnJyk7XG59XG5cbi8qKlxuICogTWVyZ2UgdGhlIHRlc3RzIHdlIHJlY2VpdmVkIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB3aXRoXG4gKiB0ZXN0cyB0aGF0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cy4gVGhlIGZhaWxlZCBzbmFwc2hvdCB0ZXN0cyBoYXZlIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudCB0byBrZWVwIHNvIHRoaXMgc2hvdWxkIG92ZXJyaWRlIGFueSB0ZXN0IGZyb20gYXJnc1xuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RzKHRlc3RGcm9tQXJnczogSW50ZWdUZXN0SW5mb1tdLCBmYWlsZWRTbmFwc2hvdFRlc3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSk6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdIHtcbiAgY29uc3QgZmFpbGVkVGVzdE5hbWVzID0gbmV3IFNldChmYWlsZWRTbmFwc2hvdFRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZmlsZU5hbWUpKTtcbiAgY29uc3QgZmluYWw6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdID0gZmFpbGVkU25hcHNob3RUZXN0cztcbiAgZmluYWwucHVzaCguLi50ZXN0RnJvbUFyZ3MuZmlsdGVyKHRlc3QgPT4gIWZhaWxlZFRlc3ROYW1lcy5oYXModGVzdC5maWxlTmFtZSkpKTtcbiAgcmV0dXJuIGZpbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpKCkge1xuICBtYWluKCkudGhlbigpLmNhdGNoKGVyciA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuIiwgImV4cG9ydCB7IGNsaSB9IGZyb20gJy4vY2xpJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw4Q0FBQUEsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDaEIsYUFBYSxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDM0IsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM5QixRQUFRLENBQUMsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNwQixjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUM1QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2QixTQUFTLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUN2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QjtBQUMvQixJQUFBRCxRQUFzQjtBQUN0QixJQUFBQyxTQUF1QjtBQUN2QixpQkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBS0EsSUFBTSxRQUFRO0FBQUE7QUFBQTs7OztBQ1pkLElBQUEsUUFBQTtBQUFTLE9BQUEsZUFBQSxTQUFBLE9BQUEsRUFBQSxZQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsU0FBQSxNQUFBO0FBQUcsRUFBQSxDQUFBOyIsCiAgIm5hbWVzIjogWyJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJncmF5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY2hhbGsiLCAic3R5bGVzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImNoYWxrIiwgInNlbGYiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZUZvb2xXZWJwYWNrIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJlcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInJlcXVpcmVGb29sV2VicGFjayIsICJURVJNSU5BVEVfTUVUSE9EX0lEIiwgIldvcmtlclRocmVhZHMiLCAiZXJyb3IiLCAiV29ya2VyIiwgIndvcmtlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJQcm9taXNlIiwgInBvb2wiLCAid29ya2VyIiwgInJlc29sdmUiLCAiZXJyb3IiLCAicmVzdWx0IiwgImV4cG9ydHMiLCAicG9vbCIsICJ3b3JrZXIiLCAiZXhwb3J0cyIsICJyZXNvbHZlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXJyIiwgImVycjIiLCAiZXIiLCAiZXIyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJ1dGlsIiwgInF1ZXVlIiwgInBhdGgiLCAib3B0aW9ucyIsICJjYiIsICJkYXRhIiwgInNyYyIsICJkZXN0IiwgImZsYWdzIiwgInJlYWRkaXIiLCAiZ28kcmVhZGRpciIsICJtb2RlIiwgImV4cG9ydHMiLCAiZnMiLCAicmVzb2x2ZSIsICJidWZmZXIiLCAiYnVmZmVycyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJ1dGlsIiwgInN0YXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgInJlcXVpcmVfY29weV9zeW5jIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgImVyciIsICJlcnJvciIsICJyZXF1aXJlX2NvcHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVtcHR5RGlyIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgImVyciIsICJzdGF0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwYXRoIiwgImZzIiwgInNyY3BhdGgiLCAiZHN0cGF0aCIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJmcyIsICJlcnIiLCAicmVsYXRpdmUiLCAidHlwZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJyZWFkRmlsZVN5bmMiLCAicmVxdWlyZV9qc29uZmlsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmcyIsICJwYXRoIiwgInN0YXQiLCAicmVxdWlyZV9tb3ZlX3N5bmMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAicGF0aCIsICJzdGF0IiwgImVyciIsICJyZXF1aXJlX21vdmUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiY2hhbGsiLCAid29ya2VyIiwgInBvb2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAidXRpbCIsICJwYXRoIiwgInkxOG4iLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJ1dGlsIiwgImZzIiwgInBhdGgiLCAiRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkiLCAia2V5IiwgImVycm9yIiwgImFyZ3MiLCAidmFsdWUiLCAidmFsIiwgImFyZ3YiLCAiZW52IiwgImFsaWFzZXMiLCAiZGVmYXVsdHMiLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjb2RlIiwgInJlcXVpcmVfYnVpbGQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVzb2x2ZSIsICJtb2R1bGUiLCAic3RhY2siLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZnMiLCAiam9pbiIsICJyZXNvbHZlIiwgInBhdGgiLCAicmVxdWlyZV9idWlsZCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJjbWQiLCAiaXNQcm9taXNlIiwgInNoaW0iLCAieWFyZ3MiLCAidXNhZ2UiLCAidmFsaWRhdGlvbiIsICJzZWxmIiwgImNvbW1hbmQiLCAiZXJyb3IiLCAiYyIsICJ5MThuIiwgImxvZ2dlciIsICJtYXhXaWR0aCIsICJhcmd2IiwgImNvbXBsZXRpb25zIiwgImtleSIsICJnbG9iYWwiLCAiayIsICJ0eXBlIiwgInZhbHVlIiwgInBhcnNlRm4iLCAicGFyc2UiLCAiY29tcGxldGlvbiIsICJyZWFkRmlsZVN5bmMiLCAicmVzb2x2ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwb29sIiwgImZzIiwgInN1Y2Nlc3MiLCAicGF0aCIsICJjaGFsayJdCn0K
|