@datagrok-libraries/bio 5.4.1 → 5.5.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/index.d.ts +7 -3
- package/index.d.ts.map +1 -1
- package/index.js +5 -2
- package/index.ts +22 -3
- package/package.json +1 -1
- package/src/monomer-works.d.ts +6 -3
- package/src/monomer-works.d.ts.map +1 -1
- package/src/monomer-works.js +36 -3
- package/src/types/index.d.ts +15 -0
- package/src/types/index.d.ts.map +1 -1
- package/src/types/index.js +1 -1
- package/src/typings/index.d.ts +44 -0
- package/src/utils/macromolecule.d.ts +4 -0
- package/src/utils/macromolecule.d.ts.map +1 -1
- package/src/utils/macromolecule.js +1 -1
- package/src/utils/monomer-lib.d.ts +4 -0
- package/src/utils/monomer-lib.d.ts.map +1 -0
- package/src/utils/monomer-lib.js +21 -0
- package/src/utils/newick-helper.d.ts +5 -0
- package/src/utils/newick-helper.d.ts.map +1 -0
- package/src/utils/newick-helper.js +2 -0
- package/src/utils/to-atomic-level.d.ts +2 -0
- package/src/utils/to-atomic-level.d.ts.map +1 -1
- package/src/utils/to-atomic-level.js +5 -1
- package/src/utils/units-handler.d.ts +0 -4
- package/src/utils/units-handler.d.ts.map +1 -1
- package/src/utils/units-handler.js +1 -1
- package/src/viewers/phylocanvas-gl-viewer.d.ts +9 -0
- package/src/viewers/phylocanvas-gl-viewer.d.ts.map +1 -1
- package/src/viewers/phylocanvas-gl-viewer.js +1 -1
- package/src/viewers/web-logo-viewer.js +4 -5
|
@@ -1092,4 +1092,8 @@ export function getSymbolToCappedMolfileMap(monomersLibList) {
|
|
|
1092
1092
|
return symbolToCappedMolfileMap;
|
|
1093
1093
|
});
|
|
1094
1094
|
}
|
|
1095
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tYXRvbWljLWxldmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG8tYXRvbWljLWxldmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLHlGQUF5RjtBQUN6RixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFjLGdCQUFnQixFQUFzRCxNQUFNLFNBQVMsQ0FBQztBQUczRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxzQ0FBc0M7QUFDdEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM5QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFekIsd0RBQXdEO0FBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLHFCQUFxQixHQUFHLHNDQUFzQyxDQUFDO0FBQ3JFLE1BQU0sc0JBQXNCLEdBQUcsMkNBQTJDLENBQUM7QUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQy9DLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFDL0MsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFDMUMsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQy9DLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENB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RTtRQUNsQixLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7S0FDeEM7U0FBTTtRQUNMLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDeEQ7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxtRUFBbUU7QUFDbkUsU0FBUyxlQUFlLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDM0MsT0FBTyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsS0FBYTtJQUN0RCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDZixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FB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YW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7U3BsaXR0ZXJGdW5jLCBUQUdTLCBnZXRTcGxpdHRlcn0gZnJvbSAnLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHtIRUxNX0ZJRUxEUywgSEVMTV9DT1JFX0ZJRUxEUywgSEVMTV9QT0xZTUVSX1RZUEUsIEhFTE1fTU9OT01FUl9UWVBFLCBSR1JPVVBfRklFTERTfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7QUxQSEFCRVQsIE5PVEFUSU9OfSBmcm9tICcuL21hY3JvbW9sZWN1bGUnO1xuaW1wb3J0IHtVbml0c0hhbmRsZXJ9IGZyb20gJy4vdW5pdHMtaGFuZGxlcic7XG5pbXBvcnQge05vdGF0aW9uQ29udmVydGVyfSBmcm9tICcuL25vdGF0aW9uLWNvbnZlcnRlcic7XG5cbi8vIGNvbnN0YW50cyBmb3IgcGFyc2luZyBtb2xmaWxlIFYyMDAwXG5jb25zdCBWMktfUkdQX1NISUZUID0gODtcbmNvbnN0IFYyS19SR1BfTElORSA9ICdNICBSR1AnO1xuY29uc3QgVjJLX0FfTElORSA9ICdBICAnO1xuXG4vLyBjb25zdGFudHMgZm9yIHBhcnNpbmcvcmVjb25zdHJ1Y3Rpb24gb2YgbW9sZmlsZSBWMzAwMFxuY29uc3QgVjNLX0NPVU5UU19TSElGVCA9IDE0O1xuY29uc3QgVjNLX0lEWF9TSElGVCA9IDc7XG5jb25zdCBWM0tfSEVBREVSX0ZJUlNUX0xJTkUgPSAnXFxuRGF0YWdyb2sgbWFjcm9tb2xlY3VsZSBoYW5kbGVyXFxuXFxuJztcbmNvbnN0IFYzS19IRUFERVJfU0VDT05EX0xJTkUgPSAnICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgOTk5IFYzMDAwXFxuJztcbmNvbnN0IFYzS19CRUdJTl9DVEFCX0JMT0NLID0gJ00gIFYzMCBCRUdJTiBDVEFCXFxuJztcbmNvbnN0IFYzS19FTkRfQ1RBQl9CTE9DSyA9ICdNICBWMzAgRU5EIENUQUJcXG4nO1xuY29uc3QgVjNLX0JFR0lOX0NPVU5UU19MSU5FID0gJ00gIFYzMCBDT1VOVFMgJztcbmNvbnN0IFYzS19DT1VOVFNfTElORV9FTkRJTkcgPSAnIDAgMCAwXFxuJztcbmNvbnN0IFYzS19CRUdJTl9BVE9NX0JMT0NLID0gJ00gIFYzMCBCRUdJTiBBVE9NXFxuJztcbmNvbnN0IFYzS19FTkRfQVRPTV9CTE9DSyA9ICdNICBWMzAgRU5EIEFUT01cXG4nO1xuY29uc3QgVjNLX0JFR0lOX0JPTkRfQkxPQ0sgPSAnTSAgVjMwIEJFR0lOIEJPTkRcXG4nO1xuY29uc3QgVjNLX0VORF9CT05EX0JMT0NLID0gJ00gIFYzMCBFTkQgQk9ORFxcbic7XG5jb25zdCBWM0tfQk9ORF9DT05GSUcgPSAnIENGRz0nO1xuY29uc3QgVjNLX0JFR0lOX0RBVEFfTElORSA9ICdNICBWMzAgJztcbmNvbnN0IFYzS19FTkQgPSAnTSAgRU5EXFxuJztcblxuY29uc3QgUFJFQ0lTSU9OX0ZBQ1RPUiA9IDEwXzAwMDsgLy8gSEVMTUNvcmVMaWJyYXJ5IGhhcyA0IHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciBkZWNpbWFsIHBvaW50IGluIGF0b20gY29vcmRpbmF0ZXNcblxuLy8gc3ltYm9scyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbW9ub21lcnMgaW4gSEVMTSBsaWJyYXJ5XG5jb25zdCBERU9YWVJJQk9TRSA9ICdkJztcbmNvbnN0IFJJQk9TRSA9ICdyJztcbmNvbnN0IFBIT1NQSEFURSA9ICdwJztcblxuY29uc3QgT1hZR0VOID0gJ08nO1xuY29uc3QgSFlEUk9HRU4gPSAnSCc7XG5cbi8qIFN0b3JlcyBuZWNlc3NhcnkgZGF0YSBhYm91dCBhdG9tcyBvZiBhIG1vbm9tZXIgcGFyc2VkIGZyb20gTW9sZmlsZSAqL1xudHlwZSBBdG9tcyA9IHtcbiAgLyogZWxlbWVudCBzeW1ib2xzIGZvciBtb25vbWVyJ3MgYXRvbXMgKi9cbiAgYXRvbVR5cGVzOiBzdHJpbmdbXSxcbiAgLyogQ2FydGVzaWFuIGNvb3JkaWFudGVzIG9mIG1vbm9tZXIncyBhdG9tcyAqL1xuICB4OiBudW1iZXJbXSwgLy8gdG9kbzogY29udmVydCB0byBGbG9hdDMyXG4gIHk6IG51bWJlcltdLFxuICAvKiBWM0sgYXRvbSBsaW5lIG1heSBjb250YWluIGtleXdvcmQgYXJncyAqL1xuICBrd2FyZ3M6IHN0cmluZ1tdLFxufVxuXG4vKiBTdG9yZXMgbmVjZXNzYXJ5IGRhdGEgYWJvdXQgYm9uZHMgb2YgYSBtb25vbWVyIHBhcnNlZCBmcm9tIE1vbGZpbGUgKi9cbnR5cGUgQm9uZHMgPSB7XG4gIC8qIGJvbmQgdHlwZXMgZm9yIGFsbCBsaW5lcyBvZiBNb2xmaWxlIGJvbmQgYmxvY2sgKi9cbiAgYm9uZFR5cGVzOiBudW1iZXJbXSwgLy8gdG9kbzogY29udmVydCB0byBJbmQzMlxuICAvKiBJbmRpY2VzIG9mIGFsbCBhdG9tIHBhaXJzLCBpbmRleGluZyBzdGFydGluZyBmcm9tIDEgICovXG4gIGF0b21QYWlyczogbnVtYmVyW11bXSxcbiAgLyogSWYgYSBib25kIGhhcyBDRkc9Li4uIGtleXdvcmQgYXJndW1lbnQsIGl0IGlzIHBhcnNlZCBhbmQgc290cmVkIGFzIGFcbiAgICogdmFsdWUgb2YgdGhlIG1hcCwgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBib25kJ3MgaW5kZXggICovXG4gIGJvbmRDb25maWd1cmF0aW9uOiBNYXA8bnVtYmVyLCBudW1iZXI+LFxuICAvKiBWM0sgYm9uZCBsaW5lIG1heSBjb250YWluIGtleXdvcmQgYXJncyAqL1xuICBrd2FyZ3M6IE1hcDxudW1iZXIsIHN0cmluZz4sXG59XG5cbi8qIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9ub21lciBuZWNlc3NhcnkgdG8gcmVzdG9yZSB0aGUgcmVzdWx0aW5nXG4gKiBtb2xmaWxlICAqL1xudHlwZSBNb25vbWVyTWV0YWRhdGEgPSB7XG4gIC8qIHRlcm1pbmFsIG5vZGVzOiAwLXRoIGNvcnJlc3BvbmRzIHRvIHRoZSBcImxlZnRtb3N0XCIgb25lLCAxc3QsIHRvIHRoZSBcInJpZ2h0bW9zdFwiLFxuICAgKiBlLmcuIE4tdGVybWludXMgYW5kIEMtdGVybWludXMgaW4gcGVwdGlkZXMgKi9cbiAgdGVybWluYWxOb2RlczogbnVtYmVyW10sXG4gIC8qIHItZ3JvdXAgbm9kZXM6IDAtdGggY29ycmVzcG9uZHMgdG8gdGhlIFwibGVmdG1vc3RcIiBvbmUsIDFzdCwgdG8gdGhlIFwicmlnaHRtb3N0XCIgKi9cbiAgck5vZGVzOiBudW1iZXJbXSxcbiAgLyogc2hpZnQgZnJvbSB0aGUgb3JpZ2luIHRvIHRoZSBuZXh0IGJhY2tib25lLCBudWxsIGZvciBicmFuY2ggbW9ub21lcnMgKi9cbiAgYmFja2JvbmVTaGlmdDogbnVtYmVyW10gfCBudWxsLFxuICAvKiBzaGlmdCBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIG5leHQgYnJhbmNoLCBudWxsIGZvciBicmFuY2ggbW9ub21lcnMgKi9cbiAgYnJhbmNoU2hpZnQ6IG51bWJlcltdIHwgbnVsbFxufVxuXG50eXBlIE1vbEdyYXBoID0ge1xuICBhdG9tczogQXRvbXMsXG4gIGJvbmRzOiBCb25kcyxcbiAgbWV0YTogTW9ub21lck1ldGFkYXRhLFxufVxuXG4vKiBIZWxwZXIgc3RydWN0dXJlIHdyYXBwaW5nIGNvbW1vbiBhcmd1bWVudHMgdG8gc2V2ZXJhbCBmdW5jdGlvbnMgKi9cbnR5cGUgTG9vcFZhcmlhYmxlcyA9IHtcbiAgaTogbnVtYmVyLFxuICBub2RlU2hpZnQ6IG51bWJlcixcbiAgYm9uZFNoaWZ0OiBudW1iZXIsXG4gIGJhY2tib25lUG9zaXRpb25TaGlmdDogbnVtYmVyW10sXG4gIGJhY2tib25lQXR0YWNoTm9kZTogbnVtYmVyOyAvLyBub2RlIHRvIHdoaWNoIHRoZSBuZXh0IGJhY2tib25lIGlzIGF0dGFjaGVkXG4gIGJyYW5jaFBvc2l0aW9uU2hpZnQ6IG51bWJlcltdLFxuICBicmFuY2hBdHRhY2hOb2RlOiBudW1iZXIsXG4gIGZsaXBGYWN0b3I6IG51bWJlcixcbiAgLy8gdG9kbzogc2hvdWxkIHdlIGNvbnNpZGVyIHJlcHJlc2VudGF0aW9ucyBvdGhlciB0aGFuIHBsYW5hcj9cbn1cblxuLyogSGVscGVyIHN0cnVjdHVyZSB3cmFwcGluZyBjb21tb24gYXJndW1lbnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zICovXG50eXBlIExvb3BDb25zdGFudHMgPSB7XG4gIHN1Z2FyOiBNb2xHcmFwaCB8IG51bGwsXG4gIHBob3NwaGF0ZTogTW9sR3JhcGggfCBudWxsLFxuICBzZXFMZW5ndGg6IG51bWJlcixcbiAgYXRvbUNvdW50OiBudW1iZXIsXG4gIGJvbmRDb3VudDogbnVtYmVyLFxufVxuXG4vLyB0b2RvOiB2ZXJpZnkgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgcmV0dXJuIHR5cGVzXG5cbi8qIENvbnZlcnQgTWFjcm9tb2xlY3VsZSBjb2x1bW4gaW50byBNb2xlY3VsZSBjb2x1bW4gc3RvcmluZyBtb2xmaWxlIFYzMDAwIHdpdGggdGhlIGhlbHAgb2YgYSBtb25vbWVyIGxpYnJhcnkgICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RvQXRvbWljTGV2ZWwoXG4gIGRmOiBERy5EYXRhRnJhbWUsIG1hY3JvTW9sQ29sOiBERy5Db2x1bW48c3RyaW5nPiwgbW9ub21lcnNMaWJMaXN0OiBhbnlbXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChERy5GdW5jLmZpbmQoe3BhY2thZ2U6ICdDaGVtJywgbmFtZTogJ2dldFJkS2l0TW9kdWxlJ30pLmxlbmd0aCA9PT0gMCkge1xuICAgIGdyb2suc2hlbGwud2FybmluZygnVHJhbnNmb3JtYXRpb24gdG8gYXRvbWljIGxldmVsIHJlcXVpcmVzIHBhY2thZ2UgXCJDaGVtXCIgaW5zdGFsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChtYWNyb01vbENvbC5zZW1UeXBlICE9PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpIHtcbiAgICBncm9rLnNoZWxsLndhcm5pbmcoXG4gICAgICBgT25seSB0aGUgJHtERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEV9IGNvbHVtbnMgY2FuIGJlIGNvbnZlcnRlZCB0byBhdG9taWNcbiAgICAgIGxldmVsLCB0aGUgY2hvc2VuIGNvbHVtbiBoYXMgc2VtVHlwZSAke21hY3JvTW9sQ29sLnNlbVR5cGV9YFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY29udmVydCAnaGVsbScgdG8gJ3NlcGFyYXRvcicgdW5pdHNcbiAgaWYgKG1hY3JvTW9sQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSA9PT0gTk9UQVRJT04uSEVMTSkge1xuICAgIGNvbnN0IGNvbnZlcnRlciA9IG5ldyBOb3RhdGlvbkNvbnZlcnRlcihtYWNyb01vbENvbCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJy8nO1xuICAgIG1hY3JvTW9sQ29sID0gY29udmVydGVyLmNvbnZlcnQoTk9UQVRJT04uU0VQQVJBVE9SLCBzZXBhcmF0b3IpO1xuICB9XG5cbiAgY29uc3QgYWxwaGFiZXQgPSBtYWNyb01vbENvbC5nZXRUYWcoVEFHUy5hbHBoYWJldCk7XG5cbiAgLy8gZGV0ZXJtaW5lIHRoZSBwb2x5bWVyIHR5cGUgYWNjb3JkaW5nIHRvIEhFTE0gc3BlY2lmaWNhdGlvbnNcbiAgbGV0IHBvbHltZXJUeXBlO1xuICAvLyB0b2RvOiBhbiBleGNlcHRpb24gZnJvbSBkYXJ0IGNvbWVzIGJlZm9yZSB0aGlzIGNoZWNrIGlmIHRoZSBhbHBoYWJldCBpcyBVTlxuICBpZiAoYWxwaGFiZXQgPT09IEFMUEhBQkVULlBUKSB7XG4gICAgcG9seW1lclR5cGUgPSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFO1xuICB9IGVsc2UgaWYgKGFscGhhYmV0ID09PSBBTFBIQUJFVC5STkEgfHwgYWxwaGFiZXQgPT09IEFMUEhBQkVULkROQSkge1xuICAgIHBvbHltZXJUeXBlID0gSEVMTV9QT0xZTUVSX1RZUEUuUk5BO1xuICB9IGVsc2Uge1xuICAgIGdyb2suc2hlbGwud2FybmluZyhcbiAgICAgIGBPbmx5IFBULCBETkEgYW5kIFJOQSBhbHBoYWJldHMgYXJlIHN1cHBvcnRlZCwgd2hpbGUgdGhlIHNlbGVjdGVkIGNvbHVtbiBoYXMgJHtwb2x5bWVyVHlwZX0gYWxwaGFiZXRgXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb25vbWVyU2VxdWVuY2VzQXJyYXk6IHN0cmluZ1tdW10gPSBnZXRNb25vbWVyU2VxdWVuY2VzQXJyYXkobWFjcm9Nb2xDb2wpO1xuICAvLyB0b2RvOiBjb25zaWRlciBzZXBhcmF0ZWx5IGJhY2tib25lLCB0ZXJtaW5hbCwgYnJhbmNoIG1vbm9tZXIgdHlwZXNcbiAgY29uc3QgbW9ub21lcnNEaWN0ID0gYXdhaXQgZ2V0TW9ub21lcnNEaWN0KG1vbm9tZXJTZXF1ZW5jZXNBcnJheSwgbW9ub21lcnNMaWJMaXN0LCBwb2x5bWVyVHlwZSwgYWxwaGFiZXQpO1xuICBjb25zdCBjb2x1bW5MZW5ndGggPSBtYWNyb01vbENvbC5sZW5ndGg7XG4gIGNvbnN0IHJlY29uc3RydWN0ZWQ6IHN0cmluZ1tdID0gbmV3IEFycmF5KGNvbHVtbkxlbmd0aCk7XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGNvbHVtbkxlbmd0aDsgKytyb3cpIHtcbiAgICBjb25zdCBtb25vbWVyU2VxID0gbW9ub21lclNlcXVlbmNlc0FycmF5W3Jvd107XG4gICAgcmVjb25zdHJ1Y3RlZFtyb3ddID0gbW9ub21lclNlcVRvTW9sZmlsZShtb25vbWVyU2VxLCBtb25vbWVyc0RpY3QsIGFscGhhYmV0LCBwb2x5bWVyVHlwZSk7XG4gICAgY29uc29sZS5sb2cocmVjb25zdHJ1Y3RlZFtyb3ddKTtcbiAgfVxuXG4gIC8vIGV4Y2x1ZGUgbmFtZSBjb2xsaXNpb25zXG4gIGNvbnN0IG5hbWUgPSAnbW9sZmlsZSgnICsgbWFjcm9Nb2xDb2wubmFtZSArICcpJztcbiAgY29uc3QgbmV3Q29sTmFtZSA9IGRmLmNvbHVtbnMuZ2V0VW51c2VkTmFtZShuYW1lKTtcbiAgY29uc3QgbmV3Q29sID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKG5ld0NvbE5hbWUsIHJlY29uc3RydWN0ZWQpO1xuXG4gIG5ld0NvbC5zZW1UeXBlID0gREcuU0VNVFlQRS5NT0xFQ1VMRTtcbiAgbmV3Q29sLnNldFRhZyhERy5UQUdTLlVOSVRTLCBERy5VTklUUy5Nb2xlY3VsZS5NT0xCTE9DSyk7XG4gIGRmLmNvbHVtbnMuYWRkKG5ld0NvbCwgdHJ1ZSk7XG4gIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbn1cblxuLyogR2V0IGEgbWFwcGluZyBvZiBwZXB0aWRlIHN5bWJvbHMgdG8gSEVMTSBtb25vbWVyIGxpYnJhcnkgb2JqZWN0cyB3aXRoXG4gKiBzZWxlY3R0ZWQgZmllbGRzICAqL1xuZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkTW9ub21lckxpYihcbiAgbW9ub21lcnNMaWJMaXN0OiBhbnlbXSwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFLCBhbHBoYWJldDogQUxQSEFCRVRcbik6IE1hcDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBtb25vbWVyc0xpYkxpc3QuZm9yRWFjaChcbiAgICAoaXQpID0+IHtcbiAgICAgIGlmIChpdFtIRUxNX0ZJRUxEUy5QT0xZTUVSX1RZUEVdID09PSBwb2x5bWVyVHlwZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlJOQSAmJlxuICAgICAgICAgIChpdFtIRUxNX0ZJRUxEUy5NT05PTUVSX1RZUEVdID09PSBIRUxNX01PTk9NRVJfVFlQRS5CUkFOQ0ggfHxcbiAgICAgICAgICBhbHBoYWJldCA9PT0gQUxQSEFCRVQuRE5BICYmIGl0W0hFTE1fRklFTERTLlNZTUJPTF0gPT09IERFT1hZUklCT1NFIHx8XG4gICAgICAgICAgYWxwaGFiZXQgPT09IEFMUEhBQkVULlJOQSAmJiBpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdID09PSBSSUJPU0UgfHxcbiAgICAgICAgICBpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdID09PSBQSE9TUEhBVEUpIHx8XG4gICAgICAgICAgcG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlBFUFRJREUgJiZcbiAgICAgICAgICBpdFtIRUxNX0ZJRUxEUy5NT05PTUVSX1RZUEVdICE9PSBIRUxNX01PTk9NRVJfVFlQRS5CUkFOQ0hcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbW9ub21lck9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgIEhFTE1fQ09SRV9GSUVMRFMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIG1vbm9tZXJPYmplY3RbZmllbGRdID0gaXRbZmllbGRdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1hcC5zZXQoaXRbSEVMTV9GSUVMRFMuU1lNQk9MXSwgbW9ub21lck9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuLyogR2V0IGphZ2dlZCBhcnJheSBvZiBtb25vbWVyIHN5bWJvbHMgZm9yIHRoZSBkYXRhZnJhbWUgICovXG5mdW5jdGlvbiBnZXRNb25vbWVyU2VxdWVuY2VzQXJyYXkobWFjcm9Nb2xDb2w6IERHLkNvbHVtbjxzdHJpbmc+KTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGNvbHVtbkxlbmd0aCA9IG1hY3JvTW9sQ29sLmxlbmd0aDtcbiAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXVtdID0gbmV3IEFycmF5KGNvbHVtbkxlbmd0aCk7XG5cbiAgLy8gc3BsaXQgdGhlIHN0cmluZyBpbnRvIG1vbm9tZXJzXG4gIGNvbnN0IGNvbFVuaXRzID0gbWFjcm9Nb2xDb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICBjb25zdCBzZXBhcmF0b3IgPSBtYWNyb01vbENvbC5nZXRUYWcoVEFHUy5zZXBhcmF0b3IpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyKGNvbFVuaXRzLCBzZXBhcmF0b3IpO1xuXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGNvbHVtbkxlbmd0aDsgKytyb3cpIHtcbiAgICBjb25zdCBtYWNyb01vbGVjdWxlID0gbWFjcm9Nb2xDb2wuZ2V0KHJvdyk7XG4gICAgLy8gdG9kbzogaGFuZGxlIHRoZSBleGNlcHRpb24gY2FzZSB3aGVuIG1hY3JvTW9sZWN1bGUgaXMgbnVsbFxuICAgIHJlc3VsdFtyb3ddID0gbWFjcm9Nb2xlY3VsZSA/IHNwbGl0dGVyRnVuYyhtYWNyb01vbGVjdWxlKSA6IFtdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qIEdldCBhIG1hcHBpbmcgb2YgbW9ub21lciBzeW1ib2xzIHRvIE1vbEdyYXBoIG9iamVjdHMgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1vbm9tZXJzRGljdChcbiAgbW9ub21lclNlcXVlbmNlc0FycmF5OiBzdHJpbmdbXVtdLCBtb25vbWVyc0xpYkxpc3Q6IGFueVtdLCBwb2x5bWVyVHlwZTogSEVMTV9QT0xZTUVSX1RZUEUsIGFscGhhYmV0OiBBTFBIQUJFVFxuKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBNb2xHcmFwaD4+IHtcbiAgLy8gdG9kbzogZXhjZXB0aW9uIC0gbm8gZ2Fwcywgbm8gZW1wdHkgc3RyaW5nIG1vbm9tZXJzXG4gIGNvbnN0IGZvcm1hdHRlZE1vbm9tZXJMaWIgPSBnZXRGb3JtYXR0ZWRNb25vbWVyTGliKG1vbm9tZXJzTGliTGlzdCwgcG9seW1lclR5cGUsIGFscGhhYmV0KTtcbiAgY29uc3QgbW9ub21lcnNEaWN0ID0gbmV3IE1hcDxzdHJpbmcsIE1vbEdyYXBoPigpO1xuXG4gIGNvbnN0IG1vZHVsZVJka2l0ID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuY2FsbCgnQ2hlbTpnZXRSZEtpdE1vZHVsZScpO1xuXG4gIC8vIGFkZCBkZW94eXJpYm9zZS9yaWJvc2UgYW5kIHBob3NwaGF0ZSBmb3IgbnVjbGVvdGlkZSBzZXF1ZW5jZXNcbiAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5STkEpIHtcbiAgICBjb25zdCBzeW1ib2xzID0gKGFscGhhYmV0ID09PSBBTFBIQUJFVC5STkEpID9cbiAgICAgIFtSSUJPU0UsIFBIT1NQSEFURV0gOiBbREVPWFlSSUJPU0UsIFBIT1NQSEFURV07XG4gICAgZm9yIChjb25zdCBzeW0gb2Ygc3ltYm9scylcbiAgICAgIHVwZGF0ZU1vbm9tZXJzRGljdChtb25vbWVyc0RpY3QsIHN5bSwgZm9ybWF0dGVkTW9ub21lckxpYiwgbW9kdWxlUmRraXQsIHBvbHltZXJUeXBlKTtcbiAgfVxuXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IG1vbm9tZXJTZXF1ZW5jZXNBcnJheS5sZW5ndGg7ICsrcm93KSB7XG4gICAgY29uc3QgbW9ub21lclNlcTogc3RyaW5nW10gPSBtb25vbWVyU2VxdWVuY2VzQXJyYXlbcm93XTtcbiAgICBmb3IgKGNvbnN0IHN5bSBvZiBtb25vbWVyU2VxKVxuICAgICAgdXBkYXRlTW9ub21lcnNEaWN0KG1vbm9tZXJzRGljdCwgc3ltLCBmb3JtYXR0ZWRNb25vbWVyTGliLCBtb2R1bGVSZGtpdCwgcG9seW1lclR5cGUpO1xuICB9XG4gIC8vIGNvbnNvbGUubG9nKG1vbm9tZXJzRGljdCk7XG5cbiAgcmV0dXJuIG1vbm9tZXJzRGljdDtcbn1cblxuLyogQWRkcyBNb2xHcmFwaCBvYmplY3QgZm9yICdzeW0nIHRvIHRoZSBtb25vbWVycyBkaWN0IHdoZW4gbmVjZXNzYXJ5ICAqL1xuZnVuY3Rpb24gdXBkYXRlTW9ub21lcnNEaWN0KFxuICBtb25vbWVyc0RpY3Q6IE1hcDxzdHJpbmcsIE1vbEdyYXBoPiwgc3ltOiBzdHJpbmcsXG4gIGZvcm1hdHRlZE1vbm9tZXJMaWI6IE1hcDxzdHJpbmcsIGFueT4sIG1vZHVsZVJka2l0OiBhbnksIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRVxuKTogdm9pZCB7XG4gIGlmICghbW9ub21lcnNEaWN0LmhhcyhzeW0pKSB7XG4gICAgY29uc3QgbW9ub21lckRhdGE6IE1vbEdyYXBoIHwgbnVsbCA9IGdldE1vbEdyYXBoKHN5bSwgZm9ybWF0dGVkTW9ub21lckxpYiwgbW9kdWxlUmRraXQsIHBvbHltZXJUeXBlKTtcbiAgICBpZiAobW9ub21lckRhdGEpXG4gICAgICBtb25vbWVyc0RpY3Quc2V0KHN5bSwgbW9ub21lckRhdGEpO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9ub21lciB3aXRoIHN5bWJvbCAnJHtzeW19JyBpcyBhYnNlbnQgdGhlIG1vbm9tZXIgbGlicmFyeWApO1xuICAgIC8vIHRvZG86IGhhbmRsZSBleGNlcHRpb25cbiAgfVxufVxuXG4vKiBDb25zdHJ1Y3QgdGhlIE1vbEdyYXBoIG9iamVjdCBmb3Igc3BlY2lmaWVkIG1vbm9tZXJTeW1ib2w6IHRoZSBhc3NvY2lhdGVkXG4gKiBncmFwaCBpcyBhZGp1c3RlZCBpbiBYWSBwbGFuZSBhbmQgZmlsbGVkIHdpdGggZGVmYXVsdCBSLWdyb3VwcyAqL1xuZnVuY3Rpb24gZ2V0TW9sR3JhcGgoXG4gIG1vbm9tZXJTeW1ib2w6IHN0cmluZywgZm9ybWF0dGVkTW9ub21lckxpYjogTWFwPHN0cmluZywgYW55PixcbiAgbW9kdWxlUmRraXQ6IGFueSwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFIC8vIHRvZG86IHNwZWNpZnkgdHlwZSBmb3IgbW9kdWxlUmRraXRcbik6IE1vbEdyYXBoIHwgbnVsbCB7XG4gIGlmICghZm9ybWF0dGVkTW9ub21lckxpYi5oYXMobW9ub21lclN5bWJvbCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsaWJPYmplY3QgPSBmb3JtYXR0ZWRNb25vbWVyTGliLmdldChtb25vbWVyU3ltYm9sKTtcbiAgICBjb25zdCBjYXBHcm91cHMgPSBwYXJzZUNhcEdyb3VwcyhsaWJPYmplY3RbSEVMTV9GSUVMRFMuUkdST1VQU10pO1xuICAgIGNvbnN0IGNhcEdyb3VwSWR4TWFwID0gcGFyc2VDYXBHcm91cElkeE1hcChsaWJPYmplY3RbSEVMTV9GSUVMRFMuTU9MRklMRV0pO1xuICAgIGNvbnN0IG1vbGZpbGVWM0sgPSBjb252ZXJ0TW9sZmlsZVRvVjNLKHJlbW92ZVJHcm91cExpbmVzKGxpYk9iamVjdFtIRUxNX0ZJRUxEUy5NT0xGSUxFXSksIG1vZHVsZVJka2l0KTtcbiAgICBjb25zdCBjb3VudHMgPSBwYXJzZUF0b21BbmRCb25kQ291bnRzKG1vbGZpbGVWM0spO1xuXG4gICAgY29uc3QgYXRvbXMgPSBwYXJzZUF0b21CbG9jayhtb2xmaWxlVjNLLCBjb3VudHMuYXRvbUNvdW50KTtcbiAgICBjb25zdCBib25kcyA9IHBhcnNlQm9uZEJsb2NrKG1vbGZpbGVWM0ssIGNvdW50cy5ib25kQ291bnQpO1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNb25vbWVyTWV0YWRhdGEoYXRvbXMsIGJvbmRzLCBjYXBHcm91cHMsIGNhcEdyb3VwSWR4TWFwKTtcblxuICAgIGNvbnN0IG1vbm9tZXJHcmFwaDogTW9sR3JhcGggPSB7YXRvbXM6IGF0b21zLCBib25kczogYm9uZHMsIG1ldGE6IG1ldGF9O1xuXG4gICAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFKSB7XG4gICAgICBhZGp1c3RQZXB0aWRlTW9ub21lckdyYXBoKG1vbm9tZXJHcmFwaCk7XG4gICAgfSBlbHNlIHsgLy8gbnVjbGVvdGlkZXNcbiAgICAgIGlmIChtb25vbWVyU3ltYm9sID09PSBSSUJPU0UgfHwgbW9ub21lclN5bWJvbCA9PT0gREVPWFlSSUJPU0UpXG4gICAgICAgIGFkanVzdFN1Z2FyTW9ub21lckdyYXBoKG1vbm9tZXJHcmFwaCk7XG4gICAgICBlbHNlIGlmIChtb25vbWVyU3ltYm9sID09PSBQSE9TUEhBVEUpXG4gICAgICAgIGFkanVzdFBob3NwaGF0ZU1vbm9tZXJHcmFwaChtb25vbWVyR3JhcGgpO1xuICAgICAgZWxzZVxuICAgICAgICBhZGp1c3RCYXNlTW9ub21lckdyYXBoKG1vbm9tZXJHcmFwaCk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRoZSAncmlnaHRtb3N0JyBjaGFpbi1leHRlbmRpbmcgci1ncm91cCBub2RlIGluIHRoZSBiYWNrYm9uZVxuICAgIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERSkge1xuICAgICAgc2V0U2hpZnRzKG1vbm9tZXJHcmFwaCwgcG9seW1lclR5cGUpO1xuICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzFdKTtcbiAgICB9IGVsc2UgeyAvLyBudWNsZW90aWRlc1xuICAgICAgaWYgKG1vbm9tZXJTeW1ib2wgPT09IFJJQk9TRSB8fCBtb25vbWVyU3ltYm9sID09PSBERU9YWVJJQk9TRSkge1xuICAgICAgICAvLyByZW1vdmUgUjJcbiAgICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzFdKTtcbiAgICAgICAgLy8gc2V0IHRlcm1pbmFsTm9kZTIgKG94eWdlbikgYXMgbmV3IFIyXG4gICAgICAgIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1sxXSA9IG1vbm9tZXJHcmFwaC5tZXRhLnRlcm1pbmFsTm9kZXNbMV07XG4gICAgICAgIHNldFRlcm1pbmFsTm9kZXMobW9ub21lckdyYXBoLmJvbmRzLCBtb25vbWVyR3JhcGgubWV0YSk7IC8vIHNldCB0ZXJtaW5hbCBub2RlcyBhbmV3XG4gICAgICAgIHNldFNoaWZ0cyhtb25vbWVyR3JhcGgsIHBvbHltZXJUeXBlKTtcbiAgICAgICAgLy8gcmVtb3ZlICduZXcnIFIyIChveHlnZW4pXG4gICAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1sxXSk7XG4gICAgICAgIC8vIHJlbW92ZSBSMVxuICAgICAgICByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoLCBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMF0pO1xuICAgICAgICAvLyByZW1vdmUgdGhlIGJyYW5jaGluZyByLWdyb3VwXG4gICAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1syXSk7XG4gICAgICB9IGVsc2UgaWYgKG1vbm9tZXJTeW1ib2wgPT09IFBIT1NQSEFURSkge1xuICAgICAgICBtb25vbWVyR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdID0gbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzBdO1xuICAgICAgICBzaGlmdENvb3JkaW5hdGVzKFxuICAgICAgICAgIG1vbm9tZXJHcmFwaCxcbiAgICAgICAgICAtbW9ub21lckdyYXBoLmF0b21zLnhbbW9ub21lckdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdLFxuICAgICAgICAgIC1tb25vbWVyR3JhcGguYXRvbXMueVttb25vbWVyR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMV1cbiAgICAgICAgKTtcbiAgICAgICAgc2V0U2hpZnRzKG1vbm9tZXJHcmFwaCwgcG9seW1lclR5cGUpO1xuICAgICAgICByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoLCBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMV0pO1xuICAgICAgfSBlbHNlIHsgLy8gbnVjbGVvYmFzZXNcbiAgICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlSHlkcm9nZW4obW9ub21lckdyYXBoKTtcblxuICAgIHJldHVybiBtb25vbWVyR3JhcGg7XG4gIH1cbn1cblxuLy8gdG9kbzogZG9jXG5mdW5jdGlvbiBnZXRNb25vbWVyTWV0YWRhdGEoXG4gIGF0b21zOiBBdG9tcywgYm9uZHM6IEJvbmRzLCBjYXBHcm91cHM6IHN0cmluZ1tdLCBjYXBHcm91cElkeE1hcDogTWFwPG51bWJlciwgbnVtYmVyPlxuKTogTW9ub21lck1ldGFkYXRhIHtcbiAgY29uc3QgbWV0YTogTW9ub21lck1ldGFkYXRhID0ge1xuICAgIGJhY2tib25lU2hpZnQ6IG51bGwsXG4gICAgYnJhbmNoU2hpZnQ6IG51bGwsXG4gICAgdGVybWluYWxOb2RlczogW10sXG4gICAgck5vZGVzOiBbXSxcbiAgfTtcblxuICBzdWJzdGl0dXRlQ2FwR3JvdXBzKGF0b21zLCBjYXBHcm91cHMsIGNhcEdyb3VwSWR4TWFwKTtcbiAgc2V0Uk5vZGVzKGNhcEdyb3VwSWR4TWFwLCBtZXRhKTtcbiAgc2V0VGVybWluYWxOb2Rlcyhib25kcywgbWV0YSk7XG4gIHJldHVybiBtZXRhO1xufVxuXG4vKiBQYXJzZSBlbGVtZW50IHN5bWJvbHMgZm9yIFItZ3JvdXBzIGZyb20gdGhlIEhFTE0gbW9ub21lciBsaWJyYXJ5IFItZ3JvdXBzXG4gKiBmaWVsZCAgKi9cbmZ1bmN0aW9uIHBhcnNlQ2FwR3JvdXBzKHJHcm91cE9iakxpc3Q6IGFueVtdKTogc3RyaW5nW10ge1xuICAvLyBzcGVjaWZpY2FsbHkgZm9yIEhFTE1Db3JlTGlicmFyeVxuICAvLyBjb25zaWRlcmVkIG9ubHkgbW9ub2F0b21pYyByZ3JvdXBzXG4gIC8vIHN1cHBvc2luZyB0aGF0IGVsZW1lbnRzIGluIHJHcm91cE9iakxpc3QgYXJlIHNvcnRlZCB3LnIudC4gdGhlIHJncm91cHMgaWR4XG4gIC8vIHRvZG86IHBvc3NpYmxlIGdlbmVyYWxpemF0aW9uc1xuICBjb25zdCBjYXBHcm91cHNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvYmogb2Ygckdyb3VwT2JqTGlzdCkge1xuICAgIGxldCBjYXBHcm91cDogc3RyaW5nID0gb2JqW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX1NNSUxFU107XG5cbiAgICAvLyBpbiBzb21lIGNhc2VzIHRoZSBzbWlsZXMgZmllbGQgaXMgd3JpdHRlbiB3aXRoIHVwcGVyY2FzZVxuICAgIGlmICghY2FwR3JvdXApXG4gICAgICBjYXBHcm91cCA9IG9ialtSR1JPVVBfRklFTERTLkNBUF9HUk9VUF9TTUlMRVNfVVBQRVJDQVNFXTtcbiAgICAvLyB0b2RvOiB2ZXJpZnkgdGhhdCB0aGVyZSBhcmUgbm8gbXVsdGktZWxlbWVudCBjYXAgZ3JvdXBzLCBvciBjb25zaWRlciBob3cgdG9cbiAgICAvLyB0cmFuc2Zvcm0gdGhlbVxuICAgIGNhcEdyb3VwID0gY2FwR3JvdXAucmVwbGFjZSgvKFxcW3xcXF18XFwqfDp8XFxkKS9nLCAnJyk7XG4gICAgaWYgKGNhcEdyb3VwLmxlbmd0aCA+IDEpIC8vIHRvZG86IGNoZWNrIGlmIHN1Y2ggY2FzZXMgYXJlIHBvc3NpYmxlLCByZW1vdmUgaWYgbm90XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlZmF1bHQgY2FwIGdyb3VwIGhhcyBsZW5ndGggbW9yZSB0aGFuIG9uZScpO1xuICAgIGNhcEdyb3Vwc0FycmF5LnB1c2goY2FwR3JvdXApO1xuICB9XG4gIHJldHVybiBjYXBHcm91cHNBcnJheTtcbn1cblxuLyogU3Vic3RpdHV0ZSB0aGUgY2FwIGdyb3VwIGVsZW1lbnRzIGluc3RlYWQgb2YgUiMgKi9cbmZ1bmN0aW9uIHN1YnN0aXR1dGVDYXBHcm91cHMoXG4gIGF0b21zOiBBdG9tcywgY2FwR3JvdXBzOiBzdHJpbmdbXSwgY2FwR3JvdXBJZHhNYXA6IE1hcDxudW1iZXIsIG51bWJlcj5cbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtub2RlLCBjYXBJZHhdIG9mIGNhcEdyb3VwSWR4TWFwKVxuICAgIGF0b21zLmF0b21UeXBlc1tub2RlIC0gMV0gPSBjYXBHcm91cHNbY2FwSWR4IC0gMV07IC8vIC0xIGJlY2F1c2UgbW9sZmlsZSBpbmRleGluZyBzdGFydHMgZnJvbSAxXG59XG5cbi8vdG9kbzogZG9jXG5mdW5jdGlvbiBzZXRSTm9kZXMoY2FwR3JvdXBJZHhNYXA6IE1hcDxudW1iZXIsIG51bWJlcj4sIG1ldGE6IE1vbm9tZXJNZXRhZGF0YSk6IHZvaWQge1xuICBtZXRhLnJOb2RlcyA9IEFycmF5LmZyb20oY2FwR3JvdXBJZHhNYXAua2V5cygpKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhLnJOb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAoY29uc3QgaiBvZiBbMSwgMl0pIHsgLy8gMSBhbmQgMiBieSBkZWYuIGNvcnJlc3BvbmQgdG8gJ2xlZnQvcmlnaHRtb3N0JyByLW5vZGVzXG4gICAgICAvLyBzd2FwIHRoZSB2YWx1ZXMgaWYgbmVjZXNzYXJ5LCBzbyB0aGF0IHRoZSBcImxlZnRtb3N0XCIgci1ub2RlIGlzIGF0IDAsXG4gICAgICAvLyBhbmQgdGhlICdyaWdodG1vc3QnLCBhdCAxXG4gICAgICBpZiAoY2FwR3JvdXBJZHhNYXAuZ2V0KG1ldGEuck5vZGVzW2ldKSA9PT0gaikge1xuICAgICAgICBjb25zdCB0bXAgPSBtZXRhLnJOb2Rlc1tqIC0gMV07XG4gICAgICAgIG1ldGEuck5vZGVzW2ogLSAxXSA9IG1ldGEuck5vZGVzW2ldO1xuICAgICAgICBtZXRhLnJOb2Rlc1tpXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy90b2RvOiBkb2NcbmZ1bmN0aW9uIHNldFRlcm1pbmFsTm9kZXMoYm9uZHM6IEJvbmRzLCBtZXRhOiBNb25vbWVyTWV0YWRhdGEpOiB2b2lkIHtcbiAgY29uc3Qgck5vZGVzID0gbWV0YS5yTm9kZXM7XG4gIG1ldGEudGVybWluYWxOb2RlcyA9IG5ldyBBcnJheTxudW1iZXI+KHJOb2Rlcy5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IHRlcm1pbmFsTm9kZXMgPSBtZXRhLnRlcm1pbmFsTm9kZXM7XG4gIGNvbnN0IGF0b21QYWlycyA9IGJvbmRzLmF0b21QYWlycztcbiAgbGV0IGkgPSAwO1xuICBsZXQgaiA9IDA7XG4gIHdoaWxlICgoaSA8IGF0b21QYWlycy5sZW5ndGgpICYmIGogPCB0ZXJtaW5hbE5vZGVzLmxlbmd0aCkge1xuICAgIC8vIHJOb2RlcyBhcnJheSBpcyBzb3J0ZWQgc28gdGhhdCBpdHMgMHRoIGFuZCAxc3QgZWxlbWVudHMgKGlmIGJvdGhcbiAgICAvLyBwcmVzZW50KSBjb3JyZXNwb25kIHRvIHRoZSBjaGFpbiBleHRlbmRpbmcgKGkuZS4gbm90IGJyYW5jaGluZykgci1ncm91cHNcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRlcm1pbmFsTm9kZXMubGVuZ3RoOyArK2spIHtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgMjsgKytsKSB7XG4gICAgICAgIGlmIChhdG9tUGFpcnNbaV1bbF0gPT09IHJOb2Rlc1trXSkge1xuICAgICAgICAgIHRlcm1pbmFsTm9kZXNba10gPSBhdG9tUGFpcnNbaV1bKGwgKyAxKSUyXTtcbiAgICAgICAgICBpZiAock5vZGVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICB9XG4gICAgICAgICAgKytqO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICsraTtcbiAgfVxufVxuXG4vL3RvZG86IGRvY1xuZnVuY3Rpb24gc2V0U2hpZnRzKG1vbEdyYXBoOiBNb2xHcmFwaCwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFKTogdm9pZCB7XG4gIGlmIChtb2xHcmFwaC5tZXRhLnJOb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgbW9sR3JhcGgubWV0YS5iYWNrYm9uZVNoaWZ0ID0gW1xuICAgICAga2VlcFByZWNpc2lvbihcbiAgICAgICAgbW9sR3JhcGguYXRvbXMueFttb2xHcmFwaC5tZXRhLnJOb2Rlc1sxXSAtIDFdIC1cbiAgICAgICAgbW9sR3JhcGguYXRvbXMueFttb2xHcmFwaC5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxXVxuICAgICAgKSxcbiAgICAgIGtlZXBQcmVjaXNpb24oXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnlbbW9sR3JhcGgubWV0YS5yTm9kZXNbMV0gLSAxXSAtXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnlbbW9sR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMV1cbiAgICAgICksXG4gICAgXTtcbiAgfVxuXG4gIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUk5BICYmIG1vbEdyYXBoLm1ldGEuck5vZGVzLmxlbmd0aCA+IDIpIHtcbiAgICBtb2xHcmFwaC5tZXRhLmJyYW5jaFNoaWZ0ID0gW1xuICAgICAga2VlcFByZWNpc2lvbihcbiAgICAgICAgbW9sR3JhcGguYXRvbXMueFttb2xHcmFwaC5tZXRhLnJOb2Rlc1syXSAtIDFdIC1cbiAgICAgICAgbW9sR3JhcGguYXRvbXMueFttb2xHcmFwaC5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxXVxuICAgICAgKSxcbiAgICAgIGtlZXBQcmVjaXNpb24oXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnlbbW9sR3JhcGgubWV0YS5yTm9kZXNbMl0gLSAxXSAtXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnlbbW9sR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMV1cbiAgICAgICksXG4gICAgXTtcbiAgfVxufVxuXG4vKiBIZWxwZXIgZnVuY3Rpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIGEgY29ycmVjdCBWMzAwMCBtb2xmaWxlIG91dCBvZiBWMjAwMCB3aXRoXG4gKiBzcGVjaWZpZWQgci1ncm91cHMqL1xuZnVuY3Rpb24gcmVtb3ZlUkdyb3VwTGluZXMobW9sZmlsZVYySzogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19BX0xJTkUsIDApO1xuICBpZiAoYmVnaW4gPT09IC0xKVxuICAgIGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19SR1BfTElORSk7XG4gIGNvbnN0IGVuZCA9IG1vbGZpbGVWMksuaW5kZXhPZihWM0tfRU5ELCBiZWdpbik7XG4gIHJldHVybiBtb2xmaWxlVjJLLnN1YnN0cmluZygwLCBiZWdpbikgKyBtb2xmaWxlVjJLLnN1YnN0cmluZyhlbmQpO1xufVxuXG4vKiBWMjAwMCB0byBWMzAwMCBjb252ZXJ0ZXIgICovXG5mdW5jdGlvbiBjb252ZXJ0TW9sZmlsZVRvVjNLKG1vbGZpbGVWMks6IHN0cmluZywgbW9kdWxlUmRraXQ6IGFueSk6IHN0cmluZyB7XG4gIC8vIHRvZG86IHR5cGUgb2YgbW9kdWxlUmRraXRcbiAgLy8gdG9kbzogY29uc2lkZXIgdGhlIHVzZSBvZiBzdGFuZGFyZCBDaGVtIGNvbnZlcnRlciAocmVsaWVzIG9uIGNyZWF0aW9uIG9mIG1vZHVsZVJka2l0IG9uIGVhY2ggaXRlcmF0aW9uLCB0aG91Z2gpXG4gIGNvbnN0IG1vbE9iaiA9IG1vZHVsZVJka2l0LmdldF9tb2wobW9sZmlsZVYySyk7XG4gIGNvbnN0IG1vbGZpbGVWM0sgPSBtb2xPYmouZ2V0X3YzS21vbGJsb2NrKCk7XG4gIG1vbE9iai5kZWxldGUoKTtcbiAgcmV0dXJuIG1vbGZpbGVWM0s7XG59XG5cbi8qIFBhcnNlIFYzMDAwIGJvbmQgYmxvY2sgYW5kIGNvbnN0cnVjdCB0aGUgQm9uZHMgb2JqZWN0ICovXG5mdW5jdGlvbiBwYXJzZUJvbmRCbG9jayhtb2xmaWxlVjNLOiBzdHJpbmcsIGJvbmRDb3VudDogbnVtYmVyKTogQm9uZHMge1xuICAvLyB0b2RvOiBjb25zaWRlciB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIG5vIHNpbXBsZSBsZWZ0bW9zdC9yaWdodG1vc3QgY2hvaWNlXG4gIC8vIHRvZG86IGNvbnNpZGVyIHRoZSBjYXNlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGNvbnNlcXVlbnQgTSAgUkdQIGxpbmVzLFxuICAvLyBsaWtlIGluIEhFTE1Db3JlTGlicmFyeSBudWNsZW90aWRlc1xuXG4gIGNvbnN0IGJvbmRUeXBlczogbnVtYmVyW10gPSBuZXcgQXJyYXkoYm9uZENvdW50KTtcbiAgY29uc3QgYXRvbVBhaXJzOiBudW1iZXJbXVtdID0gbmV3IEFycmF5KGJvbmRDb3VudCk7XG4gIGNvbnN0IGJvbmRDb25maWd1cmF0aW9uID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgY29uc3Qga3dhcmdzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz47XG5cbiAgbGV0IGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKFYzS19CRUdJTl9CT05EX0JMT0NLKTtcbiAgYmVnaW4gPSBtb2xmaWxlVjNLLmluZGV4T2YoJ1xcbicsIGJlZ2luKTtcbiAgbGV0IGVuZCA9IGJlZ2luO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJvbmRDb3VudDsgKytpKSB7XG4gICAgLy8gcGFyc2UgYm9uZCB0eXBlIGFuZCBhdG9tIHBhaXJcbiAgICBjb25zdCBwYXJzZWRWYWx1ZXM6IG51bWJlcltdID0gbmV3IEFycmF5KDMpO1xuICAgIGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKFYzS19CRUdJTl9EQVRBX0xJTkUsIGVuZCkgKyBWM0tfSURYX1NISUZUO1xuICAgIGVuZCA9IG1vbGZpbGVWM0suaW5kZXhPZignICcsIGJlZ2luKTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IDM7ICsraykge1xuICAgICAgYmVnaW4gPSBlbmQgKyAxO1xuICAgICAgZW5kID0gTWF0aC5taW4obW9sZmlsZVYzSy5pbmRleE9mKCdcXG4nLCBiZWdpbiksIG1vbGZpbGVWM0suaW5kZXhPZignICcsIGJlZ2luKSk7XG4gICAgICBwYXJzZWRWYWx1ZXNba10gPSBwYXJzZUludChtb2xmaWxlVjNLLnNsaWNlKGJlZ2luLCBlbmQpKTtcbiAgICB9XG4gICAgYm9uZFR5cGVzW2ldID0gcGFyc2VkVmFsdWVzWzBdO1xuICAgIGF0b21QYWlyc1tpXSA9IHBhcnNlZFZhbHVlcy5zbGljZSgxKTtcblxuICAgIC8vIHBhcnNlIGtleXdvcmQgYXJndW1lbnRzXG4gICAgY29uc3QgZW5kT2ZMaW5lID0gbW9sZmlsZVYzSy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gICAgbGV0IGxpbmVSZW1haW5kZXIgPSBtb2xmaWxlVjNLLnNsaWNlKGVuZCwgZW5kT2ZMaW5lKTtcbiAgICBsZXQgYmVnaW5DZmcgPSBsaW5lUmVtYWluZGVyLmluZGV4T2YoVjNLX0JPTkRfQ09ORklHKTtcbiAgICBpZiAoYmVnaW5DZmcgIT09IC0xKSB7XG4gICAgICBiZWdpbkNmZyA9IGxpbmVSZW1haW5kZXIuaW5kZXhPZignPScsIGJlZ2luQ2ZnKSArIDE7XG4gICAgICBsZXQgZW5kQ2ZnID0gbGluZVJlbWFpbmRlci5pbmRleE9mKCcgJywgYmVnaW5DZmcpO1xuICAgICAgaWYgKGVuZENmZyA9PT0gLTEpXG4gICAgICAgIGVuZENmZyA9IGxpbmVSZW1haW5kZXIubGVuZ3RoO1xuICAgICAgY29uc3QgYm9uZENvbmZpZyA9IHBhcnNlSW50KGxpbmVSZW1haW5kZXIuc2xpY2UoYmVnaW5DZmcsIGVuZENmZykpO1xuICAgICAgYm9uZENvbmZpZ3VyYXRpb24uc2V0KGksIGJvbmRDb25maWcpO1xuICAgICAgY29uc3QgcmVtb3ZlZFN1YnN0cmluZyA9IFYzS19CT05EX0NPTkZJRyArIGJvbmRDb25maWcudG9TdHJpbmcoKTtcbiAgICAgIGxpbmVSZW1haW5kZXIgPSBsaW5lUmVtYWluZGVyLnJlcGxhY2UocmVtb3ZlZFN1YnN0cmluZywgJycpO1xuICAgIH1cbiAgICBpZiAoIWxpbmVSZW1haW5kZXIpXG4gICAgICBrd2FyZ3Muc2V0KGksIGxpbmVSZW1haW5kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBib25kVHlwZXM6IGJvbmRUeXBlcyxcbiAgICBhdG9tUGFpcnM6IGF0b21QYWlycyxcbiAgICBib25kQ29uZmlndXJhdGlvbjogYm9uZENvbmZpZ3VyYXRpb24sXG4gICAga3dhcmdzOiBrd2FyZ3MsXG4gIH07XG59XG5cbi8qIENvbnN0cnVjdHMgbWFwcGluZyBvZiByLWdyb3VwIG5vZGVzIHRvIGRlZmF1bHQgY2FwR3JvdXBzLCBhbGwgbnVtZXJhdGlvbiBzdGFydGluZyBmcm9tIDEuXG4gKiBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9wdWJzLmFjcy5vcmcvZG9pLzEwLjEwMjEvY2kzMDAxOTI1LCBSMSBhbmQgUjIgYXJlIHRoZSBjaGFpbiBleHRlbmRpbmcgYXR0YWNobWVudCBwb2ludHMsXG4gKiB3aGlsZSBSMyBpcyB0aGUgYnJhbmNoaW5nIGF0dGFjaG1lbnQgcG9pbnQuICovXG5mdW5jdGlvbiBwYXJzZUNhcEdyb3VwSWR4TWFwKG1vbGZpbGVWMks6IHN0cmluZyk6IE1hcDxudW1iZXIsIG51bWJlcj4ge1xuICBjb25zdCBjYXBHcm91cElkeE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG5cbiAgLy8gcGFyc2UgQS1saW5lcyAoUk5BKVxuICBsZXQgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX0FfTElORSwgMCk7XG4gIGxldCBlbmQgPSBiZWdpbjtcbiAgd2hpbGUgKGJlZ2luICE9PSAtMSkge1xuICAgIC8vIHBhcnNlIHRoZSByTm9kZSB0byB3aGljaCB0aGUgY2FwIGdyb3VwIGlzIGF0dGFjaGVkXG4gICAgZW5kID0gbW9sZmlsZVYySy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gICAgY29uc3Qgck5vZGUgPSBwYXJzZUludChtb2xmaWxlVjJLLnN1YnN0cmluZyhiZWdpbiwgZW5kKS5yZXBsYWNlKC9eQVxccysvLCAnJykpO1xuXG4gICAgLy8gcGFyc2UgdGhlIGNhcEdyb3VwIGluZGV4XG4gICAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoJ1InLCBlbmQpO1xuICAgIGVuZCA9IG1vbGZpbGVWMksuaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICAgIGNvbnN0IGNhcEdyb3VwID0gcGFyc2VJbnQobW9sZmlsZVYySy5zdWJzdHJpbmcoYmVnaW4sIGVuZCkucmVwbGFjZSgvXlIvLCAnJykpO1xuICAgIGNhcEdyb3VwSWR4TWFwLnNldChyTm9kZSwgY2FwR3JvdXApO1xuXG4gICAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX0FfTElORSwgZW5kKTtcbiAgfVxuXG4gIC8vIHBhcnNlIFJHUCBsaW5lcyAobWF5IGJlIG1vcmUgdGhhbiBvbmUgaW4gUk5BIG1vbm9tZXJzKVxuICBiZWdpbiA9IG1vbGZpbGVWMksuaW5kZXhPZihWMktfUkdQX0xJTkUsIDApO1xuICBlbmQgPSBtb2xmaWxlVjJLLmluZGV4T2YoJ1xcbicsIGJlZ2luKTtcbiAgd2hpbGUgKGJlZ2luICE9PSAtMSkge1xuICAgIGJlZ2luICs9IFYyS19SR1BfU0hJRlQ7XG4gICAgZW5kID0gbW9sZmlsZVYySy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gICAgY29uc3QgcmdwU3RyaW5nUGFyc2VkID0gbW9sZmlsZVYySy5zdWJzdHJpbmcoYmVnaW4sIGVuZClcbiAgICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAgIC5zcGxpdCgnICcpO1xuICAgIGNvbnN0IHJncEluZGljZXNBcnJheSA9IHJncFN0cmluZ1BhcnNlZC5tYXAoKGVsKSA9PiBwYXJzZUludChlbCkpXG4gICAgICAuc2xpY2UoMSk7IC8vIHNsaWNlIGZyb20gMSBiZWNhdXNlIHRoZSAxc3QgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBwYWlycyBpbiB0aGUgbGluZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmdwSW5kaWNlc0FycmF5Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAvLyBub3RpY2U6IHRoZXJlIG1heSBiZSBjb25mbGljdGluZyBjYXAgZ3JvdXAgZGVmaW5pdGlvbnMsIGxpa2UgMy1PLU1ldGh5bHJpYm9zZSAoMiw1IGNvbm5lY3Rpdml0eSlcbiAgICAgIC8vICh0aGUgbGFzdCBtb25vbWVyIGluIEhFTE1Db3JlTGlicmFyeSlcbiAgICAgIC8vIHRoZXJlIHRoZSBpbmRpY2VzIG9mIGNhcCBncm91cHMgYXJlIHNlbGYtY29udHJhZGljdG9yeVxuICAgICAgLy8gdG9kbzogY2xhcmlmeSB3aHkgc3VjaCBzaXR1YXRpb25zIG9jY3VyIGluIHByaW5jaXBsZVxuICAgICAgaWYgKGNhcEdyb3VwSWR4TWFwLmhhcyhyZ3BJbmRpY2VzQXJyYXlbaV0pICYmIGNhcEdyb3VwSWR4TWFwLmdldChyZ3BJbmRpY2VzQXJyYXlbaV0pICE9PSByZ3BJbmRpY2VzQXJyYXlbaSArIDFdKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHItZ3JvdXAgaW5kZXggJHtyZ3BJbmRpY2VzQXJyYXlbaV19IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgd2l0aCBhIGRpZmZlcmVudCB2YWx1ZWApO1xuICAgICAgZWxzZVxuICAgICAgICBjYXBHcm91cElkeE1hcC5zZXQocmdwSW5kaWNlc0FycmF5W2ldLCByZ3BJbmRpY2VzQXJyYXlbaSsxXSk7XG4gICAgfVxuXG4gICAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX1JHUF9MSU5FLCBlbmQpO1xuICB9XG5cbiAgcmV0dXJuIGNhcEdyb3VwSWR4TWFwO1xufVxuXG5mdW5jdGlvbiBwYXJzZUF0b21BbmRCb25kQ291bnRzKG1vbGZpbGVWM0s6IHN0cmluZyk6IHthdG9tQ291bnQ6IG51bWJlciwgYm9uZENvdW50OiBudW1iZXJ9IHtcbiAgbW9sZmlsZVYzSyA9IG1vbGZpbGVWM0sucmVwbGFjZUFsbCgnXFxyJywgJycpOyAvLyB0byBoYW5kbGUgb2xkIGFuZCBuZXcgc2RmIHN0YW5kYXJkc1xuXG4gIC8vIHBhcnNlIGF0b20gY291bnRcbiAgbGV0IGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKFYzS19CRUdJTl9DT1VOVFNfTElORSkgKyBWM0tfQ09VTlRTX1NISUZUO1xuICBsZXQgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pO1xuICBjb25zdCBudW1PZkF0b21zID0gcGFyc2VJbnQobW9sZmlsZVYzSy5zdWJzdHJpbmcoYmVnaW4sIGVuZCkpO1xuXG4gIC8vIHBhcnNlIGJvbmQgY291bnRcbiAgYmVnaW4gPSBlbmQgKyAxO1xuICBlbmQgPSBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbik7XG4gIGNvbnN0IG51bU9mQm9uZHMgPSBwYXJzZUludChtb2xmaWxlVjNLLnN1YnN0cmluZyhiZWdpbiwgZW5kKSk7XG5cbiAgcmV0dXJuIHthdG9tQ291bnQ6IG51bU9mQXRvbXMsIGJvbmRDb3VudDogbnVtT2ZCb25kc307XG59XG5cbi8qIFBhcnNlIFYzMDAwIGF0b20gYmxvY2sgYW5kIHJldHVybiBBdG9tcyBvYmplY3QuIE5PVElDRTogb25seSBhdG9tVHlwZXMsIHgsIHlcbiAqIGFuZCBrd2FyZ3MgZmllbGRzIGFyZSBzZXQgaW4gdGhlIHJldHVybiB2YWx1ZSwgd2l0aCBvdGhlciBmaWVsZHMgZHVtbXkgKi9cbmZ1bmN0aW9uIHBhcnNlQXRvbUJsb2NrKG1vbGZpbGVWM0s6IHN0cmluZywgYXRvbUNvdW50OiBudW1iZXIpOiBBdG9tcyB7XG4gIGNvbnN0IGF0b21UeXBlczogc3RyaW5nW10gPSBuZXcgQXJyYXkoYXRvbUNvdW50KTtcbiAgY29uc3QgeDogbnVtYmVyW10gPSBuZXcgQXJyYXkoYXRvbUNvdW50KTtcbiAgY29uc3QgeTogbnVtYmVyW10gPSBuZXcgQXJyYXkoYXRvbUNvdW50KTtcbiAgY29uc3Qga3dhcmdzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShhdG9tQ291bnQpO1xuXG4gIGxldCBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZihWM0tfQkVHSU5fQVRPTV9CTE9DSyk7IC8vIFYzMDAwIGF0b21zIGJsb2NrXG4gIGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gIGxldCBlbmQgPSBiZWdpbjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0b21Db3VudDsgaSsrKSB7XG4gICAgYmVnaW4gPSBtb2xmaWxlVjNLLmluZGV4T2YoVjNLX0JFR0lOX0RBVEFfTElORSwgYmVnaW4pICsgVjNLX0lEWF9TSElGVDtcbiAgICBlbmQgPSBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbik7IC8vIHNraXAgdGhlIGlkeCByb3dcblxuICAgIC8vIHBhcnNlIGF0b20gdHlwZVxuICAgIGJlZ2luID0gZW5kICsgMTtcbiAgICBlbmQgPSBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbik7XG4gICAgYXRvbVR5cGVzW2ldID0gbW9sZmlsZVYzSy5zdWJzdHJpbmcoYmVnaW4sIGVuZCk7XG5cbiAgICAvLyBwYXJzZSBYIGFuZCBZIGNvb3JkaW5hdGVzIG9mIHRoZSBhdG9tXG4gICAgY29uc3QgY29vcmRpbmF0ZTogbnVtYmVyW10gPSBuZXcgQXJyYXkoMik7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCAyOyArK2spIHtcbiAgICAgIGJlZ2luID0gZW5kICsgMTtcbiAgICAgIGVuZCA9IG1vbGZpbGVWM0suaW5kZXhPZignICcsIGJlZ2luKTtcbiAgICAgIGNvb3JkaW5hdGVba10gPSBwYXJzZUZsb2F0KG1vbGZpbGVWM0suc3Vic3RyaW5nKGJlZ2luLCBlbmQpKTtcbiAgICB9XG4gICAgeFtpXSA9IGNvb3JkaW5hdGVbMF07XG4gICAgeVtpXSA9IGNvb3JkaW5hdGVbMV07XG5cbiAgICAvLyBwYXJzZSB0aGUgcmVtYWluaW5nIHBvc3NpYmxlIGtleXdvcmQgYXJndW1lbnRzXG4gICAgYmVnaW4gPSBlbmQ7XG4gICAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCdcXG4nLCBiZWdpbikgKyAxO1xuICAgIGt3YXJnc1tpXSA9IG1vbGZpbGVWM0suc2xpY2UoYmVnaW4sIGVuZCk7XG5cbiAgICBiZWdpbiA9IGVuZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXRvbVR5cGVzOiBhdG9tVHlwZXMsXG4gICAgeDogeCxcbiAgICB5OiB5LFxuICAgIGt3YXJnczoga3dhcmdzLFxuICB9O1xufVxuXG4vKiBSZW1vdmUgaHlkcm9nZW4gbm9kZXMgKi9cbmZ1bmN0aW9uIHJlbW92ZUh5ZHJvZ2VuKG1vbm9tZXJHcmFwaDogTW9sR3JhcGgpOiB2b2lkIHtcbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoaSA8IG1vbm9tZXJHcmFwaC5hdG9tcy5hdG9tVHlwZXMubGVuZ3RoKSB7XG4gICAgaWYgKCBtb25vbWVyR3JhcGguYXRvbXMuYXRvbVR5cGVzW2ldID09PSBIWURST0dFTikge1xuICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgaSArIDEpOyAvLyBpICsgMSBiZWNhdXNlIG1vbGZpbGUgbm9kZSBpbmRleGluZyBzdGFydHMgZnJvbSAxXG4gICAgICAtLWk7XG4gICAgICAvLyBtb25vbWVyR3JhcGguYXRvbXMuYXRvbVR5cGVzW2ldID0gJ0xpJztcbiAgICB9XG4gICAgKytpO1xuICB9XG59XG5cbi8qIFJlbW92ZSBub2RlICdyZW1vdmVkTm9kZScgYW5kIHRoZSBhc3NvY2lhdGVkIGJvbmRzLiBOb3RpY2UsIG51bWVyYXRpb24gb2ZcbiAqIG5vZGVzIGluIG1vbGZpbGVzIHN0YXJ0cyBmcm9tIDEsIG5vdCAwICovXG5mdW5jdGlvbiByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoOiBNb2xHcmFwaCwgcmVtb3ZlZE5vZGU/OiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiByZW1vdmVkTm9kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCByZW1vdmVkTm9kZUlkeCA9IHJlbW92ZWROb2RlIC0gMTtcbiAgICBjb25zdCBhdG9tcyA9IG1vbm9tZXJHcmFwaC5hdG9tcztcbiAgICBjb25zdCBib25kcyA9IG1vbm9tZXJHcmFwaC5ib25kcztcbiAgICBjb25zdCBtZXRhID0gbW9ub21lckdyYXBoLm1ldGE7XG5cbiAgICAvLyByZW1vdmUgdGhlIG5vZGUgZnJvbSBhdG9tc1xuICAgIGF0b21zLmF0b21UeXBlcy5zcGxpY2UocmVtb3ZlZE5vZGVJZHgsIDEpO1xuICAgIGF0b21zLnguc3BsaWNlKHJlbW92ZWROb2RlSWR4LCAxKTtcbiAgICBhdG9tcy55LnNwbGljZShyZW1vdmVkTm9kZUlkeCwgMSk7XG4gICAgYXRvbXMua3dhcmdzLnNwbGljZShyZW1vdmVkTm9kZUlkeCwgMSk7XG5cbiAgICAvLyB1cGRhdGUgdGhlIHZhbHVlcyBvZiB0ZXJtaW5hbCBhbmQgci1ncm91cCBub2RlcyBpZiBuZWNlc3NhcnlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGEudGVybWluYWxOb2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG1ldGEudGVybWluYWxOb2Rlc1tpXSA+IHJlbW92ZWROb2RlKVxuICAgICAgICAtLW1ldGEudGVybWluYWxOb2Rlc1tpXTtcbiAgICAgIGVsc2UgaWYgKG1ldGEudGVybWluYWxOb2Rlc1tpXSA9PT0gcmVtb3ZlZE5vZGUpXG4gICAgICAgIG1ldGEudGVybWluYWxOb2Rlc1tpXSA9IC0xOyAvLyBzZW50aW5lbCB0byBtYXJrIHRoZSB2YWx1ZSBhcyByZW1vdmVkXG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YS5yTm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChtZXRhLnJOb2Rlc1tpXSA+IHJlbW92ZWROb2RlKVxuICAgICAgICAtLW1ldGEuck5vZGVzW2ldO1xuICAgICAgZWxzZSBpZiAobWV0YS5yTm9kZXNbaV0gPT09IHJlbW92ZWROb2RlKVxuICAgICAgICBtZXRhLnJOb2Rlc1tpXSA9IC0xOyAvLyBzZW50aW5lbCB0byBtYXJrIHRoZSB2YWx1ZSBhcyByZW1vdmVkXG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGluZGljZXMgb2YgYXRvbXMgaW4gYm9uZHNcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBib25kcy5hdG9tUGFpcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaXJzdEF0b20gPSBib25kcy5hdG9tUGFpcnNbaV1bMF07XG4gICAgICBjb25zdCBzZWNvbmRBdG9tID0gYm9uZHMuYXRvbVBhaXJzW2ldWzFdO1xuICAgICAgaWYgKGZpcnN0QXRvbSA9PT0gcmVtb3ZlZE5vZGUgfHwgc2Vjb25kQXRvbSA9PT0gcmVtb3ZlZE5vZGUpIHtcbiAgICAgICAgYm9uZHMuYXRvbVBhaXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgYm9uZHMuYm9uZFR5cGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgaWYgKGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmhhcyhpKSlcbiAgICAgICAgICBib25kcy5ib25kQ29uZmlndXJhdGlvbi5kZWxldGUoaSk7XG4gICAgICAgIGlmIChib25kcy5rd2FyZ3MuaGFzKGkpKVxuICAgICAgICAgIGJvbmRzLmt3YXJncy5kZWxldGUoaSk7XG4gICAgICAgIC0taTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvbmRzLmF0b21QYWlyc1tpXVswXSA9IChmaXJzdEF0b20gPiByZW1vdmVkTm9kZSkgPyBmaXJzdEF0b20gLSAxIDogZmlyc3RBdG9tO1xuICAgICAgICBib25kcy5hdG9tUGFpcnNbaV1bMV0gPSAoc2Vjb25kQXRvbSA+IHJlbW92ZWROb2RlKSA/IHNlY29uZEF0b20gLSAxIDogc2Vjb25kQXRvbTtcbiAgICAgIH1cbiAgICAgICsraTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgYm9uZENvbmZpZ3VyYXRpb24gYW5kIGt3YXJncyBrZXlzXG4gICAgbGV0IGtleXMgPSBBcnJheS5mcm9tKGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmtleXMoKSk7XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChib25kcy5ib25kQ29uZmlndXJhdGlvbi5oYXMoa2V5KSAmJiBrZXkgPiByZW1vdmVkTm9kZUlkeCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmdldChrZXkpITtcbiAgICAgICAgYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uZGVsZXRlKGtleSk7XG4gICAgICAgIGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLnNldChrZXkgLSAxLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAga2V5cyA9IEFycmF5LmZyb20oYm9uZHMua3dhcmdzLmtleXMoKSk7XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChib25kcy5rd2FyZ3MuaGFzKGtleSkgJiYga2V5ID4gcmVtb3ZlZE5vZGVJZHgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBib25kcy5rd2FyZ3MuZ2V0KGtleSkhO1xuICAgICAgICBib25kcy5rd2FyZ3MuZGVsZXRlKGtleSk7XG4gICAgICAgIGJvbmRzLmt3YXJncy5zZXQoa2V5IC0gMSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8vIHRvZG86IHJld3JpdGUgZGVzY3JpcHRpb25cbi8qIEFkanVzdCB0aGUgKHBlcHRpZGUpIG1vbm9tZXIgZ3JhcGggc28gdGhhdCBpdCBoYXMgc3RhbmRhcmQgZm9ybSAgKi9cbmZ1bmN0aW9uIGFkanVzdFBlcHRpZGVNb25vbWVyR3JhcGgobW9ub21lcjogTW9sR3JhcGgpOiB2b2lkIHtcbiAgY29uc3Qgbm9kZU9uZUlkeCA9IG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMTsgLy8gbm9kZSBpbmRleGluZyBpbiBtb2xmaWxlcyBzdGFydHMgZnJvbSAxXG4gIGNvbnN0IG5vZGVUd29JZHggPSBtb25vbWVyLm1ldGEuck5vZGVzWzBdIC0gMTtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcblxuICAvLyBwbGFjZSBub2RlT25lIGF0IG9yaWdpblxuICBzaGlmdENvb3JkaW5hdGVzKG1vbm9tZXIsIC14W25vZGVPbmVJZHhdLCAteVtub2RlT25lSWR4XSk7XG5cbiAgLy8gYW5nbGUgaXMgbWVhc3VyZWQgYmV0d2VlbiBPWSBhbmQgdGhlIHJvdGF0ZWQgbm9kZVxuICBjb25zdCBhbmdsZSA9IGZpbmRBbmdsZVdpdGhPWSh4W25vZGVUd29JZHhdLCB5W25vZGVUd29JZHhdKTtcblxuICAvLyByb3RhdGUgdGhlIGNlbnRlcmVkIGdyYXBoLCBzbyB0aGF0ICdub2RlVHdvJyBlbmRzIHVwIG9uIHRoZSBwb3NpdGl2ZSByYXkgb2YgT1lcbiAgcm90YXRlQ2VudGVyZWRHcmFwaChtb25vbWVyLmF0b21zLCAtYW5nbGUpO1xuXG4gIGlmICh4W21vbm9tZXIubWV0YS5yTm9kZXNbMV0gLSAxXSA8IDApXG4gICAgZmxpcE1vbm9tZXJBcm91bmRPWShtb25vbWVyKTtcblxuICBjb25zdCBkb3VibGVCb25kZWRPeHlnZW4gPSBmaW5kRG91YmxlQm9uZGVkQ2FyYm9ueWxPeHlnZW4obW9ub21lcik7XG5cbiAgLy8gZmxpcCBjYXJib3h5bCBhbmQgUiBpZiBuZWNlc3NhcnlcbiAgZmxpcENhcmJveHlsQW5kUmFkaWNhbChtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4pO1xuXG4gIC8vIGZsaXAgaHlkcm94eWwgZ3JvdXAgd2l0aCBkb3VibGUtYm91bmQgTyBpbnNpZGUgY2FyYm94eWwgZ3JvdXAgaWYgbmVjZXNzYXJ5XG4gIGZsaXBIeWRyb3hpbEdyb3VwKG1vbm9tZXIsIGRvdWJsZUJvbmRlZE94eWdlbik7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFBob3NwaGF0ZU1vbm9tZXJHcmFwaChtb25vbWVyOiBNb2xHcmFwaCk6dm9pZCB7XG4gIGNvbnN0IG5vZGVPbmVJZHggPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDE7IC8vIG5vZGUgaW5kZXhpbmcgaW4gbW9sZmlsZXMgc3RhcnRzIGZyb20gMVxuICBjb25zdCBub2RlVHdvSWR4ID0gbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDE7XG4gIGNvbnN0IHggPSBtb25vbWVyLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb25vbWVyLmF0b21zLnk7XG5cbiAgLy8gcGxhY2Ugbm9kZU9uZSBhdCBvcmlnaW5cbiAgc2hpZnRDb29yZGluYXRlcyhtb25vbWVyLCAteFtub2RlT25lSWR4XSwgLXlbbm9kZU9uZUlkeF0pO1xuXG4gIC8vIC8vIGFuZ2xlIGlzIG1lYXN1cmVkIGJldHdlZW4gT1kgYW5kIHRoZSByb3RhdGVkIG5vZGVcbiAgLy8gY29uc3QgYW5nbGUgPSBmaW5kQW5nbGVXaXRoT1koeFtub2RlVHdvSWR4XSwgeVtub2RlVHdvSWR4XSk7XG5cbiAgLy8gLy8gcm90YXRlIHRoZSBjZW50ZXJlZCBncmFwaCwgc28gdGhhdCAnbm9kZVR3bycgZW5kcyB1cCBvbiB0aGUgcG9zaXRpdmUgcmF5IG9mIE9ZXG4gIC8vIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcywgLWFuZ2xlKTtcblxuICAvLyBpZiAoeFttb25vbWVyLm1ldGEuck5vZGVzWzFdIC0gMV0gPCAwKVxuICAvLyAgIGZsaXBNb25vbWVyQXJvdW5kT1kobW9ub21lcik7XG5cbiAgLy8gY29uc3QgZG91YmxlQm9uZGVkT3h5Z2VuID0gZmluZERvdWJsZUJvbmRlZENhcmJvbnlsT3h5Z2VuKG1vbm9tZXIpO1xuXG4gIC8vIC8vIGZsaXAgY2FyYm94eWwgYW5kIFIgaWYgbmVjZXNzYXJ5XG4gIC8vIGZsaXBDYXJib3h5bEFuZFJhZGljYWwobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcblxuICAvLyAvLyBmbGlwIGh5ZHJveHlsIGdyb3VwIHdpdGggZG91YmxlLWJvdW5kIE8gaW5zaWRlIGNhcmJveHlsIGdyb3VwIGlmIG5lY2Vzc2FyeVxuICAvLyBmbGlwSHlkcm94aWxHcm91cChtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4pO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RTdWdhck1vbm9tZXJHcmFwaChtb25vbWVyOiBNb2xHcmFwaCk6dm9pZCB7XG4gIGNvbnN0IG5vZGVPbmVJZHggPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDE7IC8vIG5vZGUgaW5kZXhpbmcgaW4gbW9sZmlsZXMgc3RhcnRzIGZyb20gMVxuICBjb25zdCBub2RlVHdvSWR4ID0gbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDE7XG4gIGNvbnN0IHggPSBtb25vbWVyLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb25vbWVyLmF0b21zLnk7XG5cbiAgLy8gcGxhY2Ugbm9kZU9uZSBhdCBvcmlnaW5cbiAgc2hpZnRDb29yZGluYXRlcyhtb25vbWVyLCAteFtub2RlT25lSWR4XSwgLXlbbm9kZU9uZUlkeF0pO1xuXG4gIC8vIC8vIGFuZ2xlIGlzIG1lYXN1cmVkIGJldHdlZW4gT1kgYW5kIHRoZSByb3RhdGVkIG5vZGVcbiAgLy8gY29uc3QgYW5nbGUgPSBmaW5kQW5nbGVXaXRoT1koeFtub2RlVHdvSWR4XSwgeVtub2RlVHdvSWR4XSk7XG5cbiAgLy8gLy8gcm90YXRlIHRoZSBjZW50ZXJlZCBncmFwaCwgc28gdGhhdCAnbm9kZVR3bycgZW5kcyB1cCBvbiB0aGUgcG9zaXRpdmUgcmF5IG9mIE9ZXG4gIC8vIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcywgLWFuZ2xlKTtcblxuICAvLyBpZiAoeFttb25vbWVyLm1ldGEuck5vZGVzWzFdIC0gMV0gPCAwKVxuICAvLyAgIGZsaXBNb25vbWVyQXJvdW5kT1kobW9ub21lcik7XG5cbiAgLy8gY29uc3QgZG91YmxlQm9uZGVkT3h5Z2VuID0gZmluZERvdWJsZUJvbmRlZENhcmJvbnlsT3h5Z2VuKG1vbm9tZXIpO1xuXG4gIC8vIC8vIGZsaXAgY2FyYm94eWwgYW5kIFIgaWYgbmVjZXNzYXJ5XG4gIC8vIGZsaXBDYXJib3h5bEFuZFJhZGljYWwobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcblxuICAvLyAvLyBmbGlwIGh5ZHJveHlsIGdyb3VwIHdpdGggZG91YmxlLWJvdW5kIE8gaW5zaWRlIGNhcmJveHlsIGdyb3VwIGlmIG5lY2Vzc2FyeVxuICAvLyBmbGlwSHlkcm94aWxHcm91cChtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4pO1xufVxuZnVuY3Rpb24gYWRqdXN0QmFzZU1vbm9tZXJHcmFwaChtb25vbWVyOiBNb2xHcmFwaCk6dm9pZCB7XG4gIGNvbnN0IG5vZGVPbmVJZHggPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDE7IC8vIG5vZGUgaW5kZXhpbmcgaW4gbW9sZmlsZXMgc3RhcnRzIGZyb20gMVxuICBjb25zdCBub2RlVHdvSWR4ID0gbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDE7XG4gIGNvbnN0IHggPSBtb25vbWVyLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb25vbWVyLmF0b21zLnk7XG5cbiAgLy8gcGxhY2Ugbm9kZU9uZSBhdCBvcmlnaW5cbiAgc2hpZnRDb29yZGluYXRlcyhtb25vbWVyLCAteFtub2RlT25lSWR4XSwgLXlbbm9kZU9uZUlkeF0pO1xuXG4gIC8vIC8vIGFuZ2xlIGlzIG1lYXN1cmVkIGJldHdlZW4gT1kgYW5kIHRoZSByb3RhdGVkIG5vZGVcbiAgLy8gY29uc3QgYW5nbGUgPSBmaW5kQW5nbGVXaXRoT1koeFtub2RlVHdvSWR4XSwgeVtub2RlVHdvSWR4XSk7XG5cbiAgLy8gLy8gcm90YXRlIHRoZSBjZW50ZXJlZCBncmFwaCwgc28gdGhhdCAnbm9kZVR3bycgZW5kcyB1cCBvbiB0aGUgcG9zaXRpdmUgcmF5IG9mIE9ZXG4gIC8vIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcywgLWFuZ2xlKTtcblxuICAvLyBpZiAoeFttb25vbWVyLm1ldGEuck5vZGVzWzFdIC0gMV0gPCAwKVxuICAvLyAgIGZsaXBNb25vbWVyQXJvdW5kT1kobW9ub21lcik7XG5cbiAgLy8gY29uc3QgZG91YmxlQm9uZGVkT3h5Z2VuID0gZmluZERvdWJsZUJvbmRlZENhcmJvbnlsT3h5Z2VuKG1vbm9tZXIpO1xuXG4gIC8vIC8vIGZsaXAgY2FyYm94eWwgYW5kIFIgaWYgbmVjZXNzYXJ5XG4gIC8vIGZsaXBDYXJib3h5bEFuZFJhZGljYWwobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcblxuICAvLyAvLyBmbGlwIGh5ZHJveHlsIGdyb3VwIHdpdGggZG91YmxlLWJvdW5kIE8gaW5zaWRlIGNhcmJveHlsIGdyb3VwIGlmIG5lY2Vzc2FyeVxuICAvLyBmbGlwSHlkcm94aWxHcm91cChtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4pO1xufVxuXG4vKiBGbGlwIGNhcmJveHlsIGdyb3VwIHdpdGggdGhlIHJhZGljYWwgaW4gYSBwZXB0aWRlIG1vbm9tZXIgaW4gY2FzZSB0aGVcbiAqIGNhcmJveHlsIGdyb3VwIGlzIGluIHRoZSBsb3dlciBoYWxmLXBsYW5lICovXG5mdW5jdGlvbiBmbGlwQ2FyYm94eWxBbmRSYWRpY2FsKG1vbm9tZXI6IE1vbEdyYXBoLCBkb3VibGVCb25kZWRPeHlnZW46IG51bWJlcik6IHZvaWQge1xuICAvLyB2ZXJpZnkgdGhhdCB0aGUgY2FyYm94eWwgZ3JvdXAgaXMgaW4gdGhlIGxvd2VyIGhhbGYtcGxhbmVcbiAgaWYgKG1vbm9tZXIuYXRvbXMueVttb25vbWVyLm1ldGEuck5vZGVzWzFdIC0gMV0gPCAwICYmXG4gICAgbW9ub21lci5hdG9tcy55W2RvdWJsZUJvbmRlZE94eWdlbiAtIDFdIDwgMCkge1xuICAgIGZsaXBNb25vbWVyQXJvdW5kT1gobW9ub21lcik7XG5cbiAgICByb3RhdGVDZW50ZXJlZEdyYXBoKG1vbm9tZXIuYXRvbXMsXG4gICAgICAtZmluZEFuZ2xlV2l0aE9YKFxuICAgICAgICBtb25vbWVyLmF0b21zLnhbbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMV0gLSAxXSxcbiAgICAgICAgbW9ub21lci5hdG9tcy55W21vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdIC0gMV1cbiAgICAgIClcbiAgICApO1xuICB9XG59XG5cbi8qIEZpbmRzIGFuZ2xlIGJldHdlZW4gT1kgYW5kIHRoZSByYXkgam9pbmluZyBvcmlnaW4gd2l0aCAoeCwgeSkgKi9cbmZ1bmN0aW9uIGZpbmRBbmdsZVdpdGhPWSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBhbmdsZTtcbiAgaWYgKHggPT09IDApIHtcbiAgICBhbmdsZSA9IHkgPiAwID8gMCA6IE1hdGguUEk7XG4gIH0gZWxzZSBpZiAoeSA9PT0gMCkge1xuICAgIGFuZ2xlID0geCA+IDAgPyAtTWF0aC5QSS8yIDogTWF0aC5QSS8yO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRhbiA9IHkgLyB4O1xuICAgIGNvbnN0IGF0YW4gPSBNYXRoLmF0YW4odGFuKTtcbiAgICBhbmdsZSA9ICh4IDwgMCkgPyBNYXRoLlBJLzIgKyBhdGFuIDogLU1hdGguUEkvMiArIGF0YW47XG4gIH1cbiAgcmV0dXJuIGFuZ2xlO1xufVxuXG4vKiBGaW5kcyBhbmdsZSBiZXR3ZWVuIE9YIGFuZCB0aGUgcmF5IGpvaW5pbmcgb3JpZ2luIHdpdGggKHgsIHkpICovXG5mdW5jdGlvbiBmaW5kQW5nbGVXaXRoT1goeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gZmluZEFuZ2xlV2l0aE9ZKHgsIHkpICsgTWF0aC5QSS8yO1xufVxuXG4vKiAgUm90YXRlIHRoZSBncmFwaCBhcm91bmQgdGhlIG9yaWdpbiBieSAnYW5nbGUnICovXG5mdW5jdGlvbiByb3RhdGVDZW50ZXJlZEdyYXBoKGF0b21zOiBBdG9tcywgYW5nbGU6IG51bWJlcik6IHZvaWQge1xuICBpZiAoYW5nbGUgIT09IDApIHtcbiAgICBjb25zdCB4ID0gYXRvbXMueDtcbiAgICBjb25zdCB5ID0gYXRvbXMueTtcblxuICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IHRtcCA9IHhbaV07XG4gICAgICB4W2ldID0ga2VlcFByZWNpc2lvbih0bXAqY29zIC0geVtpXSpzaW4pO1xuICAgICAgeVtpXSA9IGtlZXBQcmVjaXNpb24odG1wKnNpbiArIHlbaV0qY29zKTtcbiAgICB9XG4gIH1cbn1cblxuLyogRmxpcCBtb25vbWVyIGdyYXBoIGFyb3VuZCBPWCBheGlzIHByZXNlcnZpbmcgc3RlcmVvbWV0cnkgKi9cbmZ1bmN0aW9uIGZsaXBNb25vbWVyQXJvdW5kT1gobW9ub21lcjogTW9sR3JhcGgpOiB2b2lkIHtcbiAgZmxpcE1vbEdyYXBoKG1vbm9tZXIsIHRydWUpO1xufVxuXG4vKiBGbGlwIG1vbm9tZXIgZ3JhcGggYXJvdW5kIE9ZIGF4aXMgcHJlc2VydmluZyBzdGVyZW9tZXRyeSAqL1xuZnVuY3Rpb24gZmxpcE1vbm9tZXJBcm91bmRPWShtb25vbWVyOiBNb2xHcmFwaCk6IHZvaWQge1xuICBmbGlwTW9sR3JhcGgobW9ub21lciwgZmFsc2UpO1xufVxuXG4vKiBGbGlwIGdyYXBoIGFyb3VuZCBhIHNwZWNpZmllZCBheGlzOiAndHJ1ZScgY29ycmVzcG9uZHMgdG8gT1gsICdmYWxzZScgdG8gT1kgKi9cbmZ1bmN0aW9uIGZsaXBNb2xHcmFwaChtb2xHcmFwaDogTW9sR3JhcGgsIGF4aXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKGF4aXMpIHsgLy8gZmxpcHBpbmcgYXJvdW5kIE9YXG4gICAgY29uc3QgeSA9IG1vbEdyYXBoLmF0b21zLnk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB5Lmxlbmd0aDsgaSsrKVxuICAgICAgeVtpXSA9IC15W2ldO1xuICB9IGVsc2UgeyAvLyBmbGlwcGluZyBhcm91bmQgT1lcbiAgICBjb25zdCB4ID0gbW9sR3JhcGguYXRvbXMueDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspXG4gICAgICB4W2ldID0gLXhbaV07XG4gIH1cblxuICAvLyBwcmVzZXJ2ZSB0aGUgc3RlcmVvbWV0cnlcbiAgY29uc3Qgb3JpZW50YXRpb24gPSBtb2xHcmFwaC5ib25kcy5ib25kQ29uZmlndXJhdGlvbjtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygb3JpZW50YXRpb24pIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlID09PSAxID8gMyA6IDE7XG4gICAgb3JpZW50YXRpb24uc2V0KGtleSwgbmV3VmFsdWUpO1xuICB9XG59XG5cbi8qIEZsaXBzIGRvdWJsZS1ib25kZWQgJ08nIGluIGNhcmJvbnlsIGdyb3VwIHdpdGggJ09IJyBpbiBvcmRlciBmb3IgdGhlIG1vbm9tZXJzXG4gKiB0byBoYXZlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uIHNpbXBsaWZ5aW5nIHRoZWlyIGNvbmNhdGVuYXRpb24uIFRoZVxuICogbW9ub21lciBtdXN0IGFscmVhZHkgYmUgYWRqdXN0ZWQgd2l0aCBhZGp1c3RQZXB0aWRlTW9ub21lckdyYXBoIGluIG9yZGVyIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIGltcGxlbWVudGVkICAqL1xuZnVuY3Rpb24gZmxpcEh5ZHJveGlsR3JvdXAobW9ub21lcjogTW9sR3JhcGgsIGRvdWJsZUJvbmRlZE94eWdlbjogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IHggPSBtb25vbWVyLmF0b21zLng7XG4gIC8vIC0xIGJlbG93IGJlY2F1c2UgaW5kZXhpbmcgb2Ygbm9kZXMgaW4gbW9sZmlsZXMgc3RhcnRzIGZyb20gMSwgdW5saWtlIGFycmF5c1xuICBpZiAoeFttb25vbWVyLm1ldGEuck5vZGVzWzFdIC0gMV0gPiB4W2RvdWJsZUJvbmRlZE94eWdlbiAtIDFdKVxuICAgIHN3YXBOb2Rlcyhtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4sIG1vbm9tZXIubWV0YS5yTm9kZXNbMV0pO1xufVxuXG4vKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBub2RlIChzdGFydGluZyBmcm9tIDEpIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gKiBkb3VibGUtYm9uZGVkIG94eWdlbiBvZiB0aGUgY2FyYm9ueWwgZ3JvdXAgICovXG5mdW5jdGlvbiBmaW5kRG91YmxlQm9uZGVkQ2FyYm9ueWxPeHlnZW4obW9ub21lcjogTW9sR3JhcGgpOiBudW1iZXIge1xuICBjb25zdCBib25kc01hcCA9IGNvbnN0cnVjdEJvbmRzTWFwKG1vbm9tZXIpO1xuICBsZXQgZG91YmxlQm9uZGVkT3h5Z2VuID0gMDtcbiAgbGV0IGkgPSAwO1xuICAvLyBpdGVyYXRlIG92ZXIgdGhlIG5vZGVzIGJvbmRlZCB0byB0aGUgY2FyYm9uIGFuZCBmaW5kIHRoZSBkb3VibGUgb25lXG4gIHdoaWxlIChkb3VibGVCb25kZWRPeHlnZW4gPT09IDApIHtcbiAgICBjb25zdCBub2RlID0gYm9uZHNNYXAuZ2V0KG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdKSFbaV07XG4gICAgaWYgKG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzW25vZGUgLSAxXSA9PT0gT1hZR0VOICYmIG5vZGUgIT09IG1vbm9tZXIubWV0YS5yTm9kZXNbMV0pXG4gICAgICBkb3VibGVCb25kZWRPeHlnZW4gPSBub2RlO1xuICAgIGkrKztcbiAgfVxuICByZXR1cm4gZG91YmxlQm9uZGVkT3h5Z2VuO1xufVxuXG4vKiBTd2FwIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHR3byBzcGVjaWZpZWQgbm9kZXMgaW4gTW9sR3JhcGggICovXG5mdW5jdGlvbiBzd2FwTm9kZXMobW9ub21lcjogTW9sR3JhcGgsIG5vZGVPbmU6IG51bWJlciwgbm9kZVR3bzogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IG5vZGVPbmVJZHggPSBub2RlT25lIC0gMTtcbiAgY29uc3Qgbm9kZVR3b0lkeCA9IG5vZGVUd28gLSAxO1xuICBjb25zdCB4ID0gbW9ub21lci5hdG9tcy54O1xuICBjb25zdCB5ID0gbW9ub21lci5hdG9tcy55O1xuICBjb25zdCB0bXBYID0geFtub2RlT25lSWR4XTtcbiAgY29uc3QgdG1wWSA9IHlbbm9kZU9uZUlkeF07XG4gIHhbbm9kZU9uZUlkeF0gPSB4W25vZGVUd29JZHhdO1xuICB5W25vZGVPbmVJZHhdID0geVtub2RlVHdvSWR4XTtcbiAgeFtub2RlVHdvSWR4XSA9IHRtcFg7XG4gIHlbbm9kZVR3b0lkeF0gPSB0bXBZO1xufVxuXG4vLyB0b2RvOiBkb2NcbmZ1bmN0aW9uIGNvbnN0cnVjdEJvbmRzTWFwKG1vbm9tZXI6IE1vbEdyYXBoKTogTWFwPG51bWJlciwgQXJyYXk8bnVtYmVyPj4ge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8bnVtYmVyPj4oKTtcbiAgZm9yIChjb25zdCBhdG9tUGFpcnMgb2YgbW9ub21lci5ib25kcy5hdG9tUGFpcnMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gYXRvbVBhaXJzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBhdG9tUGFpcnNbKGkgKyAxKSUyXTtcbiAgICAgIGlmIChtYXAuaGFzKGtleSkpXG4gICAgICAgIG1hcC5nZXQoa2V5KT8ucHVzaCh2YWx1ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIG1hcC5zZXQoa2V5LCBuZXcgQXJyYXk8bnVtYmVyPigxKS5maWxsKHZhbHVlKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbi8qIFNoaWZ0IG1vbEdyYXBoIGluIHRoZSBYT1kgcGxhbmUgICovXG5mdW5jdGlvbiBzaGlmdENvb3JkaW5hdGVzKG1vbEdyYXBoOiBNb2xHcmFwaCwgeFNoaWZ0OiBudW1iZXIsIHlTaGlmdD86IG51bWJlcik6IHZvaWQge1xuICBjb25zdCB4ID0gbW9sR3JhcGguYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbEdyYXBoLmF0b21zLnk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgIHhbaV0gPSBrZWVwUHJlY2lzaW9uKHhbaV0gKyB4U2hpZnQpO1xuICAgIGlmICh0eXBlb2YgeVNoaWZ0ICE9PSAndW5kZWZpbmVkJylcbiAgICAgIHlbaV0gPSBrZWVwUHJlY2lzaW9uKHlbaV0gKyB5U2hpZnQpO1xuICB9XG59XG5cbi8qIFRyYW5zbGF0ZSBhIHNlcXVlbmNlIG9mIG1vbm9tZXIgc3ltYm9scyBpbnRvIE1vbGZpbGUgVjMwMDAgKi9cbmZ1bmN0aW9uIG1vbm9tZXJTZXFUb01vbGZpbGUoXG4gIG1vbm9tZXJTZXE6IHN0cmluZ1tdLCBtb25vbWVyc0RpY3Q6IE1hcDxzdHJpbmcsIE1vbEdyYXBoPiwgYWxwaGFiZXQ6IEFMUEhBQkVULCBwb2x5bWVyVHlwZTogSEVMTV9QT0xZTUVSX1RZUEVcbik6IHN0cmluZyB7XG4gIC8vIHRvZG86IGhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBwb2x5bWVyIGlzIGVtcHR5XG4gIGlmIChtb25vbWVyU2VxLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21vbm9tZXJTZXEgaXMgZW1wdHknKTtcblxuICAvLyBkZWZpbmUgYXRvbSBhbmQgYm9uZCBjb3VudHMsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGJvbmQgdHlwZVxuICBjb25zdCB7YXRvbUNvdW50LCBib25kQ291bnR9ID0gZ2V0UmVzdWx0aW5nQXRvbUJvbmRDb3VudHMobW9ub21lclNlcSwgbW9ub21lcnNEaWN0LCBhbHBoYWJldCwgcG9seW1lclR5cGUpO1xuXG4gIC8vIGNyZWF0ZSBhcnJheXMgdG8gc3RvcmUgbGluZXMgb2YgdGhlIHJlc3VsdGluZyBtb2xmaWxlXG4gIGNvbnN0IG1vbGZpbGVBdG9tQmxvY2sgPSBuZXcgQXJyYXk8c3RyaW5nPihhdG9tQ291bnQpO1xuICBjb25zdCBtb2xmaWxlQm9uZEJsb2NrID0gbmV3IEFycmF5PHN0cmluZz4oYm9uZENvdW50KTtcblxuICBsZXQgYWRkTW9ub21lclRvTW9sYmxvY2s7XG4gIGxldCBjYXBNb2xibG9jaztcbiAgbGV0IG5vZGVTaGlmdEluaXRWYWx1ZTtcbiAgbGV0IGJvbmRTaGlmdEluaXRWYWx1ZTtcbiAgbGV0IHN1Z2FyID0gbnVsbDtcbiAgbGV0IHBob3NwaGF0ZSA9IG51bGw7XG5cbiAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFKSB7XG4gICAgYWRkTW9ub21lclRvTW9sYmxvY2sgPSBhZGRBbWlub0FjaWRUb01vbGJsb2NrO1xuICAgIGNhcE1vbGJsb2NrID0gY2FwUGVwdGlkZU1vbGJsb2NrO1xuICAgIG5vZGVTaGlmdEluaXRWYWx1ZSA9IGJvbmRTaGlmdEluaXRWYWx1ZSA9IDA7XG4gIH0gZWxzZSB7IC8vIG51Y2xlb3RpZGVzXG4gICAgYWRkTW9ub21lclRvTW9sYmxvY2sgPSBhZGROdWNsZW90aWRlVG9Nb2xibG9jaztcbiAgICBjYXBNb2xibG9jayA9IGNhcFBlcHRpZGVNb2xibG9jazsgLy8gdG9kbzogY2xlYW51cCAmIHJlZmFjdG9yXG4gICAgbm9kZVNoaWZ0SW5pdFZhbHVlID0gMDtcbiAgICBib25kU2hpZnRJbml0VmFsdWUgPSAwO1xuICAgIHN1Z2FyID0gKGFscGhhYmV0ID09PSBBTFBIQUJFVC5ETkEpID8gbW9ub21lcnNEaWN0LmdldChERU9YWVJJQk9TRSkgOiBtb25vbWVyc0RpY3QuZ2V0KFJJQk9TRSk7XG4gICAgcGhvc3BoYXRlID0gbW9ub21lcnNEaWN0LmdldChQSE9TUEhBVEUpO1xuICB9XG5cbiAgY29uc3QgdjogTG9vcFZhcmlhYmxlcyA9IHtcbiAgICBpOiAwLFxuICAgIG5vZGVTaGlmdDogbm9kZVNoaWZ0SW5pdFZhbHVlLFxuICAgIGJvbmRTaGlmdDogYm9uZFNoaWZ0SW5pdFZhbHVlLFxuICAgIGJhY2tib25lUG9zaXRpb25TaGlmdDogbmV3IEFycmF5PG51bWJlcj4oMikuZmlsbCgwKSxcbiAgICBicmFuY2hQb3NpdGlvblNoaWZ0OiBuZXcgQXJyYXk8bnVtYmVyPigyKS5maWxsKDApLFxuICAgIGJhY2tib25lQXR0YWNoTm9kZTogMCxcbiAgICBicmFuY2hBdHRhY2hOb2RlOiAwLFxuICAgIGZsaXBGYWN0b3I6IDEsXG4gIH07XG5cbiAgY29uc3QgQzogTG9vcENvbnN0YW50cyA9IHtcbiAgICBzdWdhcjogc3VnYXIhLFxuICAgIHBob3NwaGF0ZTogcGhvc3BoYXRlISxcbiAgICBzZXFMZW5ndGg6IG1vbm9tZXJTZXEubGVuZ3RoLFxuICAgIGF0b21Db3VudDogYXRvbUNvdW50LFxuICAgIGJvbmRDb3VudDogYm9uZENvdW50LFxuICB9O1xuXG4gIGZvciAodi5pID0gMDsgdi5pIDwgQy5zZXFMZW5ndGg7ICsrdi5pKSB7XG4gICAgY29uc3QgbW9ub21lciA9IG1vbm9tZXJzRGljdC5nZXQobW9ub21lclNlcVt2LmldKSE7XG4gICAgYWRkTW9ub21lclRvTW9sYmxvY2sobW9ub21lciwgbW9sZmlsZUF0b21CbG9jaywgbW9sZmlsZUJvbmRCbG9jaywgdiwgQyk7XG4gIH1cblxuICBjYXBNb2xibG9jayhtb2xmaWxlQXRvbUJsb2NrLCBtb2xmaWxlQm9uZEJsb2NrLCB2LCBDKTtcblxuICBjb25zdCBtb2xmaWxlQ291bnRzTGluZSA9IFYzS19CRUdJTl9DT1VOVFNfTElORSArIGF0b21Db3VudCArICcgJyArIGJvbmRDb3VudCArIFYzS19DT1VOVFNfTElORV9FTkRJTkc7XG5cbiAgLy8gdG9kbzogb3B0aW1pemUgY29uY2F0ZW5hdGlvbiB1c2luZyBBbGV4YW5kZXIncyBoaW50XG4gIGNvbnN0IG1vbGZpbGVQYXJ0cyA9IFtcbiAgICBWM0tfSEVBREVSX0ZJUlNUX0xJTkUsXG4gICAgVjNLX0hFQURFUl9TRUNPTkRfTElORSxcbiAgICBWM0tfQkVHSU5fQ1RBQl9CTE9DSyxcbiAgICBtb2xmaWxlQ291bnRzTGluZSxcbiAgICBWM0tfQkVHSU5fQVRPTV9CTE9DSyxcbiAgICBtb2xmaWxlQXRvbUJsb2NrLmpvaW4oJycpLFxuICAgIFYzS19FTkRfQVRPTV9CTE9DSyxcbiAgICBWM0tfQkVHSU5fQk9ORF9CTE9DSyxcbiAgICBtb2xmaWxlQm9uZEJsb2NrLmpvaW4oJycpLFxuICAgIFYzS19FTkRfQk9ORF9CTE9DSyxcbiAgICBWM0tfRU5EX0NUQUJfQkxPQ0ssXG4gICAgVjNLX0VORCxcbiAgXTtcblxuICByZXR1cm4gbW9sZmlsZVBhcnRzLmpvaW4oJycpO1xufVxuXG4vLyB0b2RvOiBkb2NcbmZ1bmN0aW9uIGNhcFBlcHRpZGVNb2xibG9jayhcbiAgbW9sZmlsZUF0b21CbG9jazogc3RyaW5nW10sIG1vbGZpbGVCb25kQmxvY2s6IHN0cmluZ1tdLFxuICB2OiBMb29wVmFyaWFibGVzLCBDOiBMb29wQ29uc3RhbnRzXG4pOiB2b2lkIHtcbiAgLy8gYWRkIHRlcm1pbmFsIG94eWdlblxuICBjb25zdCBhdG9tSWR4ID0gdi5ub2RlU2hpZnQgKyAxO1xuICBtb2xmaWxlQXRvbUJsb2NrW0MuYXRvbUNvdW50XSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBhdG9tSWR4ICsgJyAnICtcbiAgICBPWFlHRU4gKyAnICcgKyBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzBdKSArICcgJyArXG4gICAgdi5mbGlwRmFjdG9yICoga2VlcFByZWNpc2lvbih2LmJhY2tib25lUG9zaXRpb25TaGlmdFsxXSkgKyAnICcgKyAnMC4wMDAwMDAgMCcgKyAnXFxuJztcblxuICAvLyBhZGQgdGVybWluYWwgYm9uZFxuICBjb25zdCBmaXJzdEF0b20gPSB2LmJhY2tib25lQXR0YWNoTm9kZTtcbiAgY29uc3Qgc2Vjb25kQXRvbSA9IGF0b21JZHg7XG4gIG1vbGZpbGVCb25kQmxvY2tbQy5ib25kQ291bnRdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIHYuYm9uZFNoaWZ0ICsgJyAnICtcbiAgICAxICsgJyAnICsgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArICdcXG4nO1xufVxuXG4vLyB0b2RvOiBkb2NcbmZ1bmN0aW9uIGFkZEFtaW5vQWNpZFRvTW9sYmxvY2sobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLFxuICBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcywgQzogTG9vcENvbnN0YW50c1xuKTogdm9pZCB7XG4gIHYuZmxpcEZhY3RvciA9ICgtMSkqKih2LmkgJSAyKTsgLy8gdG8gZmxpcCBldmVyeSBldmVuIG1vbm9tZXIgb3ZlciBPWFxuICBhZGRCYWNrYm9uZU1vbm9tZXJUb01vbGJsb2NrKG1vbm9tZXIsIG1vbGZpbGVBdG9tQmxvY2ssIG1vbGZpbGVCb25kQmxvY2ssIHYsIEMpO1xufVxuXG5mdW5jdGlvbiBhZGRCYWNrYm9uZU1vbm9tZXJUb01vbGJsb2NrKFxuICBtb25vbWVyOiBNb2xHcmFwaCwgbW9sZmlsZUF0b21CbG9jazogc3RyaW5nW10sIG1vbGZpbGVCb25kQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzLCBDOiBMb29wQ29uc3RhbnRzXG4pOiB2b2lkIHtcbiAgLy8gdG9kbzogcmVtb3ZlIHRoZXNlIGNvbW1lbnRzIHRvIHRoZSBkb2NzdHJpbmdzIG9mIHRoZSBjb3JyLiBmdW5jdGlvbnNcbiAgLy8gY29uc3RydW5jdCB0aGUgbGluZXMgb2YgVjNLIG1vbGZpbGUgYXRvbSBibG9ja1xuICBmaWxsQXRvbUxpbmVzKG1vbm9tZXIsIG1vbGZpbGVBdG9tQmxvY2ssIHYpO1xuXG4gIC8vIGNvbnN0cnVjdCB0aGUgbGluZXMgb2YgVjNLIG1vbGZpbGUgYm9uZCBibG9ja1xuICBmaWxsQm9uZExpbmVzKG1vbm9tZXIsIG1vbGZpbGVCb25kQmxvY2ssIHYpO1xuXG4gIC8vIHBlcHRpZGUgYm9uZFxuICBmaWxsQ2hhaW5FeHRlbmRpbmdCb25kKG1vbm9tZXIsIG1vbGZpbGVCb25kQmxvY2ssIHYpO1xuXG4gIC8vIHVwZGF0ZSBicmFuY2ggdmFyaWFibGVzIGlmIG5lY2Vzc2FyeVxuICBpZiAobW9ub21lci5tZXRhLmJyYW5jaFNoaWZ0ICE9PSBudWxsICYmIG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzLmxlbmd0aCA+IDIpXG4gICAgdXBkYXRlQnJhbmNoVmFyaWFibGVzKG1vbm9tZXIsIHYpO1xuXG4gIC8vIHVwZGF0ZSBsb29wIHZhcmlhYmxlc1xuICB1cGRhdGVDaGFpbkV4dGVuZGluZ1ZhcmlhYmxlcyhtb25vbWVyLCB2LCBDKTtcbn1cblxuLy8gdG9kbzogZG9jXG5mdW5jdGlvbiBhZGROdWNsZW90aWRlVG9Nb2xibG9jayhcbiAgbnVjbGVvYmFzZTogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcywgQzogTG9vcENvbnN0YW50c1xuKTogdm9pZCB7XG4gIC8vIGNvbnN0cnVuY3QgdGhlIGxpbmVzIG9mIFYzSyBtb2xmaWxlIGF0b20gYmxvY2sgY29ycmVzcG9uZGluZyB0byBwaG9zcGhhdGVcbiAgLy8gYW5kIHN1Z2FyXG4gIGZvciAoY29uc3QgbW9ub21lciBvZiBbQy5waG9zcGhhdGUsIEMuc3VnYXJdKVxuICAgIGFkZEJhY2tib25lTW9ub21lclRvTW9sYmxvY2sobW9ub21lciEsIG1vbGZpbGVBdG9tQmxvY2ssIG1vbGZpbGVCb25kQmxvY2ssIHYsIEMpO1xuXG4gIGFkZEJyYW5jaE1vbm9tZXJUb01vbGJsb2NrKG51Y2xlb2Jhc2UsIG1vbGZpbGVBdG9tQmxvY2ssIG1vbGZpbGVCb25kQmxvY2ssIHYsIEMpO1xufVxuXG5mdW5jdGlvbiBhZGRCcmFuY2hNb25vbWVyVG9Nb2xibG9jayhcbiAgbW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcywgQzogTG9vcENvbnN0YW50c1xuKTogdm9pZCB7XG4gIGZpbGxCcmFuY2hBdG9tTGluZXMobW9ub21lciwgbW9sZmlsZUF0b21CbG9jaywgdik7XG4gIGZpbGxCb25kTGluZXMobW9ub21lciwgbW9sZmlsZUJvbmRCbG9jaywgdik7XG4gIGZpbGxCYWNrYm9uZVRvQnJhbmNoQm9uZChtb25vbWVyLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcblxuICAvLyBDLU4gYm9uZFxuICBjb25zdCBib25kSWR4ID0gdi5ib25kU2hpZnQ7XG4gIGNvbnN0IGZpcnN0QXRvbSA9IHYuYnJhbmNoQXR0YWNoTm9kZTtcbiAgY29uc3Qgc2Vjb25kQXRvbSA9IG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdICsgdi5ub2RlU2hpZnQ7XG4gIG1vbGZpbGVCb25kQmxvY2tbYm9uZElkeCAtIDFdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGJvbmRJZHggKyAnICcgK1xuICAgIDEgKyAnICcgKyBmaXJzdEF0b20gKyAnICcgKyBzZWNvbmRBdG9tICsgJ1xcbic7XG5cbiAgLy8gdXBkYXRlIGxvb3AgdmFyaWFibGVzXG4gIHYuYm9uZFNoaWZ0ICs9IG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzLmxlbmd0aCArIDE7XG4gIHYubm9kZVNoaWZ0ICs9IG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hhaW5FeHRlbmRpbmdWYXJpYWJsZXMobW9ub21lcjogTW9sR3JhcGgsIHY6IExvb3BWYXJpYWJsZXMsIEM6IExvb3BDb25zdGFudHMpOiB2b2lkIHtcbiAgdi5iYWNrYm9uZUF0dGFjaE5vZGUgPSB2Lm5vZGVTaGlmdCArIG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdO1xuICB2LmJvbmRTaGlmdCArPSBtb25vbWVyLmJvbmRzLmF0b21QYWlycy5sZW5ndGggKyAxO1xuXG4gIHYubm9kZVNoaWZ0ICs9IG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzLmxlbmd0aDtcbiAgdi5iYWNrYm9uZVBvc2l0aW9uU2hpZnRbMF0gKz0gbW9ub21lci5tZXRhLmJhY2tib25lU2hpZnQhWzBdOyAvLyB0b2RvOiBub24tbnVsbCBjaGVja1xuICB2LmJhY2tib25lUG9zaXRpb25TaGlmdFsxXSArPSB2LmZsaXBGYWN0b3IgKiBtb25vbWVyLm1ldGEuYmFja2JvbmVTaGlmdCFbMV07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUJyYW5jaFZhcmlhYmxlcyhtb25vbWVyOiBNb2xHcmFwaCwgdjogTG9vcFZhcmlhYmxlcykge1xuICB2LmJyYW5jaEF0dGFjaE5vZGUgPSB2Lm5vZGVTaGlmdCArIG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzJdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSlcbiAgICB2LmJyYW5jaFBvc2l0aW9uU2hpZnRbaV0gPSB2LmJhY2tib25lUG9zaXRpb25TaGlmdFtpXSArIG1vbm9tZXIubWV0YS5icmFuY2hTaGlmdCFbaV07XG59XG5cbmZ1bmN0aW9uIGZpbGxBdG9tTGluZXMobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lci5hdG9tcy5hdG9tVHlwZXMubGVuZ3RoOyArK2opIHtcbiAgICBjb25zdCBhdG9tSWR4ID0gdi5ub2RlU2hpZnQgKyBqICsgMTtcbiAgICBtb2xmaWxlQXRvbUJsb2NrW3Yubm9kZVNoaWZ0ICsgal0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArXG4gICAgICBtb25vbWVyLmF0b21zLmF0b21UeXBlc1tqXSArICcgJyArXG4gICAgICBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzBdICsgbW9ub21lci5hdG9tcy54W2pdKSArICcgJyArXG4gICAgICBrZWVwUHJlY2lzaW9uKHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzFdICsgdi5mbGlwRmFjdG9yICogbW9ub21lci5hdG9tcy55W2pdKSArXG4gICAgICAnICcgKyBtb25vbWVyLmF0b21zLmt3YXJnc1tqXTtcbiAgfVxufVxuXG4vLyB0b2RvOiByZW1vdmUgYXMgcXVpY2tmaXhcbmZ1bmN0aW9uIGZpbGxCcmFuY2hBdG9tTGluZXMobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lci5hdG9tcy5hdG9tVHlwZXMubGVuZ3RoOyArK2opIHtcbiAgICBjb25zdCBhdG9tSWR4ID0gdi5ub2RlU2hpZnQgKyBqICsgMTtcbiAgICBtb2xmaWxlQXRvbUJsb2NrW3Yubm9kZVNoaWZ0ICsgal0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArXG4gICAgICBtb25vbWVyLmF0b21zLmF0b21UeXBlc1tqXSArICcgJyArXG4gICAgICBrZWVwUHJlY2lzaW9uKHYuYnJhbmNoUG9zaXRpb25TaGlmdFswXSArIG1vbm9tZXIuYXRvbXMueFtqXSkgKyAnICcgK1xuICAgICAga2VlcFByZWNpc2lvbih2LmJyYW5jaFBvc2l0aW9uU2hpZnRbMV0gKyB2LmZsaXBGYWN0b3IgKiBtb25vbWVyLmF0b21zLnlbal0pICtcbiAgICAgICcgJyArIG1vbm9tZXIuYXRvbXMua3dhcmdzW2pdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbGxCb25kTGluZXMobW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVCb25kQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIC8vIGNvbnN0cnVjdCB0aGUgbGluZXMgb2YgVjNLIG1vbGZpbGUgYm9uZCBibG9ja1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzLmxlbmd0aDsgKytqKSB7XG4gICAgY29uc3QgYm9uZElkeCA9IHYuYm9uZFNoaWZ0ICsgaiArIDE7XG4gICAgY29uc3QgZmlyc3RBdG9tID0gbW9ub21lci5ib25kcy5hdG9tUGFpcnNbal1bMF0gKyB2Lm5vZGVTaGlmdDtcbiAgICBjb25zdCBzZWNvbmRBdG9tID0gbW9ub21lci5ib25kcy5hdG9tUGFpcnNbal1bMV0gKyB2Lm5vZGVTaGlmdDtcbiAgICBsZXQgYm9uZENmZyA9ICcnO1xuICAgIGlmIChtb25vbWVyLmJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmhhcyhqKSkge1xuICAgICAgLy8gZmxpcCBvcmllbnRhdGlvbiB3aGVuIG5lY2Vzc2FyeVxuICAgICAgbGV0IG9yaWVudGF0aW9uID0gbW9ub21lci5ib25kcy5ib25kQ29uZmlndXJhdGlvbi5nZXQoaik7XG4gICAgICBpZiAodi5mbGlwRmFjdG9yIDwgMClcbiAgICAgICAgb3JpZW50YXRpb24gPSAob3JpZW50YXRpb24gPT09IDEpID8gMyA6IDE7XG4gICAgICBib25kQ2ZnID0gJyBDRkc9JyArIG9yaWVudGF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBrd2FyZ3MgPSBtb25vbWVyLmJvbmRzLmt3YXJncy5oYXMoaikgP1xuICAgICAgJyAnICsgbW9ub21lci5ib25kcy5rd2FyZ3MuZ2V0KGopIDogJyc7XG4gICAgbW9sZmlsZUJvbmRCbG9ja1t2LmJvbmRTaGlmdCArIGpdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGJvbmRJZHggKyAnICcgK1xuICAgICAgbW9ub21lci5ib25kcy5ib25kVHlwZXNbal0gKyAnICcgK1xuICAgICAgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArIGJvbmRDZmcgKyBrd2FyZ3MgKyAnXFxuJztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxsQ2hhaW5FeHRlbmRpbmdCb25kKG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICBpZiAodi5iYWNrYm9uZUF0dGFjaE5vZGUgIT09IDApIHtcbiAgICBjb25zdCBib25kSWR4ID0gdi5ib25kU2hpZnQ7XG4gICAgY29uc3QgZmlyc3RBdG9tID0gdi5iYWNrYm9uZUF0dGFjaE5vZGU7XG4gICAgY29uc3Qgc2Vjb25kQXRvbSA9IG1vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzBdICsgdi5ub2RlU2hpZnQ7XG4gICAgbW9sZmlsZUJvbmRCbG9ja1t2LmJvbmRTaGlmdCAtIDFdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGJvbmRJZHggKyAnICcgK1xuICAgICAgMSArICcgJyArIGZpcnN0QXRvbSArICcgJyArIHNlY29uZEF0b20gKyAnXFxuJztcbiAgfVxufVxuXG4vLyB0b2RvOiByZW1vdmVcbmZ1bmN0aW9uIGZpbGxCYWNrYm9uZVRvQnJhbmNoQm9uZChicmFuY2hNb25vbWVyOiBNb2xHcmFwaCwgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMpOiB2b2lkIHtcbiAgY29uc3QgYm9uZElkeCA9IHYuYm9uZFNoaWZ0O1xuICBjb25zdCBmaXJzdEF0b20gPSB2LmJyYW5jaEF0dGFjaE5vZGU7XG4gIGNvbnN0IHNlY29uZEF0b20gPSBicmFuY2hNb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSArIHYubm9kZVNoaWZ0O1xuICBtb2xmaWxlQm9uZEJsb2NrW2JvbmRJZHggLSAxXSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICtcbiAgICAxICsgJyAnICsgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArICdcXG4nO1xufVxuXG4vKiBDb21wdXRlIHRoZSBhdG9tL2JvbmQgY291bnRzIGZvciB0aGUgcmVzdWx0aW5nIG1vbGZpbGUsIGRlcGVuZGluZyBvbiB0aGVcbiAqIHR5cGUgb2YgcG9seW1lciAocGVwdGlkZS9udWNsZW90aWRlKSAqL1xuZnVuY3Rpb24gZ2V0UmVzdWx0aW5nQXRvbUJvbmRDb3VudHMoXG4gIG1vbm9tZXJTZXE6IHN0cmluZ1tdLCBtb25vbWVyc0RpY3Q6IE1hcDxzdHJpbmcsIE1vbEdyYXBoPixcbiAgYWxwaGFiZXQ6IEFMUEhBQkVULCBwb2x5bWVyVHlwZTogSEVMTV9QT0xZTUVSX1RZUEVcbik6IHthdG9tQ291bnQ6IG51bWJlciwgYm9uZENvdW50OiBudW1iZXJ9IHtcbiAgbGV0IGF0b21Db3VudCA9IDA7XG4gIGxldCBib25kQ291bnQgPSAwO1xuXG4gIC8vIHN1bSB1cCBhbGwgdGhlIGF0b21zL25vZGVzIHByb3ZpZGVkIGJ5IHRoZSBzZXF1ZW5jZVxuICBmb3IgKGNvbnN0IG1vbm9tZXJTeW1ib2wgb2YgbW9ub21lclNlcSkge1xuICAgIGNvbnN0IG1vbm9tZXIgPSBtb25vbWVyc0RpY3QuZ2V0KG1vbm9tZXJTeW1ib2wpITtcbiAgICBhdG9tQ291bnQgKz0gbW9ub21lci5hdG9tcy54Lmxlbmd0aDtcbiAgICBib25kQ291bnQgKz0gbW9ub21lci5ib25kcy5ib25kVHlwZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gYWRkIGV4dHJhIHZhbHVlcyBkZXBlbmRpbmcgb24gdGhlIHBvbHltZXIgdHlwZVxuICBpZiAocG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlBFUFRJREUpIHtcbiAgICAvLyBhZGQgdGhlIHJpZ2h0bW9zdC90ZXJtaW5hdGluZyBjYXAgZ3JvdXAgJ09IJyAoaS5lLiAnTycpXG4gICAgYXRvbUNvdW50ICs9IDE7XG4gICAgLy8gYWRkIGNoYWluLWV4dGVuZGluZyBib25kcyAoQy1OSCBwZXIgZWFjaCBtb25vbWVyIHBhaXIgYW5kIHRlcm1pbmFsIEMtT0gpXG4gICAgYm9uZENvdW50ICs9IG1vbm9tZXJTZXEubGVuZ3RoO1xuICB9IGVsc2UgeyAvLyBudWNsZW90aWRlc1xuICAgIGNvbnN0IHN1Z2FyID0gKGFscGhhYmV0ID09PSBBTFBIQUJFVC5ETkEpID9cbiAgICAgIG1vbm9tZXJzRGljdC5nZXQoREVPWFlSSUJPU0UpISA6IG1vbm9tZXJzRGljdC5nZXQoUklCT1NFKSE7XG4gICAgY29uc3QgcGhvc3BoYXRlID0gbW9ub21lcnNEaWN0LmdldChQSE9TUEhBVEUpITtcblxuICAgIC8vIGFkZCBwaG9zcGhhdGUgYW5kIHN1Z2FyIHBlciBlYWNoIG51Y2xlb2Jhc2Ugc3ltYm9sXG4gICAgYXRvbUNvdW50ICs9IG1vbm9tZXJTZXEubGVuZ3RoICogKHBob3NwaGF0ZS5hdG9tcy54Lmxlbmd0aCArIHN1Z2FyLmF0b21zLngubGVuZ3RoKTtcbiAgICAvLyBhZGQgdGhlIGxlZnRtb3N0IGNhcCBncm91cCAnT0gnIChpLmUuICdPJykgdG8gdGhlIGZpcnN0IHBob3NwaGF0ZVxuICAgIGF0b21Db3VudCArPSAxO1xuXG4gICAgLy8gYWRkIGJvbmRzIGZyb20gcGhvc3BoYXRlIGFuZCBzdWdhclxuICAgIGJvbmRDb3VudCArPSBtb25vbWVyU2VxLmxlbmd0aCAqIChwaG9zcGhhdGUuYm9uZHMuYm9uZFR5cGVzLmxlbmd0aCArIHN1Z2FyLmJvbmRzLmJvbmRUeXBlcy5sZW5ndGgpO1xuXG4gICAgLy8gYWRkIGNoYWluLWV4dGVuZGluZyBhbmQgYnJhbmNoIGJvbmRzIChPLVAsIEMtTyBhbmQgQy1OIHBlciBlYWNoIG51Y2xlb3RpZGUpXG4gICAgYm9uZENvdW50ICs9IG1vbm9tZXJTZXEubGVuZ3RoICogMztcbiAgfVxuXG4gIHJldHVybiB7YXRvbUNvdW50LCBib25kQ291bnR9O1xufVxuXG4vKiBLZWVwIHByZWNpc2lvbiB1cG9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgb3ZlciBhdG9tIGNvb3JkaW5hdGVzICovXG5mdW5jdGlvbiBrZWVwUHJlY2lzaW9uKHg6IG51bWJlcikge1xuICByZXR1cm4gTWF0aC5yb3VuZChQUkVDSVNJT05fRkFDVE9SICogeCkvUFJFQ0lTSU9OX0ZBQ1RPUjtcbn1cblxuZnVuY3Rpb24gY29udmVydE1vbEdyYXBoVG9Nb2xmaWxlVjNLKG1vbEdyYXBoOiBNb2xHcmFwaCk6IHN0cmluZyB7XG4gIC8vIGNvdW50cyBsaW5lXG4gIGNvbnN0IGF0b21UeXBlID0gbW9sR3JhcGguYXRvbXMuYXRvbVR5cGVzO1xuICBjb25zdCB4ID0gbW9sR3JhcGguYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbEdyYXBoLmF0b21zLnk7XG4gIGNvbnN0IGF0b21Ld2FyZ3MgPSBtb2xHcmFwaC5hdG9tcy5rd2FyZ3M7XG4gIGNvbnN0IGJvbmRUeXBlID0gbW9sR3JhcGguYm9uZHMuYm9uZFR5cGVzO1xuICBjb25zdCBhdG9tUGFpciA9IG1vbEdyYXBoLmJvbmRzLmF0b21QYWlycztcbiAgY29uc3QgYm9uZEt3YXJncyA9IG1vbEdyYXBoLmJvbmRzLmt3YXJncztcbiAgY29uc3QgYm9uZENvbmZpZyA9IG1vbEdyYXBoLmJvbmRzLmJvbmRDb25maWd1cmF0aW9uO1xuICBjb25zdCBhdG9tQ291bnQgPSBhdG9tVHlwZS5sZW5ndGg7XG4gIGNvbnN0IGJvbmRDb3VudCA9IG1vbEdyYXBoLmJvbmRzLmJvbmRUeXBlcy5sZW5ndGg7XG5cbiAgLy8gdG9kbyByZXdyaXRlIHVzaW5nIGNvbnN0YW50c1xuICBjb25zdCBtb2xmaWxlQ291bnRzTGluZSA9IFYzS19CRUdJTl9DT1VOVFNfTElORSArIGF0b21Db3VudCArICcgJyArIGJvbmRDb3VudCArIFYzS19DT1VOVFNfTElORV9FTkRJTkc7XG5cbiAgLy8gYXRvbSBibG9ja1xuICBsZXQgbW9sZmlsZUF0b21CbG9jayA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0b21Db3VudDsgKytpKSB7XG4gICAgY29uc3QgYXRvbUlkeCA9IGkgKyAxO1xuICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBbeFtpXS50b1N0cmluZygpLCB5W2ldLnRvU3RyaW5nKCldO1xuXG4gICAgLy8gZm9ybWF0IGNvb3JkaW5hdGVzIHNvIHRoYXQgdGhleSBoYXZlIDYgZGlnaXRzIGFmdGVyIGRlY2ltYWwgcG9pbnRcbiAgICAvLyBmb3IgKGxldCBrID0gMDsgayA8IDI7ICsraykge1xuICAgIC8vICAgY29uc3QgZm9ybWF0dGVkID0gY29vcmRpbmF0ZVtrXS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgLy8gICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSlcbiAgICAvLyAgICAgZm9ybWF0dGVkLnB1c2goJzAnKTtcbiAgICAvLyAgIGZvcm1hdHRlZFsxXSA9IGZvcm1hdHRlZFsxXS5wYWRFbmQoVjNLX0FUT01fQ09PUkRJTkFURV9QUkVDSVNJT04sICcwJyk7XG4gICAgLy8gICBjb29yZGluYXRlW2tdID0gZm9ybWF0dGVkLmpvaW4oJy4nKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBhdG9tTGluZSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBhdG9tSWR4ICsgJyAnICsgYXRvbVR5cGVbaV0gKyAnICcgK1xuICAgICAgY29vcmRpbmF0ZVswXSArICcgJyArIGNvb3JkaW5hdGVbMV0gKyAnICcgKyBhdG9tS3dhcmdzW2ldO1xuICAgIG1vbGZpbGVBdG9tQmxvY2sgKz0gYXRvbUxpbmU7XG4gIH1cblxuICAvLyBib25kIGJsb2NrXG4gIGxldCBtb2xmaWxlQm9uZEJsb2NrID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYm9uZENvdW50OyArK2kpIHtcbiAgICBjb25zdCBib25kSWR4ID0gaSArIDE7XG4gICAgY29uc3QgZmlyc3RBdG9tID0gYXRvbVBhaXJbaV1bMF07XG4gICAgY29uc3Qgc2Vjb25kQXRvbSA9IGF0b21QYWlyW2ldWzFdO1xuICAgIGNvbnN0IGt3YXJncyA9IGJvbmRLd2FyZ3MuaGFzKGkpID8gJyAnICsgYm9uZEt3YXJncy5nZXQoaSkgOiAnJztcbiAgICBjb25zdCBib25kQ2ZnID0gYm9uZENvbmZpZy5oYXMoaSkgPyAnIENGRz0nICsgYm9uZENvbmZpZy5nZXQoaSkgOiAnJztcbiAgICBjb25zdCBib25kTGluZSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICsgYm9uZFR5cGVbaV0gKyAnICcgK1xuICAgICAgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArIGJvbmRDZmcgKyBrd2FyZ3MgKyAnXFxuJztcbiAgICBtb2xmaWxlQm9uZEJsb2NrICs9IGJvbmRMaW5lO1xuICB9XG5cbiAgY29uc3QgbW9sZmlsZVBhcnRzID0gW1xuICAgIFYzS19IRUFERVJfRklSU1RfTElORSxcbiAgICBWM0tfSEVBREVSX1NFQ09ORF9MSU5FLFxuICAgIFYzS19CRUdJTl9DVEFCX0JMT0NLLFxuICAgIG1vbGZpbGVDb3VudHNMaW5lLFxuICAgIFYzS19CRUdJTl9BVE9NX0JMT0NLLFxuICAgIG1vbGZpbGVBdG9tQmxvY2ssXG4gICAgVjNLX0VORF9BVE9NX0JMT0NLLFxuICAgIFYzS19CRUdJTl9CT05EX0JMT0NLLFxuICAgIG1vbGZpbGVCb25kQmxvY2ssXG4gICAgVjNLX0VORF9CT05EX0JMT0NLLFxuICAgIFYzS19FTkRfQ1RBQl9CTE9DSyxcbiAgICBWM0tfRU5ELFxuICBdO1xuICBjb25zdCByZXN1bHRpbmdNb2xmaWxlID0gbW9sZmlsZVBhcnRzLmpvaW4oJycpO1xuICAvLyBjb25zb2xlLmxvZyhyZXN1bHRpbmdNb2xmaWxlKTtcblxuICByZXR1cm4gcmVzdWx0aW5nTW9sZmlsZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN5bWJvbFRvQ2FwcGVkTW9sZmlsZU1hcChtb25vbWVyc0xpYkxpc3Q6IGFueVtdKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkPiB7XG4gIGlmIChERy5GdW5jLmZpbmQoe3BhY2thZ2U6ICdDaGVtJywgbmFtZTogJ2dldFJkS2l0TW9kdWxlJ30pLmxlbmd0aCA9PT0gMCkge1xuICAgIGdyb2suc2hlbGwud2FybmluZygnVHJhbnNmb3JtYXRpb24gdG8gYXRvbWljIGxldmVsIHJlcXVpcmVzIHBhY2thZ2UgXCJDaGVtXCIgaW5zdGFsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN5bWJvbFRvQ2FwcGVkTW9sZmlsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBjb25zdCBtb2R1bGVSZGtpdCA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmNhbGwoJ0NoZW06Z2V0UmRLaXRNb2R1bGUnKTtcblxuICBmb3IgKGNvbnN0IG1vbm9tZXJMaWJPYmplY3Qgb2YgbW9ub21lcnNMaWJMaXN0KSB7XG4gICAgY29uc3QgbW9ub21lclN5bWJvbCA9IG1vbm9tZXJMaWJPYmplY3RbSEVMTV9GSUVMRFMuU1lNQk9MXTtcbiAgICBjb25zdCBjYXBHcm91cHMgPSBwYXJzZUNhcEdyb3Vwcyhtb25vbWVyTGliT2JqZWN0W0hFTE1fRklFTERTLlJHUk9VUFNdKTtcbiAgICBjb25zdCBjYXBHcm91cElkeE1hcCA9IHBhcnNlQ2FwR3JvdXBJZHhNYXAobW9ub21lckxpYk9iamVjdFtIRUxNX0ZJRUxEUy5NT0xGSUxFXSk7XG5cbiAgICBjb25zdCBtb2xmaWxlVjNLID0gY29udmVydE1vbGZpbGVUb1YzSyhyZW1vdmVSR3JvdXBMaW5lcyhtb25vbWVyTGliT2JqZWN0W0hFTE1fRklFTERTLk1PTEZJTEVdKSwgbW9kdWxlUmRraXQpO1xuICAgIGNvbnN0IGNvdW50cyA9IHBhcnNlQXRvbUFuZEJvbmRDb3VudHMobW9sZmlsZVYzSyk7XG5cbiAgICBjb25zdCBhdG9tcyA9IHBhcnNlQXRvbUJsb2NrKG1vbGZpbGVWM0ssIGNvdW50cy5hdG9tQ291bnQpO1xuICAgIGNvbnN0IGJvbmRzID0gcGFyc2VCb25kQmxvY2sobW9sZmlsZVYzSywgY291bnRzLmJvbmRDb3VudCk7XG4gICAgY29uc3QgbWV0YSA9IGdldE1vbm9tZXJNZXRhZGF0YShhdG9tcywgYm9uZHMsIGNhcEdyb3VwcywgY2FwR3JvdXBJZHhNYXApO1xuXG4gICAgY29uc3QgbW9ub21lckdyYXBoOiBNb2xHcmFwaCA9IHthdG9tczogYXRvbXMsIGJvbmRzOiBib25kcywgbWV0YTogbWV0YX07XG5cbiAgICByZW1vdmVIeWRyb2dlbihtb25vbWVyR3JhcGgpO1xuXG4gICAgY29uc3QgbW9sZmlsZSA9IGNvbnZlcnRNb2xHcmFwaFRvTW9sZmlsZVYzSyhtb25vbWVyR3JhcGgpO1xuICAgIHN5bWJvbFRvQ2FwcGVkTW9sZmlsZU1hcC5zZXQobW9ub21lclN5bWJvbCwgbW9sZmlsZSk7XG4gIH1cbiAgcmV0dXJuIHN5bWJvbFRvQ2FwcGVkTW9sZmlsZU1hcDtcbn1cbiJdfQ==
|
|
1095
|
+
//TODO
|
|
1096
|
+
export function capTheMonomer(monomer) {
|
|
1097
|
+
return ' ';
|
|
1098
|
+
}
|
|
1099
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tYXRvbWljLWxldmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidG8tYXRvbWljLWxldmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLHlGQUF5RjtBQUN6RixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFjLGdCQUFnQixFQUFzRCxNQUFNLFNBQVMsQ0FBQztBQUczRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUd2RCxzQ0FBc0M7QUFDdEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM5QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFekIsd0RBQXdEO0FBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLHFCQUFxQixHQUFHLHNDQUFzQyxDQUFDO0FBQ3JFLE1BQU0sc0JBQXNCLEdBQUcsMkNBQTJDLENBQUM7QUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQy9DLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFDL0MsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUM7QUFDMUMsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQy9DLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUMvQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFDdEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBRTNCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBTSxDQUFDLENBQUMsbUZBQW1GO0FBRXBILHlEQUF5RDtBQUN6RCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUV0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBb0VyQixvREFBb0Q7QUFFcEQsaUhBQWlIO0FBQ2pILE1BQU0sVUFBZ0IsY0FBYyxDQUNsQyxFQUFnQixFQUFFLFdBQThCLEVBQUUsZUFBc0I7O1FBRXhFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1lBQ3hGLE9BQU87U0FDUjtRQUVELElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDaEIsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWE7NkNBQ0csV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUM3RCxDQUFDO1lBQ0YsT0FBTztTQUNSO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywrQkFBa0IsRUFBRTtZQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUN0QixXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sdUNBQXFCLFNBQVMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sZ0NBQWUsQ0FBQztRQUVuRCw4REFBOEQ7UUFDOUQsSUFBSSxXQUFXLENBQUM7UUFDaEIsNkVBQTZFO1FBQzdFLElBQUksUUFBUSwyQkFBZ0IsRUFBRTtZQUM1QixXQUFXLDRDQUE0QixDQUFDO1NBQ3pDO2FBQU0sSUFBSSxRQUFRLDZCQUFpQixJQUFJLFFBQVEsNkJBQWlCLEVBQUU7WUFDakUsV0FBVyxvQ0FBd0IsQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hCLCtFQUErRSxXQUFXLFdBQVcsQ0FDdEcsQ0FBQztZQUNGLE9BQU87U0FDUjtRQUVELE1BQU0scUJBQXFCLEdBQWUsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEYscUVBQXFFO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUcsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBYSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQzNDLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMxRixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsMEJBQTBCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUFBO0FBRUQ7dUJBQ3VCO0FBQ3ZCLFNBQVMsc0JBQXNCLENBQzdCLGVBQXNCLEVBQUUsV0FBOEIsRUFBRSxRQUFrQjtJQUUxRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQ3JCLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDTCxJQUFJLEVBQUUsOENBQTBCLEtBQUssV0FBVyxFQUFFO1lBQ2hELElBQ0UsV0FBVyxzQ0FBMEI7Z0JBQ3JDLENBQUMsRUFBRSw4Q0FBMEIsNENBQTZCO29CQUMxRCxRQUFRLDZCQUFpQixJQUFJLEVBQUUsbUNBQW9CLEtBQUssV0FBVztvQkFDbkUsUUFBUSw2QkFBaUIsSUFBSSxFQUFFLG1DQUFvQixLQUFLLE1BQU07b0JBQzlELEVBQUUsbUNBQW9CLEtBQUssU0FBUyxDQUFDO2dCQUNyQyxXQUFXLDhDQUE4QjtvQkFDekMsRUFBRSw4Q0FBMEIsNENBQTZCLEVBQ3pEO2dCQUNBLE1BQU0sYUFBYSxHQUEyQixFQUFFLENBQUM7Z0JBQ2pELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNqQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsbUNBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDaEQ7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsNERBQTREO0FBQzVELFNBQVMsd0JBQXdCLENBQUMsV0FBOEI7SUFDOUQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBZSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVuRCxpQ0FBaUM7SUFDakMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLGtDQUFnQixDQUFDO0lBQ3JELE1BQU0sWUFBWSxHQUFpQixXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXBFLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyw2REFBNkQ7UUFDN0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDaEU7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsMERBQTBEO0FBQzFELFNBQWUsZUFBZSxDQUM1QixxQkFBaUMsRUFBRSxlQUFzQixFQUFFLFdBQThCLEVBQUUsUUFBa0I7O1FBRTdHLHNEQUFzRDtRQUN0RCxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFFakQsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXJFLGdFQUFnRTtRQUNoRSxJQUFJLFdBQVcsc0NBQTBCLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLDZCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDM0MsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTztnQkFDdkIsa0JBQWtCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDeEY7UUFFRCxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sVUFBVSxHQUFhLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELEtBQUssTUFBTSxHQUFHLElBQUksVUFBVTtnQkFDMUIsa0JBQWtCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDeEY7UUFDRCw2QkFBNkI7UUFFN0IsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUFBO0FBRUQseUVBQXlFO0FBQ3pFLFNBQVMsa0JBQWtCLENBQ3pCLFlBQW1DLEVBQUUsR0FBVyxFQUNoRCxtQkFBcUMsRUFBRSxXQUFnQixFQUFFLFdBQThCO0lBRXZGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLE1BQU0sV0FBVyxHQUFvQixXQUFXLENBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRyxJQUFJLFdBQVc7WUFDYixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQzs7WUFFbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2hGLHlCQUF5QjtLQUMxQjtBQUNILENBQUM7QUFFRDtvRUFDb0U7QUFDcEUsU0FBUyxXQUFXLENBQ2xCLGFBQXFCLEVBQUUsbUJBQXFDLEVBQzVELFdBQWdCLEVBQUUsV0FBOEIsQ0FBQyxxQ0FBcUM7O0lBRXRGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDM0MsT0FBTyxJQUFJLENBQUM7S0FDYjtTQUFNO1FBQ0wsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxTQUFTLHFDQUFxQixDQUFDLENBQUM7UUFDakUsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxxQ0FBcUIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFNBQVMscUNBQXFCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RyxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV6RSxNQUFNLFlBQVksR0FBYSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFFeEUsSUFBSSxXQUFXLDhDQUE4QixFQUFFO1lBQzdDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sRUFBRSxjQUFjO1lBQ3JCLElBQUksYUFBYSxLQUFLLE1BQU0sSUFBSSxhQUFhLEtBQUssV0FBVztnQkFDM0QsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ25DLElBQUksYUFBYSxLQUFLLFNBQVM7Z0JBQ2xDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDOztnQkFFMUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDeEM7UUFFRCxzRUFBc0U7UUFDdEUsSUFBSSxXQUFXLDhDQUE4QixFQUFFO1lBQzdDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7YUFBTSxFQUFFLGNBQWM7WUFDckIsSUFBSSxhQUFhLEtBQUssTUFBTSxJQUFJLGFBQWEsS0FBSyxXQUFXLEVBQUU7Z0JBQzdELFlBQVk7Z0JBQ1osa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELHVDQUF1QztnQkFDdkMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCO2dCQUNuRixTQUFTLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNyQywyQkFBMkI7Z0JBQzNCLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxZQUFZO2dCQUNaLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCwrQkFBK0I7Z0JBQy9CLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9EO2lCQUFNLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtnQkFDdEMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLGdCQUFnQixDQUNkLFlBQVksRUFDWixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM3RCxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM5RCxDQUFDO2dCQUNGLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3JDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9EO2lCQUFNLEVBQUUsY0FBYztnQkFDckIsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7U0FDRjtRQUNELGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3QixPQUFPLFlBQVksQ0FBQztLQUNyQjtBQUNILENBQUM7QUFFRCxZQUFZO0FBQ1osU0FBUyxrQkFBa0IsQ0FDekIsS0FBWSxFQUFFLEtBQVksRUFBRSxTQUFtQixFQUFFLGNBQW1DO0lBRXBGLE1BQU0sSUFBSSxHQUFvQjtRQUM1QixhQUFhLEVBQUUsSUFBSTtRQUNuQixXQUFXLEVBQUUsSUFBSTtRQUNqQixhQUFhLEVBQUUsRUFBRTtRQUNqQixNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEO1lBQ1k7QUFDWixTQUFTLGNBQWMsQ0FBQyxhQUFvQjtJQUMxQyxtQ0FBbUM7SUFDbkMscUNBQXFDO0lBQ3JDLDZFQUE2RTtJQUM3RSxpQ0FBaUM7SUFDakMsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQ3BDLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFO1FBQy9CLElBQUksUUFBUSxHQUFXLEdBQUcsdURBQWdDLENBQUM7UUFFM0QsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxRQUFRO1lBQ1gsUUFBUSxHQUFHLEdBQUcsaUVBQTBDLENBQUM7UUFDM0QsOEVBQThFO1FBQzlFLGlCQUFpQjtRQUNqQixRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLHdEQUF3RDtZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMvQjtJQUNELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsU0FBUyxtQkFBbUIsQ0FDMUIsS0FBWSxFQUFFLFNBQW1CLEVBQUUsY0FBbUM7SUFFdEUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLGNBQWM7UUFDekMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRDQUE0QztBQUNuRyxDQUFDO0FBRUQsV0FBVztBQUNYLFNBQVMsU0FBUyxDQUFDLGNBQW1DLEVBQUUsSUFBcUI7SUFDM0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUseURBQXlEO1lBQ2pGLHVFQUF1RTtZQUN2RSw0QkFBNEI7WUFDNUIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUN0QjtTQUNGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsV0FBVztBQUNYLFNBQVMsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLElBQXFCO0lBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDekMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUN6RCxtRUFBbUU7UUFDbkUsMkVBQTJFO1FBQzNFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDakMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtxQkFDdEI7b0JBQ0QsRUFBRSxDQUFDLENBQUM7aUJBQ0w7YUFDRjtTQUNGO1FBQ0QsRUFBRSxDQUFDLENBQUM7S0FDTDtBQUNILENBQUM7QUFFRCxXQUFXO0FBQ1gsU0FBUyxTQUFTLENBQUMsUUFBa0IsRUFBRSxXQUE4QjtJQUNuRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDNUIsYUFBYSxDQUNYLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3JEO1lBQ0QsYUFBYSxDQUNYLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3JEO1NBQ0YsQ0FBQztLQUNIO0lBRUQsSUFBSSxXQUFXLHNDQUEwQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDNUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDMUIsYUFBYSxDQUNYLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3JEO1lBQ0QsYUFBYSxDQUNYLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3JEO1NBQ0YsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUVEO3VCQUN1QjtBQUN2QixTQUFTLGlCQUFpQixDQUFDLFVBQWtCO0lBQzNDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNkLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsK0JBQStCO0FBQy9CLFNBQVMsbUJBQW1CLENBQUMsVUFBa0IsRUFBRSxXQUFnQjtJQUMvRCw0QkFBNEI7SUFDNUIsa0hBQWtIO0lBQ2xILE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsMkRBQTJEO0FBQzNELFNBQVMsY0FBYyxDQUFDLFVBQWtCLEVBQUUsU0FBaUI7SUFDM0QsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSxzQ0FBc0M7SUFFdEMsTUFBTSxTQUFTLEdBQWEsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsTUFBTSxTQUFTLEdBQWUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQW1CLENBQUM7SUFFdkMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JELEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxnQ0FBZ0M7UUFDaEMsTUFBTSxZQUFZLEdBQWEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQ3JFLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzFCLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEYsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQywwQkFBMEI7UUFDMUIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckQsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0RCxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNuQixRQUFRLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQztnQkFDZixNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNoQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNuRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3RDtRQUNELElBQUksQ0FBQyxhQUFhO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ2hDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLGlCQUFpQixFQUFFLGlCQUFpQjtRQUNwQyxNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQ7O2lEQUVpRDtBQUNqRCxTQUFTLG1CQUFtQixDQUFDLFVBQWtCO0lBQzdDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRWpELHNCQUFzQjtJQUN0QixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDbkIscURBQXFEO1FBQ3JELEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlFLDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFcEMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzdDO0lBRUQseURBQXlEO0lBQ3pELEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDbkIsS0FBSyxJQUFJLGFBQWEsQ0FBQztRQUN2QixHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3JELFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM5RCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3RUFBd0U7UUFDckYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsRCxtR0FBbUc7WUFDbkcsd0NBQXdDO1lBQ3hDLHlEQUF5RDtZQUN6RCx1REFBdUQ7WUFDdkQsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdHLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLGVBQWUsQ0FBQyxDQUFDLENBQUMsZ0RBQWdELENBQUMsQ0FBQzs7Z0JBRXJHLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztLQUMvQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFVBQWtCO0lBQ2hELFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztJQUVwRixtQkFBbUI7SUFDbkIsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBQ3pFLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTlELG1CQUFtQjtJQUNuQixLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNoQixHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFOUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs0RUFDNEU7QUFDNUUsU0FBUyxjQUFjLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtJQUMzRCxNQUFNLFNBQVMsR0FBYSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxNQUFNLENBQUMsR0FBYSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsR0FBYSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBYSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5QyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxvQkFBb0I7SUFDMUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUVoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xDLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUN2RSxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFFekQsa0JBQWtCO1FBQ2xCLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEQsd0NBQXdDO1FBQ3hDLE1BQU0sVUFBVSxHQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDMUIsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDaEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQixpREFBaUQ7UUFDakQsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLEtBQUssR0FBRyxHQUFHLENBQUM7S0FDYjtJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsU0FBUztRQUNwQixDQUFDLEVBQUUsQ0FBQztRQUNKLENBQUMsRUFBRSxDQUFDO1FBQ0osTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVELDJCQUEyQjtBQUMzQixTQUFTLGNBQWMsQ0FBQyxZQUFzQjtJQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDOUMsSUFBSyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDakQsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtZQUM3RixFQUFFLENBQUMsQ0FBQztZQUNKLDBDQUEwQztTQUMzQztRQUNELEVBQUUsQ0FBQyxDQUFDO0tBQ0w7QUFDSCxDQUFDO0FBRUQ7NENBQzRDO0FBQzVDLFNBQVMsa0JBQWtCLENBQUMsWUFBc0IsRUFBRSxXQUFvQjtJQUN0RSxJQUFJLE9BQU8sV0FBVyxLQUFLLFdBQVcsRUFBRTtRQUN0QyxNQUFNLGNBQWMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBRS9CLDZCQUE2QjtRQUM3QixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkMsK0RBQStEO1FBQy9ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVztnQkFDckMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVztnQkFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztTQUN2RTtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVztnQkFDOUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXO2dCQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1NBQ2hFO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLFNBQVMsS0FBSyxXQUFXLElBQUksVUFBVSxLQUFLLFdBQVcsRUFBRTtnQkFDM0QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyQixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsRUFBRSxDQUFDLENBQUM7YUFDTDtpQkFBTTtnQkFDTCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzlFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzthQUNsRjtZQUNELEVBQUUsQ0FBQyxDQUFDO1NBQ0w7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxjQUFjLEVBQUU7Z0JBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUM7Z0JBQ2hELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxjQUFjLEVBQUU7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO2dCQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBRUQsNEJBQTRCO0FBQzVCLHNFQUFzRTtBQUN0RSxTQUFTLHlCQUF5QixDQUFDLE9BQWlCO0lBQ2xELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztJQUNoRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUIsMEJBQTBCO0lBQzFCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRTFELG9EQUFvRDtJQUNwRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRTVELGlGQUFpRjtJQUNqRixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNuQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQixNQUFNLGtCQUFrQixHQUFHLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5FLG1DQUFtQztJQUNuQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUVwRCw2RUFBNkU7SUFDN0UsaUJBQWlCLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQUMsT0FBaUI7SUFDcEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQTBDO0lBQ2hHLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUUxQiwwQkFBMEI7SUFDMUIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFMUQsdURBQXVEO0lBQ3ZELCtEQUErRDtJQUUvRCxvRkFBb0Y7SUFDcEYsOENBQThDO0lBRTlDLHlDQUF5QztJQUN6QyxrQ0FBa0M7SUFFbEMsc0VBQXNFO0lBRXRFLHNDQUFzQztJQUN0Qyx1REFBdUQ7SUFFdkQsZ0ZBQWdGO0lBQ2hGLGtEQUFrRDtBQUNwRCxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxPQUFpQjtJQUNoRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7SUFDaEcsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTFCLDBCQUEwQjtJQUMxQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUUxRCx1REFBdUQ7SUFDdkQsK0RBQStEO0lBRS9ELG9GQUFvRjtJQUNwRiw4Q0FBOEM7SUFFOUMseUNBQXlDO0lBQ3pDLGtDQUFrQztJQUVsQyxzRUFBc0U7SUFFdEUsc0NBQXNDO0lBQ3RDLHVEQUF1RDtJQUV2RCxnRkFBZ0Y7SUFDaEYsa0RBQWtEO0FBQ3BELENBQUM7QUFDRCxTQUFTLHNCQUFzQixDQUFDLE9BQWlCO0lBQy9DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBDQUEwQztJQUNoRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFMUIsMEJBQTBCO0lBQzFCLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRTFELHVEQUF1RDtJQUN2RCwrREFBK0Q7SUFFL0Qsb0ZBQW9GO0lBQ3BGLDhDQUE4QztJQUU5Qyx5Q0FBeUM7SUFDekMsa0NBQWtDO0lBRWxDLHNFQUFzRTtJQUV0RSxzQ0FBc0M7SUFDdEMsdURBQXVEO0lBRXZELGdGQUFnRjtJQUNoRixrREFBa0Q7QUFDcEQsQ0FBQztBQUVEOytDQUMrQztBQUMvQyxTQUFTLHNCQUFzQixDQUFDLE9BQWlCLEVBQUUsa0JBQTBCO0lBQzNFLDREQUE0RDtJQUM1RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzdDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQy9CLENBQUMsZUFBZSxDQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkQsQ0FDRixDQUFDO0tBQ0g7QUFDSCxDQUFDO0FBRUQsbUVBQW1FO0FBQ25FLFNBQVMsZUFBZSxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQzNDLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1gsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztLQUM3QjtTQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsQixLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7S0FDeEM7U0FBTTtRQUNMLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDeEQ7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxtRUFBbUU7QUFDbkUsU0FBUyxlQUFlLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDM0MsT0FBTyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsS0FBYTtJQUN0RCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDZixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FB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QUMsT0FBZ0I7SUFDNUMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7U3BsaXR0ZXJGdW5jLCBUQUdTLCBnZXRTcGxpdHRlcn0gZnJvbSAnLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHtIRUxNX0ZJRUxEUywgSEVMTV9DT1JFX0ZJRUxEUywgSEVMTV9QT0xZTUVSX1RZUEUsIEhFTE1fTU9OT01FUl9UWVBFLCBSR1JPVVBfRklFTERTfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7QUxQSEFCRVQsIE5PVEFUSU9OfSBmcm9tICcuL21hY3JvbW9sZWN1bGUnO1xuaW1wb3J0IHtVbml0c0hhbmRsZXJ9IGZyb20gJy4vdW5pdHMtaGFuZGxlcic7XG5pbXBvcnQge05vdGF0aW9uQ29udmVydGVyfSBmcm9tICcuL25vdGF0aW9uLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBNb25vbWVyIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnO1xuXG4vLyBjb25zdGFudHMgZm9yIHBhcnNpbmcgbW9sZmlsZSBWMjAwMFxuY29uc3QgVjJLX1JHUF9TSElGVCA9IDg7XG5jb25zdCBWMktfUkdQX0xJTkUgPSAnTSAgUkdQJztcbmNvbnN0IFYyS19BX0xJTkUgPSAnQSAgJztcblxuLy8gY29uc3RhbnRzIGZvciBwYXJzaW5nL3JlY29uc3RydWN0aW9uIG9mIG1vbGZpbGUgVjMwMDBcbmNvbnN0IFYzS19DT1VOVFNfU0hJRlQgPSAxNDtcbmNvbnN0IFYzS19JRFhfU0hJRlQgPSA3O1xuY29uc3QgVjNLX0hFQURFUl9GSVJTVF9MSU5FID0gJ1xcbkRhdGFncm9rIG1hY3JvbW9sZWN1bGUgaGFuZGxlclxcblxcbic7XG5jb25zdCBWM0tfSEVBREVSX1NFQ09ORF9MSU5FID0gJyAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgIDk5OSBWMzAwMFxcbic7XG5jb25zdCBWM0tfQkVHSU5fQ1RBQl9CTE9DSyA9ICdNICBWMzAgQkVHSU4gQ1RBQlxcbic7XG5jb25zdCBWM0tfRU5EX0NUQUJfQkxPQ0sgPSAnTSAgVjMwIEVORCBDVEFCXFxuJztcbmNvbnN0IFYzS19CRUdJTl9DT1VOVFNfTElORSA9ICdNICBWMzAgQ09VTlRTICc7XG5jb25zdCBWM0tfQ09VTlRTX0xJTkVfRU5ESU5HID0gJyAwIDAgMFxcbic7XG5jb25zdCBWM0tfQkVHSU5fQVRPTV9CTE9DSyA9ICdNICBWMzAgQkVHSU4gQVRPTVxcbic7XG5jb25zdCBWM0tfRU5EX0FUT01fQkxPQ0sgPSAnTSAgVjMwIEVORCBBVE9NXFxuJztcbmNvbnN0IFYzS19CRUdJTl9CT05EX0JMT0NLID0gJ00gIFYzMCBCRUdJTiBCT05EXFxuJztcbmNvbnN0IFYzS19FTkRfQk9ORF9CTE9DSyA9ICdNICBWMzAgRU5EIEJPTkRcXG4nO1xuY29uc3QgVjNLX0JPTkRfQ09ORklHID0gJyBDRkc9JztcbmNvbnN0IFYzS19CRUdJTl9EQVRBX0xJTkUgPSAnTSAgVjMwICc7XG5jb25zdCBWM0tfRU5EID0gJ00gIEVORFxcbic7XG5cbmNvbnN0IFBSRUNJU0lPTl9GQUNUT1IgPSAxMF8wMDA7IC8vIEhFTE1Db3JlTGlicmFyeSBoYXMgNCBzaWduaWZpY2FudCBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCBpbiBhdG9tIGNvb3JkaW5hdGVzXG5cbi8vIHN5bWJvbHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIG1vbm9tZXJzIGluIEhFTE0gbGlicmFyeVxuY29uc3QgREVPWFlSSUJPU0UgPSAnZCc7XG5jb25zdCBSSUJPU0UgPSAncic7XG5jb25zdCBQSE9TUEhBVEUgPSAncCc7XG5cbmNvbnN0IE9YWUdFTiA9ICdPJztcbmNvbnN0IEhZRFJPR0VOID0gJ0gnO1xuXG4vKiBTdG9yZXMgbmVjZXNzYXJ5IGRhdGEgYWJvdXQgYXRvbXMgb2YgYSBtb25vbWVyIHBhcnNlZCBmcm9tIE1vbGZpbGUgKi9cbnR5cGUgQXRvbXMgPSB7XG4gIC8qIGVsZW1lbnQgc3ltYm9scyBmb3IgbW9ub21lcidzIGF0b21zICovXG4gIGF0b21UeXBlczogc3RyaW5nW10sXG4gIC8qIENhcnRlc2lhbiBjb29yZGlhbnRlcyBvZiBtb25vbWVyJ3MgYXRvbXMgKi9cbiAgeDogbnVtYmVyW10sIC8vIHRvZG86IGNvbnZlcnQgdG8gRmxvYXQzMlxuICB5OiBudW1iZXJbXSxcbiAgLyogVjNLIGF0b20gbGluZSBtYXkgY29udGFpbiBrZXl3b3JkIGFyZ3MgKi9cbiAga3dhcmdzOiBzdHJpbmdbXSxcbn1cblxuLyogU3RvcmVzIG5lY2Vzc2FyeSBkYXRhIGFib3V0IGJvbmRzIG9mIGEgbW9ub21lciBwYXJzZWQgZnJvbSBNb2xmaWxlICovXG50eXBlIEJvbmRzID0ge1xuICAvKiBib25kIHR5cGVzIGZvciBhbGwgbGluZXMgb2YgTW9sZmlsZSBib25kIGJsb2NrICovXG4gIGJvbmRUeXBlczogbnVtYmVyW10sIC8vIHRvZG86IGNvbnZlcnQgdG8gSW5kMzJcbiAgLyogSW5kaWNlcyBvZiBhbGwgYXRvbSBwYWlycywgaW5kZXhpbmcgc3RhcnRpbmcgZnJvbSAxICAqL1xuICBhdG9tUGFpcnM6IG51bWJlcltdW10sXG4gIC8qIElmIGEgYm9uZCBoYXMgQ0ZHPS4uLiBrZXl3b3JkIGFyZ3VtZW50LCBpdCBpcyBwYXJzZWQgYW5kIHNvdHJlZCBhcyBhXG4gICAqIHZhbHVlIG9mIHRoZSBtYXAsIHdpdGggdGhlIGtleSBiZWluZyB0aGUgYm9uZCdzIGluZGV4ICAqL1xuICBib25kQ29uZmlndXJhdGlvbjogTWFwPG51bWJlciwgbnVtYmVyPixcbiAgLyogVjNLIGJvbmQgbGluZSBtYXkgY29udGFpbiBrZXl3b3JkIGFyZ3MgKi9cbiAga3dhcmdzOiBNYXA8bnVtYmVyLCBzdHJpbmc+LFxufVxuXG4vKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG1vbm9tZXIgbmVjZXNzYXJ5IHRvIHJlc3RvcmUgdGhlIHJlc3VsdGluZ1xuICogbW9sZmlsZSAgKi9cbnR5cGUgTW9ub21lck1ldGFkYXRhID0ge1xuICAvKiB0ZXJtaW5hbCBub2RlczogMC10aCBjb3JyZXNwb25kcyB0byB0aGUgXCJsZWZ0bW9zdFwiIG9uZSwgMXN0LCB0byB0aGUgXCJyaWdodG1vc3RcIixcbiAgICogZS5nLiBOLXRlcm1pbnVzIGFuZCBDLXRlcm1pbnVzIGluIHBlcHRpZGVzICovXG4gIHRlcm1pbmFsTm9kZXM6IG51bWJlcltdLFxuICAvKiByLWdyb3VwIG5vZGVzOiAwLXRoIGNvcnJlc3BvbmRzIHRvIHRoZSBcImxlZnRtb3N0XCIgb25lLCAxc3QsIHRvIHRoZSBcInJpZ2h0bW9zdFwiICovXG4gIHJOb2RlczogbnVtYmVyW10sXG4gIC8qIHNoaWZ0IGZyb20gdGhlIG9yaWdpbiB0byB0aGUgbmV4dCBiYWNrYm9uZSwgbnVsbCBmb3IgYnJhbmNoIG1vbm9tZXJzICovXG4gIGJhY2tib25lU2hpZnQ6IG51bWJlcltdIHwgbnVsbCxcbiAgLyogc2hpZnQgZnJvbSB0aGUgb3JpZ2luIHRvIHRoZSBuZXh0IGJyYW5jaCwgbnVsbCBmb3IgYnJhbmNoIG1vbm9tZXJzICovXG4gIGJyYW5jaFNoaWZ0OiBudW1iZXJbXSB8IG51bGxcbn1cblxudHlwZSBNb2xHcmFwaCA9IHtcbiAgYXRvbXM6IEF0b21zLFxuICBib25kczogQm9uZHMsXG4gIG1ldGE6IE1vbm9tZXJNZXRhZGF0YSxcbn1cblxuLyogSGVscGVyIHN0cnVjdHVyZSB3cmFwcGluZyBjb21tb24gYXJndW1lbnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zICovXG50eXBlIExvb3BWYXJpYWJsZXMgPSB7XG4gIGk6IG51bWJlcixcbiAgbm9kZVNoaWZ0OiBudW1iZXIsXG4gIGJvbmRTaGlmdDogbnVtYmVyLFxuICBiYWNrYm9uZVBvc2l0aW9uU2hpZnQ6IG51bWJlcltdLFxuICBiYWNrYm9uZUF0dGFjaE5vZGU6IG51bWJlcjsgLy8gbm9kZSB0byB3aGljaCB0aGUgbmV4dCBiYWNrYm9uZSBpcyBhdHRhY2hlZFxuICBicmFuY2hQb3NpdGlvblNoaWZ0OiBudW1iZXJbXSxcbiAgYnJhbmNoQXR0YWNoTm9kZTogbnVtYmVyLFxuICBmbGlwRmFjdG9yOiBudW1iZXIsXG4gIC8vIHRvZG86IHNob3VsZCB3ZSBjb25zaWRlciByZXByZXNlbnRhdGlvbnMgb3RoZXIgdGhhbiBwbGFuYXI/XG59XG5cbi8qIEhlbHBlciBzdHJ1Y3R1cmUgd3JhcHBpbmcgY29tbW9uIGFyZ3VtZW50cyB0byBzZXZlcmFsIGZ1bmN0aW9ucyAqL1xudHlwZSBMb29wQ29uc3RhbnRzID0ge1xuICBzdWdhcjogTW9sR3JhcGggfCBudWxsLFxuICBwaG9zcGhhdGU6IE1vbEdyYXBoIHwgbnVsbCxcbiAgc2VxTGVuZ3RoOiBudW1iZXIsXG4gIGF0b21Db3VudDogbnVtYmVyLFxuICBib25kQ291bnQ6IG51bWJlcixcbn1cblxuLy8gdG9kbzogdmVyaWZ5IHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHJldHVybiB0eXBlc1xuXG4vKiBDb252ZXJ0IE1hY3JvbW9sZWN1bGUgY29sdW1uIGludG8gTW9sZWN1bGUgY29sdW1uIHN0b3JpbmcgbW9sZmlsZSBWMzAwMCB3aXRoIHRoZSBoZWxwIG9mIGEgbW9ub21lciBsaWJyYXJ5ICAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90b0F0b21pY0xldmVsKFxuICBkZjogREcuRGF0YUZyYW1lLCBtYWNyb01vbENvbDogREcuQ29sdW1uPHN0cmluZz4sIG1vbm9tZXJzTGliTGlzdDogYW55W11cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoREcuRnVuYy5maW5kKHtwYWNrYWdlOiAnQ2hlbScsIG5hbWU6ICdnZXRSZEtpdE1vZHVsZSd9KS5sZW5ndGggPT09IDApIHtcbiAgICBncm9rLnNoZWxsLndhcm5pbmcoJ1RyYW5zZm9ybWF0aW9uIHRvIGF0b21pYyBsZXZlbCByZXF1aXJlcyBwYWNrYWdlIFwiQ2hlbVwiIGluc3RhbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobWFjcm9Nb2xDb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKSB7XG4gICAgZ3Jvay5zaGVsbC53YXJuaW5nKFxuICAgICAgYE9ubHkgdGhlICR7REcuU0VNVFlQRS5NQUNST01PTEVDVUxFfSBjb2x1bW5zIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYXRvbWljXG4gICAgICBsZXZlbCwgdGhlIGNob3NlbiBjb2x1bW4gaGFzIHNlbVR5cGUgJHttYWNyb01vbENvbC5zZW1UeXBlfWBcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgJ2hlbG0nIHRvICdzZXBhcmF0b3InIHVuaXRzXG4gIGlmIChtYWNyb01vbENvbC5nZXRUYWcoREcuVEFHUy5VTklUUykgPT09IE5PVEFUSU9OLkhFTE0pIHtcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBuZXcgTm90YXRpb25Db252ZXJ0ZXIobWFjcm9Nb2xDb2wpO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9ICcvJztcbiAgICBtYWNyb01vbENvbCA9IGNvbnZlcnRlci5jb252ZXJ0KE5PVEFUSU9OLlNFUEFSQVRPUiwgc2VwYXJhdG9yKTtcbiAgfVxuXG4gIGNvbnN0IGFscGhhYmV0ID0gbWFjcm9Nb2xDb2wuZ2V0VGFnKFRBR1MuYWxwaGFiZXQpO1xuXG4gIC8vIGRldGVybWluZSB0aGUgcG9seW1lciB0eXBlIGFjY29yZGluZyB0byBIRUxNIHNwZWNpZmljYXRpb25zXG4gIGxldCBwb2x5bWVyVHlwZTtcbiAgLy8gdG9kbzogYW4gZXhjZXB0aW9uIGZyb20gZGFydCBjb21lcyBiZWZvcmUgdGhpcyBjaGVjayBpZiB0aGUgYWxwaGFiZXQgaXMgVU5cbiAgaWYgKGFscGhhYmV0ID09PSBBTFBIQUJFVC5QVCkge1xuICAgIHBvbHltZXJUeXBlID0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERTtcbiAgfSBlbHNlIGlmIChhbHBoYWJldCA9PT0gQUxQSEFCRVQuUk5BIHx8IGFscGhhYmV0ID09PSBBTFBIQUJFVC5ETkEpIHtcbiAgICBwb2x5bWVyVHlwZSA9IEhFTE1fUE9MWU1FUl9UWVBFLlJOQTtcbiAgfSBlbHNlIHtcbiAgICBncm9rLnNoZWxsLndhcm5pbmcoXG4gICAgICBgT25seSBQVCwgRE5BIGFuZCBSTkEgYWxwaGFiZXRzIGFyZSBzdXBwb3J0ZWQsIHdoaWxlIHRoZSBzZWxlY3RlZCBjb2x1bW4gaGFzICR7cG9seW1lclR5cGV9IGFscGhhYmV0YFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbW9ub21lclNlcXVlbmNlc0FycmF5OiBzdHJpbmdbXVtdID0gZ2V0TW9ub21lclNlcXVlbmNlc0FycmF5KG1hY3JvTW9sQ29sKTtcbiAgLy8gdG9kbzogY29uc2lkZXIgc2VwYXJhdGVseSBiYWNrYm9uZSwgdGVybWluYWwsIGJyYW5jaCBtb25vbWVyIHR5cGVzXG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGF3YWl0IGdldE1vbm9tZXJzRGljdChtb25vbWVyU2VxdWVuY2VzQXJyYXksIG1vbm9tZXJzTGliTGlzdCwgcG9seW1lclR5cGUsIGFscGhhYmV0KTtcbiAgY29uc3QgY29sdW1uTGVuZ3RoID0gbWFjcm9Nb2xDb2wubGVuZ3RoO1xuICBjb25zdCByZWNvbnN0cnVjdGVkOiBzdHJpbmdbXSA9IG5ldyBBcnJheShjb2x1bW5MZW5ndGgpO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBjb2x1bW5MZW5ndGg7ICsrcm93KSB7XG4gICAgY29uc3QgbW9ub21lclNlcSA9IG1vbm9tZXJTZXF1ZW5jZXNBcnJheVtyb3ddO1xuICAgIHJlY29uc3RydWN0ZWRbcm93XSA9IG1vbm9tZXJTZXFUb01vbGZpbGUobW9ub21lclNlcSwgbW9ub21lcnNEaWN0LCBhbHBoYWJldCwgcG9seW1lclR5cGUpO1xuICAgIGNvbnNvbGUubG9nKHJlY29uc3RydWN0ZWRbcm93XSk7XG4gIH1cblxuICAvLyBleGNsdWRlIG5hbWUgY29sbGlzaW9uc1xuICBjb25zdCBuYW1lID0gJ21vbGZpbGUoJyArIG1hY3JvTW9sQ29sLm5hbWUgKyAnKSc7XG4gIGNvbnN0IG5ld0NvbE5hbWUgPSBkZi5jb2x1bW5zLmdldFVudXNlZE5hbWUobmFtZSk7XG4gIGNvbnN0IG5ld0NvbCA9IERHLkNvbHVtbi5mcm9tU3RyaW5ncyhuZXdDb2xOYW1lLCByZWNvbnN0cnVjdGVkKTtcblxuICBuZXdDb2wuc2VtVHlwZSA9IERHLlNFTVRZUEUuTU9MRUNVTEU7XG4gIG5ld0NvbC5zZXRUYWcoREcuVEFHUy5VTklUUywgREcuVU5JVFMuTW9sZWN1bGUuTU9MQkxPQ0spO1xuICBkZi5jb2x1bW5zLmFkZChuZXdDb2wsIHRydWUpO1xuICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG59XG5cbi8qIEdldCBhIG1hcHBpbmcgb2YgcGVwdGlkZSBzeW1ib2xzIHRvIEhFTE0gbW9ub21lciBsaWJyYXJ5IG9iamVjdHMgd2l0aFxuICogc2VsZWN0dGVkIGZpZWxkcyAgKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZE1vbm9tZXJMaWIoXG4gIG1vbm9tZXJzTGliTGlzdDogYW55W10sIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRSwgYWxwaGFiZXQ6IEFMUEhBQkVUXG4pOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgbW9ub21lcnNMaWJMaXN0LmZvckVhY2goXG4gICAgKGl0KSA9PiB7XG4gICAgICBpZiAoaXRbSEVMTV9GSUVMRFMuUE9MWU1FUl9UWVBFXSA9PT0gcG9seW1lclR5cGUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5STkEgJiZcbiAgICAgICAgICAoaXRbSEVMTV9GSUVMRFMuTU9OT01FUl9UWVBFXSA9PT0gSEVMTV9NT05PTUVSX1RZUEUuQlJBTkNIIHx8XG4gICAgICAgICAgYWxwaGFiZXQgPT09IEFMUEhBQkVULkROQSAmJiBpdFtIRUxNX0ZJRUxEUy5TWU1CT0xdID09PSBERU9YWVJJQk9TRSB8fFxuICAgICAgICAgIGFscGhhYmV0ID09PSBBTFBIQUJFVC5STkEgJiYgaXRbSEVMTV9GSUVMRFMuU1lNQk9MXSA9PT0gUklCT1NFIHx8XG4gICAgICAgICAgaXRbSEVMTV9GSUVMRFMuU1lNQk9MXSA9PT0gUEhPU1BIQVRFKSB8fFxuICAgICAgICAgIHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFICYmXG4gICAgICAgICAgaXRbSEVMTV9GSUVMRFMuTU9OT01FUl9UWVBFXSAhPT0gSEVMTV9NT05PTUVSX1RZUEUuQlJBTkNIXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG1vbm9tZXJPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICBIRUxNX0NPUkVfRklFTERTLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBtb25vbWVyT2JqZWN0W2ZpZWxkXSA9IGl0W2ZpZWxkXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtYXAuc2V0KGl0W0hFTE1fRklFTERTLlNZTUJPTF0sIG1vbm9tZXJPYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIHJldHVybiBtYXA7XG59XG5cbi8qIEdldCBqYWdnZWQgYXJyYXkgb2YgbW9ub21lciBzeW1ib2xzIGZvciB0aGUgZGF0YWZyYW1lICAqL1xuZnVuY3Rpb24gZ2V0TW9ub21lclNlcXVlbmNlc0FycmF5KG1hY3JvTW9sQ29sOiBERy5Db2x1bW48c3RyaW5nPik6IHN0cmluZ1tdW10ge1xuICBjb25zdCBjb2x1bW5MZW5ndGggPSBtYWNyb01vbENvbC5sZW5ndGg7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW11bXSA9IG5ldyBBcnJheShjb2x1bW5MZW5ndGgpO1xuXG4gIC8vIHNwbGl0IHRoZSBzdHJpbmcgaW50byBtb25vbWVyc1xuICBjb25zdCBjb2xVbml0cyA9IG1hY3JvTW9sQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgY29uc3Qgc2VwYXJhdG9yID0gbWFjcm9Nb2xDb2wuZ2V0VGFnKFRBR1Muc2VwYXJhdG9yKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcihjb2xVbml0cywgc2VwYXJhdG9yKTtcblxuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBjb2x1bW5MZW5ndGg7ICsrcm93KSB7XG4gICAgY29uc3QgbWFjcm9Nb2xlY3VsZSA9IG1hY3JvTW9sQ29sLmdldChyb3cpO1xuICAgIC8vIHRvZG86IGhhbmRsZSB0aGUgZXhjZXB0aW9uIGNhc2Ugd2hlbiBtYWNyb01vbGVjdWxlIGlzIG51bGxcbiAgICByZXN1bHRbcm93XSA9IG1hY3JvTW9sZWN1bGUgPyBzcGxpdHRlckZ1bmMobWFjcm9Nb2xlY3VsZSkgOiBbXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiBHZXQgYSBtYXBwaW5nIG9mIG1vbm9tZXIgc3ltYm9scyB0byBNb2xHcmFwaCBvYmplY3RzICovXG5hc3luYyBmdW5jdGlvbiBnZXRNb25vbWVyc0RpY3QoXG4gIG1vbm9tZXJTZXF1ZW5jZXNBcnJheTogc3RyaW5nW11bXSwgbW9ub21lcnNMaWJMaXN0OiBhbnlbXSwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFLCBhbHBoYWJldDogQUxQSEFCRVRcbik6IFByb21pc2U8TWFwPHN0cmluZywgTW9sR3JhcGg+PiB7XG4gIC8vIHRvZG86IGV4Y2VwdGlvbiAtIG5vIGdhcHMsIG5vIGVtcHR5IHN0cmluZyBtb25vbWVyc1xuICBjb25zdCBmb3JtYXR0ZWRNb25vbWVyTGliID0gZ2V0Rm9ybWF0dGVkTW9ub21lckxpYihtb25vbWVyc0xpYkxpc3QsIHBvbHltZXJUeXBlLCBhbHBoYWJldCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IG5ldyBNYXA8c3RyaW5nLCBNb2xHcmFwaD4oKTtcblxuICBjb25zdCBtb2R1bGVSZGtpdCA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmNhbGwoJ0NoZW06Z2V0UmRLaXRNb2R1bGUnKTtcblxuICAvLyBhZGQgZGVveHlyaWJvc2Uvcmlib3NlIGFuZCBwaG9zcGhhdGUgZm9yIG51Y2xlb3RpZGUgc2VxdWVuY2VzXG4gIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUk5BKSB7XG4gICAgY29uc3Qgc3ltYm9scyA9IChhbHBoYWJldCA9PT0gQUxQSEFCRVQuUk5BKSA/XG4gICAgICBbUklCT1NFLCBQSE9TUEhBVEVdIDogW0RFT1hZUklCT1NFLCBQSE9TUEhBVEVdO1xuICAgIGZvciAoY29uc3Qgc3ltIG9mIHN5bWJvbHMpXG4gICAgICB1cGRhdGVNb25vbWVyc0RpY3QobW9ub21lcnNEaWN0LCBzeW0sIGZvcm1hdHRlZE1vbm9tZXJMaWIsIG1vZHVsZVJka2l0LCBwb2x5bWVyVHlwZSk7XG4gIH1cblxuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBtb25vbWVyU2VxdWVuY2VzQXJyYXkubGVuZ3RoOyArK3Jvdykge1xuICAgIGNvbnN0IG1vbm9tZXJTZXE6IHN0cmluZ1tdID0gbW9ub21lclNlcXVlbmNlc0FycmF5W3Jvd107XG4gICAgZm9yIChjb25zdCBzeW0gb2YgbW9ub21lclNlcSlcbiAgICAgIHVwZGF0ZU1vbm9tZXJzRGljdChtb25vbWVyc0RpY3QsIHN5bSwgZm9ybWF0dGVkTW9ub21lckxpYiwgbW9kdWxlUmRraXQsIHBvbHltZXJUeXBlKTtcbiAgfVxuICAvLyBjb25zb2xlLmxvZyhtb25vbWVyc0RpY3QpO1xuXG4gIHJldHVybiBtb25vbWVyc0RpY3Q7XG59XG5cbi8qIEFkZHMgTW9sR3JhcGggb2JqZWN0IGZvciAnc3ltJyB0byB0aGUgbW9ub21lcnMgZGljdCB3aGVuIG5lY2Vzc2FyeSAgKi9cbmZ1bmN0aW9uIHVwZGF0ZU1vbm9tZXJzRGljdChcbiAgbW9ub21lcnNEaWN0OiBNYXA8c3RyaW5nLCBNb2xHcmFwaD4sIHN5bTogc3RyaW5nLFxuICBmb3JtYXR0ZWRNb25vbWVyTGliOiBNYXA8c3RyaW5nLCBhbnk+LCBtb2R1bGVSZGtpdDogYW55LCBwb2x5bWVyVHlwZTogSEVMTV9QT0xZTUVSX1RZUEVcbik6IHZvaWQge1xuICBpZiAoIW1vbm9tZXJzRGljdC5oYXMoc3ltKSkge1xuICAgIGNvbnN0IG1vbm9tZXJEYXRhOiBNb2xHcmFwaCB8IG51bGwgPSBnZXRNb2xHcmFwaChzeW0sIGZvcm1hdHRlZE1vbm9tZXJMaWIsIG1vZHVsZVJka2l0LCBwb2x5bWVyVHlwZSk7XG4gICAgaWYgKG1vbm9tZXJEYXRhKVxuICAgICAgbW9ub21lcnNEaWN0LnNldChzeW0sIG1vbm9tZXJEYXRhKTtcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vbm9tZXIgd2l0aCBzeW1ib2wgJyR7c3ltfScgaXMgYWJzZW50IHRoZSBtb25vbWVyIGxpYnJhcnlgKTtcbiAgICAvLyB0b2RvOiBoYW5kbGUgZXhjZXB0aW9uXG4gIH1cbn1cblxuLyogQ29uc3RydWN0IHRoZSBNb2xHcmFwaCBvYmplY3QgZm9yIHNwZWNpZmllZCBtb25vbWVyU3ltYm9sOiB0aGUgYXNzb2NpYXRlZFxuICogZ3JhcGggaXMgYWRqdXN0ZWQgaW4gWFkgcGxhbmUgYW5kIGZpbGxlZCB3aXRoIGRlZmF1bHQgUi1ncm91cHMgKi9cbmZ1bmN0aW9uIGdldE1vbEdyYXBoKFxuICBtb25vbWVyU3ltYm9sOiBzdHJpbmcsIGZvcm1hdHRlZE1vbm9tZXJMaWI6IE1hcDxzdHJpbmcsIGFueT4sXG4gIG1vZHVsZVJka2l0OiBhbnksIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRSAvLyB0b2RvOiBzcGVjaWZ5IHR5cGUgZm9yIG1vZHVsZVJka2l0XG4pOiBNb2xHcmFwaCB8IG51bGwge1xuICBpZiAoIWZvcm1hdHRlZE1vbm9tZXJMaWIuaGFzKG1vbm9tZXJTeW1ib2wpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGliT2JqZWN0ID0gZm9ybWF0dGVkTW9ub21lckxpYi5nZXQobW9ub21lclN5bWJvbCk7XG4gICAgY29uc3QgY2FwR3JvdXBzID0gcGFyc2VDYXBHcm91cHMobGliT2JqZWN0W0hFTE1fRklFTERTLlJHUk9VUFNdKTtcbiAgICBjb25zdCBjYXBHcm91cElkeE1hcCA9IHBhcnNlQ2FwR3JvdXBJZHhNYXAobGliT2JqZWN0W0hFTE1fRklFTERTLk1PTEZJTEVdKTtcbiAgICBjb25zdCBtb2xmaWxlVjNLID0gY29udmVydE1vbGZpbGVUb1YzSyhyZW1vdmVSR3JvdXBMaW5lcyhsaWJPYmplY3RbSEVMTV9GSUVMRFMuTU9MRklMRV0pLCBtb2R1bGVSZGtpdCk7XG4gICAgY29uc3QgY291bnRzID0gcGFyc2VBdG9tQW5kQm9uZENvdW50cyhtb2xmaWxlVjNLKTtcblxuICAgIGNvbnN0IGF0b21zID0gcGFyc2VBdG9tQmxvY2sobW9sZmlsZVYzSywgY291bnRzLmF0b21Db3VudCk7XG4gICAgY29uc3QgYm9uZHMgPSBwYXJzZUJvbmRCbG9jayhtb2xmaWxlVjNLLCBjb3VudHMuYm9uZENvdW50KTtcbiAgICBjb25zdCBtZXRhID0gZ2V0TW9ub21lck1ldGFkYXRhKGF0b21zLCBib25kcywgY2FwR3JvdXBzLCBjYXBHcm91cElkeE1hcCk7XG5cbiAgICBjb25zdCBtb25vbWVyR3JhcGg6IE1vbEdyYXBoID0ge2F0b21zOiBhdG9tcywgYm9uZHM6IGJvbmRzLCBtZXRhOiBtZXRhfTtcblxuICAgIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERSkge1xuICAgICAgYWRqdXN0UGVwdGlkZU1vbm9tZXJHcmFwaChtb25vbWVyR3JhcGgpO1xuICAgIH0gZWxzZSB7IC8vIG51Y2xlb3RpZGVzXG4gICAgICBpZiAobW9ub21lclN5bWJvbCA9PT0gUklCT1NFIHx8IG1vbm9tZXJTeW1ib2wgPT09IERFT1hZUklCT1NFKVxuICAgICAgICBhZGp1c3RTdWdhck1vbm9tZXJHcmFwaChtb25vbWVyR3JhcGgpO1xuICAgICAgZWxzZSBpZiAobW9ub21lclN5bWJvbCA9PT0gUEhPU1BIQVRFKVxuICAgICAgICBhZGp1c3RQaG9zcGhhdGVNb25vbWVyR3JhcGgobW9ub21lckdyYXBoKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWRqdXN0QmFzZU1vbm9tZXJHcmFwaChtb25vbWVyR3JhcGgpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSB0aGUgJ3JpZ2h0bW9zdCcgY2hhaW4tZXh0ZW5kaW5nIHItZ3JvdXAgbm9kZSBpbiB0aGUgYmFja2JvbmVcbiAgICBpZiAocG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlBFUFRJREUpIHtcbiAgICAgIHNldFNoaWZ0cyhtb25vbWVyR3JhcGgsIHBvbHltZXJUeXBlKTtcbiAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1sxXSk7XG4gICAgfSBlbHNlIHsgLy8gbnVjbGVvdGlkZXNcbiAgICAgIGlmIChtb25vbWVyU3ltYm9sID09PSBSSUJPU0UgfHwgbW9ub21lclN5bWJvbCA9PT0gREVPWFlSSUJPU0UpIHtcbiAgICAgICAgLy8gcmVtb3ZlIFIyXG4gICAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1sxXSk7XG4gICAgICAgIC8vIHNldCB0ZXJtaW5hbE5vZGUyIChveHlnZW4pIGFzIG5ldyBSMlxuICAgICAgICBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMV0gPSBtb25vbWVyR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzFdO1xuICAgICAgICBzZXRUZXJtaW5hbE5vZGVzKG1vbm9tZXJHcmFwaC5ib25kcywgbW9ub21lckdyYXBoLm1ldGEpOyAvLyBzZXQgdGVybWluYWwgbm9kZXMgYW5ld1xuICAgICAgICBzZXRTaGlmdHMobW9ub21lckdyYXBoLCBwb2x5bWVyVHlwZSk7XG4gICAgICAgIC8vIHJlbW92ZSAnbmV3JyBSMiAob3h5Z2VuKVxuICAgICAgICByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoLCBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMV0pO1xuICAgICAgICAvLyByZW1vdmUgUjFcbiAgICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzBdKTtcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBicmFuY2hpbmcgci1ncm91cFxuICAgICAgICByZW1vdmVOb2RlQW5kQm9uZHMobW9ub21lckdyYXBoLCBtb25vbWVyR3JhcGgubWV0YS5yTm9kZXNbMl0pO1xuICAgICAgfSBlbHNlIGlmIChtb25vbWVyU3ltYm9sID09PSBQSE9TUEhBVEUpIHtcbiAgICAgICAgbW9ub21lckdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSA9IG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1swXTtcbiAgICAgICAgc2hpZnRDb29yZGluYXRlcyhcbiAgICAgICAgICBtb25vbWVyR3JhcGgsXG4gICAgICAgICAgLW1vbm9tZXJHcmFwaC5hdG9tcy54W21vbm9tZXJHcmFwaC5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxXSxcbiAgICAgICAgICAtbW9ub21lckdyYXBoLmF0b21zLnlbbW9ub21lckdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdXG4gICAgICAgICk7XG4gICAgICAgIHNldFNoaWZ0cyhtb25vbWVyR3JhcGgsIHBvbHltZXJUeXBlKTtcbiAgICAgICAgcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaCwgbW9ub21lckdyYXBoLm1ldGEuck5vZGVzWzFdKTtcbiAgICAgIH0gZWxzZSB7IC8vIG51Y2xlb2Jhc2VzXG4gICAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIG1vbm9tZXJHcmFwaC5tZXRhLnJOb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUh5ZHJvZ2VuKG1vbm9tZXJHcmFwaCk7XG5cbiAgICByZXR1cm4gbW9ub21lckdyYXBoO1xuICB9XG59XG5cbi8vIHRvZG86IGRvY1xuZnVuY3Rpb24gZ2V0TW9ub21lck1ldGFkYXRhKFxuICBhdG9tczogQXRvbXMsIGJvbmRzOiBCb25kcywgY2FwR3JvdXBzOiBzdHJpbmdbXSwgY2FwR3JvdXBJZHhNYXA6IE1hcDxudW1iZXIsIG51bWJlcj5cbik6IE1vbm9tZXJNZXRhZGF0YSB7XG4gIGNvbnN0IG1ldGE6IE1vbm9tZXJNZXRhZGF0YSA9IHtcbiAgICBiYWNrYm9uZVNoaWZ0OiBudWxsLFxuICAgIGJyYW5jaFNoaWZ0OiBudWxsLFxuICAgIHRlcm1pbmFsTm9kZXM6IFtdLFxuICAgIHJOb2RlczogW10sXG4gIH07XG5cbiAgc3Vic3RpdHV0ZUNhcEdyb3VwcyhhdG9tcywgY2FwR3JvdXBzLCBjYXBHcm91cElkeE1hcCk7XG4gIHNldFJOb2RlcyhjYXBHcm91cElkeE1hcCwgbWV0YSk7XG4gIHNldFRlcm1pbmFsTm9kZXMoYm9uZHMsIG1ldGEpO1xuICByZXR1cm4gbWV0YTtcbn1cblxuLyogUGFyc2UgZWxlbWVudCBzeW1ib2xzIGZvciBSLWdyb3VwcyBmcm9tIHRoZSBIRUxNIG1vbm9tZXIgbGlicmFyeSBSLWdyb3Vwc1xuICogZmllbGQgICovXG5mdW5jdGlvbiBwYXJzZUNhcEdyb3VwcyhyR3JvdXBPYmpMaXN0OiBhbnlbXSk6IHN0cmluZ1tdIHtcbiAgLy8gc3BlY2lmaWNhbGx5IGZvciBIRUxNQ29yZUxpYnJhcnlcbiAgLy8gY29uc2lkZXJlZCBvbmx5IG1vbm9hdG9taWMgcmdyb3Vwc1xuICAvLyBzdXBwb3NpbmcgdGhhdCBlbGVtZW50cyBpbiByR3JvdXBPYmpMaXN0IGFyZSBzb3J0ZWQgdy5yLnQuIHRoZSByZ3JvdXBzIGlkeFxuICAvLyB0b2RvOiBwb3NzaWJsZSBnZW5lcmFsaXphdGlvbnNcbiAgY29uc3QgY2FwR3JvdXBzQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qgb2JqIG9mIHJHcm91cE9iakxpc3QpIHtcbiAgICBsZXQgY2FwR3JvdXA6IHN0cmluZyA9IG9ialtSR1JPVVBfRklFTERTLkNBUF9HUk9VUF9TTUlMRVNdO1xuXG4gICAgLy8gaW4gc29tZSBjYXNlcyB0aGUgc21pbGVzIGZpZWxkIGlzIHdyaXR0ZW4gd2l0aCB1cHBlcmNhc2VcbiAgICBpZiAoIWNhcEdyb3VwKVxuICAgICAgY2FwR3JvdXAgPSBvYmpbUkdST1VQX0ZJRUxEUy5DQVBfR1JPVVBfU01JTEVTX1VQUEVSQ0FTRV07XG4gICAgLy8gdG9kbzogdmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIG11bHRpLWVsZW1lbnQgY2FwIGdyb3Vwcywgb3IgY29uc2lkZXIgaG93IHRvXG4gICAgLy8gdHJhbnNmb3JtIHRoZW1cbiAgICBjYXBHcm91cCA9IGNhcEdyb3VwLnJlcGxhY2UoLyhcXFt8XFxdfFxcKnw6fFxcZCkvZywgJycpO1xuICAgIGlmIChjYXBHcm91cC5sZW5ndGggPiAxKSAvLyB0b2RvOiBjaGVjayBpZiBzdWNoIGNhc2VzIGFyZSBwb3NzaWJsZSwgcmVtb3ZlIGlmIG5vdFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZWZhdWx0IGNhcCBncm91cCBoYXMgbGVuZ3RoIG1vcmUgdGhhbiBvbmUnKTtcbiAgICBjYXBHcm91cHNBcnJheS5wdXNoKGNhcEdyb3VwKTtcbiAgfVxuICByZXR1cm4gY2FwR3JvdXBzQXJyYXk7XG59XG5cbi8qIFN1YnN0aXR1dGUgdGhlIGNhcCBncm91cCBlbGVtZW50cyBpbnN0ZWFkIG9mIFIjICovXG5mdW5jdGlvbiBzdWJzdGl0dXRlQ2FwR3JvdXBzKFxuICBhdG9tczogQXRvbXMsIGNhcEdyb3Vwczogc3RyaW5nW10sIGNhcEdyb3VwSWR4TWFwOiBNYXA8bnVtYmVyLCBudW1iZXI+XG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbbm9kZSwgY2FwSWR4XSBvZiBjYXBHcm91cElkeE1hcClcbiAgICBhdG9tcy5hdG9tVHlwZXNbbm9kZSAtIDFdID0gY2FwR3JvdXBzW2NhcElkeCAtIDFdOyAvLyAtMSBiZWNhdXNlIG1vbGZpbGUgaW5kZXhpbmcgc3RhcnRzIGZyb20gMVxufVxuXG4vL3RvZG86IGRvY1xuZnVuY3Rpb24gc2V0Uk5vZGVzKGNhcEdyb3VwSWR4TWFwOiBNYXA8bnVtYmVyLCBudW1iZXI+LCBtZXRhOiBNb25vbWVyTWV0YWRhdGEpOiB2b2lkIHtcbiAgbWV0YS5yTm9kZXMgPSBBcnJheS5mcm9tKGNhcEdyb3VwSWR4TWFwLmtleXMoKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YS5yTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGNvbnN0IGogb2YgWzEsIDJdKSB7IC8vIDEgYW5kIDIgYnkgZGVmLiBjb3JyZXNwb25kIHRvICdsZWZ0L3JpZ2h0bW9zdCcgci1ub2Rlc1xuICAgICAgLy8gc3dhcCB0aGUgdmFsdWVzIGlmIG5lY2Vzc2FyeSwgc28gdGhhdCB0aGUgXCJsZWZ0bW9zdFwiIHItbm9kZSBpcyBhdCAwLFxuICAgICAgLy8gYW5kIHRoZSAncmlnaHRtb3N0JywgYXQgMVxuICAgICAgaWYgKGNhcEdyb3VwSWR4TWFwLmdldChtZXRhLnJOb2Rlc1tpXSkgPT09IGopIHtcbiAgICAgICAgY29uc3QgdG1wID0gbWV0YS5yTm9kZXNbaiAtIDFdO1xuICAgICAgICBtZXRhLnJOb2Rlc1tqIC0gMV0gPSBtZXRhLnJOb2Rlc1tpXTtcbiAgICAgICAgbWV0YS5yTm9kZXNbaV0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vdG9kbzogZG9jXG5mdW5jdGlvbiBzZXRUZXJtaW5hbE5vZGVzKGJvbmRzOiBCb25kcywgbWV0YTogTW9ub21lck1ldGFkYXRhKTogdm9pZCB7XG4gIGNvbnN0IHJOb2RlcyA9IG1ldGEuck5vZGVzO1xuICBtZXRhLnRlcm1pbmFsTm9kZXMgPSBuZXcgQXJyYXk8bnVtYmVyPihyTm9kZXMubGVuZ3RoKS5maWxsKDApO1xuICBjb25zdCB0ZXJtaW5hbE5vZGVzID0gbWV0YS50ZXJtaW5hbE5vZGVzO1xuICBjb25zdCBhdG9tUGFpcnMgPSBib25kcy5hdG9tUGFpcnM7XG4gIGxldCBpID0gMDtcbiAgbGV0IGogPSAwO1xuICB3aGlsZSAoKGkgPCBhdG9tUGFpcnMubGVuZ3RoKSAmJiBqIDwgdGVybWluYWxOb2Rlcy5sZW5ndGgpIHtcbiAgICAvLyByTm9kZXMgYXJyYXkgaXMgc29ydGVkIHNvIHRoYXQgaXRzIDB0aCBhbmQgMXN0IGVsZW1lbnRzIChpZiBib3RoXG4gICAgLy8gcHJlc2VudCkgY29ycmVzcG9uZCB0byB0aGUgY2hhaW4gZXh0ZW5kaW5nIChpLmUuIG5vdCBicmFuY2hpbmcpIHItZ3JvdXBzXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0ZXJtaW5hbE5vZGVzLmxlbmd0aDsgKytrKSB7XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IDI7ICsrbCkge1xuICAgICAgICBpZiAoYXRvbVBhaXJzW2ldW2xdID09PSByTm9kZXNba10pIHtcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVzW2tdID0gYXRvbVBhaXJzW2ldWyhsICsgMSklMl07XG4gICAgICAgICAgaWYgKHJOb2Rlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgfVxuICAgICAgICAgICsrajtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICArK2k7XG4gIH1cbn1cblxuLy90b2RvOiBkb2NcbmZ1bmN0aW9uIHNldFNoaWZ0cyhtb2xHcmFwaDogTW9sR3JhcGgsIHBvbHltZXJUeXBlOiBIRUxNX1BPTFlNRVJfVFlQRSk6IHZvaWQge1xuICBpZiAobW9sR3JhcGgubWV0YS5yTm9kZXMubGVuZ3RoID4gMSkge1xuICAgIG1vbEdyYXBoLm1ldGEuYmFja2JvbmVTaGlmdCA9IFtcbiAgICAgIGtlZXBQcmVjaXNpb24oXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnhbbW9sR3JhcGgubWV0YS5yTm9kZXNbMV0gLSAxXSAtXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnhbbW9sR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMV1cbiAgICAgICksXG4gICAgICBrZWVwUHJlY2lzaW9uKFxuICAgICAgICBtb2xHcmFwaC5hdG9tcy55W21vbEdyYXBoLm1ldGEuck5vZGVzWzFdIC0gMV0gLVxuICAgICAgICBtb2xHcmFwaC5hdG9tcy55W21vbEdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBpZiAocG9seW1lclR5cGUgPT09IEhFTE1fUE9MWU1FUl9UWVBFLlJOQSAmJiBtb2xHcmFwaC5tZXRhLnJOb2Rlcy5sZW5ndGggPiAyKSB7XG4gICAgbW9sR3JhcGgubWV0YS5icmFuY2hTaGlmdCA9IFtcbiAgICAgIGtlZXBQcmVjaXNpb24oXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnhbbW9sR3JhcGgubWV0YS5yTm9kZXNbMl0gLSAxXSAtXG4gICAgICAgIG1vbEdyYXBoLmF0b21zLnhbbW9sR3JhcGgubWV0YS50ZXJtaW5hbE5vZGVzWzBdIC0gMV1cbiAgICAgICksXG4gICAgICBrZWVwUHJlY2lzaW9uKFxuICAgICAgICBtb2xHcmFwaC5hdG9tcy55W21vbEdyYXBoLm1ldGEuck5vZGVzWzJdIC0gMV0gLVxuICAgICAgICBtb2xHcmFwaC5hdG9tcy55W21vbEdyYXBoLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDFdXG4gICAgICApLFxuICAgIF07XG4gIH1cbn1cblxuLyogSGVscGVyIGZ1bmN0aW9uIG5lY2Vzc2FyeSB0byBidWlsZCBhIGNvcnJlY3QgVjMwMDAgbW9sZmlsZSBvdXQgb2YgVjIwMDAgd2l0aFxuICogc3BlY2lmaWVkIHItZ3JvdXBzKi9cbmZ1bmN0aW9uIHJlbW92ZVJHcm91cExpbmVzKG1vbGZpbGVWMks6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBiZWdpbiA9IG1vbGZpbGVWMksuaW5kZXhPZihWMktfQV9MSU5FLCAwKTtcbiAgaWYgKGJlZ2luID09PSAtMSlcbiAgICBiZWdpbiA9IG1vbGZpbGVWMksuaW5kZXhPZihWMktfUkdQX0xJTkUpO1xuICBjb25zdCBlbmQgPSBtb2xmaWxlVjJLLmluZGV4T2YoVjNLX0VORCwgYmVnaW4pO1xuICByZXR1cm4gbW9sZmlsZVYySy5zdWJzdHJpbmcoMCwgYmVnaW4pICsgbW9sZmlsZVYySy5zdWJzdHJpbmcoZW5kKTtcbn1cblxuLyogVjIwMDAgdG8gVjMwMDAgY29udmVydGVyICAqL1xuZnVuY3Rpb24gY29udmVydE1vbGZpbGVUb1YzSyhtb2xmaWxlVjJLOiBzdHJpbmcsIG1vZHVsZVJka2l0OiBhbnkpOiBzdHJpbmcge1xuICAvLyB0b2RvOiB0eXBlIG9mIG1vZHVsZVJka2l0XG4gIC8vIHRvZG86IGNvbnNpZGVyIHRoZSB1c2Ugb2Ygc3RhbmRhcmQgQ2hlbSBjb252ZXJ0ZXIgKHJlbGllcyBvbiBjcmVhdGlvbiBvZiBtb2R1bGVSZGtpdCBvbiBlYWNoIGl0ZXJhdGlvbiwgdGhvdWdoKVxuICBjb25zdCBtb2xPYmogPSBtb2R1bGVSZGtpdC5nZXRfbW9sKG1vbGZpbGVWMkspO1xuICBjb25zdCBtb2xmaWxlVjNLID0gbW9sT2JqLmdldF92M0ttb2xibG9jaygpO1xuICBtb2xPYmouZGVsZXRlKCk7XG4gIHJldHVybiBtb2xmaWxlVjNLO1xufVxuXG4vKiBQYXJzZSBWMzAwMCBib25kIGJsb2NrIGFuZCBjb25zdHJ1Y3QgdGhlIEJvbmRzIG9iamVjdCAqL1xuZnVuY3Rpb24gcGFyc2VCb25kQmxvY2sobW9sZmlsZVYzSzogc3RyaW5nLCBib25kQ291bnQ6IG51bWJlcik6IEJvbmRzIHtcbiAgLy8gdG9kbzogY29uc2lkZXIgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBzaW1wbGUgbGVmdG1vc3QvcmlnaHRtb3N0IGNob2ljZVxuICAvLyB0b2RvOiBjb25zaWRlciB0aGUgY2FzZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25zZXF1ZW50IE0gIFJHUCBsaW5lcyxcbiAgLy8gbGlrZSBpbiBIRUxNQ29yZUxpYnJhcnkgbnVjbGVvdGlkZXNcblxuICBjb25zdCBib25kVHlwZXM6IG51bWJlcltdID0gbmV3IEFycmF5KGJvbmRDb3VudCk7XG4gIGNvbnN0IGF0b21QYWlyczogbnVtYmVyW11bXSA9IG5ldyBBcnJheShib25kQ291bnQpO1xuICBjb25zdCBib25kQ29uZmlndXJhdGlvbiA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGNvbnN0IGt3YXJncyA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+O1xuXG4gIGxldCBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZihWM0tfQkVHSU5fQk9ORF9CTE9DSyk7XG4gIGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gIGxldCBlbmQgPSBiZWdpbjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBib25kQ291bnQ7ICsraSkge1xuICAgIC8vIHBhcnNlIGJvbmQgdHlwZSBhbmQgYXRvbSBwYWlyXG4gICAgY29uc3QgcGFyc2VkVmFsdWVzOiBudW1iZXJbXSA9IG5ldyBBcnJheSgzKTtcbiAgICBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZihWM0tfQkVHSU5fREFUQV9MSU5FLCBlbmQpICsgVjNLX0lEWF9TSElGVDtcbiAgICBlbmQgPSBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbik7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCAzOyArK2spIHtcbiAgICAgIGJlZ2luID0gZW5kICsgMTtcbiAgICAgIGVuZCA9IE1hdGgubWluKG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pLCBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbikpO1xuICAgICAgcGFyc2VkVmFsdWVzW2tdID0gcGFyc2VJbnQobW9sZmlsZVYzSy5zbGljZShiZWdpbiwgZW5kKSk7XG4gICAgfVxuICAgIGJvbmRUeXBlc1tpXSA9IHBhcnNlZFZhbHVlc1swXTtcbiAgICBhdG9tUGFpcnNbaV0gPSBwYXJzZWRWYWx1ZXMuc2xpY2UoMSk7XG5cbiAgICAvLyBwYXJzZSBrZXl3b3JkIGFyZ3VtZW50c1xuICAgIGNvbnN0IGVuZE9mTGluZSA9IG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICAgIGxldCBsaW5lUmVtYWluZGVyID0gbW9sZmlsZVYzSy5zbGljZShlbmQsIGVuZE9mTGluZSk7XG4gICAgbGV0IGJlZ2luQ2ZnID0gbGluZVJlbWFpbmRlci5pbmRleE9mKFYzS19CT05EX0NPTkZJRyk7XG4gICAgaWYgKGJlZ2luQ2ZnICE9PSAtMSkge1xuICAgICAgYmVnaW5DZmcgPSBsaW5lUmVtYWluZGVyLmluZGV4T2YoJz0nLCBiZWdpbkNmZykgKyAxO1xuICAgICAgbGV0IGVuZENmZyA9IGxpbmVSZW1haW5kZXIuaW5kZXhPZignICcsIGJlZ2luQ2ZnKTtcbiAgICAgIGlmIChlbmRDZmcgPT09IC0xKVxuICAgICAgICBlbmRDZmcgPSBsaW5lUmVtYWluZGVyLmxlbmd0aDtcbiAgICAgIGNvbnN0IGJvbmRDb25maWcgPSBwYXJzZUludChsaW5lUmVtYWluZGVyLnNsaWNlKGJlZ2luQ2ZnLCBlbmRDZmcpKTtcbiAgICAgIGJvbmRDb25maWd1cmF0aW9uLnNldChpLCBib25kQ29uZmlnKTtcbiAgICAgIGNvbnN0IHJlbW92ZWRTdWJzdHJpbmcgPSBWM0tfQk9ORF9DT05GSUcgKyBib25kQ29uZmlnLnRvU3RyaW5nKCk7XG4gICAgICBsaW5lUmVtYWluZGVyID0gbGluZVJlbWFpbmRlci5yZXBsYWNlKHJlbW92ZWRTdWJzdHJpbmcsICcnKTtcbiAgICB9XG4gICAgaWYgKCFsaW5lUmVtYWluZGVyKVxuICAgICAga3dhcmdzLnNldChpLCBsaW5lUmVtYWluZGVyKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYm9uZFR5cGVzOiBib25kVHlwZXMsXG4gICAgYXRvbVBhaXJzOiBhdG9tUGFpcnMsXG4gICAgYm9uZENvbmZpZ3VyYXRpb246IGJvbmRDb25maWd1cmF0aW9uLFxuICAgIGt3YXJnczoga3dhcmdzLFxuICB9O1xufVxuXG4vKiBDb25zdHJ1Y3RzIG1hcHBpbmcgb2Ygci1ncm91cCBub2RlcyB0byBkZWZhdWx0IGNhcEdyb3VwcywgYWxsIG51bWVyYXRpb24gc3RhcnRpbmcgZnJvbSAxLlxuICogQWNjb3JkaW5nIHRvIGh0dHBzOi8vcHVicy5hY3Mub3JnL2RvaS8xMC4xMDIxL2NpMzAwMTkyNSwgUjEgYW5kIFIyIGFyZSB0aGUgY2hhaW4gZXh0ZW5kaW5nIGF0dGFjaG1lbnQgcG9pbnRzLFxuICogd2hpbGUgUjMgaXMgdGhlIGJyYW5jaGluZyBhdHRhY2htZW50IHBvaW50LiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBHcm91cElkeE1hcChtb2xmaWxlVjJLOiBzdHJpbmcpOiBNYXA8bnVtYmVyLCBudW1iZXI+IHtcbiAgY29uc3QgY2FwR3JvdXBJZHhNYXAgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuXG4gIC8vIHBhcnNlIEEtbGluZXMgKFJOQSlcbiAgbGV0IGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19BX0xJTkUsIDApO1xuICBsZXQgZW5kID0gYmVnaW47XG4gIHdoaWxlIChiZWdpbiAhPT0gLTEpIHtcbiAgICAvLyBwYXJzZSB0aGUgck5vZGUgdG8gd2hpY2ggdGhlIGNhcCBncm91cCBpcyBhdHRhY2hlZFxuICAgIGVuZCA9IG1vbGZpbGVWMksuaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICAgIGNvbnN0IHJOb2RlID0gcGFyc2VJbnQobW9sZmlsZVYySy5zdWJzdHJpbmcoYmVnaW4sIGVuZCkucmVwbGFjZSgvXkFcXHMrLywgJycpKTtcblxuICAgIC8vIHBhcnNlIHRoZSBjYXBHcm91cCBpbmRleFxuICAgIGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKCdSJywgZW5kKTtcbiAgICBlbmQgPSBtb2xmaWxlVjJLLmluZGV4T2YoJ1xcbicsIGJlZ2luKTtcbiAgICBjb25zdCBjYXBHcm91cCA9IHBhcnNlSW50KG1vbGZpbGVWMksuc3Vic3RyaW5nKGJlZ2luLCBlbmQpLnJlcGxhY2UoL15SLywgJycpKTtcbiAgICBjYXBHcm91cElkeE1hcC5zZXQock5vZGUsIGNhcEdyb3VwKTtcblxuICAgIGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19BX0xJTkUsIGVuZCk7XG4gIH1cblxuICAvLyBwYXJzZSBSR1AgbGluZXMgKG1heSBiZSBtb3JlIHRoYW4gb25lIGluIFJOQSBtb25vbWVycylcbiAgYmVnaW4gPSBtb2xmaWxlVjJLLmluZGV4T2YoVjJLX1JHUF9MSU5FLCAwKTtcbiAgZW5kID0gbW9sZmlsZVYySy5pbmRleE9mKCdcXG4nLCBiZWdpbik7XG4gIHdoaWxlIChiZWdpbiAhPT0gLTEpIHtcbiAgICBiZWdpbiArPSBWMktfUkdQX1NISUZUO1xuICAgIGVuZCA9IG1vbGZpbGVWMksuaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICAgIGNvbnN0IHJncFN0cmluZ1BhcnNlZCA9IG1vbGZpbGVWMksuc3Vic3RyaW5nKGJlZ2luLCBlbmQpXG4gICAgICAucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpXG4gICAgICAuc3BsaXQoJyAnKTtcbiAgICBjb25zdCByZ3BJbmRpY2VzQXJyYXkgPSByZ3BTdHJpbmdQYXJzZWQubWFwKChlbCkgPT4gcGFyc2VJbnQoZWwpKVxuICAgICAgLnNsaWNlKDEpOyAvLyBzbGljZSBmcm9tIDEgYmVjYXVzZSB0aGUgMXN0IHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgcGFpcnMgaW4gdGhlIGxpbmVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJncEluZGljZXNBcnJheS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgLy8gbm90aWNlOiB0aGVyZSBtYXkgYmUgY29uZmxpY3RpbmcgY2FwIGdyb3VwIGRlZmluaXRpb25zLCBsaWtlIDMtTy1NZXRoeWxyaWJvc2UgKDIsNSBjb25uZWN0aXZpdHkpXG4gICAgICAvLyAodGhlIGxhc3QgbW9ub21lciBpbiBIRUxNQ29yZUxpYnJhcnkpXG4gICAgICAvLyB0aGVyZSB0aGUgaW5kaWNlcyBvZiBjYXAgZ3JvdXBzIGFyZSBzZWxmLWNvbnRyYWRpY3RvcnlcbiAgICAgIC8vIHRvZG86IGNsYXJpZnkgd2h5IHN1Y2ggc2l0dWF0aW9ucyBvY2N1ciBpbiBwcmluY2lwbGVcbiAgICAgIGlmIChjYXBHcm91cElkeE1hcC5oYXMocmdwSW5kaWNlc0FycmF5W2ldKSAmJiBjYXBHcm91cElkeE1hcC5nZXQocmdwSW5kaWNlc0FycmF5W2ldKSAhPT0gcmdwSW5kaWNlc0FycmF5W2kgKyAxXSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByLWdyb3VwIGluZGV4ICR7cmdwSW5kaWNlc0FycmF5W2ldfSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHdpdGggYSBkaWZmZXJlbnQgdmFsdWVgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgY2FwR3JvdXBJZHhNYXAuc2V0KHJncEluZGljZXNBcnJheVtpXSwgcmdwSW5kaWNlc0FycmF5W2krMV0pO1xuICAgIH1cblxuICAgIGJlZ2luID0gbW9sZmlsZVYySy5pbmRleE9mKFYyS19SR1BfTElORSwgZW5kKTtcbiAgfVxuXG4gIHJldHVybiBjYXBHcm91cElkeE1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VBdG9tQW5kQm9uZENvdW50cyhtb2xmaWxlVjNLOiBzdHJpbmcpOiB7YXRvbUNvdW50OiBudW1iZXIsIGJvbmRDb3VudDogbnVtYmVyfSB7XG4gIG1vbGZpbGVWM0sgPSBtb2xmaWxlVjNLLnJlcGxhY2VBbGwoJ1xccicsICcnKTsgLy8gdG8gaGFuZGxlIG9sZCBhbmQgbmV3IHNkZiBzdGFuZGFyZHNcblxuICAvLyBwYXJzZSBhdG9tIGNvdW50XG4gIGxldCBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZihWM0tfQkVHSU5fQ09VTlRTX0xJTkUpICsgVjNLX0NPVU5UU19TSElGVDtcbiAgbGV0IGVuZCA9IG1vbGZpbGVWM0suaW5kZXhPZignICcsIGJlZ2luKTtcbiAgY29uc3QgbnVtT2ZBdG9tcyA9IHBhcnNlSW50KG1vbGZpbGVWM0suc3Vic3RyaW5nKGJlZ2luLCBlbmQpKTtcblxuICAvLyBwYXJzZSBib25kIGNvdW50XG4gIGJlZ2luID0gZW5kICsgMTtcbiAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pO1xuICBjb25zdCBudW1PZkJvbmRzID0gcGFyc2VJbnQobW9sZmlsZVYzSy5zdWJzdHJpbmcoYmVnaW4sIGVuZCkpO1xuXG4gIHJldHVybiB7YXRvbUNvdW50OiBudW1PZkF0b21zLCBib25kQ291bnQ6IG51bU9mQm9uZHN9O1xufVxuXG4vKiBQYXJzZSBWMzAwMCBhdG9tIGJsb2NrIGFuZCByZXR1cm4gQXRvbXMgb2JqZWN0LiBOT1RJQ0U6IG9ubHkgYXRvbVR5cGVzLCB4LCB5XG4gKiBhbmQga3dhcmdzIGZpZWxkcyBhcmUgc2V0IGluIHRoZSByZXR1cm4gdmFsdWUsIHdpdGggb3RoZXIgZmllbGRzIGR1bW15ICovXG5mdW5jdGlvbiBwYXJzZUF0b21CbG9jayhtb2xmaWxlVjNLOiBzdHJpbmcsIGF0b21Db3VudDogbnVtYmVyKTogQXRvbXMge1xuICBjb25zdCBhdG9tVHlwZXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KGF0b21Db3VudCk7XG4gIGNvbnN0IHg6IG51bWJlcltdID0gbmV3IEFycmF5KGF0b21Db3VudCk7XG4gIGNvbnN0IHk6IG51bWJlcltdID0gbmV3IEFycmF5KGF0b21Db3VudCk7XG4gIGNvbnN0IGt3YXJnczogc3RyaW5nW10gPSBuZXcgQXJyYXkoYXRvbUNvdW50KTtcblxuICBsZXQgYmVnaW4gPSBtb2xmaWxlVjNLLmluZGV4T2YoVjNLX0JFR0lOX0FUT01fQkxPQ0spOyAvLyBWMzAwMCBhdG9tcyBibG9ja1xuICBiZWdpbiA9IG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pO1xuICBsZXQgZW5kID0gYmVnaW47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdG9tQ291bnQ7IGkrKykge1xuICAgIGJlZ2luID0gbW9sZmlsZVYzSy5pbmRleE9mKFYzS19CRUdJTl9EQVRBX0xJTkUsIGJlZ2luKSArIFYzS19JRFhfU0hJRlQ7XG4gICAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pOyAvLyBza2lwIHRoZSBpZHggcm93XG5cbiAgICAvLyBwYXJzZSBhdG9tIHR5cGVcbiAgICBiZWdpbiA9IGVuZCArIDE7XG4gICAgZW5kID0gbW9sZmlsZVYzSy5pbmRleE9mKCcgJywgYmVnaW4pO1xuICAgIGF0b21UeXBlc1tpXSA9IG1vbGZpbGVWM0suc3Vic3RyaW5nKGJlZ2luLCBlbmQpO1xuXG4gICAgLy8gcGFyc2UgWCBhbmQgWSBjb29yZGluYXRlcyBvZiB0aGUgYXRvbVxuICAgIGNvbnN0IGNvb3JkaW5hdGU6IG51bWJlcltdID0gbmV3IEFycmF5KDIpO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgMjsgKytrKSB7XG4gICAgICBiZWdpbiA9IGVuZCArIDE7XG4gICAgICBlbmQgPSBtb2xmaWxlVjNLLmluZGV4T2YoJyAnLCBiZWdpbik7XG4gICAgICBjb29yZGluYXRlW2tdID0gcGFyc2VGbG9hdChtb2xmaWxlVjNLLnN1YnN0cmluZyhiZWdpbiwgZW5kKSk7XG4gICAgfVxuICAgIHhbaV0gPSBjb29yZGluYXRlWzBdO1xuICAgIHlbaV0gPSBjb29yZGluYXRlWzFdO1xuXG4gICAgLy8gcGFyc2UgdGhlIHJlbWFpbmluZyBwb3NzaWJsZSBrZXl3b3JkIGFyZ3VtZW50c1xuICAgIGJlZ2luID0gZW5kO1xuICAgIGVuZCA9IG1vbGZpbGVWM0suaW5kZXhPZignXFxuJywgYmVnaW4pICsgMTtcbiAgICBrd2FyZ3NbaV0gPSBtb2xmaWxlVjNLLnNsaWNlKGJlZ2luLCBlbmQpO1xuXG4gICAgYmVnaW4gPSBlbmQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGF0b21UeXBlczogYXRvbVR5cGVzLFxuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICBrd2FyZ3M6IGt3YXJncyxcbiAgfTtcbn1cblxuLyogUmVtb3ZlIGh5ZHJvZ2VuIG5vZGVzICovXG5mdW5jdGlvbiByZW1vdmVIeWRyb2dlbihtb25vbWVyR3JhcGg6IE1vbEdyYXBoKTogdm9pZCB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKGkgPCBtb25vbWVyR3JhcGguYXRvbXMuYXRvbVR5cGVzLmxlbmd0aCkge1xuICAgIGlmICggbW9ub21lckdyYXBoLmF0b21zLmF0b21UeXBlc1tpXSA9PT0gSFlEUk9HRU4pIHtcbiAgICAgIHJlbW92ZU5vZGVBbmRCb25kcyhtb25vbWVyR3JhcGgsIGkgKyAxKTsgLy8gaSArIDEgYmVjYXVzZSBtb2xmaWxlIG5vZGUgaW5kZXhpbmcgc3RhcnRzIGZyb20gMVxuICAgICAgLS1pO1xuICAgICAgLy8gbW9ub21lckdyYXBoLmF0b21zLmF0b21UeXBlc1tpXSA9ICdMaSc7XG4gICAgfVxuICAgICsraTtcbiAgfVxufVxuXG4vKiBSZW1vdmUgbm9kZSAncmVtb3ZlZE5vZGUnIGFuZCB0aGUgYXNzb2NpYXRlZCBib25kcy4gTm90aWNlLCBudW1lcmF0aW9uIG9mXG4gKiBub2RlcyBpbiBtb2xmaWxlcyBzdGFydHMgZnJvbSAxLCBub3QgMCAqL1xuZnVuY3Rpb24gcmVtb3ZlTm9kZUFuZEJvbmRzKG1vbm9tZXJHcmFwaDogTW9sR3JhcGgsIHJlbW92ZWROb2RlPzogbnVtYmVyKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgcmVtb3ZlZE5vZGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgcmVtb3ZlZE5vZGVJZHggPSByZW1vdmVkTm9kZSAtIDE7XG4gICAgY29uc3QgYXRvbXMgPSBtb25vbWVyR3JhcGguYXRvbXM7XG4gICAgY29uc3QgYm9uZHMgPSBtb25vbWVyR3JhcGguYm9uZHM7XG4gICAgY29uc3QgbWV0YSA9IG1vbm9tZXJHcmFwaC5tZXRhO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSBub2RlIGZyb20gYXRvbXNcbiAgICBhdG9tcy5hdG9tVHlwZXMuc3BsaWNlKHJlbW92ZWROb2RlSWR4LCAxKTtcbiAgICBhdG9tcy54LnNwbGljZShyZW1vdmVkTm9kZUlkeCwgMSk7XG4gICAgYXRvbXMueS5zcGxpY2UocmVtb3ZlZE5vZGVJZHgsIDEpO1xuICAgIGF0b21zLmt3YXJncy5zcGxpY2UocmVtb3ZlZE5vZGVJZHgsIDEpO1xuXG4gICAgLy8gdXBkYXRlIHRoZSB2YWx1ZXMgb2YgdGVybWluYWwgYW5kIHItZ3JvdXAgbm9kZXMgaWYgbmVjZXNzYXJ5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhLnRlcm1pbmFsTm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChtZXRhLnRlcm1pbmFsTm9kZXNbaV0gPiByZW1vdmVkTm9kZSlcbiAgICAgICAgLS1tZXRhLnRlcm1pbmFsTm9kZXNbaV07XG4gICAgICBlbHNlIGlmIChtZXRhLnRlcm1pbmFsTm9kZXNbaV0gPT09IHJlbW92ZWROb2RlKVxuICAgICAgICBtZXRhLnRlcm1pbmFsTm9kZXNbaV0gPSAtMTsgLy8gc2VudGluZWwgdG8gbWFyayB0aGUgdmFsdWUgYXMgcmVtb3ZlZFxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGEuck5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobWV0YS5yTm9kZXNbaV0gPiByZW1vdmVkTm9kZSlcbiAgICAgICAgLS1tZXRhLnJOb2Rlc1tpXTtcbiAgICAgIGVsc2UgaWYgKG1ldGEuck5vZGVzW2ldID09PSByZW1vdmVkTm9kZSlcbiAgICAgICAgbWV0YS5yTm9kZXNbaV0gPSAtMTsgLy8gc2VudGluZWwgdG8gbWFyayB0aGUgdmFsdWUgYXMgcmVtb3ZlZFxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBpbmRpY2VzIG9mIGF0b21zIGluIGJvbmRzXG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYm9uZHMuYXRvbVBhaXJzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RBdG9tID0gYm9uZHMuYXRvbVBhaXJzW2ldWzBdO1xuICAgICAgY29uc3Qgc2Vjb25kQXRvbSA9IGJvbmRzLmF0b21QYWlyc1tpXVsxXTtcbiAgICAgIGlmIChmaXJzdEF0b20gPT09IHJlbW92ZWROb2RlIHx8IHNlY29uZEF0b20gPT09IHJlbW92ZWROb2RlKSB7XG4gICAgICAgIGJvbmRzLmF0b21QYWlycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJvbmRzLmJvbmRUeXBlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGlmIChib25kcy5ib25kQ29uZmlndXJhdGlvbi5oYXMoaSkpXG4gICAgICAgICAgYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uZGVsZXRlKGkpO1xuICAgICAgICBpZiAoYm9uZHMua3dhcmdzLmhhcyhpKSlcbiAgICAgICAgICBib25kcy5rd2FyZ3MuZGVsZXRlKGkpO1xuICAgICAgICAtLWk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib25kcy5hdG9tUGFpcnNbaV1bMF0gPSAoZmlyc3RBdG9tID4gcmVtb3ZlZE5vZGUpID8gZmlyc3RBdG9tIC0gMSA6IGZpcnN0QXRvbTtcbiAgICAgICAgYm9uZHMuYXRvbVBhaXJzW2ldWzFdID0gKHNlY29uZEF0b20gPiByZW1vdmVkTm9kZSkgPyBzZWNvbmRBdG9tIC0gMSA6IHNlY29uZEF0b207XG4gICAgICB9XG4gICAgICArK2k7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGJvbmRDb25maWd1cmF0aW9uIGFuZCBrd2FyZ3Mga2V5c1xuICAgIGxldCBrZXlzID0gQXJyYXkuZnJvbShib25kcy5ib25kQ29uZmlndXJhdGlvbi5rZXlzKCkpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uaGFzKGtleSkgJiYga2V5ID4gcmVtb3ZlZE5vZGVJZHgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBib25kcy5ib25kQ29uZmlndXJhdGlvbi5nZXQoa2V5KSE7XG4gICAgICAgIGJvbmRzLmJvbmRDb25maWd1cmF0aW9uLmRlbGV0ZShrZXkpO1xuICAgICAgICBib25kcy5ib25kQ29uZmlndXJhdGlvbi5zZXQoa2V5IC0gMSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGtleXMgPSBBcnJheS5mcm9tKGJvbmRzLmt3YXJncy5rZXlzKCkpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoYm9uZHMua3dhcmdzLmhhcyhrZXkpICYmIGtleSA+IHJlbW92ZWROb2RlSWR4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYm9uZHMua3dhcmdzLmdldChrZXkpITtcbiAgICAgICAgYm9uZHMua3dhcmdzLmRlbGV0ZShrZXkpO1xuICAgICAgICBib25kcy5rd2FyZ3Muc2V0KGtleSAtIDEsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vLyB0b2RvOiByZXdyaXRlIGRlc2NyaXB0aW9uXG4vKiBBZGp1c3QgdGhlIChwZXB0aWRlKSBtb25vbWVyIGdyYXBoIHNvIHRoYXQgaXQgaGFzIHN0YW5kYXJkIGZvcm0gICovXG5mdW5jdGlvbiBhZGp1c3RQZXB0aWRlTW9ub21lckdyYXBoKG1vbm9tZXI6IE1vbEdyYXBoKTogdm9pZCB7XG4gIGNvbnN0IG5vZGVPbmVJZHggPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSAtIDE7IC8vIG5vZGUgaW5kZXhpbmcgaW4gbW9sZmlsZXMgc3RhcnRzIGZyb20gMVxuICBjb25zdCBub2RlVHdvSWR4ID0gbW9ub21lci5tZXRhLnJOb2Rlc1swXSAtIDE7XG4gIGNvbnN0IHggPSBtb25vbWVyLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb25vbWVyLmF0b21zLnk7XG5cbiAgLy8gcGxhY2Ugbm9kZU9uZSBhdCBvcmlnaW5cbiAgc2hpZnRDb29yZGluYXRlcyhtb25vbWVyLCAteFtub2RlT25lSWR4XSwgLXlbbm9kZU9uZUlkeF0pO1xuXG4gIC8vIGFuZ2xlIGlzIG1lYXN1cmVkIGJldHdlZW4gT1kgYW5kIHRoZSByb3RhdGVkIG5vZGVcbiAgY29uc3QgYW5nbGUgPSBmaW5kQW5nbGVXaXRoT1koeFtub2RlVHdvSWR4XSwgeVtub2RlVHdvSWR4XSk7XG5cbiAgLy8gcm90YXRlIHRoZSBjZW50ZXJlZCBncmFwaCwgc28gdGhhdCAnbm9kZVR3bycgZW5kcyB1cCBvbiB0aGUgcG9zaXRpdmUgcmF5IG9mIE9ZXG4gIHJvdGF0ZUNlbnRlcmVkR3JhcGgobW9ub21lci5hdG9tcywgLWFuZ2xlKTtcblxuICBpZiAoeFttb25vbWVyLm1ldGEuck5vZGVzWzFdIC0gMV0gPCAwKVxuICAgIGZsaXBNb25vbWVyQXJvdW5kT1kobW9ub21lcik7XG5cbiAgY29uc3QgZG91YmxlQm9uZGVkT3h5Z2VuID0gZmluZERvdWJsZUJvbmRlZENhcmJvbnlsT3h5Z2VuKG1vbm9tZXIpO1xuXG4gIC8vIGZsaXAgY2FyYm94eWwgYW5kIFIgaWYgbmVjZXNzYXJ5XG4gIGZsaXBDYXJib3h5bEFuZFJhZGljYWwobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcblxuICAvLyBmbGlwIGh5ZHJveHlsIGdyb3VwIHdpdGggZG91YmxlLWJvdW5kIE8gaW5zaWRlIGNhcmJveHlsIGdyb3VwIGlmIG5lY2Vzc2FyeVxuICBmbGlwSHlkcm94aWxHcm91cChtb25vbWVyLCBkb3VibGVCb25kZWRPeHlnZW4pO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RQaG9zcGhhdGVNb25vbWVyR3JhcGgobW9ub21lcjogTW9sR3JhcGgpOnZvaWQge1xuICBjb25zdCBub2RlT25lSWR4ID0gbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxOyAvLyBub2RlIGluZGV4aW5nIGluIG1vbGZpbGVzIHN0YXJ0cyBmcm9tIDFcbiAgY29uc3Qgbm9kZVR3b0lkeCA9IG1vbm9tZXIubWV0YS5yTm9kZXNbMF0gLSAxO1xuICBjb25zdCB4ID0gbW9ub21lci5hdG9tcy54O1xuICBjb25zdCB5ID0gbW9ub21lci5hdG9tcy55O1xuXG4gIC8vIHBsYWNlIG5vZGVPbmUgYXQgb3JpZ2luXG4gIHNoaWZ0Q29vcmRpbmF0ZXMobW9ub21lciwgLXhbbm9kZU9uZUlkeF0sIC15W25vZGVPbmVJZHhdKTtcblxuICAvLyAvLyBhbmdsZSBpcyBtZWFzdXJlZCBiZXR3ZWVuIE9ZIGFuZCB0aGUgcm90YXRlZCBub2RlXG4gIC8vIGNvbnN0IGFuZ2xlID0gZmluZEFuZ2xlV2l0aE9ZKHhbbm9kZVR3b0lkeF0sIHlbbm9kZVR3b0lkeF0pO1xuXG4gIC8vIC8vIHJvdGF0ZSB0aGUgY2VudGVyZWQgZ3JhcGgsIHNvIHRoYXQgJ25vZGVUd28nIGVuZHMgdXAgb24gdGhlIHBvc2l0aXZlIHJheSBvZiBPWVxuICAvLyByb3RhdGVDZW50ZXJlZEdyYXBoKG1vbm9tZXIuYXRvbXMsIC1hbmdsZSk7XG5cbiAgLy8gaWYgKHhbbW9ub21lci5tZXRhLnJOb2Rlc1sxXSAtIDFdIDwgMClcbiAgLy8gICBmbGlwTW9ub21lckFyb3VuZE9ZKG1vbm9tZXIpO1xuXG4gIC8vIGNvbnN0IGRvdWJsZUJvbmRlZE94eWdlbiA9IGZpbmREb3VibGVCb25kZWRDYXJib255bE94eWdlbihtb25vbWVyKTtcblxuICAvLyAvLyBmbGlwIGNhcmJveHlsIGFuZCBSIGlmIG5lY2Vzc2FyeVxuICAvLyBmbGlwQ2FyYm94eWxBbmRSYWRpY2FsKG1vbm9tZXIsIGRvdWJsZUJvbmRlZE94eWdlbik7XG5cbiAgLy8gLy8gZmxpcCBoeWRyb3h5bCBncm91cCB3aXRoIGRvdWJsZS1ib3VuZCBPIGluc2lkZSBjYXJib3h5bCBncm91cCBpZiBuZWNlc3NhcnlcbiAgLy8gZmxpcEh5ZHJveGlsR3JvdXAobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0U3VnYXJNb25vbWVyR3JhcGgobW9ub21lcjogTW9sR3JhcGgpOnZvaWQge1xuICBjb25zdCBub2RlT25lSWR4ID0gbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxOyAvLyBub2RlIGluZGV4aW5nIGluIG1vbGZpbGVzIHN0YXJ0cyBmcm9tIDFcbiAgY29uc3Qgbm9kZVR3b0lkeCA9IG1vbm9tZXIubWV0YS5yTm9kZXNbMF0gLSAxO1xuICBjb25zdCB4ID0gbW9ub21lci5hdG9tcy54O1xuICBjb25zdCB5ID0gbW9ub21lci5hdG9tcy55O1xuXG4gIC8vIHBsYWNlIG5vZGVPbmUgYXQgb3JpZ2luXG4gIHNoaWZ0Q29vcmRpbmF0ZXMobW9ub21lciwgLXhbbm9kZU9uZUlkeF0sIC15W25vZGVPbmVJZHhdKTtcblxuICAvLyAvLyBhbmdsZSBpcyBtZWFzdXJlZCBiZXR3ZWVuIE9ZIGFuZCB0aGUgcm90YXRlZCBub2RlXG4gIC8vIGNvbnN0IGFuZ2xlID0gZmluZEFuZ2xlV2l0aE9ZKHhbbm9kZVR3b0lkeF0sIHlbbm9kZVR3b0lkeF0pO1xuXG4gIC8vIC8vIHJvdGF0ZSB0aGUgY2VudGVyZWQgZ3JhcGgsIHNvIHRoYXQgJ25vZGVUd28nIGVuZHMgdXAgb24gdGhlIHBvc2l0aXZlIHJheSBvZiBPWVxuICAvLyByb3RhdGVDZW50ZXJlZEdyYXBoKG1vbm9tZXIuYXRvbXMsIC1hbmdsZSk7XG5cbiAgLy8gaWYgKHhbbW9ub21lci5tZXRhLnJOb2Rlc1sxXSAtIDFdIDwgMClcbiAgLy8gICBmbGlwTW9ub21lckFyb3VuZE9ZKG1vbm9tZXIpO1xuXG4gIC8vIGNvbnN0IGRvdWJsZUJvbmRlZE94eWdlbiA9IGZpbmREb3VibGVCb25kZWRDYXJib255bE94eWdlbihtb25vbWVyKTtcblxuICAvLyAvLyBmbGlwIGNhcmJveHlsIGFuZCBSIGlmIG5lY2Vzc2FyeVxuICAvLyBmbGlwQ2FyYm94eWxBbmRSYWRpY2FsKG1vbm9tZXIsIGRvdWJsZUJvbmRlZE94eWdlbik7XG5cbiAgLy8gLy8gZmxpcCBoeWRyb3h5bCBncm91cCB3aXRoIGRvdWJsZS1ib3VuZCBPIGluc2lkZSBjYXJib3h5bCBncm91cCBpZiBuZWNlc3NhcnlcbiAgLy8gZmxpcEh5ZHJveGlsR3JvdXAobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcbn1cbmZ1bmN0aW9uIGFkanVzdEJhc2VNb25vbWVyR3JhcGgobW9ub21lcjogTW9sR3JhcGgpOnZvaWQge1xuICBjb25zdCBub2RlT25lSWR4ID0gbW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gLSAxOyAvLyBub2RlIGluZGV4aW5nIGluIG1vbGZpbGVzIHN0YXJ0cyBmcm9tIDFcbiAgY29uc3Qgbm9kZVR3b0lkeCA9IG1vbm9tZXIubWV0YS5yTm9kZXNbMF0gLSAxO1xuICBjb25zdCB4ID0gbW9ub21lci5hdG9tcy54O1xuICBjb25zdCB5ID0gbW9ub21lci5hdG9tcy55O1xuXG4gIC8vIHBsYWNlIG5vZGVPbmUgYXQgb3JpZ2luXG4gIHNoaWZ0Q29vcmRpbmF0ZXMobW9ub21lciwgLXhbbm9kZU9uZUlkeF0sIC15W25vZGVPbmVJZHhdKTtcblxuICAvLyAvLyBhbmdsZSBpcyBtZWFzdXJlZCBiZXR3ZWVuIE9ZIGFuZCB0aGUgcm90YXRlZCBub2RlXG4gIC8vIGNvbnN0IGFuZ2xlID0gZmluZEFuZ2xlV2l0aE9ZKHhbbm9kZVR3b0lkeF0sIHlbbm9kZVR3b0lkeF0pO1xuXG4gIC8vIC8vIHJvdGF0ZSB0aGUgY2VudGVyZWQgZ3JhcGgsIHNvIHRoYXQgJ25vZGVUd28nIGVuZHMgdXAgb24gdGhlIHBvc2l0aXZlIHJheSBvZiBPWVxuICAvLyByb3RhdGVDZW50ZXJlZEdyYXBoKG1vbm9tZXIuYXRvbXMsIC1hbmdsZSk7XG5cbiAgLy8gaWYgKHhbbW9ub21lci5tZXRhLnJOb2Rlc1sxXSAtIDFdIDwgMClcbiAgLy8gICBmbGlwTW9ub21lckFyb3VuZE9ZKG1vbm9tZXIpO1xuXG4gIC8vIGNvbnN0IGRvdWJsZUJvbmRlZE94eWdlbiA9IGZpbmREb3VibGVCb25kZWRDYXJib255bE94eWdlbihtb25vbWVyKTtcblxuICAvLyAvLyBmbGlwIGNhcmJveHlsIGFuZCBSIGlmIG5lY2Vzc2FyeVxuICAvLyBmbGlwQ2FyYm94eWxBbmRSYWRpY2FsKG1vbm9tZXIsIGRvdWJsZUJvbmRlZE94eWdlbik7XG5cbiAgLy8gLy8gZmxpcCBoeWRyb3h5bCBncm91cCB3aXRoIGRvdWJsZS1ib3VuZCBPIGluc2lkZSBjYXJib3h5bCBncm91cCBpZiBuZWNlc3NhcnlcbiAgLy8gZmxpcEh5ZHJveGlsR3JvdXAobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuKTtcbn1cblxuLyogRmxpcCBjYXJib3h5bCBncm91cCB3aXRoIHRoZSByYWRpY2FsIGluIGEgcGVwdGlkZSBtb25vbWVyIGluIGNhc2UgdGhlXG4gKiBjYXJib3h5bCBncm91cCBpcyBpbiB0aGUgbG93ZXIgaGFsZi1wbGFuZSAqL1xuZnVuY3Rpb24gZmxpcENhcmJveHlsQW5kUmFkaWNhbChtb25vbWVyOiBNb2xHcmFwaCwgZG91YmxlQm9uZGVkT3h5Z2VuOiBudW1iZXIpOiB2b2lkIHtcbiAgLy8gdmVyaWZ5IHRoYXQgdGhlIGNhcmJveHlsIGdyb3VwIGlzIGluIHRoZSBsb3dlciBoYWxmLXBsYW5lXG4gIGlmIChtb25vbWVyLmF0b21zLnlbbW9ub21lci5tZXRhLnJOb2Rlc1sxXSAtIDFdIDwgMCAmJlxuICAgIG1vbm9tZXIuYXRvbXMueVtkb3VibGVCb25kZWRPeHlnZW4gLSAxXSA8IDApIHtcbiAgICBmbGlwTW9ub21lckFyb3VuZE9YKG1vbm9tZXIpO1xuXG4gICAgcm90YXRlQ2VudGVyZWRHcmFwaChtb25vbWVyLmF0b21zLFxuICAgICAgLWZpbmRBbmdsZVdpdGhPWChcbiAgICAgICAgbW9ub21lci5hdG9tcy54W21vbm9tZXIubWV0YS50ZXJtaW5hbE5vZGVzWzFdIC0gMV0sXG4gICAgICAgIG1vbm9tZXIuYXRvbXMueVttb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1sxXSAtIDFdXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuXG4vKiBGaW5kcyBhbmdsZSBiZXR3ZWVuIE9ZIGFuZCB0aGUgcmF5IGpvaW5pbmcgb3JpZ2luIHdpdGggKHgsIHkpICovXG5mdW5jdGlvbiBmaW5kQW5nbGVXaXRoT1koeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgYW5nbGU7XG4gIGlmICh4ID09PSAwKSB7XG4gICAgYW5nbGUgPSB5ID4gMCA/IDAgOiBNYXRoLlBJO1xuICB9IGVsc2UgaWYgKHkgPT09IDApIHtcbiAgICBhbmdsZSA9IHggPiAwID8gLU1hdGguUEkvMiA6IE1hdGguUEkvMjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0YW4gPSB5IC8geDtcbiAgICBjb25zdCBhdGFuID0gTWF0aC5hdGFuKHRhbik7XG4gICAgYW5nbGUgPSAoeCA8IDApID8gTWF0aC5QSS8yICsgYXRhbiA6IC1NYXRoLlBJLzIgKyBhdGFuO1xuICB9XG4gIHJldHVybiBhbmdsZTtcbn1cblxuLyogRmluZHMgYW5nbGUgYmV0d2VlbiBPWCBhbmQgdGhlIHJheSBqb2luaW5nIG9yaWdpbiB3aXRoICh4LCB5KSAqL1xuZnVuY3Rpb24gZmluZEFuZ2xlV2l0aE9YKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGZpbmRBbmdsZVdpdGhPWSh4LCB5KSArIE1hdGguUEkvMjtcbn1cblxuLyogIFJvdGF0ZSB0aGUgZ3JhcGggYXJvdW5kIHRoZSBvcmlnaW4gYnkgJ2FuZ2xlJyAqL1xuZnVuY3Rpb24gcm90YXRlQ2VudGVyZWRHcmFwaChhdG9tczogQXRvbXMsIGFuZ2xlOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgY29uc3QgeCA9IGF0b21zLng7XG4gICAgY29uc3QgeSA9IGF0b21zLnk7XG5cbiAgICBjb25zdCBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCB0bXAgPSB4W2ldO1xuICAgICAgeFtpXSA9IGtlZXBQcmVjaXNpb24odG1wKmNvcyAtIHlbaV0qc2luKTtcbiAgICAgIHlbaV0gPSBrZWVwUHJlY2lzaW9uKHRtcCpzaW4gKyB5W2ldKmNvcyk7XG4gICAgfVxuICB9XG59XG5cbi8qIEZsaXAgbW9ub21lciBncmFwaCBhcm91bmQgT1ggYXhpcyBwcmVzZXJ2aW5nIHN0ZXJlb21ldHJ5ICovXG5mdW5jdGlvbiBmbGlwTW9ub21lckFyb3VuZE9YKG1vbm9tZXI6IE1vbEdyYXBoKTogdm9pZCB7XG4gIGZsaXBNb2xHcmFwaChtb25vbWVyLCB0cnVlKTtcbn1cblxuLyogRmxpcCBtb25vbWVyIGdyYXBoIGFyb3VuZCBPWSBheGlzIHByZXNlcnZpbmcgc3RlcmVvbWV0cnkgKi9cbmZ1bmN0aW9uIGZsaXBNb25vbWVyQXJvdW5kT1kobW9ub21lcjogTW9sR3JhcGgpOiB2b2lkIHtcbiAgZmxpcE1vbEdyYXBoKG1vbm9tZXIsIGZhbHNlKTtcbn1cblxuLyogRmxpcCBncmFwaCBhcm91bmQgYSBzcGVjaWZpZWQgYXhpczogJ3RydWUnIGNvcnJlc3BvbmRzIHRvIE9YLCAnZmFsc2UnIHRvIE9ZICovXG5mdW5jdGlvbiBmbGlwTW9sR3JhcGgobW9sR3JhcGg6IE1vbEdyYXBoLCBheGlzOiBib29sZWFuKTogdm9pZCB7XG4gIGlmIChheGlzKSB7IC8vIGZsaXBwaW5nIGFyb3VuZCBPWFxuICAgIGNvbnN0IHkgPSBtb2xHcmFwaC5hdG9tcy55O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeS5sZW5ndGg7IGkrKylcbiAgICAgIHlbaV0gPSAteVtpXTtcbiAgfSBlbHNlIHsgLy8gZmxpcHBpbmcgYXJvdW5kIE9ZXG4gICAgY29uc3QgeCA9IG1vbEdyYXBoLmF0b21zLng7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKVxuICAgICAgeFtpXSA9IC14W2ldO1xuICB9XG5cbiAgLy8gcHJlc2VydmUgdGhlIHN0ZXJlb21ldHJ5XG4gIGNvbnN0IG9yaWVudGF0aW9uID0gbW9sR3JhcGguYm9uZHMuYm9uZENvbmZpZ3VyYXRpb247XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG9yaWVudGF0aW9uKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSA9PT0gMSA/IDMgOiAxO1xuICAgIG9yaWVudGF0aW9uLnNldChrZXksIG5ld1ZhbHVlKTtcbiAgfVxufVxuXG4vKiBGbGlwcyBkb3VibGUtYm9uZGVkICdPJyBpbiBjYXJib255bCBncm91cCB3aXRoICdPSCcgaW4gb3JkZXIgZm9yIHRoZSBtb25vbWVyc1xuICogdG8gaGF2ZSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbiBzaW1wbGlmeWluZyB0aGVpciBjb25jYXRlbmF0aW9uLiBUaGVcbiAqIG1vbm9tZXIgbXVzdCBhbHJlYWR5IGJlIGFkanVzdGVkIHdpdGggYWRqdXN0UGVwdGlkZU1vbm9tZXJHcmFwaCBpbiBvcmRlciBmb3IgdGhpcyBmdW5jdGlvbiB0byBiZSBpbXBsZW1lbnRlZCAgKi9cbmZ1bmN0aW9uIGZsaXBIeWRyb3hpbEdyb3VwKG1vbm9tZXI6IE1vbEdyYXBoLCBkb3VibGVCb25kZWRPeHlnZW46IG51bWJlcik6IHZvaWQge1xuICBjb25zdCB4ID0gbW9ub21lci5hdG9tcy54O1xuICAvLyAtMSBiZWxvdyBiZWNhdXNlIGluZGV4aW5nIG9mIG5vZGVzIGluIG1vbGZpbGVzIHN0YXJ0cyBmcm9tIDEsIHVubGlrZSBhcnJheXNcbiAgaWYgKHhbbW9ub21lci5tZXRhLnJOb2Rlc1sxXSAtIDFdID4geFtkb3VibGVCb25kZWRPeHlnZW4gLSAxXSlcbiAgICBzd2FwTm9kZXMobW9ub21lciwgZG91YmxlQm9uZGVkT3h5Z2VuLCBtb25vbWVyLm1ldGEuck5vZGVzWzFdKTtcbn1cblxuLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygbm9kZSAoc3RhcnRpbmcgZnJvbSAxKSBjb3JyZXNwb25kaW5nIHRvIHRoZVxuICogZG91YmxlLWJvbmRlZCBveHlnZW4gb2YgdGhlIGNhcmJvbnlsIGdyb3VwICAqL1xuZnVuY3Rpb24gZmluZERvdWJsZUJvbmRlZENhcmJvbnlsT3h5Z2VuKG1vbm9tZXI6IE1vbEdyYXBoKTogbnVtYmVyIHtcbiAgY29uc3QgYm9uZHNNYXAgPSBjb25zdHJ1Y3RCb25kc01hcChtb25vbWVyKTtcbiAgbGV0IGRvdWJsZUJvbmRlZE94eWdlbiA9IDA7XG4gIGxldCBpID0gMDtcbiAgLy8gaXRlcmF0ZSBvdmVyIHRoZSBub2RlcyBib25kZWQgdG8gdGhlIGNhcmJvbiBhbmQgZmluZCB0aGUgZG91YmxlIG9uZVxuICB3aGlsZSAoZG91YmxlQm9uZGVkT3h5Z2VuID09PSAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IGJvbmRzTWFwLmdldChtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1sxXSkhW2ldO1xuICAgIGlmIChtb25vbWVyLmF0b21zLmF0b21UeXBlc1tub2RlIC0gMV0gPT09IE9YWUdFTiAmJiBub2RlICE9PSBtb25vbWVyLm1ldGEuck5vZGVzWzFdKVxuICAgICAgZG91YmxlQm9uZGVkT3h5Z2VuID0gbm9kZTtcbiAgICBpKys7XG4gIH1cbiAgcmV0dXJuIGRvdWJsZUJvbmRlZE94eWdlbjtcbn1cblxuLyogU3dhcCB0aGUgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSB0d28gc3BlY2lmaWVkIG5vZGVzIGluIE1vbEdyYXBoICAqL1xuZnVuY3Rpb24gc3dhcE5vZGVzKG1vbm9tZXI6IE1vbEdyYXBoLCBub2RlT25lOiBudW1iZXIsIG5vZGVUd286IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBub2RlT25lSWR4ID0gbm9kZU9uZSAtIDE7XG4gIGNvbnN0IG5vZGVUd29JZHggPSBub2RlVHdvIC0gMTtcbiAgY29uc3QgeCA9IG1vbm9tZXIuYXRvbXMueDtcbiAgY29uc3QgeSA9IG1vbm9tZXIuYXRvbXMueTtcbiAgY29uc3QgdG1wWCA9IHhbbm9kZU9uZUlkeF07XG4gIGNvbnN0IHRtcFkgPSB5W25vZGVPbmVJZHhdO1xuICB4W25vZGVPbmVJZHhdID0geFtub2RlVHdvSWR4XTtcbiAgeVtub2RlT25lSWR4XSA9IHlbbm9kZVR3b0lkeF07XG4gIHhbbm9kZVR3b0lkeF0gPSB0bXBYO1xuICB5W25vZGVUd29JZHhdID0gdG1wWTtcbn1cblxuLy8gdG9kbzogZG9jXG5mdW5jdGlvbiBjb25zdHJ1Y3RCb25kc01hcChtb25vbWVyOiBNb2xHcmFwaCk6IE1hcDxudW1iZXIsIEFycmF5PG51bWJlcj4+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxudW1iZXIsIEFycmF5PG51bWJlcj4+KCk7XG4gIGZvciAoY29uc3QgYXRvbVBhaXJzIG9mIG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0b21QYWlyc1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXRvbVBhaXJzWyhpICsgMSklMl07XG4gICAgICBpZiAobWFwLmhhcyhrZXkpKVxuICAgICAgICBtYXAuZ2V0KGtleSk/LnB1c2godmFsdWUpO1xuICAgICAgZWxzZVxuICAgICAgICBtYXAuc2V0KGtleSwgbmV3IEFycmF5PG51bWJlcj4oMSkuZmlsbCh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG4vKiBTaGlmdCBtb2xHcmFwaCBpbiB0aGUgWE9ZIHBsYW5lICAqL1xuZnVuY3Rpb24gc2hpZnRDb29yZGluYXRlcyhtb2xHcmFwaDogTW9sR3JhcGgsIHhTaGlmdDogbnVtYmVyLCB5U2hpZnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgeCA9IG1vbEdyYXBoLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb2xHcmFwaC5hdG9tcy55O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyArK2kpIHtcbiAgICB4W2ldID0ga2VlcFByZWNpc2lvbih4W2ldICsgeFNoaWZ0KTtcbiAgICBpZiAodHlwZW9mIHlTaGlmdCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICB5W2ldID0ga2VlcFByZWNpc2lvbih5W2ldICsgeVNoaWZ0KTtcbiAgfVxufVxuXG4vKiBUcmFuc2xhdGUgYSBzZXF1ZW5jZSBvZiBtb25vbWVyIHN5bWJvbHMgaW50byBNb2xmaWxlIFYzMDAwICovXG5mdW5jdGlvbiBtb25vbWVyU2VxVG9Nb2xmaWxlKFxuICBtb25vbWVyU2VxOiBzdHJpbmdbXSwgbW9ub21lcnNEaWN0OiBNYXA8c3RyaW5nLCBNb2xHcmFwaD4sIGFscGhhYmV0OiBBTFBIQUJFVCwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFXG4pOiBzdHJpbmcge1xuICAvLyB0b2RvOiBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgcG9seW1lciBpcyBlbXB0eVxuICBpZiAobW9ub21lclNlcS5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdtb25vbWVyU2VxIGlzIGVtcHR5Jyk7XG5cbiAgLy8gZGVmaW5lIGF0b20gYW5kIGJvbmQgY291bnRzLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBib25kIHR5cGVcbiAgY29uc3Qge2F0b21Db3VudCwgYm9uZENvdW50fSA9IGdldFJlc3VsdGluZ0F0b21Cb25kQ291bnRzKG1vbm9tZXJTZXEsIG1vbm9tZXJzRGljdCwgYWxwaGFiZXQsIHBvbHltZXJUeXBlKTtcblxuICAvLyBjcmVhdGUgYXJyYXlzIHRvIHN0b3JlIGxpbmVzIG9mIHRoZSByZXN1bHRpbmcgbW9sZmlsZVxuICBjb25zdCBtb2xmaWxlQXRvbUJsb2NrID0gbmV3IEFycmF5PHN0cmluZz4oYXRvbUNvdW50KTtcbiAgY29uc3QgbW9sZmlsZUJvbmRCbG9jayA9IG5ldyBBcnJheTxzdHJpbmc+KGJvbmRDb3VudCk7XG5cbiAgbGV0IGFkZE1vbm9tZXJUb01vbGJsb2NrO1xuICBsZXQgY2FwTW9sYmxvY2s7XG4gIGxldCBub2RlU2hpZnRJbml0VmFsdWU7XG4gIGxldCBib25kU2hpZnRJbml0VmFsdWU7XG4gIGxldCBzdWdhciA9IG51bGw7XG4gIGxldCBwaG9zcGhhdGUgPSBudWxsO1xuXG4gIGlmIChwb2x5bWVyVHlwZSA9PT0gSEVMTV9QT0xZTUVSX1RZUEUuUEVQVElERSkge1xuICAgIGFkZE1vbm9tZXJUb01vbGJsb2NrID0gYWRkQW1pbm9BY2lkVG9Nb2xibG9jaztcbiAgICBjYXBNb2xibG9jayA9IGNhcFBlcHRpZGVNb2xibG9jaztcbiAgICBub2RlU2hpZnRJbml0VmFsdWUgPSBib25kU2hpZnRJbml0VmFsdWUgPSAwO1xuICB9IGVsc2UgeyAvLyBudWNsZW90aWRlc1xuICAgIGFkZE1vbm9tZXJUb01vbGJsb2NrID0gYWRkTnVjbGVvdGlkZVRvTW9sYmxvY2s7XG4gICAgY2FwTW9sYmxvY2sgPSBjYXBQZXB0aWRlTW9sYmxvY2s7IC8vIHRvZG86IGNsZWFudXAgJiByZWZhY3RvclxuICAgIG5vZGVTaGlmdEluaXRWYWx1ZSA9IDA7XG4gICAgYm9uZFNoaWZ0SW5pdFZhbHVlID0gMDtcbiAgICBzdWdhciA9IChhbHBoYWJldCA9PT0gQUxQSEFCRVQuRE5BKSA/IG1vbm9tZXJzRGljdC5nZXQoREVPWFlSSUJPU0UpIDogbW9ub21lcnNEaWN0LmdldChSSUJPU0UpO1xuICAgIHBob3NwaGF0ZSA9IG1vbm9tZXJzRGljdC5nZXQoUEhPU1BIQVRFKTtcbiAgfVxuXG4gIGNvbnN0IHY6IExvb3BWYXJpYWJsZXMgPSB7XG4gICAgaTogMCxcbiAgICBub2RlU2hpZnQ6IG5vZGVTaGlmdEluaXRWYWx1ZSxcbiAgICBib25kU2hpZnQ6IGJvbmRTaGlmdEluaXRWYWx1ZSxcbiAgICBiYWNrYm9uZVBvc2l0aW9uU2hpZnQ6IG5ldyBBcnJheTxudW1iZXI+KDIpLmZpbGwoMCksXG4gICAgYnJhbmNoUG9zaXRpb25TaGlmdDogbmV3IEFycmF5PG51bWJlcj4oMikuZmlsbCgwKSxcbiAgICBiYWNrYm9uZUF0dGFjaE5vZGU6IDAsXG4gICAgYnJhbmNoQXR0YWNoTm9kZTogMCxcbiAgICBmbGlwRmFjdG9yOiAxLFxuICB9O1xuXG4gIGNvbnN0IEM6IExvb3BDb25zdGFudHMgPSB7XG4gICAgc3VnYXI6IHN1Z2FyISxcbiAgICBwaG9zcGhhdGU6IHBob3NwaGF0ZSEsXG4gICAgc2VxTGVuZ3RoOiBtb25vbWVyU2VxLmxlbmd0aCxcbiAgICBhdG9tQ291bnQ6IGF0b21Db3VudCxcbiAgICBib25kQ291bnQ6IGJvbmRDb3VudCxcbiAgfTtcblxuICBmb3IgKHYuaSA9IDA7IHYuaSA8IEMuc2VxTGVuZ3RoOyArK3YuaSkge1xuICAgIGNvbnN0IG1vbm9tZXIgPSBtb25vbWVyc0RpY3QuZ2V0KG1vbm9tZXJTZXFbdi5pXSkhO1xuICAgIGFkZE1vbm9tZXJUb01vbGJsb2NrKG1vbm9tZXIsIG1vbGZpbGVBdG9tQmxvY2ssIG1vbGZpbGVCb25kQmxvY2ssIHYsIEMpO1xuICB9XG5cbiAgY2FwTW9sYmxvY2sobW9sZmlsZUF0b21CbG9jaywgbW9sZmlsZUJvbmRCbG9jaywgdiwgQyk7XG5cbiAgY29uc3QgbW9sZmlsZUNvdW50c0xpbmUgPSBWM0tfQkVHSU5fQ09VTlRTX0xJTkUgKyBhdG9tQ291bnQgKyAnICcgKyBib25kQ291bnQgKyBWM0tfQ09VTlRTX0xJTkVfRU5ESU5HO1xuXG4gIC8vIHRvZG86IG9wdGltaXplIGNvbmNhdGVuYXRpb24gdXNpbmcgQWxleGFuZGVyJ3MgaGludFxuICBjb25zdCBtb2xmaWxlUGFydHMgPSBbXG4gICAgVjNLX0hFQURFUl9GSVJTVF9MSU5FLFxuICAgIFYzS19IRUFERVJfU0VDT05EX0xJTkUsXG4gICAgVjNLX0JFR0lOX0NUQUJfQkxPQ0ssXG4gICAgbW9sZmlsZUNvdW50c0xpbmUsXG4gICAgVjNLX0JFR0lOX0FUT01fQkxPQ0ssXG4gICAgbW9sZmlsZUF0b21CbG9jay5qb2luKCcnKSxcbiAgICBWM0tfRU5EX0FUT01fQkxPQ0ssXG4gICAgVjNLX0JFR0lOX0JPTkRfQkxPQ0ssXG4gICAgbW9sZmlsZUJvbmRCbG9jay5qb2luKCcnKSxcbiAgICBWM0tfRU5EX0JPTkRfQkxPQ0ssXG4gICAgVjNLX0VORF9DVEFCX0JMT0NLLFxuICAgIFYzS19FTkQsXG4gIF07XG5cbiAgcmV0dXJuIG1vbGZpbGVQYXJ0cy5qb2luKCcnKTtcbn1cblxuLy8gdG9kbzogZG9jXG5mdW5jdGlvbiBjYXBQZXB0aWRlTW9sYmxvY2soXG4gIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSxcbiAgdjogTG9vcFZhcmlhYmxlcywgQzogTG9vcENvbnN0YW50c1xuKTogdm9pZCB7XG4gIC8vIGFkZCB0ZXJtaW5hbCBveHlnZW5cbiAgY29uc3QgYXRvbUlkeCA9IHYubm9kZVNoaWZ0ICsgMTtcbiAgbW9sZmlsZUF0b21CbG9ja1tDLmF0b21Db3VudF0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArXG4gICAgT1hZR0VOICsgJyAnICsga2VlcFByZWNpc2lvbih2LmJhY2tib25lUG9zaXRpb25TaGlmdFswXSkgKyAnICcgK1xuICAgIHYuZmxpcEZhY3RvciAqIGtlZXBQcmVjaXNpb24odi5iYWNrYm9uZVBvc2l0aW9uU2hpZnRbMV0pICsgJyAnICsgJzAuMDAwMDAwIDAnICsgJ1xcbic7XG5cbiAgLy8gYWRkIHRlcm1pbmFsIGJvbmRcbiAgY29uc3QgZmlyc3RBdG9tID0gdi5iYWNrYm9uZUF0dGFjaE5vZGU7XG4gIGNvbnN0IHNlY29uZEF0b20gPSBhdG9tSWR4O1xuICBtb2xmaWxlQm9uZEJsb2NrW0MuYm9uZENvdW50XSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyB2LmJvbmRTaGlmdCArICcgJyArXG4gICAgMSArICcgJyArIGZpcnN0QXRvbSArICcgJyArIHNlY29uZEF0b20gKyAnXFxuJztcbn1cblxuLy8gdG9kbzogZG9jXG5mdW5jdGlvbiBhZGRBbWlub0FjaWRUb01vbGJsb2NrKG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQXRvbUJsb2NrOiBzdHJpbmdbXSxcbiAgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMsIEM6IExvb3BDb25zdGFudHNcbik6IHZvaWQge1xuICB2LmZsaXBGYWN0b3IgPSAoLTEpKioodi5pICUgMik7IC8vIHRvIGZsaXAgZXZlcnkgZXZlbiBtb25vbWVyIG92ZXIgT1hcbiAgYWRkQmFja2JvbmVNb25vbWVyVG9Nb2xibG9jayhtb25vbWVyLCBtb2xmaWxlQXRvbUJsb2NrLCBtb2xmaWxlQm9uZEJsb2NrLCB2LCBDKTtcbn1cblxuZnVuY3Rpb24gYWRkQmFja2JvbmVNb25vbWVyVG9Nb2xibG9jayhcbiAgbW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVBdG9tQmxvY2s6IHN0cmluZ1tdLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcywgQzogTG9vcENvbnN0YW50c1xuKTogdm9pZCB7XG4gIC8vIHRvZG86IHJlbW92ZSB0aGVzZSBjb21tZW50cyB0byB0aGUgZG9jc3RyaW5ncyBvZiB0aGUgY29yci4gZnVuY3Rpb25zXG4gIC8vIGNvbnN0cnVuY3QgdGhlIGxpbmVzIG9mIFYzSyBtb2xmaWxlIGF0b20gYmxvY2tcbiAgZmlsbEF0b21MaW5lcyhtb25vbWVyLCBtb2xmaWxlQXRvbUJsb2NrLCB2KTtcblxuICAvLyBjb25zdHJ1Y3QgdGhlIGxpbmVzIG9mIFYzSyBtb2xmaWxlIGJvbmQgYmxvY2tcbiAgZmlsbEJvbmRMaW5lcyhtb25vbWVyLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcblxuICAvLyBwZXB0aWRlIGJvbmRcbiAgZmlsbENoYWluRXh0ZW5kaW5nQm9uZChtb25vbWVyLCBtb2xmaWxlQm9uZEJsb2NrLCB2KTtcblxuICAvLyB1cGRhdGUgYnJhbmNoIHZhcmlhYmxlcyBpZiBuZWNlc3NhcnlcbiAgaWYgKG1vbm9tZXIubWV0YS5icmFuY2hTaGlmdCAhPT0gbnVsbCAmJiBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlcy5sZW5ndGggPiAyKVxuICAgIHVwZGF0ZUJyYW5jaFZhcmlhYmxlcyhtb25vbWVyLCB2KTtcblxuICAvLyB1cGRhdGUgbG9vcCB2YXJpYWJsZXNcbiAgdXBkYXRlQ2hhaW5FeHRlbmRpbmdWYXJpYWJsZXMobW9ub21lciwgdiwgQyk7XG59XG5cbi8vIHRvZG86IGRvY1xuZnVuY3Rpb24gYWRkTnVjbGVvdGlkZVRvTW9sYmxvY2soXG4gIG51Y2xlb2Jhc2U6IE1vbEdyYXBoLCBtb2xmaWxlQXRvbUJsb2NrOiBzdHJpbmdbXSwgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMsIEM6IExvb3BDb25zdGFudHNcbik6IHZvaWQge1xuICAvLyBjb25zdHJ1bmN0IHRoZSBsaW5lcyBvZiBWM0sgbW9sZmlsZSBhdG9tIGJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gcGhvc3BoYXRlXG4gIC8vIGFuZCBzdWdhclxuICBmb3IgKGNvbnN0IG1vbm9tZXIgb2YgW0MucGhvc3BoYXRlLCBDLnN1Z2FyXSlcbiAgICBhZGRCYWNrYm9uZU1vbm9tZXJUb01vbGJsb2NrKG1vbm9tZXIhLCBtb2xmaWxlQXRvbUJsb2NrLCBtb2xmaWxlQm9uZEJsb2NrLCB2LCBDKTtcblxuICBhZGRCcmFuY2hNb25vbWVyVG9Nb2xibG9jayhudWNsZW9iYXNlLCBtb2xmaWxlQXRvbUJsb2NrLCBtb2xmaWxlQm9uZEJsb2NrLCB2LCBDKTtcbn1cblxuZnVuY3Rpb24gYWRkQnJhbmNoTW9ub21lclRvTW9sYmxvY2soXG4gIG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQXRvbUJsb2NrOiBzdHJpbmdbXSwgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMsIEM6IExvb3BDb25zdGFudHNcbik6IHZvaWQge1xuICBmaWxsQnJhbmNoQXRvbUxpbmVzKG1vbm9tZXIsIG1vbGZpbGVBdG9tQmxvY2ssIHYpO1xuICBmaWxsQm9uZExpbmVzKG1vbm9tZXIsIG1vbGZpbGVCb25kQmxvY2ssIHYpO1xuICBmaWxsQmFja2JvbmVUb0JyYW5jaEJvbmQobW9ub21lciwgbW9sZmlsZUJvbmRCbG9jaywgdik7XG5cbiAgLy8gQy1OIGJvbmRcbiAgY29uc3QgYm9uZElkeCA9IHYuYm9uZFNoaWZ0O1xuICBjb25zdCBmaXJzdEF0b20gPSB2LmJyYW5jaEF0dGFjaE5vZGU7XG4gIGNvbnN0IHNlY29uZEF0b20gPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSArIHYubm9kZVNoaWZ0O1xuICBtb2xmaWxlQm9uZEJsb2NrW2JvbmRJZHggLSAxXSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICtcbiAgICAxICsgJyAnICsgZmlyc3RBdG9tICsgJyAnICsgc2Vjb25kQXRvbSArICdcXG4nO1xuXG4gIC8vIHVwZGF0ZSBsb29wIHZhcmlhYmxlc1xuICB2LmJvbmRTaGlmdCArPSBtb25vbWVyLmJvbmRzLmF0b21QYWlycy5sZW5ndGggKyAxO1xuICB2Lm5vZGVTaGlmdCArPSBtb25vbWVyLmF0b21zLmF0b21UeXBlcy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoYWluRXh0ZW5kaW5nVmFyaWFibGVzKG1vbm9tZXI6IE1vbEdyYXBoLCB2OiBMb29wVmFyaWFibGVzLCBDOiBMb29wQ29uc3RhbnRzKTogdm9pZCB7XG4gIHYuYmFja2JvbmVBdHRhY2hOb2RlID0gdi5ub2RlU2hpZnQgKyBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1sxXTtcbiAgdi5ib25kU2hpZnQgKz0gbW9ub21lci5ib25kcy5hdG9tUGFpcnMubGVuZ3RoICsgMTtcblxuICB2Lm5vZGVTaGlmdCArPSBtb25vbWVyLmF0b21zLmF0b21UeXBlcy5sZW5ndGg7XG4gIHYuYmFja2JvbmVQb3NpdGlvblNoaWZ0WzBdICs9IG1vbm9tZXIubWV0YS5iYWNrYm9uZVNoaWZ0IVswXTsgLy8gdG9kbzogbm9uLW51bGwgY2hlY2tcbiAgdi5iYWNrYm9uZVBvc2l0aW9uU2hpZnRbMV0gKz0gdi5mbGlwRmFjdG9yICogbW9ub21lci5tZXRhLmJhY2tib25lU2hpZnQhWzFdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVCcmFuY2hWYXJpYWJsZXMobW9ub21lcjogTW9sR3JhcGgsIHY6IExvb3BWYXJpYWJsZXMpIHtcbiAgdi5icmFuY2hBdHRhY2hOb2RlID0gdi5ub2RlU2hpZnQgKyBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1syXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyArK2kpXG4gICAgdi5icmFuY2hQb3NpdGlvblNoaWZ0W2ldID0gdi5iYWNrYm9uZVBvc2l0aW9uU2hpZnRbaV0gKyBtb25vbWVyLm1ldGEuYnJhbmNoU2hpZnQhW2ldO1xufVxuXG5mdW5jdGlvbiBmaWxsQXRvbUxpbmVzKG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQXRvbUJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzLmxlbmd0aDsgKytqKSB7XG4gICAgY29uc3QgYXRvbUlkeCA9IHYubm9kZVNoaWZ0ICsgaiArIDE7XG4gICAgbW9sZmlsZUF0b21CbG9ja1t2Lm5vZGVTaGlmdCArIGpdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGF0b21JZHggKyAnICcgK1xuICAgICAgbW9ub21lci5hdG9tcy5hdG9tVHlwZXNbal0gKyAnICcgK1xuICAgICAga2VlcFByZWNpc2lvbih2LmJhY2tib25lUG9zaXRpb25TaGlmdFswXSArIG1vbm9tZXIuYXRvbXMueFtqXSkgKyAnICcgK1xuICAgICAga2VlcFByZWNpc2lvbih2LmJhY2tib25lUG9zaXRpb25TaGlmdFsxXSArIHYuZmxpcEZhY3RvciAqIG1vbm9tZXIuYXRvbXMueVtqXSkgK1xuICAgICAgJyAnICsgbW9ub21lci5hdG9tcy5rd2FyZ3Nbal07XG4gIH1cbn1cblxuLy8gdG9kbzogcmVtb3ZlIGFzIHF1aWNrZml4XG5mdW5jdGlvbiBmaWxsQnJhbmNoQXRvbUxpbmVzKG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQXRvbUJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXIuYXRvbXMuYXRvbVR5cGVzLmxlbmd0aDsgKytqKSB7XG4gICAgY29uc3QgYXRvbUlkeCA9IHYubm9kZVNoaWZ0ICsgaiArIDE7XG4gICAgbW9sZmlsZUF0b21CbG9ja1t2Lm5vZGVTaGlmdCArIGpdID0gVjNLX0JFR0lOX0RBVEFfTElORSArIGF0b21JZHggKyAnICcgK1xuICAgICAgbW9ub21lci5hdG9tcy5hdG9tVHlwZXNbal0gKyAnICcgK1xuICAgICAga2VlcFByZWNpc2lvbih2LmJyYW5jaFBvc2l0aW9uU2hpZnRbMF0gKyBtb25vbWVyLmF0b21zLnhbal0pICsgJyAnICtcbiAgICAgIGtlZXBQcmVjaXNpb24odi5icmFuY2hQb3NpdGlvblNoaWZ0WzFdICsgdi5mbGlwRmFjdG9yICogbW9ub21lci5hdG9tcy55W2pdKSArXG4gICAgICAnICcgKyBtb25vbWVyLmF0b21zLmt3YXJnc1tqXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxsQm9uZExpbmVzKG1vbm9tZXI6IE1vbEdyYXBoLCBtb2xmaWxlQm9uZEJsb2NrOiBzdHJpbmdbXSwgdjogTG9vcFZhcmlhYmxlcyk6IHZvaWQge1xuICAvLyBjb25zdHJ1Y3QgdGhlIGxpbmVzIG9mIFYzSyBtb2xmaWxlIGJvbmQgYmxvY2tcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtb25vbWVyLmJvbmRzLmF0b21QYWlycy5sZW5ndGg7ICsraikge1xuICAgIGNvbnN0IGJvbmRJZHggPSB2LmJvbmRTaGlmdCArIGogKyAxO1xuICAgIGNvbnN0IGZpcnN0QXRvbSA9IG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzW2pdWzBdICsgdi5ub2RlU2hpZnQ7XG4gICAgY29uc3Qgc2Vjb25kQXRvbSA9IG1vbm9tZXIuYm9uZHMuYXRvbVBhaXJzW2pdWzFdICsgdi5ub2RlU2hpZnQ7XG4gICAgbGV0IGJvbmRDZmcgPSAnJztcbiAgICBpZiAobW9ub21lci5ib25kcy5ib25kQ29uZmlndXJhdGlvbi5oYXMoaikpIHtcbiAgICAgIC8vIGZsaXAgb3JpZW50YXRpb24gd2hlbiBuZWNlc3NhcnlcbiAgICAgIGxldCBvcmllbnRhdGlvbiA9IG1vbm9tZXIuYm9uZHMuYm9uZENvbmZpZ3VyYXRpb24uZ2V0KGopO1xuICAgICAgaWYgKHYuZmxpcEZhY3RvciA8IDApXG4gICAgICAgIG9yaWVudGF0aW9uID0gKG9yaWVudGF0aW9uID09PSAxKSA/IDMgOiAxO1xuICAgICAgYm9uZENmZyA9ICcgQ0ZHPScgKyBvcmllbnRhdGlvbjtcbiAgICB9XG4gICAgY29uc3Qga3dhcmdzID0gbW9ub21lci5ib25kcy5rd2FyZ3MuaGFzKGopID9cbiAgICAgICcgJyArIG1vbm9tZXIuYm9uZHMua3dhcmdzLmdldChqKSA6ICcnO1xuICAgIG1vbGZpbGVCb25kQmxvY2tbdi5ib25kU2hpZnQgKyBqXSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICtcbiAgICAgIG1vbm9tZXIuYm9uZHMuYm9uZFR5cGVzW2pdICsgJyAnICtcbiAgICAgIGZpcnN0QXRvbSArICcgJyArIHNlY29uZEF0b20gKyBib25kQ2ZnICsga3dhcmdzICsgJ1xcbic7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsbENoYWluRXh0ZW5kaW5nQm9uZChtb25vbWVyOiBNb2xHcmFwaCwgbW9sZmlsZUJvbmRCbG9jazogc3RyaW5nW10sIHY6IExvb3BWYXJpYWJsZXMpOiB2b2lkIHtcbiAgaWYgKHYuYmFja2JvbmVBdHRhY2hOb2RlICE9PSAwKSB7XG4gICAgY29uc3QgYm9uZElkeCA9IHYuYm9uZFNoaWZ0O1xuICAgIGNvbnN0IGZpcnN0QXRvbSA9IHYuYmFja2JvbmVBdHRhY2hOb2RlO1xuICAgIGNvbnN0IHNlY29uZEF0b20gPSBtb25vbWVyLm1ldGEudGVybWluYWxOb2Rlc1swXSArIHYubm9kZVNoaWZ0O1xuICAgIG1vbGZpbGVCb25kQmxvY2tbdi5ib25kU2hpZnQgLSAxXSA9IFYzS19CRUdJTl9EQVRBX0xJTkUgKyBib25kSWR4ICsgJyAnICtcbiAgICAgIDEgKyAnICcgKyBmaXJzdEF0b20gKyAnICcgKyBzZWNvbmRBdG9tICsgJ1xcbic7XG4gIH1cbn1cblxuLy8gdG9kbzogcmVtb3ZlXG5mdW5jdGlvbiBmaWxsQmFja2JvbmVUb0JyYW5jaEJvbmQoYnJhbmNoTW9ub21lcjogTW9sR3JhcGgsIG1vbGZpbGVCb25kQmxvY2s6IHN0cmluZ1tdLCB2OiBMb29wVmFyaWFibGVzKTogdm9pZCB7XG4gIGNvbnN0IGJvbmRJZHggPSB2LmJvbmRTaGlmdDtcbiAgY29uc3QgZmlyc3RBdG9tID0gdi5icmFuY2hBdHRhY2hOb2RlO1xuICBjb25zdCBzZWNvbmRBdG9tID0gYnJhbmNoTW9ub21lci5tZXRhLnRlcm1pbmFsTm9kZXNbMF0gKyB2Lm5vZGVTaGlmdDtcbiAgbW9sZmlsZUJvbmRCbG9ja1tib25kSWR4IC0gMV0gPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYm9uZElkeCArICcgJyArXG4gICAgMSArICcgJyArIGZpcnN0QXRvbSArICcgJyArIHNlY29uZEF0b20gKyAnXFxuJztcbn1cblxuLyogQ29tcHV0ZSB0aGUgYXRvbS9ib25kIGNvdW50cyBmb3IgdGhlIHJlc3VsdGluZyBtb2xmaWxlLCBkZXBlbmRpbmcgb24gdGhlXG4gKiB0eXBlIG9mIHBvbHltZXIgKHBlcHRpZGUvbnVjbGVvdGlkZSkgKi9cbmZ1bmN0aW9uIGdldFJlc3VsdGluZ0F0b21Cb25kQ291bnRzKFxuICBtb25vbWVyU2VxOiBzdHJpbmdbXSwgbW9ub21lcnNEaWN0OiBNYXA8c3RyaW5nLCBNb2xHcmFwaD4sXG4gIGFscGhhYmV0OiBBTFBIQUJFVCwgcG9seW1lclR5cGU6IEhFTE1fUE9MWU1FUl9UWVBFXG4pOiB7YXRvbUNvdW50OiBudW1iZXIsIGJvbmRDb3VudDogbnVtYmVyfSB7XG4gIGxldCBhdG9tQ291bnQgPSAwO1xuICBsZXQgYm9uZENvdW50ID0gMDtcblxuICAvLyBzdW0gdXAgYWxsIHRoZSBhdG9tcy9ub2RlcyBwcm92aWRlZCBieSB0aGUgc2VxdWVuY2VcbiAgZm9yIChjb25zdCBtb25vbWVyU3ltYm9sIG9mIG1vbm9tZXJTZXEpIHtcbiAgICBjb25zdCBtb25vbWVyID0gbW9ub21lcnNEaWN0LmdldChtb25vbWVyU3ltYm9sKSE7XG4gICAgYXRvbUNvdW50ICs9IG1vbm9tZXIuYXRvbXMueC5sZW5ndGg7XG4gICAgYm9uZENvdW50ICs9IG1vbm9tZXIuYm9uZHMuYm9uZFR5cGVzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGFkZCBleHRyYSB2YWx1ZXMgZGVwZW5kaW5nIG9uIHRoZSBwb2x5bWVyIHR5cGVcbiAgaWYgKHBvbHltZXJUeXBlID09PSBIRUxNX1BPTFlNRVJfVFlQRS5QRVBUSURFKSB7XG4gICAgLy8gYWRkIHRoZSByaWdodG1vc3QvdGVybWluYXRpbmcgY2FwIGdyb3VwICdPSCcgKGkuZS4gJ08nKVxuICAgIGF0b21Db3VudCArPSAxO1xuICAgIC8vIGFkZCBjaGFpbi1leHRlbmRpbmcgYm9uZHMgKEMtTkggcGVyIGVhY2ggbW9ub21lciBwYWlyIGFuZCB0ZXJtaW5hbCBDLU9IKVxuICAgIGJvbmRDb3VudCArPSBtb25vbWVyU2VxLmxlbmd0aDtcbiAgfSBlbHNlIHsgLy8gbnVjbGVvdGlkZXNcbiAgICBjb25zdCBzdWdhciA9IChhbHBoYWJldCA9PT0gQUxQSEFCRVQuRE5BKSA/XG4gICAgICBtb25vbWVyc0RpY3QuZ2V0KERFT1hZUklCT1NFKSEgOiBtb25vbWVyc0RpY3QuZ2V0KFJJQk9TRSkhO1xuICAgIGNvbnN0IHBob3NwaGF0ZSA9IG1vbm9tZXJzRGljdC5nZXQoUEhPU1BIQVRFKSE7XG5cbiAgICAvLyBhZGQgcGhvc3BoYXRlIGFuZCBzdWdhciBwZXIgZWFjaCBudWNsZW9iYXNlIHN5bWJvbFxuICAgIGF0b21Db3VudCArPSBtb25vbWVyU2VxLmxlbmd0aCAqIChwaG9zcGhhdGUuYXRvbXMueC5sZW5ndGggKyBzdWdhci5hdG9tcy54Lmxlbmd0aCk7XG4gICAgLy8gYWRkIHRoZSBsZWZ0bW9zdCBjYXAgZ3JvdXAgJ09IJyAoaS5lLiAnTycpIHRvIHRoZSBmaXJzdCBwaG9zcGhhdGVcbiAgICBhdG9tQ291bnQgKz0gMTtcblxuICAgIC8vIGFkZCBib25kcyBmcm9tIHBob3NwaGF0ZSBhbmQgc3VnYXJcbiAgICBib25kQ291bnQgKz0gbW9ub21lclNlcS5sZW5ndGggKiAocGhvc3BoYXRlLmJvbmRzLmJvbmRUeXBlcy5sZW5ndGggKyBzdWdhci5ib25kcy5ib25kVHlwZXMubGVuZ3RoKTtcblxuICAgIC8vIGFkZCBjaGFpbi1leHRlbmRpbmcgYW5kIGJyYW5jaCBib25kcyAoTy1QLCBDLU8gYW5kIEMtTiBwZXIgZWFjaCBudWNsZW90aWRlKVxuICAgIGJvbmRDb3VudCArPSBtb25vbWVyU2VxLmxlbmd0aCAqIDM7XG4gIH1cblxuICByZXR1cm4ge2F0b21Db3VudCwgYm9uZENvdW50fTtcbn1cblxuLyogS2VlcCBwcmVjaXNpb24gdXBvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIG92ZXIgYXRvbSBjb29yZGluYXRlcyAqL1xuZnVuY3Rpb24ga2VlcFByZWNpc2lvbih4OiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQoUFJFQ0lTSU9OX0ZBQ1RPUiAqIHgpL1BSRUNJU0lPTl9GQUNUT1I7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRNb2xHcmFwaFRvTW9sZmlsZVYzSyhtb2xHcmFwaDogTW9sR3JhcGgpOiBzdHJpbmcge1xuICAvLyBjb3VudHMgbGluZVxuICBjb25zdCBhdG9tVHlwZSA9IG1vbEdyYXBoLmF0b21zLmF0b21UeXBlcztcbiAgY29uc3QgeCA9IG1vbEdyYXBoLmF0b21zLng7XG4gIGNvbnN0IHkgPSBtb2xHcmFwaC5hdG9tcy55O1xuICBjb25zdCBhdG9tS3dhcmdzID0gbW9sR3JhcGguYXRvbXMua3dhcmdzO1xuICBjb25zdCBib25kVHlwZSA9IG1vbEdyYXBoLmJvbmRzLmJvbmRUeXBlcztcbiAgY29uc3QgYXRvbVBhaXIgPSBtb2xHcmFwaC5ib25kcy5hdG9tUGFpcnM7XG4gIGNvbnN0IGJvbmRLd2FyZ3MgPSBtb2xHcmFwaC5ib25kcy5rd2FyZ3M7XG4gIGNvbnN0IGJvbmRDb25maWcgPSBtb2xHcmFwaC5ib25kcy5ib25kQ29uZmlndXJhdGlvbjtcbiAgY29uc3QgYXRvbUNvdW50ID0gYXRvbVR5cGUubGVuZ3RoO1xuICBjb25zdCBib25kQ291bnQgPSBtb2xHcmFwaC5ib25kcy5ib25kVHlwZXMubGVuZ3RoO1xuXG4gIC8vIHRvZG8gcmV3cml0ZSB1c2luZyBjb25zdGFudHNcbiAgY29uc3QgbW9sZmlsZUNvdW50c0xpbmUgPSBWM0tfQkVHSU5fQ09VTlRTX0xJTkUgKyBhdG9tQ291bnQgKyAnICcgKyBib25kQ291bnQgKyBWM0tfQ09VTlRTX0xJTkVfRU5ESU5HO1xuXG4gIC8vIGF0b20gYmxvY2tcbiAgbGV0IG1vbGZpbGVBdG9tQmxvY2sgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdG9tQ291bnQ7ICsraSkge1xuICAgIGNvbnN0IGF0b21JZHggPSBpICsgMTtcbiAgICBjb25zdCBjb29yZGluYXRlID0gW3hbaV0udG9TdHJpbmcoKSwgeVtpXS50b1N0cmluZygpXTtcblxuICAgIC8vIGZvcm1hdCBjb29yZGluYXRlcyBzbyB0aGF0IHRoZXkgaGF2ZSA2IGRpZ2l0cyBhZnRlciBkZWNpbWFsIHBvaW50XG4gICAgLy8gZm9yIChsZXQgayA9IDA7IGsgPCAyOyArK2spIHtcbiAgICAvLyAgIGNvbnN0IGZvcm1hdHRlZCA9IGNvb3JkaW5hdGVba10udG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgIC8vICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDEpXG4gICAgLy8gICAgIGZvcm1hdHRlZC5wdXNoKCcwJyk7XG4gICAgLy8gICBmb3JtYXR0ZWRbMV0gPSBmb3JtYXR0ZWRbMV0ucGFkRW5kKFYzS19BVE9NX0NPT1JESU5BVEVfUFJFQ0lTSU9OLCAnMCcpO1xuICAgIC8vICAgY29vcmRpbmF0ZVtrXSA9IGZvcm1hdHRlZC5qb2luKCcuJyk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgYXRvbUxpbmUgPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYXRvbUlkeCArICcgJyArIGF0b21UeXBlW2ldICsgJyAnICtcbiAgICAgIGNvb3JkaW5hdGVbMF0gKyAnICcgKyBjb29yZGluYXRlWzFdICsgJyAnICsgYXRvbUt3YXJnc1tpXTtcbiAgICBtb2xmaWxlQXRvbUJsb2NrICs9IGF0b21MaW5lO1xuICB9XG5cbiAgLy8gYm9uZCBibG9ja1xuICBsZXQgbW9sZmlsZUJvbmRCbG9jayA9ICcnO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJvbmRDb3VudDsgKytpKSB7XG4gICAgY29uc3QgYm9uZElkeCA9IGkgKyAxO1xuICAgIGNvbnN0IGZpcnN0QXRvbSA9IGF0b21QYWlyW2ldWzBdO1xuICAgIGNvbnN0IHNlY29uZEF0b20gPSBhdG9tUGFpcltpXVsxXTtcbiAgICBjb25zdCBrd2FyZ3MgPSBib25kS3dhcmdzLmhhcyhpKSA/ICcgJyArIGJvbmRLd2FyZ3MuZ2V0KGkpIDogJyc7XG4gICAgY29uc3QgYm9uZENmZyA9IGJvbmRDb25maWcuaGFzKGkpID8gJyBDRkc9JyArIGJvbmRDb25maWcuZ2V0KGkpIDogJyc7XG4gICAgY29uc3QgYm9uZExpbmUgPSBWM0tfQkVHSU5fREFUQV9MSU5FICsgYm9uZElkeCArICcgJyArIGJvbmRUeXBlW2ldICsgJyAnICtcbiAgICAgIGZpcnN0QXRvbSArICcgJyArIHNlY29uZEF0b20gKyBib25kQ2ZnICsga3dhcmdzICsgJ1xcbic7XG4gICAgbW9sZmlsZUJvbmRCbG9jayArPSBib25kTGluZTtcbiAgfVxuXG4gIGNvbnN0IG1vbGZpbGVQYXJ0cyA9IFtcbiAgICBWM0tfSEVBREVSX0ZJUlNUX0xJTkUsXG4gICAgVjNLX0hFQURFUl9TRUNPTkRfTElORSxcbiAgICBWM0tfQkVHSU5fQ1RBQl9CTE9DSyxcbiAgICBtb2xmaWxlQ291bnRzTGluZSxcbiAgICBWM0tfQkVHSU5fQVRPTV9CTE9DSyxcbiAgICBtb2xmaWxlQXRvbUJsb2NrLFxuICAgIFYzS19FTkRfQVRPTV9CTE9DSyxcbiAgICBWM0tfQkVHSU5fQk9ORF9CTE9DSyxcbiAgICBtb2xmaWxlQm9uZEJsb2NrLFxuICAgIFYzS19FTkRfQk9ORF9CTE9DSyxcbiAgICBWM0tfRU5EX0NUQUJfQkxPQ0ssXG4gICAgVjNLX0VORCxcbiAgXTtcbiAgY29uc3QgcmVzdWx0aW5nTW9sZmlsZSA9IG1vbGZpbGVQYXJ0cy5qb2luKCcnKTtcbiAgLy8gY29uc29sZS5sb2cocmVzdWx0aW5nTW9sZmlsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdGluZ01vbGZpbGU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTeW1ib2xUb0NhcHBlZE1vbGZpbGVNYXAobW9ub21lcnNMaWJMaXN0OiBhbnlbXSk6IFByb21pc2U8TWFwPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoREcuRnVuYy5maW5kKHtwYWNrYWdlOiAnQ2hlbScsIG5hbWU6ICdnZXRSZEtpdE1vZHVsZSd9KS5sZW5ndGggPT09IDApIHtcbiAgICBncm9rLnNoZWxsLndhcm5pbmcoJ1RyYW5zZm9ybWF0aW9uIHRvIGF0b21pYyBsZXZlbCByZXF1aXJlcyBwYWNrYWdlIFwiQ2hlbVwiIGluc3RhbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzeW1ib2xUb0NhcHBlZE1vbGZpbGVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgY29uc3QgbW9kdWxlUmRraXQgPSBhd2FpdCBncm9rLmZ1bmN0aW9ucy5jYWxsKCdDaGVtOmdldFJkS2l0TW9kdWxlJyk7XG5cbiAgZm9yIChjb25zdCBtb25vbWVyTGliT2JqZWN0IG9mIG1vbm9tZXJzTGliTGlzdCkge1xuICAgIGNvbnN0IG1vbm9tZXJTeW1ib2wgPSBtb25vbWVyTGliT2JqZWN0W0hFTE1fRklFTERTLlNZTUJPTF07XG4gICAgY29uc3QgY2FwR3JvdXBzID0gcGFyc2VDYXBHcm91cHMobW9ub21lckxpYk9iamVjdFtIRUxNX0ZJRUxEUy5SR1JPVVBTXSk7XG4gICAgY29uc3QgY2FwR3JvdXBJZHhNYXAgPSBwYXJzZUNhcEdyb3VwSWR4TWFwKG1vbm9tZXJMaWJPYmplY3RbSEVMTV9GSUVMRFMuTU9MRklMRV0pO1xuXG4gICAgY29uc3QgbW9sZmlsZVYzSyA9IGNvbnZlcnRNb2xmaWxlVG9WM0socmVtb3ZlUkdyb3VwTGluZXMobW9ub21lckxpYk9iamVjdFtIRUxNX0ZJRUxEUy5NT0xGSUxFXSksIG1vZHVsZVJka2l0KTtcbiAgICBjb25zdCBjb3VudHMgPSBwYXJzZUF0b21BbmRCb25kQ291bnRzKG1vbGZpbGVWM0spO1xuXG4gICAgY29uc3QgYXRvbXMgPSBwYXJzZUF0b21CbG9jayhtb2xmaWxlVjNLLCBjb3VudHMuYXRvbUNvdW50KTtcbiAgICBjb25zdCBib25kcyA9IHBhcnNlQm9uZEJsb2NrKG1vbGZpbGVWM0ssIGNvdW50cy5ib25kQ291bnQpO1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNb25vbWVyTWV0YWRhdGEoYXRvbXMsIGJvbmRzLCBjYXBHcm91cHMsIGNhcEdyb3VwSWR4TWFwKTtcblxuICAgIGNvbnN0IG1vbm9tZXJHcmFwaDogTW9sR3JhcGggPSB7YXRvbXM6IGF0b21zLCBib25kczogYm9uZHMsIG1ldGE6IG1ldGF9O1xuXG4gICAgcmVtb3ZlSHlkcm9nZW4obW9ub21lckdyYXBoKTtcblxuICAgIGNvbnN0IG1vbGZpbGUgPSBjb252ZXJ0TW9sR3JhcGhUb01vbGZpbGVWM0sobW9ub21lckdyYXBoKTtcbiAgICBzeW1ib2xUb0NhcHBlZE1vbGZpbGVNYXAuc2V0KG1vbm9tZXJTeW1ib2wsIG1vbGZpbGUpO1xuICB9XG4gIHJldHVybiBzeW1ib2xUb0NhcHBlZE1vbGZpbGVNYXA7XG59XG5cbi8vVE9ET1xuZXhwb3J0IGZ1bmN0aW9uIGNhcFRoZU1vbm9tZXIobW9ub21lcjogTW9ub21lcik6IHN0cmluZyB7XG4gIHJldHVybiAnICc7XG59Il19
|